Sql 将多对多关联的属性定义为唯一

Sql 将多对多关联的属性定义为唯一,sql,Sql,是否可以将多对多关联的属性定义为唯一的? 我只能对实体使用Unique吗? 例如,我有两个关联GO的实体,它们具有属性d: A(ID,t) ID=primary key B(u,c) u= primary key GO(d,ID_A,u_B). d=unique?????? 关联GO是带有A和B的多对多。我想将GO关联的属性d定义为唯一。我可以这样做吗?是的,您可以,但是您需要指定唯一约束,而不是在d上,而是在您与之建立关系的这些列上。根据您的评论,我准备了一个po

是否可以将多对多关联的属性定义为唯一的? 我只能对实体使用Unique吗? 例如,我有两个关联GO的实体,它们具有属性d:

A(ID,t)      ID=primary key
B(u,c)       u= primary key
GO(d,ID_A,u_B).    d=unique??????

关联GO是带有A和B的多对多。我想将GO关联的属性d定义为唯一。我可以这样做吗?

是的,您可以,但是您需要指定唯一约束,而不是在
d
上,而是在您与之建立关系的这些列上。根据您的评论,我准备了一个postgres示例():

创建表A(
id int主键,
t瓦查尔(10)
);
创建表B(
u int主键,
c瓦查尔(10)
);
创建表GO_(
ID_A int引用A(ID),
u_B int参考文献B(u),
唯一(标识A、标识b)
);
插入A值(1,'A'),(2,'b');
插入B值(1,'x'),(2,'y');
这样我们就可以将这些实体放入
GO
表中(请注意
GO
在sql中是半限定词):

插入GO_uu值(1,1)、(2,2)、(2,1);
但由于unique(ID\u A,u\u b)约束,这将引发一个错误

插入GO_uu值(1,1);

您需要添加更多详细信息,并明确说明您的具体要求。最好有一些例子。您可以使用复合键创建唯一索引,因此您最有可能这样做。如果您要在此处添加更多详细信息,请编辑并将其添加到您的问题中。我有一个问题:但是表a和表B有主键,为什么要放置唯一索引(ID_a,u_B)?ID_A和u_b是表GO的主键和外键,因此它们在表GO中自动唯一(我不能有相同的ID_A和u_b值)。主键(
A.ID
b.u
)是给定表的一种约束,并在其中强制唯一性。但它是主键这一事实在与其相关的任何表中都不会改变(
GO
在本例中,它必须单独声明。可以对
ID\u A
u\u B
列执行此操作,但是如果您不想拥有唯一的组合,您可以创建
unique
指定两列。观察它会发生什么变化的最佳方法是转到我在响应中链接的小提琴,取消最后一列的注释插入-将引发错误。然后用
unique
注释掉该行,然后再次尝试运行,它将立即通过。