Join表(关联表)是否有主键?多对多的关系。我已经看到一些带有主键的Join表和一些没有人可以解释当你在连接表中有一个主键时为什么?
提前谢谢你; - )
答案 0 :(得分:6)
在纯'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));
有时您会发现需要在联结表中添加非主要列,但我发现这种情况相对较少。
分享并享受。
答案 1 :(得分:4)
所有表都应该有一个主键。 : - )
您可以使用复合外键或盲整数键。
当关联表中没有其他元素时,您将使用复合外键。
当关联表具有自己的元素时,可以使用盲整数键。复合外键将使用两个附加索引进行定义。
答案 2 :(得分:0)
这取决于您关联的记录。只要每个关联不需要多个记录,就可以在关联记录的id上创建复合主键。
但是,确保这两列都已编入索引并定义参照完整性更为重要。
答案 3 :(得分:0)
关系表经常有三个候选键,其中一个不需要用约束强制执行,而选择哪个键(如果有的话)应该是'primary'是任意的。
考虑这个例子CREATE TABLE Couples
(boy_name INTEGER NOT NULL UNIQUE -- nested key
REFERENCES Boys (boy_name),
girl_name INTEGER NOT NULL UNIQUE -- nested key,
REFERENCES Girls(girl_name),
PRIMARY KEY(boy_name, girl_name)); -- compound key
“情侣”表可让您插入 来自原始集合的这些行:
('Joe Celko', 'Brooke Shields') ('Alec Baldwin', 'Kim Bassinger')
想一下这张桌子。
PRIMARY KEY
现在是多余的。如果 每个男孩只出现一次 桌子和每个女孩只出现一次 在表中,然后每个(boy_name, girl_name)对只能出现一次。从理论的角度来看,我可以 丢弃复合键并制作其中一个 boy_name或girl_name新的主要 关键,或者我可以留下它们 候选人密钥。
SQL产品和理论并不总是如此 比赛。很多产品都有 假设
PRIMARY KEY
在 某种特殊的数据模型和方式 将是访问该表的方式 大多数时候。
...然而,我怀疑你的问题意味着更多的东西,“假设我是那种倾向于自然键而不是人工识别器的人,我应该在一个完全由从其他表引用的人工标识符?“