# Лабораторная работа 2. Литвинов Б23-503 ## **Концептуальное проектирование базы данных** ### **Цель** Построить логически корректную модель данных. ### **Содержание работы** Студент разрабатывает: * ER-диаграмму; * KB-диаграмму (ключи, ограничения, связи); * описание атрибутов и доменов; Студент должен понимать: * семантику удаления и обновления данных. ### **Отчетные материалы** * ER-диаграмма; * KB-диаграмма; * таблица атрибутов и доменов; # семантику удаления и обновления данных. Операции с дочерним отношением: - Вставка - корректное значение FK - Удаление - без ограничений - Модификация FK - корректное новое значение FK Операции с родительским отношением: - Вставка - без ограничений - Удаление - реакция на связанные записи: - - не удалять - - удалить все - - установить пустое значение (отсутствие связи) - Модификация PK - реакция аналогична # ER-диаграмма; Master и Client наследуются через отношение полной категоризации от Person / E0. Сущности, ранее связанные с обоими Master и Client теперь связаны с Person ![ER](er.drawio.svg) # KB-диаграмма; ## Устранение неопределенных связей Many to Many Добавлены таблицы Class_Master и Class_Equipment. Для каждого Class должно быть 2 и более записей Class_Master ## Анализ альтернативных ключей. Client / E1 - номер телефона - email Master / E2 - паспорт Studio / E3 - адрес ![KB](kb.drawio.svg) # таблица атрибутов и доменов; ## 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 | |