Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой СУБД Вьюгин А.А 4.docx
Скачиваний:
2
Добавлен:
20.09.2019
Размер:
2.45 Mб
Скачать

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

;