改写问题:

我有三个表,对象,所有者和objectOwnerRelation

对象具有三列:id,名称,类型

所有者有两列:id,所有者

objectOwnerRelation具有三列:id,objectId,ownerId

objectId =对象中的id

ownerId =所有者中的ID

两个对象可以具有相同的名称和类型,但前提是所有者不同。这意味着具有相同名称和类型的两个对象不能出现在具有相同ownerId的objectOwnerRelation中

一个对象可以有多个所有者,一个所有者可以有多个对象。

最佳答案

无法强制执行约束:


  两个对象可以具有相同的名称和类型,但前提是所有者不同。


仅使用声明性参照完整性(DRI)。仅使用DRI,您可以创建一个表,其中包含构建唯一键所需的所有列。您可以将object.nameobject.type规范化为objectOwnerRelation表。这样可以确保objectOwnerRelation中没有名称,类型和所有者相同的记录,而仅在相交表本身中。

到最后,DRI不允许子表对父表施加约束。

您正在寻找的约束需要使用触发器或其他一些代码以程序方式施加。

关于mysql - 跨多个表的唯一键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12997073/

10-11 23:12