1. PostgreSQL copy of all MySQL created and tested.\n 2. Purchase Orders and Sales Orders and stock level management added to MySQL, PostgreSQL, and server and front end code.

This commit is contained in:
2024-07-05 20:34:11 +01:00
parent 3a2a164213
commit 6f4e329258
3049 changed files with 535753 additions and 3022 deletions

View File

@@ -0,0 +1,824 @@
/* Store */
USE PARTSLTD_PROD;
# Drop dependencies
# DROP PROCEDURE IF EXISTS p_shop_user_eval;
DROP TABLE IF EXISTS User_Eval_Temp;
# Delete old tables
DROP TABLE IF EXISTS Shop_Address_Audit;
DROP TABLE IF EXISTS Shop_Address;
DROP TABLE IF EXISTS Shop_User_Role_Link_Audit;
DROP TABLE IF EXISTS Shop_User_Role_Link;
DROP TABLE IF EXISTS Shop_User_Audit;
DROP TABLE IF EXISTS Shop_User;
DROP TABLE IF EXISTS Shop_Role_Permission_Link_Audit;
DROP TABLE IF EXISTS Shop_Role_Permission_Link;
DROP TABLE IF EXISTS Shop_Role_Audit;
DROP TABLE IF EXISTS Shop_Role;
DROP TABLE IF EXISTS Shop_Permission_Audit;
DROP TABLE IF EXISTS Shop_Permission;
DROP TABLE IF EXISTS Shop_Permission_Group_Audit;
DROP TABLE IF EXISTS Shop_Permission_Group;
DROP TABLE IF EXISTS Shop_Access_Level_Audit;
DROP TABLE IF EXISTS Shop_Access_Level;
DROP TABLE IF EXISTS Shop_User_Change_Set;
# User Change Sets
CREATE TABLE Shop_User_Change_Set (
id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
comment VARCHAR(500),
updated_last_on DATETIME,
updated_last_by VARCHAR(100)
);
DELIMITER //
CREATE TRIGGER before_insert_Shop_User_Change_Set
BEFORE INSERT ON Shop_User_Change_Set
FOR EACH ROW
BEGIN
IF NEW.updated_last_on <=> NULL THEN
SET NEW.updated_last_on = NOW();
END IF;
IF NEW.updated_last_by <=> NULL THEN
SET NEW.updated_last_by = CURRENT_USER();
END IF;
END //
DELIMITER ;
SELECT * FROM Shop_User_Change_Set;
# Access Levels
CREATE TABLE Shop_Access_Level (
id_access_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(50),
name VARCHAR(255),
priority INT NOT NULL,
active BIT NOT NULL DEFAULT 1,
display_order INT NOT NULL,
created_on DATETIME,
created_by VARCHAR(100),
id_change_set INT,
CONSTRAINT FK_Shop_Access_Level_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
);
DELIMITER //
CREATE TRIGGER before_insert_Shop_Access_Level
BEFORE INSERT ON Shop_Access_Level
FOR EACH ROW
BEGIN
IF NEW.created_on <=> NULL THEN
SET NEW.created_on = NOW();
END IF;
IF NEW.created_by <=> NULL THEN
SET NEW.created_by = CURRENT_USER();
END IF;
END //
DELIMITER ;
CREATE TABLE Shop_Access_Level_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_access_level INT NOT NULL,
CONSTRAINT FK_Shop_Access_Level_Audit_id_access_level
FOREIGN KEY (id_access_level)
REFERENCES Shop_Access_Level(id_access_level)
ON UPDATE RESTRICT,
name_field VARCHAR(50),
value_prev VARCHAR(500),
value_new VARCHAR(500),
id_change_set INT NOT NULL,
CONSTRAINT FK_Shop_Access_Level_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
);
DELIMITER //
CREATE TRIGGER before_update_Shop_Access_Level
BEFORE UPDATE ON Shop_Access_Level
FOR EACH ROW
BEGIN
INSERT INTO Shop_Access_Level_Audit (
id_access_level,
name_field,
value_prev,
value_new,
id_change_set
)
# Changed code
SELECT NEW.id_access_level, 'code', OLD.code, NEW.code, NEW.id_change_set
WHERE NOT (OLD.code <=> NEW.code)
UNION
# Changed name
SELECT NEW.id_access_level, 'name', OLD.name, NEW.name, NEW.id_change_set
WHERE NOT (OLD.name <=> NEW.name)
UNION
# Changed priority
SELECT NEW.id_access_level, 'priority', CONVERT(OLD.priority, CHAR), CONVERT(NEW.priority, CHAR), NEW.id_change_set
WHERE NOT (OLD.priority <=> NEW.priority)
UNION
# Changed active
SELECT NEW.id_access_level, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;
INSERT INTO Shop_Access_Level (
display_order, code, name, priority
)
VALUES
(1, 'VIEW', 'View', 3),
(2, 'EDIT', 'Edit', 2),
(3, 'ADMIN', 'Admin', 1)
;
SELECT * FROM Shop_Access_Level;
SELECT * FROM Shop_Access_Level_Audit;
# Permission Groups
CREATE TABLE Shop_Permission_Group (
id_group INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(50),
name VARCHAR(255),
active BIT NOT NULL DEFAULT 1,
display_order INT NOT NULL,
created_on DATETIME,
created_by VARCHAR(100),
id_change_set INT,
CONSTRAINT FK_Shop_Permission_Group_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
ON UPDATE RESTRICT
);
DELIMITER //
CREATE TRIGGER before_insert_Shop_Permission_Group
BEFORE INSERT ON Shop_Permission_Group
FOR EACH ROW
BEGIN
IF NEW.created_on <=> NULL THEN
SET NEW.created_on = NOW();
END IF;
IF NEW.created_by <=> NULL THEN
SET NEW.created_by = CURRENT_USER();
END IF;
END //
DELIMITER ;
CREATE TABLE Shop_Permission_Group_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_group INT NOT NULL,
CONSTRAINT FK_Shop_Permission_Group_Audit_id_group
FOREIGN KEY (id_group)
REFERENCES Shop_Permission_Group(id_group)
ON UPDATE RESTRICT,
name_field VARCHAR(50),
value_prev VARCHAR(500),
value_new VARCHAR(500),
id_change_set INT NOT NULL,
CONSTRAINT FK_Shop_Permission_Group_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
ON UPDATE RESTRICT
);
DELIMITER //
CREATE TRIGGER before_update_Shop_Permission_Group
BEFORE UPDATE ON Shop_Permission_Group
FOR EACH ROW
BEGIN
INSERT INTO Shop_Permission_Group_Audit (
id_group,
name_field,
value_prev,
value_new,
id_change_set
)
# Changed code
SELECT NEW.id_group, 'code', OLD.code, NEW.code, NEW.id_change_set
WHERE NOT OLD.code <=> NEW.code
UNION
# Changed name
SELECT NEW.id_group, 'name', OLD.name, NEW.name, NEW.id_change_set
WHERE NOT OLD.name <=> NEW.name
UNION
# Changed active
SELECT NEW.id_group, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;
INSERT INTO Shop_Permission_Group (
display_order, code, name
)
VALUES
(1, 'STORE', 'Store Home')
;
SELECT * FROM Shop_Permission_Group;
SELECT * FROM Shop_Permission_Group_Audit;
# Permissions
CREATE TABLE Shop_Permission (
id_permission INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(50),
name VARCHAR(255),
id_permission_group INT NOT NULL,
CONSTRAINT FK_Shop_Permission_id_permission_group
FOREIGN KEY (id_permission_group)
REFERENCES Shop_Permission_Group(id_group)
ON UPDATE RESTRICT,
required_access_level INT NOT NULL,
CONSTRAINT FK_Shop_Permission_id_access_level
FOREIGN KEY (required_access_level)
REFERENCES Shop_Access_Level(id_access_level),
active BIT NOT NULL DEFAULT 1,
display_order INT NOT NULL,
created_on DATETIME,
created_by VARCHAR(100),
id_change_set INT,
CONSTRAINT FK_Shop_Permission_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
);
DELIMITER //
CREATE TRIGGER before_insert_Shop_Permission
BEFORE INSERT ON Shop_Permission
FOR EACH ROW
BEGIN
IF NEW.created_on <=> NULL THEN
SET NEW.created_on = NOW();
END IF;
IF NEW.created_by <=> NULL THEN
SET NEW.created_by = CURRENT_USER();
END IF;
END //
DELIMITER ;
CREATE TABLE Shop_Permission_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_permission INT NOT NULL,
CONSTRAINT FK_Shop_Permission_Audit_id_permission
FOREIGN KEY (id_permission)
REFERENCES Shop_Permission(id_permission)
ON UPDATE RESTRICT,
name_field VARCHAR(50),
value_prev VARCHAR(500),
value_new VARCHAR(500),
id_change_set INT NOT NULL,
CONSTRAINT FK_Shop_Permission_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
ON UPDATE RESTRICT
);
DELIMITER //
CREATE TRIGGER before_update_Shop_Permission
BEFORE UPDATE ON Shop_Permission
FOR EACH ROW
BEGIN
INSERT INTO Shop_Permission_Audit (
id_permission,
name_field,
value_prev,
value_new,
id_change_set
)
# Changed code
SELECT NEW.id_permission, 'code', OLD.code, NEW.code, NEW.id_change_set
WHERE NOT OLD.code <=> NEW.code
UNION
# Changed name
SELECT NEW.id_permission, 'name', OLD.name, NEW.name, NEW.id_change_set
WHERE NOT OLD.name <=> NEW.name
UNION
# Changed id_permission_group
SELECT NEW.id_permission, 'id_permission_group', CONVERT(OLD.id_permission_group, CHAR), CONVERT(NEW.id_permission_group, CHAR), NEW.id_change_set
WHERE NOT OLD.id_permission_group <=> NEW.id_permission_group
UNION
# Changed required_access_level
SELECT NEW.id_permission, 'required_access_level', CONVERT(OLD.required_access_level, CHAR), CONVERT(NEW.required_access_level, CHAR), NEW.id_change_set
WHERE NOT OLD.required_access_level <=> NEW.required_access_level
UNION
# Changed active
SELECT NEW.id_permission, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;
INSERT INTO Shop_Permission (
display_order, code, name, id_permission_group, required_access_level
)
VALUES
(1, 'STORE_PRODUCT', 'Store Product Page', 1, 1),
(2, 'STORE_SERVICES', 'Store Services Page', 1, 1),
(3, 'CONTACT_US', 'Contact Us Page', 1, 1)
;
SELECT * FROM Shop_Permission;
SELECT * FROM Shop_Permission_Audit;
# Roles
CREATE TABLE Shop_Role (
id_role INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(50),
name VARCHAR(255),
active BIT NOT NULL DEFAULT 1,
display_order INT NOT NULL,
created_on DATETIME,
created_by VARCHAR(100),
id_change_set INT,
CONSTRAINT FK_Shop_Role_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
);
DELIMITER //
CREATE TRIGGER before_insert_Shop_Role
BEFORE INSERT ON Shop_Role
FOR EACH ROW
BEGIN
IF NEW.created_on <=> NULL THEN
SET NEW.created_on = NOW();
END IF;
IF NEW.created_by <=> NULL THEN
SET NEW.created_by = CURRENT_USER();
END IF;
END //
DELIMITER ;
CREATE TABLE Shop_Role_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_role INT NOT NULL,
CONSTRAINT FK_Shop_Role_Audit_id_role
FOREIGN KEY (id_role)
REFERENCES Shop_Role(id_role)
ON UPDATE RESTRICT,
name_field VARCHAR(50),
value_prev VARCHAR(500),
value_new VARCHAR(500),
id_change_set INT NOT NULL,
CONSTRAINT FK_Shop_Role_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
ON UPDATE RESTRICT
);
DELIMITER //
CREATE TRIGGER before_update_Shop_Role
BEFORE UPDATE ON Shop_Role
FOR EACH ROW
BEGIN
INSERT INTO Shop_Role_Audit (
id_role,
name_field,
value_prev,
value_new,
id_change_set
)
# Changed code
SELECT NEW.id_role, 'code', OLD.code, NEW.code, NEW.id_change_set
WHERE NOT OLD.code <=> NEW.code
UNION
# Changed name
SELECT NEW.id_role, 'name', OLD.name, NEW.name, NEW.id_change_set
WHERE NOT OLD.name <=> NEW.name
UNION
# Changed active
SELECT NEW.id_role, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;
INSERT INTO Shop_Role (
display_order,
code,
name
)
VALUES
(1, 'DIRECTOR', 'Director'),
(2, 'USER', 'User')
;
SELECT * FROM Shop_Role;
SELECT * FROM Shop_Role_Audit;
# Role Permission link
CREATE TABLE Shop_Role_Permission_Link (
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_role INT,
CONSTRAINT FK_Shop_Role_Permission_Link_id_role
FOREIGN KEY (id_role)
REFERENCES Shop_Role(id_role)
ON UPDATE RESTRICT,
id_permission INT,
CONSTRAINT FK_Shop_Role_Permission_Link_id_permission
FOREIGN KEY (id_permission)
REFERENCES Shop_Permission(id_permission)
ON UPDATE RESTRICT,
id_access_level INT,
CONSTRAINT FK_Shop_Role_Permission_Link_id_access_level
FOREIGN KEY (id_access_level)
REFERENCES Shop_Access_Level(id_access_level)
ON UPDATE RESTRICT,
active BIT NOT NULL DEFAULT 1,
created_on DATETIME,
created_by VARCHAR(100),
id_change_set INT,
CONSTRAINT FK_Shop_Role_Permission_Link_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
);
DELIMITER //
CREATE TRIGGER before_insert_Shop_Role_Permission_Link
BEFORE INSERT ON Shop_Role_Permission_Link
FOR EACH ROW
BEGIN
IF NEW.created_on <=> NULL THEN
SET NEW.created_on = NOW();
END IF;
IF NEW.created_by <=> NULL THEN
SET NEW.created_by = CURRENT_USER();
END IF;
END //
DELIMITER ;
CREATE TABLE Shop_Role_Permission_Link_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_link INT NOT NULL,
CONSTRAINT FK_Shop_Role_Permission_Link_Audit_id_link
FOREIGN KEY (id_link)
REFERENCES Shop_Role_Permission_Link(id_link)
ON UPDATE RESTRICT,
name_field VARCHAR(50),
value_prev VARCHAR(500),
value_new VARCHAR(500),
id_change_set INT NOT NULL,
CONSTRAINT FK_Shop_Role_Permission_Link_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
ON UPDATE RESTRICT
);
DELIMITER //
CREATE TRIGGER before_update_Shop_Role_Permission_Link
BEFORE UPDATE ON Shop_Role_Permission_Link
FOR EACH ROW
BEGIN
INSERT INTO Shop_Role_Permission_Link_Audit (
id_link,
name_field,
value_prev,
value_new,
id_change_set
)
# Changed id_role
SELECT NEW.id_link, 'id_role', CONVERT(OLD.id_role, CHAR), CONVERT(NEW.id_role, CHAR), NEW.id_change_set
WHERE NOT OLD.id_role <=> NEW.id_role
UNION
# Changed id_permission
SELECT NEW.id_link, 'id_permission', CONVERT(OLD.id_permission, CHAR), CONVERT(NEW.id_permission, CHAR), NEW.id_change_set
WHERE NOT OLD.id_permission <=> NEW.id_permission
UNION
# Changed id_access_level
SELECT NEW.id_link, 'id_access_level', CONVERT(OLD.id_access_level, CHAR), CONVERT(NEW.id_access_level, CHAR), NEW.id_change_set
WHERE NOT OLD.id_access_level <=> NEW.id_access_level
UNION
# Changed active
SELECT NEW.id_link, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;
INSERT INTO Shop_Role_Permission_Link (
id_role, id_permission, id_access_level
)
VALUES
(1, 1, 3),
(1, 2, 3),
(1, 3, 3),
(2, 1, 1),
(2, 2, 1),
(2, 3, 1)
;
SELECT * FROM Shop_Role_Permission_Link;
SELECT * FROM Shop_Role_Permission_Link_Audit;
# Users
CREATE TABLE Shop_User (
id_user INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
is_super_user BIT NOT NULL DEFAULT 0,
active BIT NOT NULL DEFAULT 1,
created_on DATETIME,
created_by VARCHAR(100),
id_change_set INT,
CONSTRAINT FK_Shop_User_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
);
DELIMITER //
CREATE TRIGGER before_insert_Shop_User
BEFORE INSERT ON Shop_User
FOR EACH ROW
BEGIN
IF NEW.created_on <=> NULL THEN
SET NEW.created_on = NOW();
END IF;
IF NEW.created_by <=> NULL THEN
SET NEW.created_by = CURRENT_USER();
END IF;
END //
DELIMITER ;
CREATE TABLE Shop_User_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_user INT NOT NULL,
CONSTRAINT FK_Shop_User_Audit_id_user
FOREIGN KEY (id_user)
REFERENCES Shop_User(id_user)
ON UPDATE RESTRICT,
name_field VARCHAR(50),
value_prev VARCHAR(500),
value_new VARCHAR(500),
id_change_set INT NOT NULL,
CONSTRAINT FK_Shop_User_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
ON UPDATE RESTRICT
);
DELIMITER //
CREATE TRIGGER before_update_Shop_User
BEFORE UPDATE ON Shop_User
FOR EACH ROW
BEGIN
INSERT INTO Shop_User_Audit (
id_user,
name_field,
value_prev,
value_new,
id_change_set
)
# Changed name
SELECT NEW.id_user, 'name', OLD.name, NEW.name, NEW.id_change_set
WHERE NOT (OLD.name <=> NEW.name)
UNION
# Changed is_super_user
SELECT NEW.id_user, 'is_super_user', CONVERT(CONVERT(OLD.is_super_user, SIGNED), CHAR), CONVERT(CONVERT(NEW.is_super_user, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.is_super_user <=> NEW.is_super_user)
UNION
# Changed active
SELECT NEW.id_user, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;
INSERT INTO Shop_User (
name,
is_super_user
)
VALUES (
'Teddy',
1
);
SELECT * FROM Shop_User;
SELECT * FROM Shop_User_Audit;
# User Role link
CREATE TABLE Shop_User_Role_Link (
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_user INT,
CONSTRAINT FK_Shop_User_Role_Link_id_user
FOREIGN KEY (id_user)
REFERENCES Shop_User(id_user)
ON UPDATE RESTRICT,
id_role INT,
CONSTRAINT FK_Shop_User_Role_Link_id_role
FOREIGN KEY (id_role)
REFERENCES Shop_Role(id_role)
ON UPDATE RESTRICT,
active BIT NOT NULL DEFAULT 1,
created_on DATETIME,
created_by VARCHAR(100),
id_change_set INT,
CONSTRAINT FK_Shop_User_Role_Link_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
);
DELIMITER //
CREATE TRIGGER before_insert_Shop_User_Role_Link
BEFORE INSERT ON Shop_User_Role_Link
FOR EACH ROW
BEGIN
IF NEW.created_on <=> NULL THEN
SET NEW.created_on = NOW();
END IF;
IF NEW.created_by <=> NULL THEN
SET NEW.created_by = CURRENT_USER();
END IF;
END //
DELIMITER ;
CREATE TABLE Shop_User_Role_Link_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_link INT NOT NULL,
CONSTRAINT FK_Shop_User_Role_Link_Audit_id_link
FOREIGN KEY (id_link)
REFERENCES Shop_User_Role_Link(id_link)
ON UPDATE RESTRICT,
name_field VARCHAR(50),
value_prev VARCHAR(500),
value_new VARCHAR(500),
id_change_set INT NOT NULL,
CONSTRAINT FK_Shop_User_Role_Link_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
ON UPDATE RESTRICT
);
DELIMITER //
CREATE TRIGGER before_update_Shop_User_Role_Link
BEFORE UPDATE ON Shop_User_Role_Link
FOR EACH ROW
BEGIN
INSERT INTO Shop_User_Role_Link_Audit (
id_link,
name_field,
value_prev,
value_new,
id_change_set
)
# Changed active
SELECT NEW.id_link, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;
INSERT INTO Shop_User_Role_Link (
id_user, id_role
)
VALUES
(1, 1)
;
SELECT * FROM Shop_User_Role_Link;
SELECT * FROM Shop_User_Role_Link_Audit;
# Addresses
CREATE TABLE Shop_Address (
id_address INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_user INT NOT NULL,
CONSTRAINT FK_Shop_Address_id_user
FOREIGN KEY (id_user)
REFERENCES Shop_User(id_user)
ON UPDATE RESTRICT,
region VARCHAR(100) NOT NULL,
name_full VARCHAR(255) NOT NULL,
phone_number VARCHAR(20) NOT NULL,
postcode VARCHAR(20) NOT NULL,
address_line_1 VARCHAR(100) NOT NULL,
address_line_2 VARCHAR(100) NOT NULL,
city VARCHAR(50) NOT NULL,
county VARCHAR(100) NOT NULL,
active BIT NOT NULL DEFAULT 1,
created_on DATETIME,
created_by VARCHAR(100),
id_change_set INT,
CONSTRAINT FK_Shop_Address_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
);
DELIMITER //
CREATE TRIGGER before_insert_Shop_Address
BEFORE INSERT ON Shop_Address
FOR EACH ROW
BEGIN
IF NEW.created_on <=> NULL THEN
SET NEW.created_on = NOW();
END IF;
IF NEW.created_by <=> NULL THEN
SET NEW.created_by = CURRENT_USER();
END IF;
END //
DELIMITER ;
CREATE TABLE Shop_Address_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_address INT NOT NULL,
CONSTRAINT FK_Shop_Address_Audit_id_address
FOREIGN KEY (id_address)
REFERENCES Shop_Address(id_address)
ON UPDATE RESTRICT,
name_field VARCHAR(50),
value_prev VARCHAR(500),
value_new VARCHAR(500),
id_change_set INT NOT NULL,
CONSTRAINT FK_Shop_Address_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_User_Change_Set(id_change_set)
ON UPDATE RESTRICT
);
DELIMITER //
CREATE TRIGGER before_update_Shop_Address
BEFORE UPDATE ON Shop_Address
FOR EACH ROW
BEGIN
INSERT INTO Shop_Address_Audit (
id_address,
name_field,
value_prev,
value_new,
id_change_set
)
# Changed region
SELECT NEW.id_address, 'region', OLD.region, NEW.region, NEW.id_change_set
WHERE NOT OLD.region <=> NEW.region
UNION
# Changed name_full
SELECT NEW.id_address, 'name_full', OLD.name_full, NEW.name_full, NEW.id_change_set
WHERE NOT OLD.name_full <=> NEW.name_full
UNION
# Changed phone_number
SELECT NEW.id_address, 'phone_number', OLD.phone_number, NEW.phone_number, NEW.id_change_set
WHERE NOT OLD.phone_number <=> NEW.phone_number
UNION
# Changed postcode
SELECT NEW.id_address, 'postcode', OLD.postcode, NEW.postcode, NEW.id_change_set
WHERE NOT OLD.postcode <=> NEW.postcode
UNION
# Changed address_line_1
SELECT NEW.id_address, 'address_line_1', OLD.address_line_1, NEW.address_line_1, NEW.id_change_set
WHERE NOT OLD.address_line_1 <=> NEW.address_line_1
UNION
# Changed address_line_2
SELECT NEW.id_address, 'address_line_2', OLD.address_line_2, NEW.address_line_2, NEW.id_change_set
WHERE NOT OLD.address_line_2 <=> NEW.address_line_2
UNION
# Changed city
SELECT NEW.id_address, 'city', OLD.city, NEW.city, NEW.id_change_set
WHERE NOT OLD.city <=> NEW.city
UNION
# Changed county
SELECT NEW.id_address, 'county', OLD.county, NEW.county, NEW.id_change_set
WHERE NOT OLD.county <=> NEW.county
UNION
# Changed active
SELECT NEW.id_address, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;
INSERT INTO Shop_Address (
id_user, region, name_full, phone_number, postcode, address_line_1, address_line_2, city, county
)
SELECT U.id_user, 'United Kingdom', U.name, '07375 571430', 'NN6 6EB', 'The Laurels', 'Cold Ashby Road', 'Cold Ashby', 'Northamptonshire'
FROM Shop_User U;
SELECT * FROM Shop_Address;
SELECT * FROM Shop_Address_Audit;