此查找(关联)表是否正确? (多对多关系)

时间:2010-06-24 16:15:38

标签: sql mysql sql-server oracle rdbms

CREATE TABLE jokecategory (
  jokeid INT NOT NULL,
  categoryid INT NOT NULL,
  PRIMARY KEY (jokeid, categoryid)
) DEFAULT CHARACTER SET utf8;

尤其是PRIMARY KEY(jokeid,categoryid)?还是有更好的方法来写这个?

提前谢谢你; - )

3 个答案:

答案 0 :(得分:4)

是的,它是一个非常好的表和主键(我可能称之为“关联”表,但我不会称之为“查找”表。)

有些人(不是我)会坚持使用代理键列jokecategoryid作为主键;如果你这样做,你仍然需要一个UNIQUE约束(jokeid,categoryid)来强制执行业务规则。

答案 1 :(得分: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;

答案 2 :(得分:0)

是的,正如托尼已经指出的那样,这是一张非常好的桌子。但我认为没有必要将其创建为具有主键索引的常规堆表。那是两个存储结构。只是索引结构会这样做,所以我的建议是将此表创建为索引组织表。

以下是文档的链接:http://download.oracle.com/docs/cd/E11882_01/server.112/e10713/indexiot.htm#CNCPT911

此致 罗布。