Feat(SQL): Locations redesigned for parent location id stored on location table and links table removed.

This commit is contained in:
2025-07-15 15:21:04 +01:00
parent a3fd8b12fe
commit e0805ec2ed
10 changed files with 13 additions and 124 deletions

View File

@@ -0,0 +1,31 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Location_Link'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Location_Link (
id_link INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_location_parent INT
, CONSTRAINT FK_DOG_Location_Link_id_location_parent
FOREIGN KEY (id_location_parent)
REFERENCES parts.DOG_Location(id_location)
, id_location_child INT
, CONSTRAINT FK_DOG_Location_Link_id_location_child
FOREIGN KEY (id_location_child)
REFERENCES parts.DOG_Location(id_location)
, active BIT NOT NULL DEFAULT 1
, created_on DATETIME
, id_user_created_by INT
, CONSTRAINT FK_DOG_Location_Link_id_user_created_by
FOREIGN KEY (id_user_created_by)
REFERENCES parts.DOG_User(id_user)
, id_change_set INT
, CONSTRAINT FK_DOG_Location_Link_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES parts.DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,24 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Location_Link_Audit'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Location_Link_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_link INT NOT NULL
, CONSTRAINT FK_DOG_Location_Link_Audit_id_link
FOREIGN KEY (id_link)
REFERENCES parts.DOG_Location_Link(id_link)
, name_field VARCHAR(100) NOT NULL
, value_prev TEXT
, value_new TEXT
, id_change_set INT NOT NULL
, CONSTRAINT FK_DOG_Location_Link_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES parts.DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,22 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Location_Link_Temp'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Location_Link_Temp (
id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_link INT
, id_location_parent INT
, id_location_child INT
, active BIT
, does_meet_id_filters BIT
, does_meet_non_id_filters BIT
, guid BINARY(36)
);

View File

@@ -0,0 +1,46 @@
USE parts;
DROP TRIGGER IF EXISTS parts.before_insert_DOG_Location_Link;
DROP TRIGGER IF EXISTS parts.before_update_DOG_Location_Link;
DELIMITER //
CREATE TRIGGER parts.before_insert_DOG_Location_Link
BEFORE INSERT ON parts.DOG_Location_Link
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER parts.before_update_DOG_Location_Link
BEFORE UPDATE ON parts.DOG_Location_Link
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO parts.DOG_Location_Link_Audit (
id_link
, name_field
, value_prev
, value_new
, id_change_set
)
-- Changed id_location_parent
SELECT NEW.id_link, 'id_location_parent', CONVERT(OLD.id_location_parent, CHAR), CONVERT(NEW.id_location_parent, CHAR), NEW.id_change_set
WHERE NOT (OLD.id_location_parent <=> NEW.id_location_parent)
UNION
-- Changed id_location_child
SELECT NEW.id_link, 'id_location_child', CONVERT(OLD.id_location_child, CHAR), CONVERT(NEW.id_location_child, CHAR), NEW.id_change_set
WHERE NOT (OLD.id_location_child <=> NEW.id_location_child)
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 ;