Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 复合实体中重复复合主键的求解_Sql_Database_Database Design_Foreign Keys_Primary Key - Fatal编程技术网

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);