- •База данных для информационной системы «музыкальная школа»
- •Специальность 220200 – Автоматизированные системы
- •Оценка ________________ Исполнитель
- •Содержание
- •Введение
- •Информационная система «музыкальная школа» предназначена для сбора, хранения, поиска, обработки и выдачи необходимой информации о данной предметной области.
- •Разрабатываемая база данных предназначена для повышения эффективности управления и контроля над учебным процессом в музыкальной школе.
- •И информационного обеспечения
- •1.1 Краткое описание предметной области
- •1.2 Выбор и описание автоматизируемых функций
- •1.3 Первичное описание информационного обеспечения
- •1.4 Вывод
- •2 Выявление ограничений и правил поддержания целостности
- •2.1 Уровень атрибутов
- •2.3 Уровень множеств кортежей
- •2.4 Уровень базы данных
- •2.5 Вывод
- •3.1 Составление локальных исходных er-моделей
- •М название
- •3.4 Вывод
- •4 Проектирование глобальной er-модели
- •4.1 Выявление и устранение эквивалентных сущностей
- •4.2 Выявление категорий и синтез обобщающих сущностей
- •Дублирование атрибутов и связей не выявлено.
- •5 Проектирование реляционной sql-модели
- •5.1 Перевод глобальной er-модели в реляционную форму
- •5.1.2 Избавление от связей м:м Заменим связь «многие ко многим» связью «один ко многим»
- •5.1.3 Замена явных связей 1:м неявными
- •5.2 Спецификация ограничений и правил поддержания целостности
- •5.4 Вывод
- •6.1 Определение способа и формы представления для автоматизируемых функций
- •Модели соединения таблиц базы данных для реализации представлений для функции 2 «прием учащихся» представлены на рис.6.1.2.
- •Модели соединения таблиц базы данных для реализации представлений для функции 3 «сдача экзаменов» представлены на рис.6.1.3.
- •Модели соединения таблиц базы данных для реализации представлений для функции 4 «планирование учебного процесса» представлены на рис.6.1.4.
- •Функция 1 «учет кадров»
- •Функция 2 «прием учащихся»
- •Функция 3 «сдача экзаменов»
- •6.4 Вывод
- •Проектирование доступа к базе данных из локальных функций
- •7.4 Вывод
- •Список литературы
5.1.3 Замена явных связей 1:м неявными
Производится дублирование первичного ключа родительской сущности в дочерней сущности.
В результате были получены следующие сущности:
1. Сотрудник (код сотрудника, ФИО, пол, адрес, стаж, дата рождения, код паспорта, дата выдачи, кем выдан);
Телефон (номер телефона, тип телефона, примечания);
Должность (код должности, название должности);
Специальность (код специальности, название специальности);
Контакт (код сотрудника, номер телефона);
Диплом (код диплома, код сотрудника, код специальности, название учебного заведения, дата окончания учебного заведения);
Карьера (код сотрудника, код должности, номер приказа, дата поступления, оклад, дата увольнения);
Учащийся (код учащегося, ФИО, номер учебного плана, дата рождения, пол, адрес, год обучения, код свидетельства о рождении, дата выдачи, кем выдано);
Родственник (код родственника, ФИО, место работы);
Приказ (номер приказа, дата подписания, код сотрудника);
Инструмент (код инструмента, название инструмента);
Льгота (код льготы, название льготы);
Контакты (код учащегося, номер телефона);
Семья (код учащегося, код родственника);
Уч-П (код учащегося, номер приказа, дата поступления);
Специализация (код учащегося, номер приказа, код инструмента);
Условия обучения (код учащегося, код льготы, плата за обучение, дата назначения льготы, дата снятия льготы);
Предмет (код предмета, название предмета, код сотрудника);
Экзамен (год, номер экзамена, код сотрудника, код предмета, код учащегося, дата, время начала, время окончания, кабинет, тип экзамена, оценка);
Учебный план (номер учебного плана, дата утверждения учебного плана, особенности, код сотрудника);
Четверть (год, номер четверти, номер учебного плана);
План_Четверть (номер учебного плана, год, номер четверти);
У-С (год, номер четверти, код предмета, количество часов);
Занятие (дата, время начала, время окончания, код сотрудника, код предмета, код учащегося, оценка).
5.2 Спецификация ограничений и правил поддержания целостности
Были выявлены следующие правила поддержания целостности:
- при удалении или изменении первичного ключа «код сотрудника» в родительской таблице «Сотрудник» автоматически удаляются или изменяются внешние ключи в следующих дочерних таблицах: «Контакт», «Диплом», «Карьера», «Уч-П», «Экзамен», «Учебный план», «Предмет», «Занятие»;
- при удалении или изменении первичного ключа «код учащегося» в родительской таблице «Учащийся» автоматически удаляются или изменяются внешние ключи в следующих дочерних таблицах: «Контакты», «Уч-П», «Специализация», «Условия обучения», «Экзамен», «Занятие»;
- при удалении или изменении первичного ключа «номер телефона» в родительской таблице «Телефон» автоматически изменяются или удаляются внешние ключи в дочерних таблицах «Контакт» и «Контакты»;
- при удалении или изменении первичного ключа «код предмета» в родительской таблице «Предмет» автоматически удаляются или изменяются внешние ключи в следующих дочерних сущностях «Экзамен», «У-С», «Занятие»;
-при удалении или изменении первичного ключа «номер учебного плана» в родительской таблице «Учебный план» автоматически удаляются или изменяются внешние ключи следующих дочерних таблиц: «Учащийся», «Четверть»;
- строго запрещается удалять или изменять первичный ключ «номер четверти» родительской сущности «Четверть»;
- при удалении или изменении первичного ключа «код специальности» в родительской таблице «Специальность» автоматически удаляется или изменяется внешний ключ дочерней таблицы «Диплом»;
- при удалении или изменении первичного ключа «код родственника» в родительской таблице «Родственник» автоматически удаляются или изменяются внешние ключи в дочерней таблице «Семья»;
- при удалении или изменении первичного ключа «номер приказа» в родительской таблице «Приказ» автоматически удаляются или изменяются внешние ключи в дочерней таблице «Уч-П»;
- при удалении или изменении первичного ключа «код должности» в родительской таблице «Должность» автоматически удаляются или изменяются внешние ключи в дочерней таблице «Карьера»;
- при удалении или изменении первичного ключа «код инструмента» в родительской таблице «Инструмент» автоматически удаляются или изменяются внешние ключи в дочерних таблицах «Специализация» и «Учебный план»;
- при удалении или изменении первичного ключа «код льготы» в родительской таблице «Льгота» автоматически удаляются или изменяются внешние ключи в дочерней таблице «Условия обучения»;
5.3 SQL-код для создания реляционной модели
CREATE TABLE Сотрудник
(
код_сотрудника INT NOT NULL,
ФИО CHAR(25) NOT NULL,
пол CHAR(1) NOT NULL,
адрес CHAR(15) NOT NULL,
стаж INT NOT NULL,
дата_рождения DATE NOT NULL,
код_паспорта CHAR(15) NOT NULL,
дата_выдачи DATE NULL,
кем_выдан CHAR(10) NULL,
PRIMARY KEY (код_сотрудника, код_паспорта),
CHECK (пол IN ('М', 'Ж')),
CHECK (дата_рождения > CURRENT_DATE () – 100 AND дата_рождения < CURRENT_DATE () – 16)
);
CREATE TABLE Телефон
(
номер_телефона CHAR(10) NOT NULL,
тип_телефона CHAR(10) NULL,
примечания CHAR(15) NULL,
PRIMARY KEY (номер_телефона)
);
CREATE TABLE Должность
(
код_должности INT NOT NULL,
название_должности CHAR(10) NOT NULL,
PRIMARY KEY (код_должности)
);
CREATE TABLE Специальность
(
код_специальности INT NOT NULL,
название_специальности CHAR(10) NOT NULL,
PRIMARY KEY (код_специальности)
);
CREATE TABLE контакт
(
код_сотрудника INT,
номер_телефона CHAR(10),
PRIMARY KEY (код_сотрудника, номер_телефона),
FOREIGN KEY (код_сотрудника) REFERENCES Сотрудник ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (номер_телефона) REFERENCES Телефон ON
DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE Диплом
(
код_диплома CHAR(15) NOT NULL,
код_сотрудника INT,
код_специальности INT,
название_учебного_заведения CHAR(25) NOT NULL,
дата_окончания_учебного_заведения DATE NOT NULL,
PRIMARY KEY (код_диплома, код_сотрудника),
FOREIGN KEY (код_сотрудника) REFERENCES Сотрудник ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (код_специальности) REFERENCES Специальность
ON DELETE CSCADE ON UPDATE CASCADE);
CREATE TABLE Карьера
(
код_сотрудника INT,
код_должности INT,
номер_приказа INT NOT NULL,
дата_поступления DATE NOT NULL,
оклад INT NOT NULL,
дата_увольнения DATE NULL,
PRIMARY KEY (код_сотрудника, код_должности),
FOREIGN KEY (код_сотрудника) REFERENCES Сотрудник ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (код_должности) REFERENCES Должность ON
DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE Учащийся
(
код_учащегося INT NOT NULL,
ФИО CHAR (25) NOT NULL,
дата_рождения DATE NOT NULL,
пол CHAR(1) NOT NULL,
год_обучения INT NOT NULL,
адрес CHAR(25) NOT NULL,
код_свидетельства_о_рождении CHAR (15) NOT NULL,
дата_выдачи DATE NULL,
кем_выдано CHAR (25) NULL,
номер_учебного_плана INT NOT NULL,
PRIMARY KEY (код_учащегося, код_свидетельства),
FOREIGN KEY (номер_учебного_плана) REFERENCES Учебный план ON DELETE CASCADE ON UPDATE CASADE,
CHECK (пол IN ('М', 'Ж')),
CHECK (год_обучения >=1 AND год_обучения <=7),
CHECK (дата_рождения > CURRENT_DATE () – 100 AND дата_рождения < CURRENT_DATE () – 5)
);
CREATE TABLE Родственник
(
код_родственника INT NOT NULL,
ФИО CHAR(25) NOT NULL,
место_работы CHAR (25) NULL,
PRIMARY KEY (код_родственника)
);
CREATE TABLE Приказ
(
номер_приказа INT NOT NULL,
дата_подписания DATE NOT NULL,
код_сотрудника INT,
PRIMARY KEY (номер_приказа),
FOREIGN KEY (код_сотрудника) REFERENCES Сотрудник ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE Инструмент
(
код_инструмента INT NOT NULL,
название_инструмента CHAR(15) NOT NULL,
PRIMARY KEY (код_инструмента)
);
CREATE TABLE Льгота
(
код_льготы INT NOT NULL,
название_льготы CHAR (25) NOT NULL,
PRIMARY KEY (код_льготы)
);
CREATE TABLE Контакты
(
код_учащегося INT,
номер_телефона CHAR (10),
PRIMARY KEY (код_учащегося, номер_телефона),
FOREIGN KEY (код_учащегося) REFERENCES Учащийся ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (номер_телефона) REFERENCES Телефон ON
DELETE CASCADE ON UPDATE CASCADE
);
14) CREATE TABLE Уч-П
(
код_учащегося INT,
номер_приказа INT,
дата_поступления DATE NOT NULL,
PRIMARY KEY (код_учащегося, номер_приказа),
FOREIGN KEY (код_учащегося) REFERENCES Учащийся ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (номер_приказа) REFERENCES Приказ ON
DELETE CASCADE ON UPDATE CASCADE
);
15) CREATE TABLE Специализация
(код_учащегося INT,
номер_приказа INT,
код _инструмента INT,
PRIMARY KEY (код_учащегося, номер_приказа),
FOREIGN KEY (код_учащегося) REFERENCES Учащийся ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (номер_приказа) REFERENCES Приказ ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (код_инструмента) REFERENCES Интрумент ON
DELETE CASCADE ON UPDATE CASCADE);
16) CREATE TABLE Условия_обучения
(
код_учащегося INT,
код_льготы INT,
плата_за_обучение NUMERIC NOT NULL,
дата_назначения_льготы DATE NULL,
дата_снятия_льготы DATE NULL,
PRIMARY KEY (код_учащегося, код_льготы),
FOREIGN KEY (код_учащегося) REFERENCES Учащийся ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (код_льготы) REFERENCES Льгота ON
DELETE CASCADE ON UPDATE CASCADE
);
17) CREATE TABLE Семья
(
код_учащегося INT,
код_родственника INT,
PRIMARY KEY (код_учащегося, код_родственника),
FOREIGN KEY (код_учащегося) REFERENCES Учащийся ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (код_родственника) REFERENCES Родственник ON
DELETE CASCADE ON UPDATE CASCADE
);
18) CREATE TABLE Предмет
(
код_предмета INT NOT NULL,
название_предмета CHAR(25) NOT NULL,
код_сотрудника INT,
PRIMARY KEY (код_предмета),
FOREIGN KEY (код_сотрудника) REFERENCES Сотрудник ON DELETE CASCADE ON UPDATE CASCADE
);
19) CREATE TABLE Экзамен
(
год INT NOT NULL,
номер_экзамена INT NOT NULL,
код_сотрудника INT,
код_предмета INT,
код_учащегося INT,
дата DATE NOT NULL,
время_начала TIME NOT NULL,
время_окончания TIME NOT NULL,
кабинет INT NOT NULL,
тип_экзамена CHAR(15) NOT NULL,
оценка INT,
PRIMARY KEY (год, номер_экзамена),
FOREIGN KEY (код_сотрудника) REFERENCES Сотрудник ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (код_предмета) REFERENCES Предмет ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (код_учащегося) REFERENCES Учащийся ON
DELETE CASCADE ON UPDATE CASCADE,
CHECK (оценка>=2 AND оценка<=5),
CHECK (время_начала < время_окончания)
);
20) CREATE TABLE Учебный_план
(
номер_учебного_плана INT NOT NULL,
дата_утверждения_учебного_плана DATE NULL,
особенности MEMO NOT NULL,
код_сотрудника INT,
PRIMARY KEY (номер_учебного_плана),
FOREIGN KEY (код_сотрудника) REFERENCES Сотрудник ON
DELETE CASCADE ON UPDATE CASCADE,
);
21) CREATE TABLE Четверть
(
год INT,
номер_четверти INT,
номер_учебного_плана INT,
PRIMARY KEY (год, номер_четверти),
FOREIGN KEY (номер_учебного_плана) REFERENCES
Учебный_план ON DELETE CASCADE ON UPDATE CASCADE
);
22) CREATE TABLE Ч-П
(
год INT,
номер_четверти INT,
код_предмета INT,
количество_часов NUMERIC NOT NULL,
PRIMARY KEY (год, номер_четверти, код_предмета),
FOREIGN KEY (год, номер_четверти) REFERENCES Четверть ON
DELETE RESTRICT ON UPDATE RESTRICT,
FOREIGN KEY (код_предмета) REFERENCES Предмет ON
DELETE CASCADE ON UPDATE CASCADE
);
23) CREATE TABLE Занятие
(
дата DATE NOT NULL,
время_начала TIME NOT NULL,
время_окончания TIME NOT NULL,
код_сотрудника INT,
код_предмета INT,
код_учащегося INT,
оценка INT NOT NULL,
PRIMARY KEY (дата, время_начала, время_окончания,
код_сотрудника),
FOREIGN KEY (код_сотрудника) REFERENCES Сотрудник ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (код_предмета) REFERENCES Предмет ON
DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (код_учащегося) REFERENCES Учащийся ON
DELETE CASCADE ON UPDATE CASCADE,
CHECK (оценка >=2 AND оценка <=5),
CHECK (время_начала < время_окончания)
);
24) CREATE TABLE План_Четверть
(
номер_учебного_плана INT,
год INT,
номер_четверти INT,
PRIMARY KEY(номер_учебного_плана, год, номер_четверти),
FOREIGN KEY (номер_учебного_плана) REFERENCES Учебный_план
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (год) REFERENCES Четверть
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (номер_четверти) REFERENCES Четверть
ON DELETE CASCADE ON UPDATE CASCADE
);
25) CREATE TABLE Уволенные_сотрудники
(
код_сотрудника INT,
ФИО CHAR(25),
дата_ увольнения DATE,
PRIMARY KEY (код_сотрудника)
);
Дополнительные ограничения
Для сотрудника дата_поступления – дата_ рождения >=16
CREATE ASSERTION рожд_пост_сотр CHECK
(NOT EXISTS
(SELECT *
FROM Сотрудник, Карьера
WHERE Сотрудник.код_сотрудника= Карьера.код_сотрудника AND Карьера.дата_поступления – Сотрудник.дата_рождения <16));
Для сотрудника
дата_поступления>=дата_окончания_учебного_заведения
CREATE ASSERTION пост_оконч_сотр CHECK
( NOT EXISTS
(SELECT *
FROM Карьера, Диплом
WHERE Карьера.код_сотрудника= Диплом.код_сотрудника AND Карьера.дата_поступления<диплом.дата_окончания_учебного_заведения));
Для учащегося дата_поступления – дата_рождения >=5
CREATE ASSERTION рожд_пост_уч CHECK
( NOT EXISTS
(SELECT *
FROM Учащийся, Уч-П
WHERE Учащийся.код_учащегося= Уч-П.код_учащегося AND
Уч-П.дата_поступления – Учащийся.дата_рождения <5));
При увольнении сотрудника табельные номера следующих за ним в списке сотрудников уменьшаются на 1
CREATE TRIGGER SCODE
ON Сотрудник
FOR DELETE
AS
UPDATE Сотрудник ON
SET Сотрудник.код_сотрудника= Сотрудник.код_сотрудника – 1
FROM Сотрудник, DELETED
WHERE Сотрудник.код_сотрудника > DELETED.код_сотрудника;
5) При исключении учащегося коды следующих за ним в списке учащихся уменьшаются на 1
CREATE TRIGGER UCODE
ON Учащийся
FOR DELETE
AS
UPDATE Учащийся ON
SET Учащийся.код_учащегося= Учащийся.код_учащегося – 1
FROM Учащийся, DELETED
WHERE Учащийся.код_учащегося > DELETED.код_учащегося;
Триггера для Microsoft SQL Server
6) Данные об уволенных сотрудниках заносятся в таблицу «Уволенные_сотрудники»
CREATE TRIGGER Увольнение
ON Сотрудник
FOR DELETE
AS
INSERT INTO Уволенные_сотрудники
VALUES (DELETED.код_сотрудника, DELETED.ФИО, DELETED.дата_увольнения);
7) Из таблицы «Уволенные_сотрудники» удаляются данные о сотруднике, уволенном более одного месяца назад
CREATE TRIGGER Проверка
ON Уволенные_сотрудники
FOR UPDATE
AS
DELETE
FROM Уволенные_сотрудники
WHERE CURRENT_DATE() – дата_увольнения >=30;
