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