Skip to content

3kilf/databases-1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

Система каршеринга (аренды автомобилей по минутам)

Сущности:

Автомобили (гос. номер, марка, модель, тип двигателя, пробег) зоны парковки (адрес, количество мест), клиенты (ID, ФИО, водительский стаж).

Отношения:

Клиенты арендуют автомобили на определенные промежутки времени, поездки начинаются и заканчиваются в зонах парковки. Выходные документы: Выдать список самых популярных зон парковки для начала поездок за указанный период, отсортированный по количеству поездок. Для заданного клиента выдать историю всех поездок с указанием стоимости и пробега, отсортированную по дате поездки.

ER-модель (в папке jpg)

Логическая модель:

• Используются правила нормализации (вероятно, правила преобразования ER-диаграммы в реляционную модель) • Предполагается, что при использовании этих правил получаются четыре таблицы: Clients, Cars, ParkingZones, Rentals

Преобразование сущностей в таблицы:

Сущность "Клиенты" → Таблица CLIENTS • Атрибуты: client_id, first_name, last_name, driving_exp • Первичный ключ: client_id

Сущность "Автомобили" → Таблица CARS • Атрибуты: car_id, license_plate, brand, model, engine_type, mileage • Первичный ключ: car_id

Сущность "Зоны парковки" → Таблица PARKING_ZONES • Атрибуты: zone_id, address, spots_count • Первичный ключ: zone_id

Связь "Аренда" → Таблица RENTALS • Атрибуты: rental_id, client_id, car_id, start_zone_id, end_zone_id, start_time, end_time, cost, distance • Первичный ключ: rental_id • Внешние ключи: client_id, car_id, start_zone_id, end_zone_id

Правила преобразования (аналогично "правилам H"):

  1. Каждая сущность становится таблицей
  2. Атрибуты сущности становятся столбцами таблицы
  3. Связь "многие-ко-многим" между Клиентами и Автомобилями преобразуется в отдельную таблицу RENTALS
  4. Связи "один-ко-многим" между Зонами парковки и Поездками реализуются через внешние ключи в таблице RENTALS

Объяснение:

• Сущность Клиент: Хранит информацию о клиентах системы. ID_клиента – первичный ключ. • Сущность Автомобиль: Содержит информацию об автомобилях в системе. Гос_номер – первичный ключ. Также включает ID_зоны_парковки в качестве внешнего ключа, чтобы отслеживать, где в данный момент находится автомобиль. • Сущность Зона_парковки: Хранит информацию о зонах парковки. ID_зоны_парковки – первичный ключ. • Сущность Аренда: Представляет факт аренды автомобиля. ID_аренды – первичный ключ. Содержит внешние ключи, ссылающиеся на клиентов (ID_клиента), автомобили (Гос_номер), а также зоны парковки начала и конца аренды (ID_зоны_начала, ID_зоны_конца). Также хранит время начала и конца аренды и общую стоимость.

Отношения:

• Клиент ---< Аренда (1:M): Один клиент может совершить много аренд. • Автомобиль ---< Аренда (1:M): Один автомобиль может быть арендован много раз разными клиентами. • Зона_парковки ---< Автомобиль (1:M): В одной зоне парковки может одновременно находиться несколько автомобилей. (Обратите внимание: эта связь описывает текущее местоположение автомобиля.) • Зона_парковки ---< Аренда (1:M, x2): Зона парковки является местом начала и завершения аренды.

Primary Keys (Первичные ключи):

Clients: client_id (идентификатор клиента). Использование суррогатного ключа является хорошей практикой, так как исключает зависимость от бизнес-данных.

Cars: car_id (идентификатор автомобиля). Аналогично, суррогатный ключ обеспечивает стабильность ссылок.

ParkingZones: zone_id (идентификатор зоны парковки). Суррогатный ключ для уникальной идентификации зон.

Rentals: rental_id (идентификатор аренды). Автоматический уникальный ID для каждой поездки.

Foreign Keys (Внешние ключи и связи):

key = (client_id, car_id, start_zone_id, end_zone_id) - составной внешний ключ в Rentals, ссылающийся на Clients, Cars и ParkingZones (дважды).

Физическая модель

Таблица: CLIENTS (Клиенты) client_id: INTEGER (первичный ключ, автоинкремент)

first_name: VARCHAR(50) (имя)

last_name: VARCHAR(50) (фамилия)

driving_exp: INTEGER (водительский стаж в годах)

Таблица: CARS (Автомобили) car_id: INTEGER (первичный ключ, автоинкремент)

license_plate: VARCHAR(20) (государственный номер)

brand: VARCHAR(50) (марка автомобиля)

model: VARCHAR(50) (модель автомобиля)

engine_type: VARCHAR(20) (тип двигателя)

mileage: INTEGER (пробег в км)

Таблица: PARKING_ZONES (Зоны парковки) zone_id: INTEGER (первичный ключ, автоинкремент)

address: VARCHAR(255) (адрес зоны парковки)

spots_count: INTEGER (количество парковочных мест)

Таблица: RENTALS (Аренды/Поездки) rental_id: INTEGER (первичный ключ, автоинкремент)

client_id: INTEGER (внешний ключ на CLIENTS.client_id)

car_id: INTEGER (внешний ключ на CARS.car_id)

start_zone_id: INTEGER (внешний ключ на PARKING_ZONES.zone_id)

end_zone_id: INTEGER (внешний ключ на PARKING_ZONES.zone_id)

start_time: DATETIME (время начала поездки)

end_time: DATETIME (время окончания поездки)

cost: DECIMAL(10,2) (стоимость поездки)

distance: INTEGER (пробег за поездку в км)

About

Лабораторная работа

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors