Sql 复合实体中重复复合主键的求解
我在两个不同实体之间有一个复合/桥接实体:Sql 复合实体中重复复合主键的求解,sql,database,database-design,foreign-keys,primary-key,Sql,Database,Database Design,Foreign Keys,Primary Key,我在两个不同实体之间有一个复合/桥接实体: CARDS: CARD_ID; [Primary Key] // Other attributes BRIDGE_ENTITY: CARD_ID; [Primary & Foreign Key] MACHINE_ID; [Primary & Foreign Key] // Other attributes MACHINES: MACHINE_ID; [Primary Key]
CARDS:
CARD_ID; [Primary Key]
// Other attributes
BRIDGE_ENTITY:
CARD_ID; [Primary & Foreign Key]
MACHINE_ID; [Primary & Foreign Key]
// Other attributes
MACHINES:
MACHINE_ID; [Primary Key]
// Other attributes
在系统中注册的任何卡都可以用来访问许多机器,反之亦然。这是一种常见的多对多关系
我知道复合键不能有重复的值。但是,在我的数据库设计中,有一种可能性,即数据库设计中的组合键将具有不同的值重复多次。如何修改属性,使
CARD\u ID
和MACHINE\u ID
可以在多行中具有相同或不同的值,而不会造成问题?是否可以向名为LOG\u ID
(唯一ID)的桥接实体添加一个新的主键?中间表桥接实体
对重复项没有限制。如果希望每个对只显示一次,则需要唯一的约束/索引(或主键声明):
然后每一对只能出现一次——这通常是您想要的。如果您想允许重复,只需不声明这样的约束,就可以允许重复。不太确定您想要什么。如上所示,
bridge
表允许有多行具有相同的card\u id
和多行具有相同的machine\u id
。它不能有多行具有相同的(卡号、机器号)
组合。现在你是说你想要有多行具有相同的(卡号,机器号)
?@karmakaze是的,你是对的。在我的理解中,复合密钥不允许这样的操作是正确的吗?在一个卡ID
和一个机器ID
之间需要多个关联的原因是什么?无论原因是什么,您都可以将其放入桥
表的第三列,并将其作为主键的一部分,这样您就可以拥有唯一的(卡ID、机器ID、原因)。
alter table bridge_entity add constraint unq_bridge_entity_card_id_machine_id
unique (card_id, machine_id);