Files
sql_advanced/lab2-1/db.sql
T
Vitalii Litvinchuk 6deed0469a first commit
2026-05-04 23:15:09 +03:00

185 lines
6.1 KiB
SQL
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
create database PortDB character set utf8 collate utf8_bin;
use PortDB;
CREATE TABLE `Users` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Password` nvarchar (1000) NOT NULL COMMENT 'Пароль',
`PersonId` integer COMMENT 'Дані людини'
);
CREATE TABLE `Positions` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Name` nvarchar (255) UNIQUE NOT NULL COMMENT 'Назва позиції'
);
CREATE TABLE `ContactInfo` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Content` nvarchar (255) NOT NULL COMMENT 'Дані про контакт',
`PersonId` integer COMMENT 'Людина',
`ContactTypeId` integer COMMENT 'Тип контакту'
);
CREATE TABLE `ContactTypes` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Name` nvarchar (255) UNIQUE NOT NULL COMMENT 'Назва типи контакту'
);
CREATE TABLE `Services` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Date` timestamp NOT NULL COMMENT 'Дата обслуговування',
`Done` boolean NOT NULL DEFAULT 0 COMMENT 'Виконане',
`ShipId` integer COMMENT 'Корабель',
`ServiceTypeId` integer COMMENT 'Тип обслуговування'
);
CREATE TABLE `ServiceTypes` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Name` nvarchar (255) UNIQUE NOT NULL COMMENT 'Назва типу',
`Description` nvarchar (255) NOT NULL COMMENT 'Опис обслуговування'
);
CREATE TABLE `Ships` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Name` nvarchar (255) NOT NULL COMMENT 'Назва корабля',
`Length` decimal(10, 2) NOT NULL COMMENT 'Довжина корабля',
`Width` decimal(10, 2) NOT NULL COMMENT 'Ширина корабля',
`Capacity` integer NOT NULL COMMENT 'Місткість корабля (у тоннах)',
`ShipTypeId` integer COMMENT 'Тип корабля',
`VoyageId` integer COMMENT 'Інформація про рейс',
`DockId` integer COMMENT 'Причал'
);
CREATE TABLE `ShipTypes` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Name` nvarchar (255) UNIQUE NOT NULL COMMENT 'Назва типу'
);
CREATE TABLE `Docks` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Name` nvarchar (255) NOT NULL COMMENT 'Назва причалу',
`MaxLength` integer NOT NULL COMMENT 'Максимальна довжина причалу',
`MaxWidth` integer NOT NULL COMMENT 'Максимальна ширина причалу'
);
CREATE TABLE `Cargoes` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Quantity` integer NOT NULL COMMENT 'Кількість',
`CargoTypeId` integer COMMENT 'Тип вантажу',
`ShipId` integer COMMENT 'Корабель',
`PurposeId` integer COMMENT 'Ціль'
);
CREATE TABLE `Purposes` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Name` nvarchar (255) UNIQUE NOT NULL COMMENT 'Назва цілі',
`Description` nvarchar (255) NOT NULL COMMENT 'Опис цілі'
);
CREATE TABLE `CargoTypes` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Name` nvarchar (255) UNIQUE NOT NULL COMMENT 'Назва типу'
);
CREATE TABLE `Persons` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Passport` nvarchar (1000) UNIQUE NOT NULL COMMENT 'Паспортні дані',
`FirstName` nvarchar (255) NOT NULL COMMENT 'Ім\'я',
`LastName` nvarchar (255) NOT NULL COMMENT 'Прізвище',
`PositionId` integer COMMENT 'Посада'
);
CREATE TABLE `CrewPersons` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`PersonId` integer COMMENT 'Дані людини',
`ShipId` integer COMMENT 'Корабель'
);
CREATE TABLE `Employees` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`PersonId` integer COMMENT 'Дані людини'
);
CREATE TABLE `ServiceEmployee` (
`EmployeeId` integer COMMENT 'Працівник',
`ServiceId` integer COMMENT 'Обслуговування'
);
CREATE TABLE `Country` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`Name` nvarchar (50) UNIQUE NOT NULL COMMENT 'Назва країни'
);
CREATE TABLE `DockEmplyee` (
`DockId` integer COMMENT 'Причал',
`EmployeeId` integer COMMENT 'Працівник'
);
CREATE TABLE `Voyages` (
`Id` integer PRIMARY KEY AUTO_INCREMENT,
`CountryFromId` integer COMMENT 'Країна відправки',
`CountryToId` integer COMMENT 'Країна доставки'
);
ALTER TABLE `Users`
ADD FOREIGN KEY (`PersonId`) REFERENCES `Persons` (`Id`);
ALTER TABLE `ContactInfo`
ADD FOREIGN KEY (`PersonId`) REFERENCES `Persons` (`Id`);
ALTER TABLE `ContactInfo`
ADD FOREIGN KEY (`ContactTypeId`) REFERENCES `ContactTypes` (`Id`);
ALTER TABLE `Services`
ADD FOREIGN KEY (`ShipId`) REFERENCES `Ships` (`Id`);
ALTER TABLE `Services`
ADD FOREIGN KEY (`ServiceTypeId`) REFERENCES `ServiceTypes` (`Id`);
ALTER TABLE `Ships`
ADD FOREIGN KEY (`ShipTypeId`) REFERENCES `ShipTypes` (`Id`);
ALTER TABLE `Ships`
ADD FOREIGN KEY (`VoyageId`) REFERENCES `Voyages` (`Id`);
ALTER TABLE `Ships`
ADD FOREIGN KEY (`DockId`) REFERENCES `Docks` (`Id`);
ALTER TABLE `Cargoes`
ADD FOREIGN KEY (`CargoTypeId`) REFERENCES `CargoTypes` (`Id`);
ALTER TABLE `Cargoes`
ADD FOREIGN KEY (`ShipId`) REFERENCES `Ships` (`Id`);
ALTER TABLE `Cargoes`
ADD FOREIGN KEY (`PurposeId`) REFERENCES `Purposes` (`Id`);
ALTER TABLE `Persons`
ADD FOREIGN KEY (`PositionId`) REFERENCES `Positions` (`Id`);
ALTER TABLE `CrewPersons`
ADD FOREIGN KEY (`PersonId`) REFERENCES `Persons` (`Id`);
ALTER TABLE `CrewPersons`
ADD FOREIGN KEY (`ShipId`) REFERENCES `Ships` (`Id`);
ALTER TABLE `Employees`
ADD FOREIGN KEY (`PersonId`) REFERENCES `Persons` (`Id`);
ALTER TABLE `ServiceEmployee`
ADD FOREIGN KEY (`EmployeeId`) REFERENCES `Employees` (`Id`);
ALTER TABLE `ServiceEmployee`
ADD FOREIGN KEY (`ServiceId`) REFERENCES `Services` (`Id`);
ALTER TABLE `DockEmplyee`
ADD FOREIGN KEY (`DockId`) REFERENCES `Docks` (`Id`);
ALTER TABLE `DockEmplyee`
ADD FOREIGN KEY (`EmployeeId`) REFERENCES `Employees` (`Id`);
ALTER TABLE `Voyages`
ADD FOREIGN KEY (`CountryFromId`) REFERENCES `Country` (`Id`);
ALTER TABLE `Voyages`
ADD FOREIGN KEY (`CountryToId`) REFERENCES `Country` (`Id`);