- •Курсовой проект Дисциплина «субд»
- •Введение.
- •1.Постановка задачи
- •1.1.Описание предметной области
- •1.2.Функциональные требования
- •2.Физическая модель
- •2.1.Используемая субд
- •3.Обеспечение целостности бд
- •4.Создание таблиц и ограничений.
- •5.Хранимые процедуры
- •6.Выходные формы
- •6.1.Представления
- •6.2.Отчетные хранимые процедуры и функции
- •7.Обеспечение безопасности
- •8.Оптимизация
- •9.Тестирование
- •Заключение
- •Библиографический список
- •Приложение 6 триггер
- •Приложение 7 Хранимые процедуры
- •Приложение 8 Отчетные формы
- •Приложение 9 Безопасность
- •Приложение 10 Индексы
- •Приложение 11 Тестирование
- •Приложение 12 Отчетные документы.
4.Создание таблиц и ограничений.
На основе спецификаций сущностей и словаря данных, сформулированных в пятом семестре, были созданы таблицы, в которых находятся описания всех атрибутов сущностей и ограничения, накладываемые на эти атрибуты.
Для удобства запуска базы данных сначала были созданы таблицы без ограничений, затем с помощью функции ALTER были наложены все необходимые ограничения.
Имена ограничений:
Договоримся, назначая ограничение PRIMARY KEY использовать шаблон: <имя таблицы><тип ограничения>, поскольку ограничение PRIMARY KEY может быть в таблице только одно. Для ограничений FOREIGN KEY будем использовать шаблон - <имя ссылающейся таблицы><имя ссылочной таблицы><тип ограничения>. Для ограничения CHECK<имя таблицы><имя столбца><тип ограничения>, а для ограничения UNIQUE <имя таблицы><имя одного из столбцов><тип ограничения>.
Имена объектов:
Таблицы базы данных именуются в соответствии с их содержимым и на английском языке, т.к. он является интернациональным. Например таблица хранящая в себе данные о лифтах (личный номер, дом, подъезд и .т.п.) называется Elevator. Именование процедур и функций осуществляется по следующему шаблону: добавление <имя таблицы>INCERT, удаление-<имя таблицы>Delete, обновление -<имя таблицы>Update, отчетные формы - print<имя объекта или действия>
Таблица Улица(Street) |
|||
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
ID Улицы |
IDStreet |
INT |
PRIMARY KEY |
Название улицы |
NameStreet |
VARCHAR (40) |
UNIQUE NOT NULL |
В таблице «Улица»был выделен уникальный ключ «ID Улицы».
Таблица «Улица» является справочником, поэтому на название улиц было наложено ограничение уникальности, чтобы исключить дублирование записей в таблице.
CREATETABLE Street
(
IDStreet INTIDENTITY NOT NULL,
NameStreet VARCHAR(40)NOT NULL
);
ALTERTABLE Street
WITHCHECK
ADD CONSTRAINT IDStreetPrimary PRIMARYKEY (IDStreet),
CONSTRAINT NameStreetUnique UNIQUE (NameStreet)
;
Таблица Вид заявки(TypeOfApplication) |
|||
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
ID вида заявки |
IDTypeOfApplication |
INT |
PRIMARY KEY |
Вид заявки |
TypeOfApp |
VARCHAR (80) |
UNIQUE NOT NULL |
Таблица «Вид заявки» хранит в себе вид заявки, поэтому данный атрибут не может быть пустым.
CREATE TABLE TypeOfApplication
(
IDTypeOfApplication INT IDENTITY NOT NULL,
TypeOfApp VARCHAR(80)NOT NULL
);
ALTERTABLE TypeOfApplication
WITH CHECK
ADD CONSTRAINT IDTypeOfApplicationPrimary PRIMARY KEY (IDTypeOfApplication),
CONSTRAINT TypeOfAppUnique UNIQUE(TypeOfApp)
;
Таблица Электромеханик(Electrician) |
|||
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
ID Электромеханика |
IDElectrician |
INT |
PRIMARY KEY |
ФИО |
FIO |
VARCHAR (80) |
UNIQUE NOT NULL |
Разряд |
Class |
INT |
NOT NULL |
Специализация |
Speciality |
VARCHAR (40) |
NOT NULL |
Дата рождения |
Birthday |
DATETIME |
NOT NULL |
Таблица «Электромеханик» является справочником исодержитвсебеличныеданныеэлектромехаников. Чтобы избежать случайного повторного ввода данных об одном и том же работнике, атрибут ФИО установлен уникальным.
CREATE TABLE Electrician
(
IDElectrician INT IDENTITY NOT NULL,
FIO VARCHAR(80)NOT NULL,
Class INT NOT NULL,
Speciality VARCHAR(40)NOT NULL,
Birthday DATETIME NOT NULL
);
ALTER TABLE Electrician
WITH CHECK
ADD CONSTRAINT IDElectricianPrimary PRIMARY KEY (IDElectrician),
CONSTRAINT FIOUnique UNIQUE(FIO)
;
На атрибут «Разряд» было установлено ограничение от 1 до 4, чтобы избежать случайных грубых ошибок во введении разряда электромеханика.
Также было поставлено ограниечени на дату рождения: электромеханик не должен быть моложе 20 лет.
ALTERTABLE Electrician
WITH CHECK
ADD CONSTRAINT ElClassCheck CHECK (ClassBETWEEN 1 AND 4),
CONSTRAINT ElectricianBirthdayCheck CHECK (DATEDIFF(year,Birthday,getDate())>20)
;
Таблица Неисправность(Defect) |
|||
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
ID Неисправности |
IDDefect |
INT |
PRIMARY KEY |
Вид неисправности |
TypeOfDefect |
VARCHAR (80) |
UNIQUE NOT NULL |
В таблице «Неисправность» хранится краткое описание неисправности лифта и возможно причина неисправности. Т.к. каждый случай поломки уникален, на данный атрибут наложено ограничение UNIQUE.
CREATE TABLE Defect
(
IDDefect INT IDENTITY NOT NULL,
TypeOfDefect VARCHAR(80)NOT NULL
);
ALTER TABLE Defect
WITH CHECK
ADD CONSTRAINT IDDefectPrimary PRIMARY KEY (IDDefect),
CONSTRAINT TypeOfDesectUnique UNIQUE (TypeOfDefect)
;
Таблица Лифт(Elevator) |
|||
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
ID Лифта |
IDElevator |
INT |
PRIMARY KEY |
Личный номер |
PersonalNumber |
VARCHAR (10) |
NOT NULL |
Дом |
Building |
INT |
NOT NULL |
Подъезд |
Door |
INT |
NOT NULL |
ID Улицы |
IDStreet |
INT |
NOT NULL FOREIGN KEY |
В таблице «Лифт» помимо первичного ключа (ID Лифта) был выделен потенциальный ключ: дом, подъезд и личный номер. Так как эти атрибуты являются уникальными, то по ним можно будет однозначно идентифицировать записи в таблице.
Так как данная таблица является ссылающейся, для внешних ключей была установлена опция ON UPDATE CASCADE, которая будет обеспечивать модификацию строк, как в родительской, так и в дочерней таблице. Кроме того, была установлена опция ON DELETE CASCADE, которая обеспечит удаление строк в дочерней таблице, при удалении строк из родительской. Далее эта опция применяется практически во всех таблицах.
CREATE TABLE Elevator
(
IDElevator INT IDENTITY NOT NULL,
PersonalNumber VARCHAR(10)NOT NULL,
Building VARCHAR(10)NOT NULL,
Door INT NOT NULL,--подъезд
IDStreet INT NOT NULL,
);
ALTER TABLE Elevator
WITH CHECK
ADD CONSTRAINT DElevator Primary PRIMARYKEY (IDElevator),
CONSTRAINT BuildingDoorPersonalNumberUniq UNIQUE (Building,Door,PersonalNumber),
CONSTRAINT ElevatorStreetForeign FOREIGNKEY(IDStreet)
REFERENCES Street ON UPDATE CASCADE ON DELETE CASCADE
;
Таблица Заявка(Request) |
|||
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
ID Заявки |
IDRequest |
INT |
PRIMARY KEY |
Описание поломки |
BreakDescription |
VARCHAR (256) |
NOT NULL |
Дата и время заявки |
BreakTime |
DATETIME |
NOT NULL |
Степень поломки |
BreakLevel |
BIT |
NOT NULL |
ID вида заявки |
IDTypeOfApplication |
INT |
NOT NULL FOREIGN KEY |
ID Лифта |
IDElevator |
INT |
NOT NULL FOREIGN KEY |
В таблица «Заявка» есть атрибут «Описание поломки» хранящий краткое описание поломки лифта со слов жильцов (звонящего диспетчеру). Также есть атрибуд «степень поломки», который показывает срочность и для кого эта заявка.
CREATE TABLE Request
(
IDRequest INT IDENTITY NOT NULL,
BreakDescription VARCHAR(256)NOT NULL,
BreakTime DATETIME NOT NULL,
BreakLevel BIT NOT NULL DEFAULT 0,
IDElevator INT NOT NULL,
IDTypeOfApplication INT NOT NULL,
);
ALTER TABLE Request
WITH CHECK
ADD CONSTRAINT IDRequestPrimary PRIMARY KEY (IDRequest),
CONSTRAINT RequestEkevatorForeign FOREIG NKEY(IDElevator)
REFERENCES Elevator ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT RequestTypeOfApplicationForeign FOREIGN KEY(IDTypeOfApplication)
REFERENCES TypeOfApplication ON UPDATE CASCADE ON DELETE CASCADE
;
Таблица Наряд(Orders) |
|||
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
ID Наряда |
IDOrders |
INT |
PRIMARY KEY |
Дата и время наряда |
OrdersTime |
DATETIME |
|
ID Электромеханика |
IDElectrician |
INT |
NOT NULL FOREIGN KEY |
ID Заявки |
IDRequest |
INT |
NOT NULL FOREIGN KEY |
Втаблице«Наряд» есть атрибут «Дата и время наряда», на котором отсутствуют ограничения. Если данный атрибут пустой, значит поломка еще не устранена и наряд не закрыт.
CREATETABLE Orders
(
IDOrders INT IDENTITY NOT NULL,
OrdersTime DATETIME,
IDElectrician INT NOT NULL,
IDRequest INT NOT NULL,
);
ALTER TABLE Orders
WITH CHECK
ADD CONSTRAINT IDOrdersPrimary PRIMARYKEY (IDOrders),
CONSTRAINT OrdersElectricianForeign FOREIGNKEY(IDElectrician)
REFERENCES Electrician ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT OrdersRequestForeign FOREIGN KEY(IDRequest)
REFERENCES Request ON UPDATE CASCADE ON DELETE CASCADE
;
Таблица Неисправности(Defects) |
|||
Атрибут |
Наименование атрибута |
Тип атрибута |
Ограничения |
ID Наряда |
IDOrders |
INT |
NOT NULL FOREIGN KEY |
ID Неисправности |
IDDefect |
INT |
NOT NULL FOREIGN KEY |
Таблица «Неисправности» является слабой сущнюстью между «Неисправность» и «Наряд» в отношении многое ко многим и хранит в себе внешние ключи.
CREATE TABLE Defects
(
IDOrders INT,
IDDefect INT,
);
ALTERTABLE Defects
WITH CHECK
ADD CONSTRAINT DefectsOrdersForeign FOREIGN KEY(IDOrders)
REFERENCES Orders ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT DefectsDefectForeign FOREIGN KEY(IDDefect)
REFERENCES Defect ON UPDATE CASCADE ON DELETE CASCADE
;