first commit

This commit is contained in:
Vitalii Litvinchuk
2026-05-04 23:15:09 +03:00
commit 6deed0469a
49 changed files with 5366 additions and 0 deletions
+404
View File
@@ -0,0 +1,404 @@
-- MySQL dump 10.13 Distrib 9.6.0, for Linux (x86_64)
--
-- Host: localhost Database: CarRental
-- ------------------------------------------------------
-- Server version 9.6.0
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;
--
-- GTID state at the beginning of the backup
--
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '8e6de61c-253f-11f1-be75-0242ac130002:1-141';
--
-- Table structure for table `Car_Classes`
--
DROP TABLE IF EXISTS `Car_Classes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Car_Classes` (
`id` int NOT NULL AUTO_INCREMENT,
`Class` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Car_Classes`
--
LOCK TABLES `Car_Classes` WRITE;
/*!40000 ALTER TABLE `Car_Classes` DISABLE KEYS */;
INSERT INTO `Car_Classes` VALUES (1,'Luxury'),(2,'Midsize'),(3,'Compact'),(4,'Compact'),(5,'SUV');
/*!40000 ALTER TABLE `Car_Classes` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Car_Infos`
--
DROP TABLE IF EXISTS `Car_Infos`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Car_Infos` (
`id` int NOT NULL AUTO_INCREMENT,
`Fuel` int DEFAULT NULL,
`Mileage` int DEFAULT NULL,
`Class` int DEFAULT NULL,
`Model` int DEFAULT NULL,
`Manufacturer` int DEFAULT NULL,
`Year` int DEFAULT NULL,
`VIN_code` varchar(255) DEFAULT NULL,
`Number` varchar(255) DEFAULT NULL,
`CoS` int DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `VIN_code` (`VIN_code`),
KEY `Fuel` (`Fuel`),
KEY `Class` (`Class`),
KEY `Model` (`Model`),
KEY `Manufacturer` (`Manufacturer`),
CONSTRAINT `Car_Infos_ibfk_1` FOREIGN KEY (`Fuel`) REFERENCES `FuelTypes` (`id`),
CONSTRAINT `Car_Infos_ibfk_2` FOREIGN KEY (`Class`) REFERENCES `Car_Classes` (`id`),
CONSTRAINT `Car_Infos_ibfk_3` FOREIGN KEY (`Model`) REFERENCES `Models` (`id`),
CONSTRAINT `Car_Infos_ibfk_4` FOREIGN KEY (`Manufacturer`) REFERENCES `Manufacturers` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Car_Infos`
--
LOCK TABLES `Car_Infos` WRITE;
/*!40000 ALTER TABLE `Car_Infos` DISABLE KEYS */;
INSERT INTO `Car_Infos` VALUES (1,1,10000,1,1,1,2022,'ABC123','12345',1),(2,2,20000,2,2,2,2021,'DEF456','67890',2),(3,3,30000,3,3,3,2020,'GHI789','ABCDE',3),(4,4,40000,4,4,4,2019,'JKL012','FGHIJ',4),(5,5,50000,5,5,5,2018,'MNO345','KLMNO',5);
/*!40000 ALTER TABLE `Car_Infos` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Cars`
--
DROP TABLE IF EXISTS `Cars`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Cars` (
`id` int NOT NULL AUTO_INCREMENT,
`Owner_Id` int DEFAULT NULL,
`Name` varchar(255) DEFAULT NULL,
`Price` float DEFAULT NULL,
`Rating` int DEFAULT NULL,
`Number_Of_leases` int DEFAULT NULL,
`Car_info` int DEFAULT NULL,
`City` int DEFAULT NULL,
`Country` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `Rating` (`Rating`),
KEY `Car_info` (`Car_info`),
KEY `City` (`City`),
KEY `Country` (`Country`),
CONSTRAINT `Cars_ibfk_1` FOREIGN KEY (`Rating`) REFERENCES `Ratings` (`id`),
CONSTRAINT `Cars_ibfk_2` FOREIGN KEY (`Car_info`) REFERENCES `Car_Infos` (`id`),
CONSTRAINT `Cars_ibfk_3` FOREIGN KEY (`City`) REFERENCES `Cities` (`id`),
CONSTRAINT `Cars_ibfk_4` FOREIGN KEY (`Country`) REFERENCES `Countries` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Cars`
--
LOCK TABLES `Cars` WRITE;
/*!40000 ALTER TABLE `Cars` DISABLE KEYS */;
INSERT INTO `Cars` VALUES (1,1,'Mercedes A-Class',100,1,0,1,1,1),(2,2,'Toyota RAV4',150,2,0,2,2,2),(3,3,'BMW 3 Series',200,3,0,3,3,3),(4,4,'Ford Focus',250,4,0,4,4,4),(5,5,'Honda CR-V',300,5,0,5,5,5);
/*!40000 ALTER TABLE `Cars` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Cities`
--
DROP TABLE IF EXISTS `Cities`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Cities` (
`id` int NOT NULL AUTO_INCREMENT,
`City` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Cities`
--
LOCK TABLES `Cities` WRITE;
/*!40000 ALTER TABLE `Cities` DISABLE KEYS */;
INSERT INTO `Cities` VALUES (1,'New York'),(2,'Tokyo'),(3,'Berlin'),(4,'Detroit'),(5,'Tokyo');
/*!40000 ALTER TABLE `Cities` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Countries`
--
DROP TABLE IF EXISTS `Countries`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Countries` (
`id` int NOT NULL AUTO_INCREMENT,
`Country` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Countries`
--
LOCK TABLES `Countries` WRITE;
/*!40000 ALTER TABLE `Countries` DISABLE KEYS */;
INSERT INTO `Countries` VALUES (1,'USA'),(2,'Japan'),(3,'Germany'),(4,'USA'),(5,'Japan');
/*!40000 ALTER TABLE `Countries` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `CustomerRatings`
--
DROP TABLE IF EXISTS `CustomerRatings`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `CustomerRatings` (
`id` int NOT NULL AUTO_INCREMENT,
`Customer_id` int DEFAULT NULL,
`Rating_id` int DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Customer_id` (`Customer_id`,`Rating_id`),
KEY `Rating_id` (`Rating_id`),
CONSTRAINT `CustomerRatings_ibfk_1` FOREIGN KEY (`Customer_id`) REFERENCES `Customers` (`id`),
CONSTRAINT `CustomerRatings_ibfk_2` FOREIGN KEY (`Rating_id`) REFERENCES `Ratings` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `CustomerRatings`
--
LOCK TABLES `CustomerRatings` WRITE;
/*!40000 ALTER TABLE `CustomerRatings` DISABLE KEYS */;
INSERT INTO `CustomerRatings` VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5);
/*!40000 ALTER TABLE `CustomerRatings` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Customers`
--
DROP TABLE IF EXISTS `Customers`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Customers` (
`id` int NOT NULL AUTO_INCREMENT,
`Passport_id` varchar(255) DEFAULT NULL,
`F_Name` varchar(255) DEFAULT NULL,
`S_Name` varchar(255) DEFAULT NULL,
`Email` varchar(255) DEFAULT NULL,
`PhoneNumber` varchar(20) DEFAULT NULL,
`City` int DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Passport_id` (`Passport_id`),
UNIQUE KEY `PhoneNumber` (`PhoneNumber`),
UNIQUE KEY `PhoneNumber_2` (`PhoneNumber`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Customers`
--
LOCK TABLES `Customers` WRITE;
/*!40000 ALTER TABLE `Customers` DISABLE KEYS */;
INSERT INTO `Customers` VALUES (1,'ID123','John','Doe','john.doe@email.com','1234567890',1),(2,'ID456','Jane','Smith','jane.smith@email.com','9876543210',2),(3,'ID789','Alice','Johnson','alice.johnson@email.com','5555555555',3),(4,'IDABC','Bob','Williams','bob.williams@email.com','1111111111',4),(5,'IDDEF','Eva','Brown','eva.brown@email.com','9999999999',5);
/*!40000 ALTER TABLE `Customers` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `FuelTypes`
--
DROP TABLE IF EXISTS `FuelTypes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `FuelTypes` (
`id` int NOT NULL AUTO_INCREMENT,
`Type` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `FuelTypes`
--
LOCK TABLES `FuelTypes` WRITE;
/*!40000 ALTER TABLE `FuelTypes` DISABLE KEYS */;
INSERT INTO `FuelTypes` VALUES (1,'Gasoline'),(2,'Gasoline'),(3,'Diesel'),(4,'Gasoline'),(5,'Hybrid');
/*!40000 ALTER TABLE `FuelTypes` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Manufacturers`
--
DROP TABLE IF EXISTS `Manufacturers`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Manufacturers` (
`id` int NOT NULL AUTO_INCREMENT,
`Name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Manufacturers`
--
LOCK TABLES `Manufacturers` WRITE;
/*!40000 ALTER TABLE `Manufacturers` DISABLE KEYS */;
INSERT INTO `Manufacturers` VALUES (1,'Mercedes'),(2,'Toyota'),(3,'BMW'),(4,'Ford'),(5,'Honda');
/*!40000 ALTER TABLE `Manufacturers` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Models`
--
DROP TABLE IF EXISTS `Models`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Models` (
`id` int NOT NULL AUTO_INCREMENT,
`Model` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Models`
--
LOCK TABLES `Models` WRITE;
/*!40000 ALTER TABLE `Models` DISABLE KEYS */;
INSERT INTO `Models` VALUES (1,'S-Class'),(2,'Camry'),(3,'3 Series'),(4,'Focus'),(5,'CR-V');
/*!40000 ALTER TABLE `Models` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Orders`
--
DROP TABLE IF EXISTS `Orders`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Orders` (
`id` int NOT NULL AUTO_INCREMENT,
`StartDate` date DEFAULT NULL,
`EndDate` date DEFAULT NULL,
`Customers` int DEFAULT NULL,
`Car` int DEFAULT NULL,
`Status` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `Customers` (`Customers`),
KEY `Car` (`Car`),
KEY `Status` (`Status`),
CONSTRAINT `Orders_ibfk_1` FOREIGN KEY (`Customers`) REFERENCES `Customers` (`id`),
CONSTRAINT `Orders_ibfk_2` FOREIGN KEY (`Car`) REFERENCES `Cars` (`id`),
CONSTRAINT `Orders_ibfk_3` FOREIGN KEY (`Status`) REFERENCES `Statuses` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Orders`
--
LOCK TABLES `Orders` WRITE;
/*!40000 ALTER TABLE `Orders` DISABLE KEYS */;
INSERT INTO `Orders` VALUES (1,'2023-01-01','2023-01-10',1,1,1),(2,'2023-02-01','2023-02-15',2,2,2),(3,'2023-03-01','2023-03-20',3,3,3),(4,'2023-04-01','2023-04-25',4,4,4),(5,'2023-05-01','2023-05-30',5,5,5);
/*!40000 ALTER TABLE `Orders` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Ratings`
--
DROP TABLE IF EXISTS `Ratings`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Ratings` (
`id` int NOT NULL AUTO_INCREMENT,
`Rating` int DEFAULT NULL,
`DescriptionRate` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Ratings`
--
LOCK TABLES `Ratings` WRITE;
/*!40000 ALTER TABLE `Ratings` DISABLE KEYS */;
INSERT INTO `Ratings` VALUES (1,1,'Poor'),(2,2,'Fair'),(3,3,'Average'),(4,4,'Good'),(5,5,'Excellent');
/*!40000 ALTER TABLE `Ratings` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Statuses`
--
DROP TABLE IF EXISTS `Statuses`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Statuses` (
`id` int NOT NULL AUTO_INCREMENT,
`Type` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Statuses`
--
LOCK TABLES `Statuses` WRITE;
/*!40000 ALTER TABLE `Statuses` DISABLE KEYS */;
INSERT INTO `Statuses` VALUES (1,'Available'),(2,'Booked'),(3,'Rented'),(4,'In Maintenance'),(5,'Available');
/*!40000 ALTER TABLE `Statuses` ENABLE KEYS */;
UNLOCK TABLES;
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-03-25 14:38:18
+47
View File
@@ -0,0 +1,47 @@
# Використовуємо стабільну Ubuntu 22.04
FROM ubuntu:22.04
# Вимикаємо інтерактивні запити під час встановлення пакетів
ENV DEBIAN_FRONTEND=noninteractive
# 1. Встановлюємо всі необхідні пакети одним шаром
# mysql-client - для дампу (сумісний з mysql:latest)
# lftp - для SFTP передачі
# msmtp - для надсилання пошти
# ca-certificates - критично для TLS/SSL (Gmail)
# cron - для автоматизації щохвилини
# openssh-client - для SSH-ключів
RUN apt-get update && apt-get install -y \
mysql-client \
lftp \
msmtp \
msmtp-mta \
ca-certificates \
cron \
openssh-client \
&& rm -rf /var/lib/apt/lists/*
# 2. Налаштовуємо SSH для роботи з ключами
RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh
# 3. Копіюємо конфігураційні файли
# Файл налаштування пошти
COPY msmtprc /etc/msmtprc
RUN chmod 600 /etc/msmtprc
# Скрипт бекапу
COPY backup.sh /usr/local/bin/backup.sh
RUN chmod +x /usr/local/bin/backup.sh
# 4. Створюємо файли логів з правильними правами доступу
RUN touch /var/log/msmtp.log && chmod 666 /var/log/msmtp.log
RUN touch /var/log/backup.log && chmod 666 /var/log/backup.log
# 5. Налаштовуємо Cron (запуск щохвилини)
# ВАЖЛИВО: додаємо ". /etc/environment;", щоб Cron бачив паролі з docker-compose
RUN echo "* * * * * . /etc/environment; /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1" | crontab -
# 6. Команда запуску контейнера:
# - зберігаємо поточні змінні оточення в /etc/environment (щоб їх бачив Cron)
# - запускаємо демон cron у фоновому режимі (флаг -f)
CMD ["sh", "-c", "printenv > /etc/environment && cron -f"]
+54
View File
@@ -0,0 +1,54 @@
#!/bin/bash
# --- НАЛАШТУВАННЯ ---
REMOTE_DIR="/Volumes/Just/sql advanced/lab2-1/backups"
# Новий формат: рік-місяць-день_години-хвилини-секунди
DATE=$(date +%Y-%m-%d_%H-%M-%S)
FILENAME="OrdersDB_${DATE}.sql"
BACKUP_PATH="/tmp/$FILENAME"
echo "Starting dump of OrdersDB ($DATE)..."
# 1. Створення дампу бази даних
# Додано --set-gtid-purged=OFF для сумісності з mysql:latest
# Додано --single-transaction для уникнення помилок консистентності
mysqldump -h db -u root -p$MYSQL_ROOT_PASSWORD \
--set-gtid-purged=OFF \
--single-transaction \
OrdersDB > $BACKUP_PATH
if [ $? -eq 0 ]; then
echo "Dump created: $FILENAME. Uploading to Mac..."
# 2. Завантаження через SFTP
lftp -u $SFTP_USER, sftp://$SFTP_HOST <<EOF
set sftp:connect-program "ssh -a -x -i /root/.ssh/id_rsa -o StrictHostKeyChecking=no"
cd "$REMOTE_DIR"
put "$BACKUP_PATH"
quit
EOF
if [ $? -eq 0 ]; then
echo "Upload successful. Sending email..."
# 3. Надсилання сповіщення
# Ми додаємо вивід помилок msmtp у змінну, щоб побачити їх, якщо лист не піде
EMAIL_LOG=$(echo -e "Subject: Backup Success: OrdersDB ($DATE)\n\nВітаю! Резервна копія $FILENAME успішно збережена на зовнішній диск." | msmtp $EMAIL_TO 2>&1)
if [ $? -eq 0 ]; then
echo "Email sent!"
else
echo "Email error: $EMAIL_LOG"
fi
else
echo "SFTP Error!"
echo -e "Subject: Backup FAILED: SFTP Error ($DATE)\n\nПомилка передачі файлу $FILENAME на диск." | msmtp $EMAIL_TO
fi
# Видаляємо тимчасовий файл
rm "$BACKUP_PATH"
else
echo "MySQL Dump Error!"
echo -e "Subject: Backup FAILED: SQL Error ($DATE)\n\nНе вдалося створити дамп бази OrdersDB. Перевірте логі контейнера." | msmtp $EMAIL_TO
fi
+14
View File
@@ -0,0 +1,14 @@
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log
account oa_mail
host smtp.gmail.com
port 587
from vitalii.litvinchuk@oa.edu.ua
user vitalii.litvinchuk@oa.edu.ua
password krkrvyobreydoenh
account default : oa_mail
+165
View File
@@ -0,0 +1,165 @@
## 1. docker-compose.yml
Файл конфігурації контейнерів бази даних та сервісу бекапу.
```yaml
services:
db:
image: mysql:latest
container_name: mysql-container-2
restart: always
environment:
MYSQL_ROOT_PASSWORD: qwerty-1
MYSQL_DATABASE: OrdersDB
ports:
- "3306:3306"
volumes:
- sqladvanced_mysql_data:/var/lib/mysql
backup-service:
build: ./backup
container_name: mysql-backup-runner
environment:
MYSQL_ROOT_PASSWORD: qwerty-1
SFTP_HOST: "192.168.3.142"
SFTP_USER: "vitaliilitvinchuk"
EMAIL_TO: "vitalii.litvinchuk@oa.edu.ua"
volumes:
- ~/.ssh/id_rsa_docker:/root/.ssh/id_rsa:ro
volumes:
sqladvanced_mysql_data:
external: true
```
## 2. backup/Dockerfile
Інструкції для створення образу контейнера бекапу.
```dockerfile
# Використовуємо стабільну Ubuntu 22.04
FROM ubuntu:22.04
# Вимикаємо інтерактивні запити під час встановлення пакетів
ENV DEBIAN_FRONTEND=noninteractive
# 1. Встановлюємо всі необхідні пакети одним шаром
# mysql-client - для дампу (сумісний з mysql:latest)
# lftp - для SFTP передачі
# msmtp - для надсилання пошти
# ca-certificates - критично для TLS/SSL (Gmail)
# cron - для автоматизації щохвилини
# openssh-client - для SSH-ключів
RUN apt-get update && apt-get install -y \
mysql-client \
lftp \
msmtp \
msmtp-mta \
ca-certificates \
cron \
openssh-client \
&& rm -rf /var/lib/apt/lists/*
# 2. Налаштовуємо SSH для роботи з ключами
RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh
# 3. Копіюємо конфігураційні файли
# Файл налаштування пошти
COPY msmtprc /etc/msmtprc
RUN chmod 600 /etc/msmtprc
# Скрипт бекапу
COPY backup.sh /usr/local/bin/backup.sh
RUN chmod +x /usr/local/bin/backup.sh
# 4. Створюємо файли логів з правильними правами доступу
RUN touch /var/log/msmtp.log && chmod 666 /var/log/msmtp.log
RUN touch /var/log/backup.log && chmod 666 /var/log/backup.log
# 5. Налаштовуємо Cron (запуск щохвилини)
# ВАЖЛИВО: додаємо ". /etc/environment;", щоб Cron бачив паролі з docker-compose
RUN echo "* * * * * . /etc/environment; /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1" | crontab -
# 6. Команда запуску контейнера:
# - зберігаємо поточні змінні оточення в /etc/environment (щоб їх бачив Cron)
# - запускаємо демон cron у фоновому режимі (флаг -f)
CMD ["sh", "-c", "printenv > /etc/environment && cron -f"]
```
## 3. backup/backup.sh
Скрипт, який виконує створення дампу, завантаження на диск та надсилання пошти.
```bash
#!/bin/bash
# --- НАЛАШТУВАННЯ ---
REMOTE_DIR="/Volumes/Just/sql advanced/lab2-1/backups"
# Новий формат: рік-місяць-день_години-хвилини-секунди
DATE=$(date +%Y-%m-%d_%H-%M-%S)
FILENAME="OrdersDB_${DATE}.sql"
BACKUP_PATH="/tmp/$FILENAME"
echo "Starting dump of OrdersDB ($DATE)..."
# 1. Створення дампу бази даних
# Додано --set-gtid-purged=OFF для сумісності з mysql:latest
# Додано --single-transaction для уникнення помилок консистентності
mysqldump -h db -u root -p$MYSQL_ROOT_PASSWORD \
--set-gtid-purged=OFF \
--single-transaction \
OrdersDB > $BACKUP_PATH
if [ $? -eq 0 ]; then
echo "Dump created: $FILENAME. Uploading to Mac..."
# 2. Завантаження через SFTP
lftp -u $SFTP_USER, sftp://$SFTP_HOST <<EOF
set sftp:connect-program "ssh -a -x -i /root/.ssh/id_rsa -o StrictHostKeyChecking=no"
cd "$REMOTE_DIR"
put "$BACKUP_PATH"
quit
EOF
if [ $? -eq 0 ]; then
echo "Upload successful. Sending email..."
# 3. Надсилання сповіщення
# Ми додаємо вивід помилок msmtp у змінну, щоб побачити їх, якщо лист не піде
EMAIL_LOG=$(echo -e "Subject: Backup Success: OrdersDB ($DATE)\n\nВітаю! Резервна копія $FILENAME успішно збережена на зовнішній диск." | msmtp $EMAIL_TO 2>&1)
if [ $? -eq 0 ]; then
echo "Email sent!"
else
echo "Email error: $EMAIL_LOG"
fi
else
echo "SFTP Error!"
echo -e "Subject: Backup FAILED: SFTP Error ($DATE)\n\nПомилка передачі файлу $FILENAME на диск." | msmtp $EMAIL_TO
fi
# Видаляємо тимчасовий файл
rm "$BACKUP_PATH"
else
echo "MySQL Dump Error!"
echo -e "Subject: Backup FAILED: SQL Error ($DATE)\n\nНе вдалося створити дамп бази OrdersDB. Перевірте логі контейнера." | msmtp $EMAIL_TO
fi
```
## 4. backup/msmtprc
Налаштування SMTP сервера для надсилання пошти.
```text
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log
account oa_mail
host smtp.gmail.com
port 587
from vitalii.litvinchuk@oa.edu.ua
user vitalii.litvinchuk@oa.edu.ua
password krkrvyobreydoenh
account default : oa_mail
```
+687
View File
@@ -0,0 +1,687 @@
USE PortDB;
INSERT INTO
Purposes (Name, Description)
VALUES (
'Перевезення сировини',
'Перевезення різноманітних сировинних матеріалів на виробництво.'
),
(
'Експорт товарів',
'Вивезення готової продукції за кордон для продажу.'
),
(
'Імпорт сировини',
'Закупівля різноманітних сировинних матеріалів з-за кордону.'
),
(
'Транспортування контейнерів',
'Перевезення контейнерів із товаром між портами.'
),
(
'Доставка харчових продуктів',
'Перевезення продуктів харчування великими суднами.'
),
(
'Енергетичні цілі',
'Транспортування палива та енергетичних ресурсів морем.'
),
(
'Будівельні матеріали',
'Перевезення будівельних матеріалів для проектів на узбережжі.'
),
(
'Масова перевезення',
'Транспортування великих обсягів товарів для оптових партнерів.'
),
(
'Транзитне сполучення',
'Проходження через території кількох країн у маршруті доставки.'
);
INSERT INTO
CargoTypes (Name)
VALUES ('Контейнери'),
('Рідини'),
('Сипучі матеріали'),
('Сталеві вироби'),
('Деревинні матеріали'),
('Харчові продукти'),
('Технічне обладнання'),
('Автомобілі'),
('Товари загального вжитку'),
('Спеціальні вантажі');
INSERT INTO
ShipTypes (Name)
VALUES ('Балкер'),
('Контейнеровоз'),
('Танкер'),
('Ро-Ро (Roll-on/Roll-off)'),
('Бункеровоз'),
('Круїзний лайнер'),
('Багатоцільовий корабель'),
('Трал'),
('Лінійний корабель'),
(
'Вантажівка-перевізник (Ferry)'
),
('Пасажирський корабель');
INSERT INTO
Country (Name)
VALUES ('Австралія'),
('Австрія'),
('Азербайджан'),
('Албанія'),
('Алжир'),
('Ангола'),
('Андорра'),
('Аргентина'),
('Арменія'),
('Афганістан'),
('Багамські Острови'),
('Бангладеш'),
('Барбадос'),
('Бахрейн'),
('Беліз'),
('Бельгія'),
('Бенін'),
('Білорусь'),
('Болгарія'),
('Болівія'),
('Боснія і Герцеговина'),
('Ботсвана'),
('Бразилія'),
('Бруней'),
('Буркіна-Фасо'),
('Бурунді'),
('Бутан'),
('В\'єтнам'),
('Габон'),
('Гаїті'),
('Гайана'),
('Гамбія'),
('Гана'),
('Гваделупа'),
('Гватемала'),
('Гвінея'),
('Гвінея - Бісау'),
('Гондурас'),
('Гренада'),
('Греція'),
('Грузія'),
('Гренландія'),
('Данія'),
(
'Демократична Республіка Конго'
),
('Джибуті'),
('Домініка'),
('Домініканська Республіка'),
('Еквадор'),
('Екваторіальна Гвінея'),
('Еритрея'),
('Есватіні'),
('Естонія'),
('Ефіопія'),
('Єгипет'),
('Ємен'),
('Замбія'),
('Західна Сахара'),
('Зімбабве'),
('Ізраїль'),
('Індія'),
('Індонезія'),
('Ірак'),
('Іран'),
('Ірландія'),
('Ісландія'),
('Іспанія'),
('Італія'),
('Йорданія'),
('Казахстан'),
('Кайманові Острови'),
('Камбоджа'),
('Камерун'),
('Канада'),
('Катар'),
('Кенія'),
('Киргизстан'),
('Кіпр'),
('Кірібаті'),
('Китай'),
('Колумбія'),
('Коморські Острови'),
('Конго'),
('Північна Корея'),
('Південна Корея'),
('Косово'),
('Коста - Рика'),
('Куба'),
('Кувейт'),
('Лаос'),
('Латвія'),
('Лесото'),
('Литва'),
('Ліберія'),
('Ліван'),
('Лівія'),
('Ліхтенштейн'),
('Люксембург'),
('Маврикій'),
('Мавританія'),
('Мадагаскар'),
('Македонія'),
('Малаві'),
('Малайзія'),
('Малі'),
('Мальдіви'),
('Мальта'),
('Марокко'),
('Мартиніка'),
('Маршаллові Острови'),
('Мексика'),
('Мозамбік'),
('Молдова'),
('Монако'),
('Монголія'),
('М\'янма (Бірма)'),
('Намібія'),
('Науру'),
('Непал'),
('Нігер'),
('Нігерія'),
('Нідерланди'),
('Нікарагуа'),
('Німеччина'),
('Нова Зеландія'),
('Норвегія'),
('ОАЕ'),
('Оман'),
('Пакистан'),
('Палау'),
('Палестина'),
('Панама');
INSERT INTO
Positions (Name)
VALUES ('Директор'),
('Менеджер з логістики'),
('Капітан корабля'),
('Інженер-механік'),
('Оператор порту'),
('Фінансовий аналітик'),
('Керівник вантажоперевезень'),
(
'Технік з обслуговування суден'
),
('Митний брокер'),
('Логістичний асистент');
INSERT INTO
ContactTypes (Name)
VALUES ('Телефон'),
('Електронна пошта'),
('Факс'),
('Поштова адреса'),
('Skype'),
('WhatsApp'),
('Веб-сайт'),
('Телеграм');
INSERT INTO
ServiceTypes (Name, Description)
VALUES (
'Технічний огляд',
'Комплексне технічне обстеження та оцінка стану судна.'
),
(
'Ремонт двигуна',
'Виконання ремонтних робіт та технічного обслуговування суднового двигуна.'
),
(
'Мальовничі роботи',
'Фарбування та зовнішній оздоблювальний ремонт корпусу судна.'
),
(
'Технічне обслуговування електроніки',
'Проведення робіт з налаштування та ремонту електронних систем на судні.'
),
(
'Заміна обладнання',
'Встановлення нового суднового обладнання та видалення застарілого.'
),
(
'Очищення та змазування',
'Профілактичне очищення та змащення механізмів та обладнання судна.'
);
INSERT INTO
Voyages (CountryFromId, CountryToId)
SELECT (
SELECT Id
FROM Country
ORDER BY RAND()
LIMIT 1
) as CountryFromId, (
SELECT Id
FROM Country
ORDER BY RAND()
LIMIT 1
) as CountryToId
FROM (
SELECT 1
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
) as Numbers;
INSERT INTO
Persons (
Passport,
FirstName,
LastName,
PositionId
)
VALUES (
'AA123456',
'Іван',
'Петров',
1
),
(
'BB789012',
'Марія',
'Іванова',
2
),
(
'CC345678',
'Олег',
'Сидоров',
3
),
(
'DD901234',
'Наталія',
'Коваленко',
4
),
(
'EE567890',
'Андрій',
'Смирнов',
5
),
(
'FF123890',
'Тетяна',
'Біліченко',
6
),
(
'GG456789',
'Дмитро',
'Мельник',
7
),
(
'HH678901',
'Катерина',
'Соколова',
8
),
(
'II234567',
'Валентин',
'Жуков',
9
),
(
'JJ890123',
'Ольга',
'Морозова',
10
),
(
'KK345678',
'Анна',
'Кравченко',
5
),
(
'LL901234',
'Олександр',
'Лисенко',
8
),
(
'MM567890',
'Євгенія',
'Денисенко',
2
);
INSERT INTO
ContactInfo (
Content,
PersonId,
ContactTypeId
)
VALUES ('+123456789', 1, 1),
('email@example.com', 2, 2),
('123 Main Street', 3, 3),
('SkypeID123', 4, 4),
('WhatsAppNumber', 5, 5),
(
'http://www.example.com',
6,
6
),
('TelegramUsername', 7, 7),
('FaxNumber', 8, 8),
('info@example.com', 9, 1),
('555-1234', 10, 2),
('456 Secondary Street', 11, 3),
('SkypeID456', 12, 4),
('TelegramUser567', 13, 7),
('ViberNumber', 1, 5),
(
'http://www.example2.com',
2,
6
),
('FaxNumber2', 3, 8);
INSERT INTO
Users (Password, PersonId)
VALUES ('strongpassword1', 1),
('securepass123', 2),
('myp@ssw0rd', 3),
('pass4you', 4),
('secret123', 5);
INSERT INTO
Docks (Name, MaxLength, MaxWidth)
VALUES ('Причал 1', 100, 20),
('Причал 2', 120, 25),
('Причал 3', 150, 30),
('Причал 4', 90, 15),
('Причал 5', 110, 18),
('Причал 6', 130, 22),
('Причал 7', 140, 28),
('Причал 8', 160, 35),
('Причал 9', 105, 17),
('Причал 10', 125, 23),
('Причал 11', 115, 19),
('Причал 12', 95, 14),
('Причал 13', 145, 27),
('Причал 14', 155, 33),
('Причал 15', 165, 38);
INSERT INTO
Ships (
Name,
Length,
Width,
Capacity,
ShipTypeId,
VoyageId,
DockId
)
VALUES (
'Корабель 1',
50.5,
10.5,
500,
1,
1,
1
),
(
'Корабель 2',
60.2,
12.8,
700,
2,
2,
2
),
(
'Корабель 3',
55.0,
11.0,
600,
3,
3,
3
),
(
'Корабель 4',
45.8,
9.5,
450,
4,
4,
4
),
(
'Корабель 10',
59.9,
12.0,
690,
10,
10,
10
),
(
'Корабель 11',
57.2,
11.2,
590,
11,
11,
11
),
(
'Корабель 12',
63.8,
13.8,
770,
5,
12,
12
),
(
'Корабель 13',
52.4,
10.8,
540,
3,
9,
13
),
(
'Корабель 14',
49.0,
9.8,
480,
6,
8,
14
),
(
'Корабель 15',
66.5,
14.0,
820,
8,
5,
15
);
INSERT INTO
Employees (PersonId)
SELECT id
FROM Persons
ORDER BY RAND()
LIMIT 5;
INSERT INTO
Services (
Date,
Done,
ShipId,
ServiceTypeId
)
SELECT
NOW() - INTERVAL FLOOR(RAND() * 365) DAY AS Date,
ROUND(RAND()) AS Done,
(
SELECT id
FROM Ships
ORDER BY RAND()
LIMIT 1
) AS ShipId,
ROUND(RAND() * 6) + 1 AS ServiceTypeId
FROM (
SELECT id
FROM `ShipTypes`
LIMIT 5
) AS t;
INSERT INTO
ServiceEmployee (EmployeeId, ServiceId)
SELECT ROUND(RAND() * 5) + 1 AS EmployeeId, ROUND(RAND() * 5) + 1 AS ServiceId
FROM (
SELECT id
FROM Services
LIMIT 5
) AS t;
INSERT INTO
DockEmplyee (DockId, EmployeeId)
VALUES (1, 1),
(2, 2),
(3, 3),
(4, 1),
(5, 5);
INSERT INTO
CrewPersons (PersonId, ShipId)
SELECT ROUND(RAND() * (13 - 6) + 6) AS PersonId, (
SELECT id
FROM Ships
ORDER BY RAND()
LIMIT 1
) AS ShipId
FROM (
SELECT id
FROM `Ships`
LIMIT 10
) AS t;
INSERT INTO
Cargoes (
Quantity,
CargoTypeId,
ShipId,
PurposeId
)
SELECT
ROUND(RAND() * 100) + 1 AS Quantity,
(
SELECT id
FROM CargoTypes
ORDER BY RAND()
LIMIT 1
) AS CargoTypeId,
(
SELECT id
FROM Ships
ORDER BY RAND()
LIMIT 1
) AS ShipId,
(
SELECT id
FROM Purposes
ORDER BY RAND()
LIMIT 1
) AS PurposeId
FROM (
SELECT id
FROM Ships
LIMIT 10
) AS t;
SELECT Ships.Name, Voyages.CountryFromId
FROM Ships
JOIN Voyages ON Ships.VoyageId = Voyages.Id
WHERE
Voyages.CountryFromId = (
SELECT id
FROM `Country`
ORDER BY RAND()
LIMIT 1
);
-- Вибірка кількості кораблів, що перебувають в кожному причалі:
SELECT Docks.Name AS DockName, COUNT(Ships.Id) AS ShipCount
FROM Docks
LEFT JOIN Ships ON Docks.Id = Ships.DockId
GROUP BY
Docks.Id;
-- Знаходження найбільшого та найменшого корабля за місткістю
SELECT MAX(Ships.Capacity) AS MaxCapacity, MIN(Ships.Capacity) AS MinCapacity
FROM Ships;
-- Вибірка інформації про всі обслуговування, які ще не виконані
SELECT
Services.Id,
Services.Date,
Ships.Name AS ShipName,
ServiceTypes.Name AS ServiceTypeName
FROM
Services
JOIN Ships ON Services.ShipId = Ships.Id
JOIN ServiceTypes ON Services.ServiceTypeId = ServiceTypes.Id
WHERE
Services.Done = 0;
-- Список працівників та кількість обслуговувань, які вони виконали
SELECT Employees.Id, Persons.FirstName, Persons.LastName, COUNT(ServiceEmployee.ServiceId) AS ServicesCount
FROM
Employees
JOIN Persons ON Employees.PersonId = Persons.Id
LEFT JOIN ServiceEmployee ON Employees.Id = ServiceEmployee.EmployeeId
GROUP BY
Employees.Id;
-- Список вантажів разом із цілями та назвою корабля:
SELECT Cargoes.Id, Purposes.Name AS PurposeName, Ships.Name AS ShipName, Cargoes.Quantity
FROM Cargoes
JOIN Purposes ON Cargoes.PurposeId = Purposes.Id
JOIN Ships ON Cargoes.ShipId = Ships.Id;
-- Загальний кількість вантажів, що відправляється з кожної країни:
SELECT Country.Name AS CountryName, SUM(Cargoes.Quantity) AS TotalCount
FROM
Voyages
JOIN Country ON Voyages.CountryFromId = Country.Id
JOIN Ships ON Voyages.Id = Ships.VoyageId
JOIN Cargoes ON Ships.Id = Cargoes.ShipId
GROUP BY
Country.Id;
Executable
+185
View File
@@ -0,0 +1,185 @@
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`);
+27
View File
@@ -0,0 +1,27 @@
services:
db:
image: mysql:latest
container_name: mysql-container-2
restart: always
environment:
MYSQL_ROOT_PASSWORD: qwerty-1
MYSQL_DATABASE: OrdersDB
ports:
- "3306:3306"
volumes:
- sqladvanced_mysql_data:/var/lib/mysql
backup-service:
build: ./backup
container_name: mysql-backup-runner
environment:
MYSQL_ROOT_PASSWORD: qwerty-1
SFTP_HOST: "192.168.3.142"
SFTP_USER: "vitaliilitvinchuk"
EMAIL_TO: "vitalii.litvinchuk@oa.edu.ua"
volumes:
- ~/.ssh/id_rsa_docker:/root/.ssh/id_rsa:ro
volumes:
sqladvanced_mysql_data:
external: true
Executable
+568
View File
@@ -0,0 +1,568 @@
-- MySQL dump 10.13 Distrib 9.6.0, for Linux (x86_64)
--
-- Host: localhost Database: PortDB
-- ------------------------------------------------------
-- Server version 9.6.0
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;
--
-- GTID state at the beginning of the backup
--
--
-- Table structure for table `CargoTypes`
--
DROP TABLE IF EXISTS `CargoTypes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `CargoTypes` (
`Id` int NOT NULL AUTO_INCREMENT,
`Name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Назва типу',
PRIMARY KEY (`Id`),
UNIQUE KEY `Name` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `CargoTypes`
--
LOCK TABLES `CargoTypes` WRITE;
/*!40000 ALTER TABLE `CargoTypes` DISABLE KEYS */;
INSERT INTO `CargoTypes` VALUES (8,'Автомобілі'),(5,'Деревинні матеріали'),(1,'Контейнери'),(2,'Рідини'),(3,'Сипучі матеріали'),(10,'Спеціальні вантажі'),(4,'Сталеві вироби'),(7,'Технічне обладнання'),(9,'Товари загального вжитку'),(6,'Харчові продукти');
/*!40000 ALTER TABLE `CargoTypes` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Cargoes`
--
DROP TABLE IF EXISTS `Cargoes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Cargoes` (
`Id` int NOT NULL AUTO_INCREMENT,
`Quantity` int NOT NULL COMMENT 'Кількість',
`CargoTypeId` int DEFAULT NULL COMMENT 'Тип вантажу',
`ShipId` int DEFAULT NULL COMMENT 'Корабель',
`PurposeId` int DEFAULT NULL COMMENT 'Ціль',
PRIMARY KEY (`Id`),
KEY `CargoTypeId` (`CargoTypeId`),
KEY `ShipId` (`ShipId`),
KEY `PurposeId` (`PurposeId`),
CONSTRAINT `Cargoes_ibfk_1` FOREIGN KEY (`CargoTypeId`) REFERENCES `CargoTypes` (`Id`),
CONSTRAINT `Cargoes_ibfk_2` FOREIGN KEY (`ShipId`) REFERENCES `Ships` (`Id`),
CONSTRAINT `Cargoes_ibfk_3` FOREIGN KEY (`PurposeId`) REFERENCES `Purposes` (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Cargoes`
--
LOCK TABLES `Cargoes` WRITE;
/*!40000 ALTER TABLE `Cargoes` DISABLE KEYS */;
/*!40000 ALTER TABLE `Cargoes` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `ContactInfo`
--
DROP TABLE IF EXISTS `ContactInfo`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `ContactInfo` (
`Id` int NOT NULL AUTO_INCREMENT,
`Content` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Дані про контакт',
`PersonId` int DEFAULT NULL COMMENT 'Людина',
`ContactTypeId` int DEFAULT NULL COMMENT 'Тип контакту',
PRIMARY KEY (`Id`),
KEY `PersonId` (`PersonId`),
KEY `ContactTypeId` (`ContactTypeId`),
CONSTRAINT `ContactInfo_ibfk_1` FOREIGN KEY (`PersonId`) REFERENCES `Persons` (`Id`),
CONSTRAINT `ContactInfo_ibfk_2` FOREIGN KEY (`ContactTypeId`) REFERENCES `ContactTypes` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `ContactInfo`
--
LOCK TABLES `ContactInfo` WRITE;
/*!40000 ALTER TABLE `ContactInfo` DISABLE KEYS */;
INSERT INTO `ContactInfo` VALUES (1,'+123456789',1,1),(2,'email@example.com',2,2),(3,'123 Main Street',3,3),(4,'SkypeID123',4,4),(5,'WhatsAppNumber',5,5),(6,'http://www.example.com',6,6),(7,'TelegramUsername',7,7),(8,'FaxNumber',8,8),(9,'info@example.com',9,1),(10,'555-1234',10,2),(11,'456 Secondary Street',11,3),(12,'SkypeID456',12,4),(13,'TelegramUser567',13,7),(14,'ViberNumber',1,5),(15,'http://www.example2.com',2,6),(16,'FaxNumber2',3,8),(17,'+123456789',1,1),(18,'email@example.com',2,2),(19,'123 Main Street',3,3),(20,'SkypeID123',4,4),(21,'WhatsAppNumber',5,5),(22,'http://www.example.com',6,6),(23,'TelegramUsername',7,7),(24,'FaxNumber',8,8),(25,'info@example.com',9,1),(26,'555-1234',10,2),(27,'456 Secondary Street',11,3),(28,'SkypeID456',12,4),(29,'TelegramUser567',13,7),(30,'ViberNumber',1,5),(31,'http://www.example2.com',2,6),(32,'FaxNumber2',3,8),(33,'+123456789',1,1),(34,'email@example.com',2,2),(35,'123 Main Street',3,3),(36,'SkypeID123',4,4),(37,'WhatsAppNumber',5,5),(38,'http://www.example.com',6,6),(39,'TelegramUsername',7,7),(40,'FaxNumber',8,8),(41,'info@example.com',9,1),(42,'555-1234',10,2),(43,'456 Secondary Street',11,3),(44,'SkypeID456',12,4),(45,'TelegramUser567',13,7),(46,'ViberNumber',1,5),(47,'http://www.example2.com',2,6),(48,'FaxNumber2',3,8);
/*!40000 ALTER TABLE `ContactInfo` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `ContactTypes`
--
DROP TABLE IF EXISTS `ContactTypes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `ContactTypes` (
`Id` int NOT NULL AUTO_INCREMENT,
`Name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Назва типи контакту',
PRIMARY KEY (`Id`),
UNIQUE KEY `Name` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `ContactTypes`
--
LOCK TABLES `ContactTypes` WRITE;
/*!40000 ALTER TABLE `ContactTypes` DISABLE KEYS */;
INSERT INTO `ContactTypes` VALUES (5,'Skype'),(6,'WhatsApp'),(7,'Веб-сайт'),(2,'Електронна пошта'),(4,'Поштова адреса'),(8,'Телеграм'),(1,'Телефон'),(3,'Факс');
/*!40000 ALTER TABLE `ContactTypes` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Country`
--
DROP TABLE IF EXISTS `Country`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Country` (
`Id` int NOT NULL AUTO_INCREMENT,
`Name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Назва країни',
PRIMARY KEY (`Id`),
UNIQUE KEY `Name` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=263 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Country`
--
LOCK TABLES `Country` WRITE;
/*!40000 ALTER TABLE `Country` DISABLE KEYS */;
INSERT INTO `Country` VALUES (54,'Єгипет'),(55,'Ємен'),(59,'Ізраїль'),(60,'Індія'),(61,'Індонезія'),(62,'Ірак'),(63,'Іран'),(64,'Ірландія'),(65,'Ісландія'),(66,'Іспанія'),(67,'Італія'),(2,'Австрія'),(1,'Австралія'),(3,'Азербайджан'),(4,'Албанія'),(5,'Алжир'),(6,'Ангола'),(7,'Андорра'),(8,'Аргентина'),(9,'Арменія'),(10,'Афганістан'),(18,'Білорусь'),(11,'Багамські Острови'),(12,'Бангладеш'),(13,'Барбадос'),(14,'Бахрейн'),(15,'Беліз'),(16,'Бельгія'),(17,'Бенін'),(20,'Болівія'),(19,'Болгарія'),(21,'Боснія і Герцеговина'),(22,'Ботсвана'),(23,'Бразилія'),(24,'Бруней'),(25,'Буркіна-Фасо'),(26,'Бурунді'),(27,'Бутан'),(28,'В\'єтнам'),(30,'Гаїті'),(29,'Габон'),(31,'Гайана'),(32,'Гамбія'),(33,'Гана'),(36,'Гвінея'),(37,'Гвінея - Бісау'),(34,'Гваделупа'),(35,'Гватемала'),(38,'Гондурас'),(39,'Гренада'),(42,'Гренландія'),(40,'Греція'),(41,'Грузія'),(43,'Данія'),(44,'Демократична Республіка Конго'),(45,'Джибуті'),(46,'Домініка'),(47,'Домініканська Республіка'),(48,'Еквадор'),(49,'Екваторіальна Гвінея'),(50,'Еритрея'),(51,'Есватіні'),(52,'Естонія'),(53,'Ефіопія'),(58,'Зімбабве'),(56,'Замбія'),(57,'Західна Сахара'),(68,'Йорданія'),(77,'Кіпр'),(78,'Кірібаті'),(69,'Казахстан'),(70,'Кайманові Острови'),(71,'Камбоджа'),(72,'Камерун'),(73,'Канада'),(74,'Катар'),(75,'Кенія'),(76,'Киргизстан'),(79,'Китай'),(80,'Колумбія'),(81,'Коморські Острови'),(82,'Конго'),(85,'Косово'),(86,'Коста - Рика'),(87,'Куба'),(88,'Кувейт'),(93,'Ліберія'),(95,'Лівія'),(94,'Ліван'),(96,'Ліхтенштейн'),(89,'Лаос'),(90,'Латвія'),(91,'Лесото'),(92,'Литва'),(97,'Люксембург'),(115,'М\'янма (Бірма)'),(98,'Маврикій'),(99,'Мавританія'),(100,'Мадагаскар'),(101,'Македонія'),(104,'Малі'),(102,'Малаві'),(103,'Малайзія'),(105,'Мальдіви'),(106,'Мальта'),(107,'Марокко'),(108,'Мартиніка'),(109,'Маршаллові Острови'),(110,'Мексика'),(111,'Мозамбік'),(112,'Молдова'),(113,'Монако'),(114,'Монголія'),(119,'Нігер'),(120,'Нігерія'),(121,'Нідерланди'),(122,'Нікарагуа'),(123,'Німеччина'),(116,'Намібія'),(117,'Науру'),(118,'Непал'),(124,'Нова Зеландія'),(125,'Норвегія'),(126,'ОАЕ'),(127,'Оман'),(84,'Південна Корея'),(83,'Північна Корея'),(128,'Пакистан'),(129,'Палау'),(130,'Палестина'),(131,'Панама');
/*!40000 ALTER TABLE `Country` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `CrewPersons`
--
DROP TABLE IF EXISTS `CrewPersons`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `CrewPersons` (
`Id` int NOT NULL AUTO_INCREMENT,
`PersonId` int DEFAULT NULL COMMENT 'Дані людини',
`ShipId` int DEFAULT NULL COMMENT 'Корабель',
PRIMARY KEY (`Id`),
KEY `PersonId` (`PersonId`),
KEY `ShipId` (`ShipId`),
CONSTRAINT `CrewPersons_ibfk_1` FOREIGN KEY (`PersonId`) REFERENCES `Persons` (`Id`),
CONSTRAINT `CrewPersons_ibfk_2` FOREIGN KEY (`ShipId`) REFERENCES `Ships` (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `CrewPersons`
--
LOCK TABLES `CrewPersons` WRITE;
/*!40000 ALTER TABLE `CrewPersons` DISABLE KEYS */;
/*!40000 ALTER TABLE `CrewPersons` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `DockEmplyee`
--
DROP TABLE IF EXISTS `DockEmplyee`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `DockEmplyee` (
`DockId` int DEFAULT NULL COMMENT 'Причал',
`EmployeeId` int DEFAULT NULL COMMENT 'Працівник',
KEY `DockId` (`DockId`),
KEY `EmployeeId` (`EmployeeId`),
CONSTRAINT `DockEmplyee_ibfk_1` FOREIGN KEY (`DockId`) REFERENCES `Docks` (`Id`),
CONSTRAINT `DockEmplyee_ibfk_2` FOREIGN KEY (`EmployeeId`) REFERENCES `Employees` (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `DockEmplyee`
--
LOCK TABLES `DockEmplyee` WRITE;
/*!40000 ALTER TABLE `DockEmplyee` DISABLE KEYS */;
INSERT INTO `DockEmplyee` VALUES (1,1),(2,2),(3,3),(4,1),(5,5),(1,1),(2,2),(3,3),(4,1),(5,5);
/*!40000 ALTER TABLE `DockEmplyee` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Docks`
--
DROP TABLE IF EXISTS `Docks`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Docks` (
`Id` int NOT NULL AUTO_INCREMENT,
`Name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Назва причалу',
`MaxLength` int NOT NULL COMMENT 'Максимальна довжина причалу',
`MaxWidth` int NOT NULL COMMENT 'Максимальна ширина причалу',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Docks`
--
LOCK TABLES `Docks` WRITE;
/*!40000 ALTER TABLE `Docks` DISABLE KEYS */;
INSERT INTO `Docks` VALUES (1,'Причал 1',100,20),(2,'Причал 2',120,25),(3,'Причал 3',150,30),(4,'Причал 4',90,15),(5,'Причал 5',110,18),(6,'Причал 6',130,22),(7,'Причал 7',140,28),(8,'Причал 8',160,35),(9,'Причал 9',105,17),(10,'Причал 10',125,23),(11,'Причал 11',115,19),(12,'Причал 12',95,14),(13,'Причал 13',145,27),(14,'Причал 14',155,33),(15,'Причал 15',165,38),(16,'Причал 1',100,20),(17,'Причал 2',120,25),(18,'Причал 3',150,30),(19,'Причал 4',90,15),(20,'Причал 5',110,18),(21,'Причал 6',130,22),(22,'Причал 7',140,28),(23,'Причал 8',160,35),(24,'Причал 9',105,17),(25,'Причал 10',125,23),(26,'Причал 11',115,19),(27,'Причал 12',95,14),(28,'Причал 13',145,27),(29,'Причал 14',155,33),(30,'Причал 15',165,38),(31,'Причал 1',100,20),(32,'Причал 2',120,25),(33,'Причал 3',150,30),(34,'Причал 4',90,15),(35,'Причал 5',110,18),(36,'Причал 6',130,22),(37,'Причал 7',140,28),(38,'Причал 8',160,35),(39,'Причал 9',105,17),(40,'Причал 10',125,23),(41,'Причал 11',115,19),(42,'Причал 12',95,14),(43,'Причал 13',145,27),(44,'Причал 14',155,33),(45,'Причал 15',165,38);
/*!40000 ALTER TABLE `Docks` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Employees`
--
DROP TABLE IF EXISTS `Employees`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Employees` (
`Id` int NOT NULL AUTO_INCREMENT,
`PersonId` int DEFAULT NULL COMMENT 'Дані людини',
PRIMARY KEY (`Id`),
KEY `PersonId` (`PersonId`),
CONSTRAINT `Employees_ibfk_1` FOREIGN KEY (`PersonId`) REFERENCES `Persons` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Employees`
--
LOCK TABLES `Employees` WRITE;
/*!40000 ALTER TABLE `Employees` DISABLE KEYS */;
INSERT INTO `Employees` VALUES (1,1),(3,3),(2,8),(5,10),(4,13);
/*!40000 ALTER TABLE `Employees` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Persons`
--
DROP TABLE IF EXISTS `Persons`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Persons` (
`Id` int NOT NULL AUTO_INCREMENT,
`Passport` varchar(1000) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Паспортні дані',
`FirstName` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Ім''я',
`LastName` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Прізвище',
`PositionId` int DEFAULT NULL COMMENT 'Посада',
PRIMARY KEY (`Id`),
UNIQUE KEY `Passport` (`Passport`),
KEY `PositionId` (`PositionId`),
CONSTRAINT `Persons_ibfk_1` FOREIGN KEY (`PositionId`) REFERENCES `Positions` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Persons`
--
LOCK TABLES `Persons` WRITE;
/*!40000 ALTER TABLE `Persons` DISABLE KEYS */;
INSERT INTO `Persons` VALUES (1,'AA123456','Іван','Петров',1),(2,'BB789012','Марія','Іванова',2),(3,'CC345678','Олег','Сидоров',3),(4,'DD901234','Наталія','Коваленко',4),(5,'EE567890','Андрій','Смирнов',5),(6,'FF123890','Тетяна','Біліченко',6),(7,'GG456789','Дмитро','Мельник',7),(8,'HH678901','Катерина','Соколова',8),(9,'II234567','Валентин','Жуков',9),(10,'JJ890123','Ольга','Морозова',10),(11,'KK345678','Анна','Кравченко',5),(12,'LL901234','Олександр','Лисенко',8),(13,'MM567890','Євгенія','Денисенко',2);
/*!40000 ALTER TABLE `Persons` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Positions`
--
DROP TABLE IF EXISTS `Positions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Positions` (
`Id` int NOT NULL AUTO_INCREMENT,
`Name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Назва позиції',
PRIMARY KEY (`Id`),
UNIQUE KEY `Name` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Positions`
--
LOCK TABLES `Positions` WRITE;
/*!40000 ALTER TABLE `Positions` DISABLE KEYS */;
INSERT INTO `Positions` VALUES (4,'Інженер-механік'),(1,'Директор'),(3,'Капітан корабля'),(7,'Керівник вантажоперевезень'),(10,'Логістичний асистент'),(2,'Менеджер з логістики'),(9,'Митний брокер'),(5,'Оператор порту'),(8,'Технік з обслуговування суден'),(6,'Фінансовий аналітик');
/*!40000 ALTER TABLE `Positions` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Purposes`
--
DROP TABLE IF EXISTS `Purposes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Purposes` (
`Id` int NOT NULL AUTO_INCREMENT,
`Name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Назва цілі',
`Description` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Опис цілі',
PRIMARY KEY (`Id`),
UNIQUE KEY `Name` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Purposes`
--
LOCK TABLES `Purposes` WRITE;
/*!40000 ALTER TABLE `Purposes` DISABLE KEYS */;
INSERT INTO `Purposes` VALUES (1,'Перевезення сировини','Перевезення різноманітних сировинних матеріалів на виробництво.'),(2,'Експорт товарів','Вивезення готової продукції за кордон для продажу.'),(3,'Імпорт сировини','Закупівля різноманітних сировинних матеріалів з-за кордону.'),(4,'Транспортування контейнерів','Перевезення контейнерів із товаром між портами.'),(5,'Доставка харчових продуктів','Перевезення продуктів харчування великими суднами.'),(6,'Енергетичні цілі','Транспортування палива та енергетичних ресурсів морем.'),(7,'Будівельні матеріали','Перевезення будівельних матеріалів для проектів на узбережжі.'),(8,'Масова перевезення','Транспортування великих обсягів товарів для оптових партнерів.'),(9,'Транзитне сполучення','Проходження через території кількох країн у маршруті доставки.');
/*!40000 ALTER TABLE `Purposes` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `ServiceEmployee`
--
DROP TABLE IF EXISTS `ServiceEmployee`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `ServiceEmployee` (
`EmployeeId` int DEFAULT NULL COMMENT 'Працівник',
`ServiceId` int DEFAULT NULL COMMENT 'Обслуговування',
KEY `EmployeeId` (`EmployeeId`),
KEY `ServiceId` (`ServiceId`),
CONSTRAINT `ServiceEmployee_ibfk_1` FOREIGN KEY (`EmployeeId`) REFERENCES `Employees` (`Id`),
CONSTRAINT `ServiceEmployee_ibfk_2` FOREIGN KEY (`ServiceId`) REFERENCES `Services` (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `ServiceEmployee`
--
LOCK TABLES `ServiceEmployee` WRITE;
/*!40000 ALTER TABLE `ServiceEmployee` DISABLE KEYS */;
/*!40000 ALTER TABLE `ServiceEmployee` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `ServiceTypes`
--
DROP TABLE IF EXISTS `ServiceTypes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `ServiceTypes` (
`Id` int NOT NULL AUTO_INCREMENT,
`Name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Назва типу',
`Description` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Опис обслуговування',
PRIMARY KEY (`Id`),
UNIQUE KEY `Name` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `ServiceTypes`
--
LOCK TABLES `ServiceTypes` WRITE;
/*!40000 ALTER TABLE `ServiceTypes` DISABLE KEYS */;
INSERT INTO `ServiceTypes` VALUES (1,'Технічний огляд','Комплексне технічне обстеження та оцінка стану судна.'),(2,'Ремонт двигуна','Виконання ремонтних робіт та технічного обслуговування суднового двигуна.'),(3,'Мальовничі роботи','Фарбування та зовнішній оздоблювальний ремонт корпусу судна.'),(4,'Технічне обслуговування електроніки','Проведення робіт з налаштування та ремонту електронних систем на судні.'),(5,'Заміна обладнання','Встановлення нового суднового обладнання та видалення застарілого.'),(6,'Очищення та змазування','Профілактичне очищення та змащення механізмів та обладнання судна.');
/*!40000 ALTER TABLE `ServiceTypes` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Services`
--
DROP TABLE IF EXISTS `Services`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Services` (
`Id` int NOT NULL AUTO_INCREMENT,
`Date` timestamp NOT NULL COMMENT 'Дата обслуговування',
`Done` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Виконане',
`ShipId` int DEFAULT NULL COMMENT 'Корабель',
`ServiceTypeId` int DEFAULT NULL COMMENT 'Тип обслуговування',
PRIMARY KEY (`Id`),
KEY `ShipId` (`ShipId`),
KEY `ServiceTypeId` (`ServiceTypeId`),
CONSTRAINT `Services_ibfk_1` FOREIGN KEY (`ShipId`) REFERENCES `Ships` (`Id`),
CONSTRAINT `Services_ibfk_2` FOREIGN KEY (`ServiceTypeId`) REFERENCES `ServiceTypes` (`Id`),
CONSTRAINT `Services_ibfk_3` FOREIGN KEY (`ShipId`) REFERENCES `Ships` (`Id`),
CONSTRAINT `Services_ibfk_4` FOREIGN KEY (`ServiceTypeId`) REFERENCES `ServiceTypes` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Services`
--
LOCK TABLES `Services` WRITE;
/*!40000 ALTER TABLE `Services` DISABLE KEYS */;
INSERT INTO `Services` VALUES (4,'2025-05-24 14:10:31',0,NULL,2),(5,'2025-08-18 14:10:31',1,NULL,4),(6,'2025-09-20 14:10:31',0,NULL,6),(7,'2025-08-04 14:10:31',1,NULL,5),(8,'2025-12-07 14:10:31',1,NULL,4),(11,'2025-08-29 14:12:28',0,NULL,5),(12,'2025-07-26 14:12:28',0,NULL,1),(13,'2025-08-06 14:12:28',0,NULL,2),(14,'2025-06-13 14:12:28',0,NULL,5),(15,'2025-10-10 14:12:28',0,NULL,6);
/*!40000 ALTER TABLE `Services` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `ShipTypes`
--
DROP TABLE IF EXISTS `ShipTypes`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `ShipTypes` (
`Id` int NOT NULL AUTO_INCREMENT,
`Name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Назва типу',
PRIMARY KEY (`Id`),
UNIQUE KEY `Name` (`Name`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `ShipTypes`
--
LOCK TABLES `ShipTypes` WRITE;
/*!40000 ALTER TABLE `ShipTypes` DISABLE KEYS */;
INSERT INTO `ShipTypes` VALUES (7,'Багатоцільовий корабель'),(1,'Балкер'),(5,'Бункеровоз'),(10,'Вантажівка-перевізник (Ferry)'),(2,'Контейнеровоз'),(6,'Круїзний лайнер'),(9,'Лінійний корабель'),(11,'Пасажирський корабель'),(4,'Ро-Ро (Roll-on/Roll-off)'),(3,'Танкер'),(8,'Трал');
/*!40000 ALTER TABLE `ShipTypes` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Ships`
--
DROP TABLE IF EXISTS `Ships`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Ships` (
`Id` int NOT NULL AUTO_INCREMENT,
`Name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Назва корабля',
`Length` decimal(10,2) NOT NULL COMMENT 'Довжина корабля',
`Width` decimal(10,2) NOT NULL COMMENT 'Ширина корабля',
`Capacity` int NOT NULL COMMENT 'Місткість корабля (у тоннах)',
`ShipTypeId` int DEFAULT NULL COMMENT 'Тип корабля',
`VoyageId` int DEFAULT NULL COMMENT 'Інформація про рейс',
`DockId` int DEFAULT NULL COMMENT 'Причал',
PRIMARY KEY (`Id`),
KEY `ShipTypeId` (`ShipTypeId`),
KEY `VoyageId` (`VoyageId`),
KEY `DockId` (`DockId`),
CONSTRAINT `Ships_ibfk_1` FOREIGN KEY (`ShipTypeId`) REFERENCES `ShipTypes` (`Id`),
CONSTRAINT `Ships_ibfk_2` FOREIGN KEY (`VoyageId`) REFERENCES `Voyages` (`Id`),
CONSTRAINT `Ships_ibfk_3` FOREIGN KEY (`DockId`) REFERENCES `Docks` (`Id`),
CONSTRAINT `Ships_ibfk_4` FOREIGN KEY (`VoyageId`) REFERENCES `Voyages` (`Id`),
CONSTRAINT `Ships_ibfk_5` FOREIGN KEY (`DockId`) REFERENCES `Docks` (`Id`),
CONSTRAINT `Ships_ibfk_6` FOREIGN KEY (`ShipTypeId`) REFERENCES `ShipTypes` (`Id`),
CONSTRAINT `Ships_ibfk_7` FOREIGN KEY (`ShipTypeId`) REFERENCES `ShipTypes` (`Id`),
CONSTRAINT `Ships_ibfk_8` FOREIGN KEY (`VoyageId`) REFERENCES `Voyages` (`Id`),
CONSTRAINT `Ships_ibfk_9` FOREIGN KEY (`DockId`) REFERENCES `Docks` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Ships`
--
LOCK TABLES `Ships` WRITE;
/*!40000 ALTER TABLE `Ships` DISABLE KEYS */;
INSERT INTO `Ships` VALUES (91,'Корабель 1',50.50,10.50,500,1,1,1),(92,'Корабель 2',60.20,12.80,700,2,2,2),(93,'Корабель 3',55.00,11.00,600,3,3,3),(94,'Корабель 4',45.80,9.50,450,4,4,4),(95,'Корабель 10',59.90,12.00,690,10,10,10),(96,'Корабель 11',57.20,11.20,590,11,11,11),(97,'Корабель 12',63.80,13.80,770,5,12,12),(98,'Корабель 13',52.40,10.80,540,3,9,13),(99,'Корабель 14',49.00,9.80,480,6,8,14),(100,'Корабель 15',66.50,14.00,820,8,5,15);
/*!40000 ALTER TABLE `Ships` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Users`
--
DROP TABLE IF EXISTS `Users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Users` (
`Id` int NOT NULL AUTO_INCREMENT,
`Password` varchar(1000) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT 'Пароль',
`PersonId` int DEFAULT NULL COMMENT 'Дані людини',
PRIMARY KEY (`Id`),
KEY `PersonId` (`PersonId`),
CONSTRAINT `Users_ibfk_1` FOREIGN KEY (`PersonId`) REFERENCES `Persons` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Users`
--
LOCK TABLES `Users` WRITE;
/*!40000 ALTER TABLE `Users` DISABLE KEYS */;
INSERT INTO `Users` VALUES (1,'strongpassword1',1),(2,'securepass123',2),(3,'myp@ssw0rd',3),(4,'pass4you',4),(5,'secret123',5),(6,'strongpassword1',1),(7,'securepass123',2),(8,'myp@ssw0rd',3),(9,'pass4you',4),(10,'secret123',5),(11,'strongpassword1',1),(12,'securepass123',2),(13,'myp@ssw0rd',3),(14,'pass4you',4),(15,'secret123',5);
/*!40000 ALTER TABLE `Users` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Voyages`
--
DROP TABLE IF EXISTS `Voyages`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Voyages` (
`Id` int NOT NULL AUTO_INCREMENT,
`CountryFromId` int DEFAULT NULL COMMENT 'Країна відправки',
`CountryToId` int DEFAULT NULL COMMENT 'Країна доставки',
PRIMARY KEY (`Id`),
KEY `CountryFromId` (`CountryFromId`),
KEY `CountryToId` (`CountryToId`),
CONSTRAINT `Voyages_ibfk_1` FOREIGN KEY (`CountryFromId`) REFERENCES `Country` (`Id`),
CONSTRAINT `Voyages_ibfk_2` FOREIGN KEY (`CountryToId`) REFERENCES `Country` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Voyages`
--
LOCK TABLES `Voyages` WRITE;
/*!40000 ALTER TABLE `Voyages` DISABLE KEYS */;
INSERT INTO `Voyages` VALUES (1,26,66),(2,97,8),(3,117,38),(4,6,61),(5,125,31),(8,1,92),(9,118,66),(10,58,32),(11,104,8),(12,49,42),(15,34,71),(16,122,35),(17,123,76),(18,36,117),(19,64,15);
/*!40000 ALTER TABLE `Voyages` ENABLE KEYS */;
UNLOCK TABLES;
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-03-25 14:33:32