Лабораторная работа 2. Литвинов Б23-503
Концептуальное проектирование базы данных
Цель
Построить логически корректную модель данных.
Содержание работы
Студент разрабатывает:
- ER-диаграмму;
- KB-диаграмму (ключи, ограничения, связи);
- описание атрибутов и доменов;
Студент должен понимать:
- семантику удаления и обновления данных.
Отчетные материалы
- ER-диаграмма;
- KB-диаграмма;
- таблица атрибутов и доменов;
семантику удаления и обновления данных.
Операции с дочерним отношением:
- Вставка - корректное значение FK
- Удаление - без ограничений
- Модификация FK - корректное новое значение FK
Операции с родительским отношением:
- Вставка - без ограничений
- Удаление - реакция на связанные записи:
-
-
-
- установить пустое значение (отсутствие связи)
- Модификация PK - реакция аналогична
ER-диаграмма;
Master и Client наследуются через отношение полной категоризации от Person / E0. Сущности, ранее связанные с обоими Master и Client теперь связаны с Person

KB-диаграмма;
Устранение неопределенных связей Many to Many
Добавлены таблицы Class_Master и Class_Equipment. Для каждого Class должно быть 2 и более записей Class_Master
Анализ альтернативных ключей.
Client / E1
Master / E2
Studio / E3

таблица атрибутов и доменов;
Person / E0
| Атрибут |
Домен |
Ограничения |
| id |
int |
PRIMARY KEY |
| ФИО |
text |
|
Client / E1
| Атрибут |
Домен |
Ограничения |
| phone |
text |
UNIQUE |
| email |
text |
UNIQUE |
| billing_account |
text |
|
Master / E2
| Атрибут |
Домен |
Ограничения |
| passport |
text |
UNIQUE |
| readme |
text |
|
Studio / E3
| Атрибут |
Домен |
Ограничения |
| address |
text |
UNIQUE |
| capacity |
int |
CHECK (capacity > 0) |
| begin_date |
timestamptz |
|
| duration |
interval |
|
Class / E4
| Атрибут |
Домен |
Ограничения |
| begin_date |
timestamptz |
PRIMARY KEY |
| Course_id |
int |
PRIMARY FOREIGN KEY (Course_id) REFERENCES Course (id) |
| Studio_id |
int |
FOREIGN KEY (Studio_id) REFERENCES Studio (id) |
| name |
text |
|
| type |
int |
|
| duration |
interval |
|
Course / E5
| Атрибут |
Домен |
Ограничения |
| id |
int |
PRIMARY KEY |
| Master_id |
int |
FOREIGN KEY (Master_id) REFERENCES Master (id) |
| name |
text |
|
| duration |
interval |
|
Registration / E6
| Атрибут |
Домен |
Ограничения |
| Client_id |
int |
PRIMARY FOREIGN KEY (Client_id) REFERENCES Client (id) |
| Course_id |
int |
PRIMARY FOREIGN KEY (Course_id) REFERENCES Course (id) |
| date |
timestamptz |
|
| status |
int |
|
FoodProduct / E7
| Атрибут |
Домен |
Ограничения |
| id |
int |
PRIMARY KEY |
| FoodProductEnum_id |
int |
PRIMARY FOREIGN KEY (FoodProductEnum_id) REFERENCES FoodProductEnum (id) |
| ClassId |
int |
FOREIGN KEY (Class_id) REFERENCES Class (id) |
| buy_price |
real |
|
| buy_date |
timestamptz |
|
| delivery_price |
real |
|
| delivery_date |
timestamptz |
|
| expires_date |
timestamptz |
|
Equipment / E8
| Атрибут |
Домен |
Ограничения |
| id |
int |
PRIMARY KEY |
| Studio_id |
int |
FOREIGN KEY (Studio_id) REFERENCES Studio (id) |
| name |
text |
|
| usage_price |
real |
|
| usage_type |
int |
|
| delivery_price |
real |
|
| delivery_date |
timestamptz |
|
FirstAidKit / E9
| Атрибут |
Домен |
Ограничения |
| Course_id |
int |
FOREIGN KEY (Course_id) REFERENCES Course (id) |
Drug / E10
| Атрибут |
Домен |
Ограничения |
| id |
int |
PRIMARY KEY |
| DrugEnum_id |
int |
PRIMARY FOREIGN KEY |
| FirstAidKit_id |
int |
FOREIGN KEY |
| buy_price |
real |
|
| buy_date |
timestamptz |
|
| delivery_price |
real |
|
| delivery_date |
timestamptz |
|
| expires_date |
timestamptz |
|
DrugIntolerance / E11
| Атрибут |
Домен |
Ограничения |
| Person_id |
int |
PRIMARY FOREIGN KEY |
| DrugEnum_id |
int |
PRIMARY FOREIGN KEY |
DrugEnum / E12
| Атрибут |
Домен |
Ограничения |
| id |
int |
PRIMARY KEY |
| name |
text |
|
| avg_price |
text |
|
FoodProductEnum / E13
| Атрибут |
Домен |
Ограничения |
| id |
int |
PRIMARY KEY |
| name |
text |
|
| avg_price |
text |
|
ActivityLog / E14
| Атрибут |
Домен |
Ограничения |
| id |
int |
PRIMARY KEY |
| Person_id |
int |
PRIMARY FOREIGN KEY |
| action |
text |
|