Академический Документы
Профессиональный Документы
Культура Документы
реферат по УД
реферат по УД
РЕФЕРАТ
Преподаватель
Поляков Игорь Викторович,
кандидат физико-математических наук.
Читатель имеет один пропуск (связь один ко одному), также читатель может
взять много книг на руки (связь один ко многим). Библиотекарь может выдать
много книг на руки (связь один ко многим). Книга имеет авторов (один ко многим),
жанр (один ко многим), публициста (один ко многим), поставщика (многие ко
многим). Также книга связана с «книгой на руках» (связь один ко многим). Штраф
может быть за многие книги и за множество вещей (разные типы штрафов)
поэтому связь с «книгами на руках» многие ко многим.
Сущность Связана с - Связь
Staff Book_OnHand 1: n
Reader Library_Pass 1:1
Reader Book_OnHand 1: n
Book Provider n:m
Book Book_OnHand 1: n
Publisher Book 1: n
Author Book 1: n
Genre Book 1: n
Book_OnHand Fee n:m
ER-Win:
Описание ограничений целостности
INSERT INTO Fee (ID_Fee, Fee_Type, Fee_price) VALUES (1, 'просрочка за 1 день', '10');
INSERT INTO Fee (ID_Fee, Fee_Type, Fee_price) VALUES (2, 'порча книги', '200');
INSERT INTO Fee (ID_Fee, Fee_Type, Fee_price) VALUES (3, 'потеря книги', '1000');
INSERT INTO Book_OnHand_has_Fee (Book_OnHand_ID, Fee_ID_Fee) VALUES (3, 2);
GO
CREATE TRIGGER Library_Pass_AFTER_INSERT ON Library_Pass AFTER INSERT,
UPDATE AS
BEGIN
update Library_Pass
set Library_Pass_Duration=365
where Library_Pass_Duration>365;
END
go
CREATE TRIGGER Book_OnHand_AFTER_INSERT ON Book_OnHand AFTER INSERT ,
UPDate as
BEGIN
update Book_OnHand
set Book_ActualDayreturn=Book_returnDay
where Book_ActualDayreturn<Book_returnDay;
END
go
CREATE TRIGGER Staff_AFTER_INSERT ON Staff AFTER INSERT, update as
BEGIN
update staff
set Staff_Salary=12000
where Staff_Salary<12000;
END
go
CREATE TRIGGER Fee_AFTER_INSERT ON Fee AFTER INSERT, update as
BEGIN
update Fee
set Fee_price=1000
where Fee_price>1000;
END
go
CREATE TRIGGER Fee_AFTER_UPDATE ON Fee AFTER UPDATE , insert as
BEGIN
update Staff
set Staff_Salary= Staff_Salary+1000;
END
Описание базы данных на языке SQL
Для MySQL WorkBench
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
USE `mydb`;
DELIMITER $$
USE `mydb`$$
CREATE DEFINER = CURRENT_USER TRIGGER `mydb`.`Book_OnHand_AFTER_INSERT` AFTER INSERT
ON `Book_OnHand` FOR EACH ROW
BEGIN
update Book_OnHand
set Book_ActualDayreturn=Book_returnDay
where Book_ActualDayreturn<Book_returnDay;
END
$$
USE `mydb`$$
CREATE DEFINER = CURRENT_USER TRIGGER `mydb`.`Staff_AFTER_INSERT` AFTER INSERT ON
`Staff` FOR EACH ROW
BEGIN
update staff
set Staff_Salary=12000
where Staff_Salary<12000;
END
$$
USE `mydb`$$
CREATE DEFINER = CURRENT_USER TRIGGER `mydb`.`Fee_AFTER_INSERT` AFTER INSERT ON `Fee`
FOR EACH ROW
BEGIN
update Fee
set Fee_price=1000
where Fee_price>1000;
END
$$
USE `mydb`$$
CREATE DEFINER = CURRENT_USER TRIGGER `mydb`.`Fee_AFTER_UPDATE` AFTER UPDATE ON
`Fee` FOR EACH ROW
BEGIN
update Staff
set Staff_Salary= Staff_Salary+1000;
END
$$
USE `mydb`$$
CREATE DEFINER = CURRENT_USER TRIGGER `mydb`.`Library_Pass_AFTER_INSERT` AFTER INSERT
ON `Library_Pass` FOR EACH ROW
BEGIN
update Library_Pass
set Library_Pass_Duration=365
where Library_Pass_Duration>365;
END
$$
DELIMITER ;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Book_OnHand` (`Book_exportDay`, `Book_returnDay`, `Book_ActualDayreturn`, `ID`)
VALUES ('15.02.2018', '22.02.2018', NULL, 1);
INSERT INTO `mydb`.`Book_OnHand` (`Book_exportDay`, `Book_returnDay`, `Book_ActualDayreturn`, `ID`)
VALUES ('15.02.2018', '22.02.2018', NULL, 2);
INSERT INTO `mydb`.`Book_OnHand` (`Book_exportDay`, `Book_returnDay`, `Book_ActualDayreturn`, `ID`)
VALUES ('18.06.2017', '30.06.2017', '21.08.2017', 3);
INSERT INTO `mydb`.`Book_OnHand` (`Book_exportDay`, `Book_returnDay`, `Book_ActualDayreturn`, `ID`)
VALUES ('15.02.2018', '17.02.2018', NULL, 4);
INSERT INTO `mydb`.`Book_OnHand` (`Book_exportDay`, `Book_returnDay`, `Book_ActualDayreturn`, `ID`)
VALUES ('17.02.2018', '20.02.2018', '10.03.2018', 5);
COMMIT;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Staff` (`IDstaff`, `Staff_Name`, `Staff_Surname`, `Staff_MiddleName`, `Staff_Salary`,
`Staff_FirstDay`, `Staff_LastDay`, `Staff_BirthDay`, `Book_OnHand_ID`) VALUES (1, 'Иван', 'Иванов',
'Иванович', 12000, '15.02.2018', NULL, '15.02.2018', 1);
INSERT INTO `mydb`.`Staff` (`IDstaff`, `Staff_Name`, `Staff_Surname`, `Staff_MiddleName`, `Staff_Salary`,
`Staff_FirstDay`, `Staff_LastDay`, `Staff_BirthDay`, `Book_OnHand_ID`) VALUES (2, 'Алла ', 'Дмитриева',
'Прикофьевна', 15000, '30.06.1991', '15.02.2018', '05.03.1953', 3);
INSERT INTO `mydb`.`Staff` (`IDstaff`, `Staff_Name`, `Staff_Surname`, `Staff_MiddleName`, `Staff_Salary`,
`Staff_FirstDay`, `Staff_LastDay`, `Staff_BirthDay`, `Book_OnHand_ID`) VALUES (3, 'Мария', 'Кондрабаева',
'Петровна', 100000, '03.01.1998', NULL, '15.03.1962', 4);
INSERT INTO `mydb`.`Staff` (`IDstaff`, `Staff_Name`, `Staff_Surname`, `Staff_MiddleName`, `Staff_Salary`,
`Staff_FirstDay`, `Staff_LastDay`, `Staff_BirthDay`, `Book_OnHand_ID`) VALUES (4, 'Кирилл', 'Каштанов',
'Сергеевич', 600000, '07.11.2016', NULL, '07.11.1999', 5);
COMMIT;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Reader` (`IDreader`, `Reader_Name`, `Reader_Surname`, `Reader_MiddleName`,
`Reader_JoinDay`, `Reader_OfDocumentNumber`, `Book_OnHand_ID`) VALUES (1, 'Венера', 'Гильманова',
'Миневагизовна', '15.02.2018', 5465435, 3);
INSERT INTO `mydb`.`Reader` (`IDreader`, `Reader_Name`, `Reader_Surname`, `Reader_MiddleName`,
`Reader_JoinDay`, `Reader_OfDocumentNumber`, `Book_OnHand_ID`) VALUES (2, 'Мария', 'Альчикова',
'Сергеевна', '31.07.2018', 5456454, 2);
COMMIT;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Publisher` (`IDpublisher`, `Publisher_Name`) VALUES (1, 'Просвещение');
INSERT INTO `mydb`.`Publisher` (`IDpublisher`, `Publisher_Name`) VALUES (2, 'Гелеос');
COMMIT;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Author` (`ID_Author`, `Author_Name`) VALUES (1, 'А.С.Пушкин');
INSERT INTO `mydb`.`Author` (`ID_Author`, `Author_Name`) VALUES (2, 'М.Ю.Лермонтов');
INSERT INTO `mydb`.`Author` (`ID_Author`, `Author_Name`) VALUES (3, 'Л.Н. Толстой');
INSERT INTO `mydb`.`Author` (`ID_Author`, `Author_Name`) VALUES (4, 'М.А. Булгаков');
INSERT INTO `mydb`.`Author` (`ID_Author`, `Author_Name`) VALUES (5, 'А.Н. Толстой');
COMMIT;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Genre` (`ID_Genre`, `Genre_Name`) VALUES (1, 'исторический');
INSERT INTO `mydb`.`Genre` (`ID_Genre`, `Genre_Name`) VALUES (2, 'сказка');
INSERT INTO `mydb`.`Genre` (`ID_Genre`, `Genre_Name`) VALUES (3, 'поэзия');
INSERT INTO `mydb`.`Genre` (`ID_Genre`, `Genre_Name`) VALUES (4, 'психологический');
INSERT INTO `mydb`.`Genre` (`ID_Genre`, `Genre_Name`) VALUES (5, 'реализм');
INSERT INTO `mydb`.`Genre` (`ID_Genre`, `Genre_Name`) VALUES (6, 'фантастика');
COMMIT;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Book` (`IDbook`, `Book_Name`, `Book_OnHand_ID`, `Publisher_IDpublisher`,
`Author_ID_Author`, `Genre_ID_Genre`) VALUES (1, 'Капитанская дочка', 1, 1, 1, 1);
INSERT INTO `mydb`.`Book` (`IDbook`, `Book_Name`, `Book_OnHand_ID`, `Publisher_IDpublisher`,
`Author_ID_Author`, `Genre_ID_Genre`) VALUES (2, 'Сказка о золотом петушке', 3, 2, 1, 2);
INSERT INTO `mydb`.`Book` (`IDbook`, `Book_Name`, `Book_OnHand_ID`, `Publisher_IDpublisher`,
`Author_ID_Author`, `Genre_ID_Genre`) VALUES (3, 'Мцыри', 4, 2, 2, 3);
INSERT INTO `mydb`.`Book` (`IDbook`, `Book_Name`, `Book_OnHand_ID`, `Publisher_IDpublisher`,
`Author_ID_Author`, `Genre_ID_Genre`) VALUES (4, 'Герой нашего времени', 5, 1, 2, 4);
INSERT INTO `mydb`.`Book` (`IDbook`, `Book_Name`, `Book_OnHand_ID`, `Publisher_IDpublisher`,
`Author_ID_Author`, `Genre_ID_Genre`) VALUES (5, 'Война и мир', 2, 1, 3, 1);
INSERT INTO `mydb`.`Book` (`IDbook`, `Book_Name`, `Book_OnHand_ID`, `Publisher_IDpublisher`,
`Author_ID_Author`, `Genre_ID_Genre`) VALUES (6, 'Анна Каренина', 1, 2, 3, 5);
INSERT INTO `mydb`.`Book` (`IDbook`, `Book_Name`, `Book_OnHand_ID`, `Publisher_IDpublisher`,
`Author_ID_Author`, `Genre_ID_Genre`) VALUES (7, 'Мастер и Маргарита', 4, 1, 4, 6);
INSERT INTO `mydb`.`Book` (`IDbook`, `Book_Name`, `Book_OnHand_ID`, `Publisher_IDpublisher`,
`Author_ID_Author`, `Genre_ID_Genre`) VALUES (8, 'Белая гвардия', 5, 2, 4, 1);
INSERT INTO `mydb`.`Book` (`IDbook`, `Book_Name`, `Book_OnHand_ID`, `Publisher_IDpublisher`,
`Author_ID_Author`, `Genre_ID_Genre`) VALUES (9, 'Хождение по мукам', 3, 2, 5, 1);
INSERT INTO `mydb`.`Book` (`IDbook`, `Book_Name`, `Book_OnHand_ID`, `Publisher_IDpublisher`,
`Author_ID_Author`, `Genre_ID_Genre`) VALUES (10, 'Гиперболоид и-ра Гарина', 4, 1, 5, 6);
COMMIT;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Provider` (`IDprovider`, `Provider_Name`, `Provider_Phone`, `Provider_Location`,
`Provider_Type`) VALUES (1, 'Тезаурус', 4998989, 'Москва', 'Романы');
INSERT INTO `mydb`.`Provider` (`IDprovider`, `Provider_Name`, `Provider_Phone`, `Provider_Location`,
`Provider_Type`) VALUES (2, 'Современник', 4996699, 'Санкт-Петербург', 'Поэзия');
COMMIT;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Book_has_Provider` (`Book_IDbook`, `Provider_IDprovider`) VALUES (1, 2);
INSERT INTO `mydb`.`Book_has_Provider` (`Book_IDbook`, `Provider_IDprovider`) VALUES (2, 1);
INSERT INTO `mydb`.`Book_has_Provider` (`Book_IDbook`, `Provider_IDprovider`) VALUES (3, 2);
INSERT INTO `mydb`.`Book_has_Provider` (`Book_IDbook`, `Provider_IDprovider`) VALUES (4, 1);
INSERT INTO `mydb`.`Book_has_Provider` (`Book_IDbook`, `Provider_IDprovider`) VALUES (5, 2);
INSERT INTO `mydb`.`Book_has_Provider` (`Book_IDbook`, `Provider_IDprovider`) VALUES (6, 1);
INSERT INTO `mydb`.`Book_has_Provider` (`Book_IDbook`, `Provider_IDprovider`) VALUES (7, 2);
INSERT INTO `mydb`.`Book_has_Provider` (`Book_IDbook`, `Provider_IDprovider`) VALUES (8, 1);
INSERT INTO `mydb`.`Book_has_Provider` (`Book_IDbook`, `Provider_IDprovider`) VALUES (9, 2);
INSERT INTO `mydb`.`Book_has_Provider` (`Book_IDbook`, `Provider_IDprovider`) VALUES (10, 1);
COMMIT;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Fee` (`ID_Fee`, `Fee_Type`, `Fee_price`) VALUES (1, 'просрочка за 1 день', '10');
INSERT INTO `mydb`.`Fee` (`ID_Fee`, `Fee_Type`, `Fee_price`) VALUES (2, 'порча книги', '200');
INSERT INTO `mydb`.`Fee` (`ID_Fee`, `Fee_Type`, `Fee_price`) VALUES (3, 'потеря книги', '1000');
COMMIT;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Book_OnHand_has_Fee` (`Book_OnHand_ID`, `Fee_ID_Fee`) VALUES (3, 2);
COMMIT;
START TRANSACTION;
USE `mydb`;
INSERT INTO `mydb`.`Library_Pass` (`idLibrary_Pass`, `Library_Pass_Duration`, `Library_Pass_DayGiven`,
`Library_Pass_ExpireDay`, `Reader_IDreader`) VALUES (1, '365', '15.02.2018', '15.02.2019', 1);
INSERT INTO `mydb`.`Library_Pass` (`idLibrary_Pass`, `Library_Pass_Duration`, `Library_Pass_DayGiven`,
`Library_Pass_ExpireDay`, `Reader_IDreader`) VALUES (2, '182', '31.07.2018', '31.01.2019', 2);
COMMIT;
Запросы
№ Запрос Пояснение
1 SELECT Book_OnHand.ID , Book.Book_Name Показывает какой
from Staff inner join Reader inner join Book_OnHand inner join работник какую
Book книгу выдал (их
on Staff.Book_OnHand_ID=Reader.Book_OnHand_ID айди) группирует
on Staff.Book_OnHand_ID=Book_OnHand.ID по имени.
on Book.Book_OnHand_ID=Book_OnHand.ID
Group By Book.Book_Name
2 Select Staff.Name,Staff.Surname Показывает
from Staff работников с
where Staff.Staff_Salary>25000 зарплатой больше
25 тыс.
3 Select Book.Book_Name, Genre.Genre_Name Показывает книги
from Book inner join Genre жанра
on Book.Genre_ID_Genre=Genre.ID_Genre «фантастика»
where Genre.ID_Genre=6
Group by Genre.Genre_Name
4 Select Book.Book_Name, Author.Author_Name Показывает все
from Book inner join Author книги Булгакова
on Book.Author_ID_Author=Author.ID_Author
where Author.ID_Author=4
Group by Author.Author_Name
5 Select Book.Book_Name, Publisher.Publisher_Name Показывает все
from Book inner join Publisher книги издательства
on Book.Publisher_IDpublisher=Publisher.IDpublisher «Просвещение»
where Publisher.IDpublisher=1
Group by Publisher.Publisher_Name
6 Select Reader.Name, Reader.Surname Показывает имена
from Reader inner join Library_Pass и фамилии
on Reader.IDreader=Library_Pass.Reader_IDreader читателей чьи
where Library_Pass_Duration=365 пропуски длятся
Group by Reader.IDreader год
7 Select Fee.Fee_Type Показывает все
from Fee типы штрафов ,
where Fee.Fee_price>100 плата за которые
превышает 100
рублей
8 Select Staff.Name,Staff.Surname Показывает имя и
from Staff фамилию человека
Where Staff.Name,Staff.Surname с максимальной
from Staff.Staff_Salary=( SELECT MAX( Staff_Salary) From зарплатой
Staff)
9 Select AVG( Staff_Salary) Показывает
from Staff среднюю зарплату
персонала
10 SELECT AVG(Staff_Salary) Показывает
FROM Staff среднюю зарплату
WHERE Staff.Staff_LastDay ISNOTNULL не уволенного
персонала