Добавил:
при поддержке музыки группы Anacondaz Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курило_ЛабРаб1.docx
Скачиваний:
0
Добавлен:
16.05.2025
Размер:
198.47 Кб
Скачать

4.1 Логическая модель данных

Логическая модель данных предметной области в стандарте IDEF1X представлена на рисунке 1. Выделены сущности «Маршруты», «Перевозки», «Водители», «Оплаты», между которыми установлены не идентифицирующие связи мощностью один-ко-многим и многие-ко-многим, определенные спецификой предметной области.

Рисунок 1 – Логическая модель данных предметной области

4.2 Преобразование в физическую модель данных

Рассмотрю общие принципы преобразования: 

  • Каждая сущность преобразуется в таблицу. Имя сущности становится именем таблицы; 

  • Каждый атрибут становится столбцом таблицы с тем же именем, уточняется тип данных, выбирается более точный формат; 

  • Каждое отношение «многие-ко-многим» преобразуется в 2- х отношениях «один-ко-многим» в таблицу с тем же именем как у двух связанных сущности (ПерваяСущность_ВтораяСущность); 

  • Идентифицирующие атрибуты сущности превращаются в первичный ключ таблицы. 

Формула для преобразования: R1 (И1, А1), где R1 – таблица, И1 – первичный ключ таблицы, А1 – столбец таблицы.

Преобразую каждую сущность, их атрибуты и отношения: 

  1. Маршруты

Сущность «Маршруты» преобразуется в соответствующую таблицу «Routes». Атрибуты преобразуются в соответствующие столбцы «rout_id», «r_name», «r_mileage», «r_rate». Идентифицирующий атрибут «Код маршрута» преобразуется в соответствующий первичный ключ «rout_id». Следовательно, получаю:

Routes (route_id, r_name, r_mileage, r_rate).

  1. Перевозки

Сущность «Перевозки» преобразуется в соответствующую таблицу «Transportations». Атрибуты преобразуются в соответствующие столбцы «trans_id», «t_departure», «t_arrival». Идентифицирующий атрибут «Код маршрута» преобразуется в соответствующий первичный ключ «trans_id». Идентификатор 1-связной сущности «Код маршрута» преобразуется в соответствующий внешний ключ (t_route_id). Следовательно, получаю:

Transportations (trans_id, t_departure, t_arrival, t_route_id).

  1. Водители

Сущность «Водители» преобразуется в соответствующую таблицу «Drivers». Атрибуты преобразуются в соответствующие столбцы «driver_id», «d_surname», «d_name», «d_patronymic», «d_experience». Следовательно, получаю:

Drivers (driver_id, d_surname, d_name, d_patronymic, d_experience). 

  1. Оплата

Сущность «Оплата» преобразуется в соответствующую таблицу «Payment». Атрибут преобразуются в соответствующий столбец «p_bonus». Идентифицирующий атрибут «Код оплаты» преобразуется в соответствующий первичный ключ «pay_id». Идентификаторы 2-связной сущности «Код перевозки» и «Код водителя» преобразуются в соответствующие внешние ключи «p_trans_id» и «p_driver_id». Следовательно, получаю:

Payment (pay_id, p_bonus, p_trans_id, p_driver_id).

После всех преобразований получаю физическую модель данных. Её схема представлена на рисунке 2.

Рисунок 2 – Физическая модель базы данных

4.3 Описание физической модели данных

База данных сargo_transportation состоит из четырех таблиц:

  • routes – список маршрутов;

  • transportations – список перевозок;

  • payment – список выплат;

  • drivers – список водителей.

Таблица TRANSPORTATIONS (Перевозки)

Хранит полную информацию о транспортных операциях:

Поле

Тип

Доп. свойства поля

Описание

trans_id

INTEGER

PRIMARY KEY, NOT NULL

Целочисленный идентификатор обеспечивает уникальность и быстрый поиск.

t_rout_id

INTEGER

FOREIGN KEY (ROUTES.rout_id), NOT NULL

Ссылка на маршрут. INTEGER выбран для совместимости с PK связанной таблицы. NOT NULL гарантирует, что каждая перевозка привязана к маршруту.

t_departure

DATE

NOT NULL

Дата в формате YYYY-MM-DD. NOT NULL обеспечивает обязательность указания даты отправления.

t_arrival

DATE

Дата прибытия.

Таблица ROUTES (Маршруты)

Содержит справочник всех маршрутов:

Поле

Тип

Ограничения

Обоснование выбора типа

rout_id

INTEGER

PRIMARY KEY, NOT NULL

Уникальный числовой идентификатор маршрута.

r_name

VARCHAR(100)

NOT NULL

Название маршрута длиной до 100 символов (UTF-8). NOT NULL гарантирует наличие названия.

r_mileage

INTEGER

NOT NULL, UNSIGNED

Расстояние в км (только положительные числа). UNSIGNED запрещает отрицательные значения.

r_rate

DECIMAL(7,2)

NOT NULL, UNSIGNED

Тарифная ставка (макс. 99999.99). DECIMAL выбран для точных денежных расчетов. NOT NULL и UNSIGNED обеспечивают корректность финансовых данных.

Таблица PAYMENT (Оплата)

Учет выплат водителям:

Поле

Тип

Ограничения

Обоснование выбора типа

pay_id

INTEGER

PRIMARY KEY, NOT NULL, AUTO_INCREMENT

Уникальный идентификатор платежа.

p_trans_id

INTEGER

FOREIGN KEY (TRANSPORTATIONS.

trans_id), NOT NULL

Ссылка на перевозку. NOT NULL гарантирует привязку платежа к конкретной перевозке.

p_driver_id

INTEGER

FOREIGN KEY (DRIVERS.driver_id), NOT NULL

Ссылка на водителя. NOT NULL обеспечивает обязательное указание получателя.

p_bonus

DECIMAL(7,2)

NOT NULL, DEFAULT 0.00

Премиальные выплаты. DEFAULT 0.00 исключает NULL-значения при отсутствии премии.

Таблица DRIVERS (Водители)

Кадровый учет водителей:

Поле

Тип

Ограничения

Обоснование выбора типа

driver_id

INTEGER

PRIMARY KEY, NOT NULL

Уникальный идентификатор водителя.

d_surname

VARCHAR(20)

NOT NULL

Фамилия (ограничение 20 символов обычно достаточно для фамилий).

d_name

VARCHAR(20)

NOT NULL

Имя (аналогично фамилии).

d_patronymic

VARCHAR(20)

NULL

Отчество (может отсутствовать).

d_experiens

INTEGER

NOT NULL, UNSIGNED

Стаж в годах (только положительные числа).

Соседние файлы в предмете Интеллектуальные базы данных