From a0d21f1dbd703ba155ac21db2d0dd134da77fe0f Mon Sep 17 00:00:00 2001 From: Shershen Oleksandra Date: Mon, 13 Apr 2026 15:18:17 +0300 Subject: [PATCH 1/3] feat(task.sql): implement data normalization --- task.sql | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/task.sql b/task.sql index cc65344..e2f95c8 100644 --- a/task.sql +++ b/task.sql @@ -1,5 +1,6 @@ -- Create database and tables +DROP DATABASE IF EXISTS ShopDB; CREATE DATABASE ShopDB; USE ShopDB; @@ -9,25 +10,38 @@ CREATE TABLE Countries ( PRIMARY KEY (ID) ); -CREATE TABLE ProductInventory ( +CREATE TABLE Products ( + ID INT PRIMARY KEY, + ProductName VARCHAR(50) +); + +CREATE TABLE Warehouses ( ID INT, - ProductName VARCHAR(50), - WarehouseAmount INT, WarehouseName VARCHAR(50), - WarehouseAddress VARCHAR(50), + WarehouseAddress VARCHAR(50), CountryID INT, FOREIGN KEY (CountryID) REFERENCES Countries(ID) ON DELETE NO ACTION, PRIMARY KEY (ID) ); --- Populate test data - -INSERT INTO Countries (ID,Name) - VALUES (1, 'Country1'); -INSERT INTO Countries (ID,Name) - VALUES (2, 'Country2'); - -INSERT INTO ProductInventory (ID,ProductName,WarehouseAmount,WarehouseName,WarehouseAddress,CountryID) - VALUES (1, 'AwersomeProduct', 2, 'Warehouse-1', 'City-1, Street-1',1); -INSERT INTO ProductInventory (ID,ProductName,WarehouseAmount,WarehouseName,WarehouseAddress,CountryID) - VALUES (2, 'AwersomeProduct', 5, 'Warehouse-2', 'City-2, Street-2',2); +CREATE TABLE Inventory ( + ProductID INT, + WarehouseID INT, + WarehouseAmount INT, + PRIMARY KEY (ProductID, WarehouseID), + FOREIGN KEY (ProductID) REFERENCES Products(ID), + FOREIGN KEY (WarehouseID) REFERENCES Warehouses(ID) +); + +INSERT INTO Countries (ID, Name) VALUES (1, 'Country1'); +INSERT INTO Countries (ID, Name) VALUES (2, 'Country2'); + +INSERT INTO Products (ID, ProductName) VALUES (1, 'AwersomeProduct'); + +INSERT INTO Warehouses (ID, WarehouseName, WarehouseAddress, CountryID) VALUES +(1, 'Warehouse-1', 'City-1, Street-1', 1), +(2, 'Warehouse-2', 'City-2, Street-2', 2); + +INSERT INTO Inventory (ProductID, WarehouseID, WarehouseAmount) VALUES +(1, 1, 2), +(1, 2, 5); From 793ad52721f7e7ae9bf8976faca3ac48132884bf Mon Sep 17 00:00:00 2001 From: Shershen Oleksandra Date: Mon, 13 Apr 2026 15:24:00 +0300 Subject: [PATCH 2/3] refactor(task.sql): add ON DELETE/UPDATE CASCADE --- task.sql | 69 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/task.sql b/task.sql index e2f95c8..64fa963 100644 --- a/task.sql +++ b/task.sql @@ -1,46 +1,55 @@ --- Create database and tables - +-- Recreate database DROP DATABASE IF EXISTS ShopDB; CREATE DATABASE ShopDB; USE ShopDB; CREATE TABLE Countries ( - ID INT, - Name VARCHAR(50), + ID INT NOT NULL AUTO_INCREMENT, + Name VARCHAR(50) NOT NULL, PRIMARY KEY (ID) -); +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE Products ( - ID INT PRIMARY KEY, - ProductName VARCHAR(50) -); + ID INT NOT NULL AUTO_INCREMENT, + ProductName VARCHAR(50) NOT NULL, + PRIMARY KEY (ID) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE Warehouses ( - ID INT, - WarehouseName VARCHAR(50), - WarehouseAddress VARCHAR(50), - CountryID INT, - FOREIGN KEY (CountryID) REFERENCES Countries(ID) ON DELETE NO ACTION, - PRIMARY KEY (ID) -); + ID INT NOT NULL AUTO_INCREMENT, + WarehouseName VARCHAR(50) NOT NULL, + WarehouseAddress VARCHAR(100) NOT NULL, + CountryID INT NOT NULL, + PRIMARY KEY (ID), + FOREIGN KEY (CountryID) + REFERENCES Countries(ID) + ON DELETE RESTRICT + ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE Inventory ( - ProductID INT, - WarehouseID INT, - WarehouseAmount INT, + ProductID INT NOT NULL, + WarehouseID INT NOT NULL, + WarehouseAmount INT NOT NULL, PRIMARY KEY (ProductID, WarehouseID), - FOREIGN KEY (ProductID) REFERENCES Products(ID), - FOREIGN KEY (WarehouseID) REFERENCES Warehouses(ID) -); - -INSERT INTO Countries (ID, Name) VALUES (1, 'Country1'); -INSERT INTO Countries (ID, Name) VALUES (2, 'Country2'); - -INSERT INTO Products (ID, ProductName) VALUES (1, 'AwersomeProduct'); - -INSERT INTO Warehouses (ID, WarehouseName, WarehouseAddress, CountryID) VALUES -(1, 'Warehouse-1', 'City-1, Street-1', 1), -(2, 'Warehouse-2', 'City-2, Street-2', 2); + FOREIGN KEY (ProductID) + REFERENCES Products(ID) + ON DELETE CASCADE + ON UPDATE CASCADE, + FOREIGN KEY (WarehouseID) + REFERENCES Warehouses(ID) + ON DELETE CASCADE + ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +INSERT INTO Countries (Name) VALUES ('Country1'); +INSERT INTO Countries (Name) VALUES ('Country2'); + +INSERT INTO Products (ProductName) VALUES ('AwesomeProduct'); + +INSERT INTO Warehouses (WarehouseName, WarehouseAddress, CountryID) VALUES +('Warehouse-1', 'City-1, Street-1', 1), +('Warehouse-2', 'City-2, Street-2', 2); INSERT INTO Inventory (ProductID, WarehouseID, WarehouseAmount) VALUES (1, 1, 2), From 04b6afcb6d4e5e548da99fd42859b856991d92a2 Mon Sep 17 00:00:00 2001 From: Shershen Oleksandra Date: Mon, 13 Apr 2026 15:27:05 +0300 Subject: [PATCH 3/3] refactor(task.sql): change database naming --- task.sql | 86 ++++++++++++++++++++++++++------------------------------ 1 file changed, 40 insertions(+), 46 deletions(-) diff --git a/task.sql b/task.sql index 64fa963..ae07a8c 100644 --- a/task.sql +++ b/task.sql @@ -4,53 +4,47 @@ CREATE DATABASE ShopDB; USE ShopDB; CREATE TABLE Countries ( - ID INT NOT NULL AUTO_INCREMENT, - Name VARCHAR(50) NOT NULL, - PRIMARY KEY (ID) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ID INT PRIMARY KEY, + Name VARCHAR(50) +); CREATE TABLE Products ( - ID INT NOT NULL AUTO_INCREMENT, - ProductName VARCHAR(50) NOT NULL, - PRIMARY KEY (ID) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ID INT PRIMARY KEY, + ProductName VARCHAR(50) +); CREATE TABLE Warehouses ( - ID INT NOT NULL AUTO_INCREMENT, - WarehouseName VARCHAR(50) NOT NULL, - WarehouseAddress VARCHAR(100) NOT NULL, - CountryID INT NOT NULL, - PRIMARY KEY (ID), - FOREIGN KEY (CountryID) - REFERENCES Countries(ID) - ON DELETE RESTRICT - ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -CREATE TABLE Inventory ( - ProductID INT NOT NULL, - WarehouseID INT NOT NULL, - WarehouseAmount INT NOT NULL, - PRIMARY KEY (ProductID, WarehouseID), - FOREIGN KEY (ProductID) - REFERENCES Products(ID) - ON DELETE CASCADE - ON UPDATE CASCADE, - FOREIGN KEY (WarehouseID) - REFERENCES Warehouses(ID) - ON DELETE CASCADE - ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - -INSERT INTO Countries (Name) VALUES ('Country1'); -INSERT INTO Countries (Name) VALUES ('Country2'); - -INSERT INTO Products (ProductName) VALUES ('AwesomeProduct'); - -INSERT INTO Warehouses (WarehouseName, WarehouseAddress, CountryID) VALUES -('Warehouse-1', 'City-1, Street-1', 1), -('Warehouse-2', 'City-2, Street-2', 2); - -INSERT INTO Inventory (ProductID, WarehouseID, WarehouseAmount) VALUES -(1, 1, 2), -(1, 2, 5); + ID INT PRIMARY KEY, + WarehouseName VARCHAR(50), + WarehouseAddress VARCHAR(50), + CountryID INT, + FOREIGN KEY (CountryID) REFERENCES Countries(ID) +); + +CREATE TABLE ProductInventory ( + ID INT PRIMARY KEY, + ProductID INT, + WarehouseAmount INT, + WarehouseID INT, + FOREIGN KEY (ProductID) REFERENCES Products(ID), + FOREIGN KEY (WarehouseID) REFERENCES Warehouses(ID) +); + +-- Populate test data + +-- Countries +INSERT INTO Countries VALUES (1, 'Country1'); +INSERT INTO Countries VALUES (2, 'Country2'); + +-- Products +INSERT INTO Products VALUES (1, 'AwersomeProduct'); + +-- Warehouses +INSERT INTO Warehouses VALUES +(1, 'Warehouse-1', 'City-1, Street-1', 1), +(2, 'Warehouse-2', 'City-2, Street-2', 2); + +-- ProductInventory +INSERT INTO ProductInventory VALUES +(1, 1, 2, 1), +(2, 1, 5, 2); \ No newline at end of file