diff --git a/misc/Readme.md b/misc/Readme.md new file mode 100644 index 0000000..c849a31 --- /dev/null +++ b/misc/Readme.md @@ -0,0 +1,50 @@ +# Database Bremen Calling + +## Server + +mariadb v 10 + +## Getting started + +- Execute 'create_schema.sql' and import 'sample_data.sql' + +If the database is updated or changed, please update these files. +To avoid errors, it is best to drop the entire database, edit the create script and re-import the sample data. + +## Creating the dump file + +```bash +mysqldump -u [username] -p --no-create-info --complete-insert bremen_calling > sample_data.sql +``` + +## Removing existing tables + +We want only to remove the tables in order to preserve user privileges + +```sql +SELECT concat('DROP TABLE IF EXISTS `', table_name, '`;') +FROM information_schema.tables +WHERE table_schema = 'bremen_calling'; +``` + +outputs complete drop statements + +```sql +SET FOREIGN_KEY_CHECKS = 0; +-- Your semicolon separated list of DROP statements here +DROP TABLE IF EXISTS `notification`; +DROP TABLE IF EXISTS `role`; +DROP TABLE IF EXISTS `ship`; +DROP TABLE IF EXISTS `participant`; +DROP TABLE IF EXISTS `times`; +DROP TABLE IF EXISTS `role_securable_map`; +DROP TABLE IF EXISTS `user_role_map`; +DROP TABLE IF EXISTS `user`; +DROP TABLE IF EXISTS `securable`; +DROP TABLE IF EXISTS `shipcall_participant_map`; +DROP TABLE IF EXISTS `berth`; +DROP TABLE IF EXISTS `shipcall`; + +SET FOREIGN_KEY_CHECKS = 1; +``` + diff --git a/misc/create_schema.sql b/misc/create_schema.sql index 41b4378..c576605 100644 --- a/misc/create_schema.sql +++ b/misc/create_schema.sql @@ -13,16 +13,48 @@ CREATE TABLE `participant` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='An organization taking part'; +CREATE TABLE `user` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `participant_id` int(11) UNSIGNED DEFAULT NULL, + `first_name` varchar(45) DEFAULT NULL, + `last_name` varchar(45) DEFAULT NULL, + `user_name` varchar(45) DEFAULT NULL, + `password_hash` varchar(128) DEFAULT NULL, + `api_key` varchar(256) DEFAULT NULL, + `created` DATETIME NULL DEFAULT current_timestamp(), + `modified` DATETIME NULL DEFAULT NULL ON UPDATE current_timestamp(), + PRIMARY KEY (`id`), + INDEX `FK_USER_PART` (`participant_id`), + CONSTRAINT `FK_USER_PART` FOREIGN KEY (`participant_id`) REFERENCES `participant` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='member of a participant'; + + +CREATE TABLE `berth` ( + `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `name` VARCHAR(128) NULL DEFAULT NULL COMMENT 'Descriptive name', + `participant_id` INT(10) UNSIGNED NULL DEFAULT NULL COMMENT 'If berth belongs to a participant, reference it here', + `lock` BIT(1) NULL DEFAULT NULL COMMENT 'The lock must be used', + `created` DATETIME NULL DEFAULT current_timestamp(), + `modified` DATETIME NULL DEFAULT NULL ON UPDATE current_timestamp(), + PRIMARY KEY (`id`), + INDEX `FK_BERTH_PART` (`participant_id`), + CONSTRAINT `FK_BERTH_PART` FOREIGN KEY (`participant_id`) REFERENCES `participant` (`id`) +) COMMENT='Berth of ship for a ship call' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + CREATE TABLE `ship` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(45) DEFAULT NULL, `imo` int(11) DEFAULT NULL, `callsign` varchar(8) DEFAULT NULL, + `participant_id` INT(11) UNSIGNED NULL DEFAULT NULL, `length` FLOAT NULL DEFAULT NULL, `width` FLOAT NULL DEFAULT NULL, `created` DATETIME NULL DEFAULT current_timestamp(), `modified` DATETIME NULL DEFAULT NULL ON UPDATE current_timestamp(), - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + INDEX `FK_SHIP_PARTICIPANT` (`participant_id`), + CONSTRAINT `FK_SHIP_PARTICIPANT` FOREIGN KEY (`participant_id`) REFERENCES `participant` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; @@ -43,7 +75,7 @@ CREATE TABLE `shipcall` ( `replenishing` BIT(1) NULL DEFAULT NULL, `draft` FLOAT NULL DEFAULT NULL, `tidal_window_from` DATETIME NULL DEFAULT NULL, - `tidal_window_tp` DATETIME NULL DEFAULT NULL, + `tidal_window_to` DATETIME NULL DEFAULT NULL, `rain_sensitive_cargo` BIT(1) NULL DEFAULT b'0', `recommended_tugs` INT(11) NULL DEFAULT 0, `created` DATETIME NULL DEFAULT current_timestamp(), @@ -55,9 +87,8 @@ CREATE TABLE `shipcall` ( CONSTRAINT `FK_SHIPCALL_BERTH_ARRIVAL` FOREIGN KEY (`arrival_berth_id`) REFERENCES `berth` (`id`), CONSTRAINT `FK_SHIPCALL_BERTH_DEPARTURE` FOREIGN KEY (`departure_berth_id`) REFERENCES `berth` (`id`), CONSTRAINT `FK_SHIPCALL_SHIP` FOREIGN KEY (`ship_id`) REFERENCES `ship` (`id`) -) -COMMENT='Incoming, outgoing or moving to another berth' -ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) COMMENT='Incoming, outgoing or moving to another berth' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + CREATE TABLE `times` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, @@ -79,58 +110,17 @@ CREATE TABLE `times` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='the planned time for the participants work'; -CREATE TABLE `user` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `participant_id` int(11) UNSIGNED DEFAULT NULL, - `first_name` varchar(45) DEFAULT NULL, - `last_name` varchar(45) DEFAULT NULL, - `user_name` varchar(45) DEFAULT NULL, - `password_hash` varchar(128) DEFAULT NULL, - `api_key` varchar(256) DEFAULT NULL, - `created` DATETIME NULL DEFAULT current_timestamp(), - `modified` DATETIME NULL DEFAULT NULL ON UPDATE current_timestamp(), - PRIMARY KEY (`id`), - INDEX `FK_USER_PART` (`participant_id`), - CONSTRAINT `FK_USER_PART` FOREIGN KEY (`participant_id`) REFERENCES `participant` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='member of a participant'; - - -CREATE TABLE `participant` ( - `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `name` VARCHAR(128) NULL DEFAULT NULL, - `street` VARCHAR(128) NULL DEFAULT NULL, - `postal_code` VARCHAR(5) NULL DEFAULT NULL, - `city` VARCHAR(64) NULL DEFAULT NULL, - `flags` INT(10) UNSIGNED NULL DEFAULT NULL, - `created` DATETIME NULL DEFAULT current_timestamp(), - `modified` DATETIME NULL DEFAULT NULL ON UPDATE current_timestamp(), - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='An organization taking part'; - - -CREATE TABLE `berth` ( - `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `name` VARCHAR(128) NULL DEFAULT NULL COMMENT 'Descriptive name', - `participant_id` INT(10) UNSIGNED NULL DEFAULT NULL COMMENT 'If berth belongs to a participant, reference it here', - `lock` BIT(1) NULL DEFAULT NULL COMMENT 'The lock must be used', - `created` DATETIME NULL DEFAULT current_timestamp(), - `modified` DATETIME NULL DEFAULT NULL ON UPDATE current_timestamp(), - PRIMARY KEY (`id`), - INDEX `FK_BERTH_PART` (`participant_id`), - CONSTRAINT `FK_BERTH_PART` FOREIGN KEY (`participant_id`) REFERENCES `participant` (`id`) -) -COMMENT='Berth of ship for a ship call' -ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 -; - - CREATE TABLE `shipcall_participant_map` ( `id` int(11) NOT NULL AUTO_INCREMENT, `shipcall_id` int(10) unsigned DEFAULT NULL, `participant_id` int(10) unsigned DEFAULT NULL, `created` DATETIME NULL DEFAULT current_timestamp(), `modified` DATETIME NULL DEFAULT NULL ON UPDATE current_timestamp(), - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + INDEX `FK_MAP_PARTICIPANT_SHIPCALL` (`shipcall_id`), + INDEX `FK_MAP_SHIPCALL_PARTICIPANT` (`participant_id`), + CONSTRAINT `FK_MAP_PARTICIPANT_SHIPCALL` FOREIGN KEY (`shipcall_id`) REFERENCES `shipcall` (`id`), + CONSTRAINT `FK_MAP_SHIPCALL_PARTICIPANT` FOREIGN KEY (`participant_id`) REFERENCES `participant` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Associates a participant with a shipcall'; @@ -145,10 +135,7 @@ CREATE TABLE `shipcall_tug_map` ( INDEX `FK_SCT_SHIPCALL` (`shipcall_id`), CONSTRAINT `FK_SCT_SHIP` FOREIGN KEY (`ship_id`) REFERENCES `ship` (`id`), CONSTRAINT `FK_SCT_SHIPCALL` FOREIGN KEY (`shipcall_id`) REFERENCES `shipcall` (`id`) -) -COMMENT='Mapping table that assigns tugs to a ship call' -ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 -; +) COMMENT='Mapping table that assigns tugs to a ship call' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `notification` ( @@ -166,9 +153,8 @@ CREATE TABLE `notification` ( INDEX `FK_NOT_PART` (`participant_id`), CONSTRAINT `FK_NOT_PART` FOREIGN KEY (`participant_id`) REFERENCES `participant` (`id`), CONSTRAINT `FK_NOT_TIMES` FOREIGN KEY (`times_id`) REFERENCES `times` (`id`) -) -COMMENT='An entry corresponds to an alarm given by a violated rule during times update' -ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +) COMMENT='An entry corresponds to an alarm given by a violated rule during times update' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + CREATE TABLE `role` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, @@ -178,11 +164,7 @@ CREATE TABLE `role` ( `modified` DATETIME NULL DEFAULT NULL ON UPDATE current_timestamp(), PRIMARY KEY (`id`), UNIQUE INDEX `name` (`name`) -) -COMMENT='logical group of securables for one or more user' -DEFAULT CHARSET=utf8mb4 -ENGINE=InnoDB -; +) COMMENT='logical group of securables for one or more user' DEFAULT CHARSET=utf8mb4 ENGINE=InnoDB; CREATE TABLE `securable` ( @@ -192,11 +174,8 @@ CREATE TABLE `securable` ( `modified` DATETIME NULL DEFAULT NULL ON UPDATE current_timestamp(), PRIMARY KEY (`id`), UNIQUE INDEX `name` (`name`) -) -COMMENT='Actual permission on a single(!) feature or operation' -DEFAULT CHARSET=utf8mb4 -ENGINE=InnoDB -; +) COMMENT='Actual permission on a single(!) feature or operation' DEFAULT CHARSET=utf8mb4 ENGINE=InnoDB; + CREATE TABLE `user_role_map` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, @@ -209,11 +188,8 @@ CREATE TABLE `user_role_map` ( INDEX `FK_ROLE_USER` (`role_id`), CONSTRAINT `FK_ROLE_USER` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`), CONSTRAINT `FK_USER_ROLE` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) -) -COMMENT='Assigns a user to a role' -DEFAULT CHARSET=utf8mb4 -ENGINE=InnoDB -; +) COMMENT='Assigns a user to a role' DEFAULT CHARSET=utf8mb4 ENGINE=InnoDB; + CREATE TABLE `role_securable_map` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, @@ -226,8 +202,4 @@ CREATE TABLE `role_securable_map` ( INDEX `FK_SECURABLE_ROLE` (`securable_id`), CONSTRAINT `FK_ROLE_SECURABLE` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`), CONSTRAINT `FK_SECURABLE_ROLE` FOREIGN KEY (`securable_id`) REFERENCES `securable` (`id`) -) -COMMENT='Assigns securables to roles' -DEFAULT CHARSET=utf8mb4 -ENGINE=InnoDB -; +) COMMENT='Assigns securables to roles' DEFAULT CHARSET=utf8mb4 ENGINE=InnoDB; diff --git a/misc/sample_data.sql b/misc/sample_data.sql new file mode 100644 index 0000000..74a81d9 --- /dev/null +++ b/misc/sample_data.sql @@ -0,0 +1,138 @@ +-- MySQL dump 10.19 Distrib 10.3.38-MariaDB, for debian-linux-gnueabihf (armv8l) +-- +-- Host: localhost Database: bremen_calling +-- ------------------------------------------------------ +-- Server version 10.3.38-MariaDB-0+deb10u1 + +/*!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 */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!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 */; + +-- +-- Dumping data for table `berth` +-- + +LOCK TABLES `berth` WRITE; +/*!40000 ALTER TABLE `berth` DISABLE KEYS */; +INSERT INTO `berth` (`id`, `name`) VALUES (1,'Roland Mühle'),(1,'Stahlwerk'),(2,'Kellogs'); +/*!40000 ALTER TABLE `berth` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `notification` +-- + +LOCK TABLES `notification` WRITE; +/*!40000 ALTER TABLE `notification` DISABLE KEYS */; +/*!40000 ALTER TABLE `notification` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `participant` +-- + +LOCK TABLES `participant` WRITE; +/*!40000 ALTER TABLE `participant` DISABLE KEYS */; +INSERT INTO `participant` (`id`, `name`, `street`, `postal_code`, `city`, `flags`, `created`, `modified`) VALUES (1,'Schick Informatik','Gottlieb-Daimler-Str. 8','73614','Schorndorf',42,'2023-04-17 07:18:19',NULL); +/*!40000 ALTER TABLE `participant` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `role` +-- + +LOCK TABLES `role` WRITE; +/*!40000 ALTER TABLE `role` DISABLE KEYS */; +INSERT INTO `role` (`id`, `name`, `description`, `created`, `modified`) VALUES (1,'My first role','A very good description','2023-04-17 07:31:57',NULL),(2,'Another role','This role is very nice as well','2023-04-17 07:32:12',NULL); +/*!40000 ALTER TABLE `role` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `role_securable_map` +-- + +LOCK TABLES `role_securable_map` WRITE; +/*!40000 ALTER TABLE `role_securable_map` DISABLE KEYS */; +/*!40000 ALTER TABLE `role_securable_map` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `securable` +-- + +LOCK TABLES `securable` WRITE; +/*!40000 ALTER TABLE `securable` DISABLE KEYS */; +INSERT INTO `securable` (`id`, `name`, `created`, `modified`) VALUES (1,'First secure thing','2023-04-17 07:38:12',NULL),(2,'Another secure thing','2023-04-17 07:38:22',NULL); +/*!40000 ALTER TABLE `securable` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `ship` +-- + +LOCK TABLES `ship` WRITE; +/*!40000 ALTER TABLE `ship` DISABLE KEYS */; +/*!40000 ALTER TABLE `ship` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `shipcall` +-- + +LOCK TABLES `shipcall` WRITE; +/*!40000 ALTER TABLE `shipcall` DISABLE KEYS */; +/*!40000 ALTER TABLE `shipcall` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `shipcall_participant_map` +-- + +LOCK TABLES `shipcall_participant_map` WRITE; +/*!40000 ALTER TABLE `shipcall_participant_map` DISABLE KEYS */; +/*!40000 ALTER TABLE `shipcall_participant_map` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `times` +-- + +LOCK TABLES `times` WRITE; +/*!40000 ALTER TABLE `times` DISABLE KEYS */; +/*!40000 ALTER TABLE `times` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `user` +-- + +LOCK TABLES `user` WRITE; +/*!40000 ALTER TABLE `user` DISABLE KEYS */; +INSERT INTO `user` (`id`, `participant_id`, `first_name`, `last_name`, `user_name`, `password_hash`, `api_key`, `created`, `modified`) VALUES (1,1,'Daniel','Schick','dani',NULL,'0815','2023-04-17 07:15:41',NULL); +/*!40000 ALTER TABLE `user` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping data for table `user_role_map` +-- + +LOCK TABLES `user_role_map` WRITE; +/*!40000 ALTER TABLE `user_role_map` DISABLE KEYS */; +/*!40000 ALTER TABLE `user_role_map` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_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 2023-04-27 9:09:13