在mysql数据库中挣扎着表关系

时间:2016-11-19 12:18:01

标签: mysql database-design

假设我有一个父表和一个子表,其中parent_is作为外键。现在我想存储可能属于父母或孩子的照片。所以我可以在照片表中有一个parent_id和一个child_id外键:当照片属于父照片时,那么child_id外键列将为空,反之亦然。但是,我决定采用不同的设计:我现在有一个item表,我得到parent表主键(parent_id)也是引用{的外键item_id表中的{1}}列和item表主键(child)也作为{{1}中相同child_id列的外键表。所以现在我的item_id表中没有两个不同的外键(引用itemchild_id)而只有一个(引用parent_id):

photos

我希望到目前为止很清楚!这样可行,但现在我的问题是如果我想删除item_id记录:我会删除CREATE TABLE `parent` ( `parent_id` int(10) unsigned NOT NULL, `name` varchar(40) NOT NULL, PRIMARY KEY (`parent_id`), CONSTRAINT `parent_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `item` (`item_id`) ON DELETE CASCADE ON UPDATE CASCADE) CREATE TABLE `child` ( `child_id` int(10) unsigned NOT NULL, `name` varchar(40) NOT NULL, PRIMARY KEY (`child_id`), CONSTRAINT `child_ibfk_1` FOREIGN KEY (`child_id`) REFERENCES `item` (`item_id`) ON DELETE CASCADE ON UPDATE CASCADE) CREATE TABLE `item` ( `item_id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`item_id`)) CREATE TABLE `photo` ( `photo_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `item_id` int(10)unsigned NOT NULL, `name` varchar(40) NOT NULL, PRIMARY KEY (`photo_id`), CONSTRAINT `photo_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `item` (`item_id`) ON DELETE CASCADE ON UPDATE CASCADE) 表中相应的parent记录,该记录将自动删除{中的相应记录{1}}表感谢外键,然后外键会自动删除属于该父项的item_id表中的记录。一切都很好,除了我将留在item表中与刚刚删除的子记录相对应的记录。除非parent表中的child也是引用{{1}中相应item的外键,否则item表不会知道某些子记录已被删除表。我觉得我的设计错了吗?在这种情况下,推荐的设计是什么?

0 个答案:

没有答案