CREATE TABLE jokecategory (
jokeid INT NOT NULL,
categoryid INT NOT NULL,
PRIMARY KEY (jokeid, categoryid)
) DEFAULT CHARACTER SET utf8;
特别是PRIMARY KEY(jokeid,类别ID)?还是有更好的方法来写这个?该查找(关联)表是否正确? (多对多的关系)
预先感谢您;-)
CREATE TABLE jokecategory (
jokeid INT NOT NULL,
categoryid INT NOT NULL,
PRIMARY KEY (jokeid, categoryid)
) DEFAULT CHARACTER SET utf8;
特别是PRIMARY KEY(jokeid,类别ID)?还是有更好的方法来写这个?该查找(关联)表是否正确? (多对多的关系)
预先感谢您;-)
是的,它是一个完美的表和主键(我可能把这叫做“关联”表,但我不会把它叫做“查找”表)。
有些人(不是我)将坚持有一个代理键列jokecategoryid作为主键;如果你这样做,你仍然需要对(jokeid,categoryid)实施业务规则的UNIQUE约束。
我同意 - 以你喜欢的方式制作你的钥匙。在我看来,每种方法的实用性都与问题本身的性质有关。有时使用多列会更容易,尤其是在使用为您生成代码和表格以及表格的框架时。 – MJB 2010-06-24 16:45:10
感谢你!我想这是我感到困惑“有些人(不是我)将坚持有一个代理键列jokecategoryid作为主键”。如果我有这个代理键列,为什么我会拥有它?以上有什么好处? – Imran 2010-06-24 18:23:57
我认为在添加代理键方面没有任何好处。有些人喜欢代理人(愚蠢?)的一致性;其他人使用它们是因为它们使用了一个“框架”(参见MJB的评论),这个框架倾向于在每个表中查找代理。 – 2010-06-24 21:33:59
我希望该表有两个外键如
CREATE TABLE jokecategory (
jokeid INT NOT NULL REFERENCES joke (jokeid),
categoryid INT NOT NULL REFERENCES category (categoryid),
PRIMARY KEY (jokeid, categoryid)
) DEFAULT CHARACTER SET utf8;
是的,这是一个非常好的桌子,正如Tony已经指出的那样。但我认为不需要将它创建为具有主键索引的常规堆表。这是两个存储结构。只是索引结构会这样做,所以我的建议是将此表创建为索引组织表。
下面是对文件的链接:http://download.oracle.com/docs/cd/E11882_01/server.112/e10713/indexiot.htm#CNCPT911
问候, 罗布。
正确的怎么样?你问是否SQL会运行或关于结构? – 2010-06-24 16:21:40
我不确定查找表的两列主键,并且想确认它是正确的! – Imran 2010-06-24 18:18:09