2010-06-22 181 views
4

联接表(关联表)是否有主键?多对多的关系。我已经看到一些带有主键的Join表,有些没有,有人请解释何时在连接表中有一个主键,为什么?联接表(关联表)是否有主键?多对多关系

预先感谢您;-)

+2

你更喜欢哪个数据库的答案? – 2010-06-22 11:02:13

+0

@Mark Byers mysql请 – Imran 2010-06-22 11:05:30

+1

这个问题类似于http://stackoverflow.com/questions/208666/two-foreign-keys-instead-of-primary – 2010-06-22 11:05:34

回答

5

在纯粹的“加入”或接线表中的所有字段将是主键的一部分。例如,让我们考虑下表:

CREATE TABLE USERS 
    (ID_USER NUMBER PRIMARY KEY, 
    FIRST_NAME VARCHAR2(32), 
    LAST_NAME VARCHAR2(32)); 

CREATE TABLE ATTRIBUTES 
    (ID_ATTRIBUTE NUMBER PRIMARY KEY, 
    ATTRIBUTE_NAME VARCHAR2(64)); 

这些之间的结台,让许多用户有很多属性是

CREATE TABLE USER_ATTRIBUTES 
    (ID_USER NUMBER REFERENCES USERS(ID_USER), 
    ID_ATTRIBUTE NUMBER REFERENCES ATTRIBUTES(ID_ATTRIBUTE), 
    PRIMARY KEY(ID_USER, ID_ATTRIBUTE)); 

有时你会发现需要增加一个非主列到交界表,但我觉得这是比较罕见的。

分享和享受。

3

所有的表都应该有一个主键。 :-)

您可以使用复合外键或盲整数键。

当关联表中没有其他元素时,您将使用复合外键。

当关联表具有自己的元素时,您可以使用盲整数键。复合外键将被定义为两个附加索引。

+0

如果你选择添加一个人工密钥(“盲整数密钥” )你仍然需要复合键来防止“现实生活”重复。 – onedaywhen 2010-06-22 14:05:07

+0

@onedaywhen:对。 – 2010-06-22 15:30:27

0

这取决于您正在关联的记录。只要您不需要每个关联有多个记录,就可以在关联记录的ID上创建复合主键。

但是,更重要的是确保这两列都已编入索引并且具有定义的参照完整性。