【发布时间】:2014-05-25 20:57:41
【问题描述】:
我正在为我的一个学校项目制作这个包含超级英雄的数据库,并且我有一个超级英雄表(显然)和一个敌人表。所以敌人表有两个外键:
bad_superhero_id
和
good_superhero_id
此表的目的是将角色表(超级英雄)中的好超级英雄与坏超级英雄(他们的敌人)联系起来。两个外键都从 superheroes 表的 id 中获取值。问题是我的老师不喜欢这样,我不知道为什么。我的意思是,我在一本名为 Beginning PHP5, Apache, and MySQL Web Development 的书中看到了这个例子,我还询问了在创建数据库结构方面有良好经验的同事。他们说这不是问题,但我的老师想让我举个例子,因为她认为这不是很好的关系,并希望我创造一个她想到的愚蠢的解决方法。我仍然认为这不是建立这种关系的好方法,所以我想在这里询问关于这个问题的第三意见。如果您提出您的意见,我将不胜感激,以便我了解使用这样的关系是坏、好还是无关紧要的做法。
编辑:
CREATE TABLE superhero (
id INT NOT NULL AUTO_INCREMENT,
nick_name VARCHAR,
align ENUM ('good', 'bad'),
PRIMARY KEY(id)
) ENGINE=INNODB;
CREATE TABLE enemies_link (
id INT NOT NULL AUTO_INCREMENT,
good_sh_id INT NOT NULL,
bad_sh_id INT NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (good_sh_id, bad_sh_id)
REFERENCES superheroes(id)
ON UPDATE CASCADE ON DELETE RESTRICT
) ENGINE=INNODB;
EDIT2: 是的,我忘了补充说我想要 n 到 n 连接。假设蜘蛛侠的敌人有毒液和绿妖精,另一方面,毒液有一些其他优秀的超级英雄作为敌人等等。
【问题讨论】:
-
请编辑您的帖子并包含两个表格的定义。谢谢。
-
我不完全确定您的目标是什么。请包括表定义
-
这个表定义了什么样的关系?另外,您的老师提倡的替代方法是什么?
-
添加了一些修改。在这种情况下,我老师的方法并不重要。我只是感兴趣这是正确的做法还是不好的做法
-
等等:你是把
enemies_link定义为一个新表还是一个复合外键?
标签: mysql sql database foreign-keys