改写问题:
我有三个表,对象,所有者和objectOwnerRelation
对象具有三列:id,名称,类型
所有者有两列:id,所有者
objectOwnerRelation具有三列:id,objectId,ownerId
objectId =对象中的id
ownerId =所有者中的ID
两个对象可以具有相同的名称和类型,但前提是所有者不同。这意味着具有相同名称和类型的两个对象不能出现在具有相同ownerId的objectOwnerRelation中
一个对象可以有多个所有者,一个所有者可以有多个对象。
最佳答案
无法强制执行约束:
两个对象可以具有相同的名称和类型,但前提是所有者不同。
仅使用声明性参照完整性(DRI)。仅使用DRI,您可以创建一个表,其中包含构建唯一键所需的所有列。您可以将object.name
和object.type
规范化为objectOwnerRelation
表。这样可以确保objectOwnerRelation
中没有名称,类型和所有者相同的记录,而仅在相交表本身中。
到最后,DRI不允许子表对父表施加约束。
您正在寻找的约束需要使用触发器或其他一些代码以程序方式施加。
关于mysql - 跨多个表的唯一键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12997073/