2010-06-24 129 views
3
CREATE TABLE jokecategory (
    jokeid INT NOT NULL, 
    categoryid INT NOT NULL, 
    PRIMARY KEY (jokeid, categoryid) 
) DEFAULT CHARACTER SET utf8; 

特别是PRIMARY KEY(jokeid,类别ID)?还是有更好的方法来写这个?该查找(关联)表是否正确? (多对多的关系)

预先感谢您;-)

+0

正确的怎么样?你问是否SQL会运行或关于结构? – 2010-06-24 16:21:40

+0

我不确定查找表的两列主键,并且想确认它是正确的! – Imran 2010-06-24 18:18:09

回答

4

是的,它是一个完美的表和主键(我可能把这叫做“关联”表,但我不会把它叫做“查找”表)。

有些人(不是我)将坚持有一个代理键列jokecategoryid作为主键;如果你这样做,你仍然需要对(jokeid,categoryid)实施业务规则的UNIQUE约束。

+0

我同意 - 以你喜欢的方式制作你的钥匙。在我看来,每种方法的实用性都与问题本身的性质有关。有时使用多列会更容易,尤其是在使用为您生成代码和表格以及表格的框架时。 – MJB 2010-06-24 16:45:10

+0

感谢你!我想这是我感到困惑“有些人(不是我)将坚持有一个代理键列jokecategoryid作为主键”。如果我有这个代理键列,为什么我会拥有它?以上有什么好处? – Imran 2010-06-24 18:23:57

+0

我认为在添加代理键方面没有任何好处。有些人喜欢代理人(愚蠢?)的一致性;其他人使用它们是因为它们使用了一个“框架”(参见MJB的评论),这个框架倾向于在每个表中查找代理。 – 2010-06-24 21:33:59

0

我希望该表有两个外键如

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;