
- •22 Методические указания к лабораторной работе №1 "Проектирование базы данных"
- •Проектирование базы данных введение
- •Порядок выполнения работы
- •Наибольшее распространение для семантического моделирования получила модель "сущность-связь" (Entity-Relationship) 2, или er-модель.
- •Рассмотрим базовые понятия er-модели.
- •Различают следующие виды атрибутов:
- •Реляционная модель данных
- •Ограничения целостности
- •6. Ссылочная целостность
- •Стандартные типы данных
- •Типы данных
- •Создание баз данных и таблиц на sql Для операций над базами данных и таблицами в стандарте sql имеются следующие операторы:
- •Объявление текущей базы данных
- •Домены и пользовательские типы данных
- •Правила преобразования er-модели в реляционную
- •Проектирование доменов
- •Создание автоинкрементных столбцов
- •Нормализация
- •Первая нормальная форма (first normal form) – 1нф
- •Библиографический список
Проектирование доменов
Домены стоит создавать, если несколько столбцов имеют один и тот же логический смысл.
Имя домена |
Назначение домена |
Столбцы, принадлежащие домену |
Базовый тип |
Ограничения целостности домена |
TRegNum |
Регистрационные номера автомобилей |
AUTO.RegNum DRIVER.RegNumAuto REQUEST.RegNumAuto |
CHAR(14) |
NOT NULL, Маска «бб чч-чч ччRUS» бб – буквы, чч- числа |
TModelAuto |
Модели автомобилей |
AUTO.Model REQUEST.ModelAuto |
См. примечание | |
TDriver_ID |
Код водителя |
DRIVER.ID_Driver SHEDULE.Driver_ID |
SMALLINT |
NOT NULL, >0 |
TDate |
Дата |
SHEDULE.WDate REQUEST.Rdate |
DATE |
Нет |
TTime |
Время |
SHEDULE.TimeStart SHEDULE.TimeFinal REQUEST.TimeStart REQUEST.TimeFinal |
TIME |
Нет |
TCust_ID |
Номера заказчиков |
CUSTOMER.ID_Cust PERSON.Cust_ID ORGANIZATION.Cust_ID |
SMALLINT |
NOT NULL, >0 |
Примечание: модели автомобилей можно записывать в виде строки символов, например, «Газ», «Камаз». Недостатки этого способа проявляются в том, что, во-первых, при оформлении заявки можно записать модель автомобиля с ошибкой, и когда будет проводиться поиск, есть ли свободные автомобили данной марки, результатом окажется: «автомобиля указанной марки не существует»; во-вторых, строка символов занимает больше памяти, чем число. Рациональнее будет создать дополнительную таблицу МОДЕЛИ_АВТОМОБИЛЕЙ (Models) со столбцами (КодМодели, НазваниеМодели), и везде, где требуется указать модель автомобиля, помещать ссылки на строки этой таблицы. Таким образом, домен TModelAuto будет числовым кодом автомобиля, базовый тип – SMALLLINT, ограничения целостности NOT NULL, >0.
Ниже приводится структура таблиц с ограничениями целостности.
[Models]
Имя столбца |
Тип |
Обязательность (NULL/NOT NULL) |
Default |
PRIMARY KEY или Unique |
Check |
FOREIGN KEY и другие ограничения целостности |
Примечание |
ID_Model |
TModelAuto |
См. домен |
Автоинк-рементный |
Primary key |
См. домен |
|
Код модели |
ModelType |
VARCHAR(20) |
NOT NULL |
|
|
|
|
Название модели |
[Auto]
Имя столбца |
Тип |
Обязательность (NULL/NOT NULL) |
Default |
PRIMARY KEY или Unique |
Check |
FOREIGN KEY и другие ограничения целостности |
Примечание |
RegNum |
TRegNum |
См. домен |
Автоинк-рементный |
Primary key |
См. домен |
|
Регистрационный номер автомобиля |
Model |
TModelAuto |
См. домен |
|
|
См. домен |
FK Models.ID_Model |
DELETE NO ACTION Ссылка на модель |
[Driver]
Имя столбца |
Тип |
Обязательность (NULL/NOT NULL) |
Default |
PRIMARY KEY или Unique |
Check |
FOREIGN KEY и другие ограничения целостности |
Примечание |
ID_Drver |
TDriver_ID |
См. домен |
Автоинк-рементный |
Primary key |
См. домен |
|
Код водителя |
Surname |
NVARCHAR(30) |
NOT NULL |
|
|
|
|
Фамилия |
Name |
NVARCHAR(20) |
NOT NULL |
|
|
|
|
Имя |
Patronymic |
NVARCHAR(30) |
NOT NULL |
|
|
|
|
Отчество |
RegNumAuto |
TModelAuto |
См. домен |
|
|
См. домен |
FK Auto.RegNum |
Ссылка на авто DELETE NO ACTION |
Нестандартное ограничение целостности: не более двух строк могут содержать одно и то же значение поля RegNumAuto.
[Shedule]
Имя столбца |
Тип |
Обязательность (NULL/NOT NULL) |
Default |
PRIMARY KEY или Unique |
Check |
FOREIGN KEY и другие ограничения целостности |
Примечание |
Driver_ID |
TDriver_ID |
См. домен |
|
Primary key |
См. домен |
FK Driver.ID_Driver |
Код водителя DELETE CASCADE UPDATE CASCADE |
WDate |
TDate |
NOT NULL |
|
См. домен |
|
Дата | |
TimeStart |
TTime |
NOT NULL |
|
|
>TimeFinal |
|
Время начала смены |
TimeFinal |
TTime |
NOT NULL |
|
|
|
|
Время конца смены |
[Customer]
Имя столбца |
Тип |
Обязательность (NULL/NOT NULL) |
Default |
PRIMARY KEY или Unique |
Check |
FOREIGN KEY и другие ограничения целостности |
Примечание |
ID_Cust |
TCust_ID |
См. домен |
Автоинк-рементный |
Primary key |
См. домен |
|
Код заказчика |
Name |
NVARCHAR(70) |
NOT NULL |
|
|
|
|
Имя заказчика |
Phone |
VARCHAR(12) |
NULL |
|
|
|
|
Телефон |
В ER-модели подтипы сущностей ОРГАНИЗАЦИЯ и ЧАСТНОЕ_ЛИЦО идентифицировались по-разному. Идентификатором организации был атрибутИНН, идентификатором человека (СерияПаспорта,НомерПаспорта) (рис.8). При переходе к реляционной модели в таблицыPERSONиORGANIZATIONбыл добавлен новый первичный ключCust_ID, идентифицирующие атрибуты сущности превратились в обычные столбцы с ограничениемUnique.
[Person]
Имя столбца |
Тип |
Обязательность (NULL/NOT NULL) |
Default |
PRIMARY KEY или Unique |
Check |
FOREIGN KEY и другие ограничения целостности |
Примечание |
Cust_ID |
TCust_ID |
См. домен |
|
Primary key |
См. домен |
FK Customer.ID_Cust |
Код заказчика |
DateOfBirth |
DATE |
NOT NULL |
|
|
|
|
Дата рождения |
PassportSeria |
CHAR(5) |
NOT NULL |
|
Unique |
|
|
Серия паспорта |
PassportNumber |
NUMERIC(6,0) |
NOT NULL |
|
>0 |
|
Номер паспорта |
[Organization]
Имя столбца |
Тип |
Обязательность (NULL/NOT NULL) |
Default |
PRIMARY KEY или Unique |
Check |
FOREIGN KEY и другие ограничения целостности |
Примечание |
Cust_ID |
TCust_ID |
См. домен |
|
Primary key |
См. домен |
FK Customer.ID_Cust |
Код заказчика |
INN |
NUMERIC(15,0) |
NOT NULL |
|
Unique |
>0 |
|
ИНН |
Province |
NVARCHAR(31) |
NULL |
|
|
|
|
Область |
Region |
NVARCHAR(31) |
NULL |
|
|
|
|
Район |
Town |
NVARCHAR(31) |
NOT NULL |
|
|
|
|
Город, село |
Street |
NVARCHAR(47) |
NULL |
|
|
|
|
Улица |
House |
VARCHAR(12) |
NULL |
|
|
|
|
Дом, корпус |