我想创建3个表(我称之为元素),它们具有几乎相同的结构,以及4个表(信息),每个元素与外键链接。 信息具有相同的结构
CREATE TABLE Information (
element INT UNSIGNED,
information INT UNSIGNED,
PRIMARY KEY (element, information),
FOREIGN KEY element ON ElementTable(id) ON DELETE CASCADE,
FOREIGN KEY information ON InformationTable(id) ON DELETE CASCADE
);
问题是我想为所有信息创建一个唯一的表,而不是有12个表(每个元素4个表),如下所示:
CREATE TABLE Information (
--
element_type VARCHAR(10),
information_type VARCHAR(10),
--
element INT UNSIGNED,
information INT UNSIGNED,
PRIMARY KEY (element, information),
FOREIGN KEY element ON ElementTable(id) ON DELETE CASCADE,
FOREIGN KEY information ON InformationTable(id) ON DELETE CASCADE
);
但是外键不能那样工作。
搜索时我发现了“多态关联”,但它失去了可以级联的外键和我正在使用的外键的优点。或者有没有办法在没有外键的情况下模仿级联
此外,在存储和性能方面,我想要创建单个表或12个表(以及做更多(?)请求)这是更好的,因为知道每个元素可以从每种类型的信息中获得10个以上的信息。
答案 0 :(得分:0)
您可以尝试使用触发器进行插入,更新和删除,第二个表只保留foreigns键并为主键设置标识
答案 1 :(得分:0)
我试过这个
CREATE TABLE ElementInformation (
element INT UNSIGNED NOT NULL,
information INT UNSIGNED NOT NULL,
element_type VARCHAR(10) NOT NULL,
information_type VARCHAR(10) NOT NULL,
PRIMARY KEY (element, information, element_type, information_type)
);
每个元素的触发器
DELIMITER //
CREATE TRIGGER on_delete_element
AFTER DELETE ON Element
FOR EACH ROW
BEGIN
DELETE FROM ElementInformation WHERE element_type=type AND element=OLD.id;
END//
DELIMITER ;
这是有效的,感谢@Carolina Gil。 我关于性能的最后一个问题没有得到解答,但我猜的只有几千个元素和信息也是如此。