联接表(关联表)是否有主键?多对多关系
联接表(关联表)是否有主键?多对多的关系。我已经看到一些带有主键的Join表,有些没有,有人请解释何时在连接表中有一个主键,为什么?联接表(关联表)是否有主键?多对多关系
预先感谢您;-)
在纯粹的“加入”或接线表中的所有字段将是主键的一部分。例如,让我们考虑下表:
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));
有时你会发现需要增加一个非主列到交界表,但我觉得这是比较罕见的。
分享和享受。
所有的表都应该有一个主键。 :-)
您可以使用复合外键或盲整数键。
当关联表中没有其他元素时,您将使用复合外键。
当关联表具有自己的元素时,您可以使用盲整数键。复合外键将被定义为两个附加索引。
如果你选择添加一个人工密钥(“盲整数密钥” )你仍然需要复合键来防止“现实生活”重复。 – onedaywhen 2010-06-22 14:05:07
@onedaywhen:对。 – 2010-06-22 15:30:27
这取决于您正在关联的记录。只要您不需要每个关联有多个记录,就可以在关联记录的ID上创建复合主键。
但是,更重要的是确保这两列都已编入索引并且具有定义的参照完整性。
你更喜欢哪个数据库的答案? – 2010-06-22 11:02:13
@Mark Byers mysql请 – Imran 2010-06-22 11:05:30
这个问题类似于http://*.com/questions/208666/two-foreign-keys-instead-of-primary – 2010-06-22 11:05:34