小编典典

跨多个表的唯一键

sql

改写问题:

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

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

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

objectOwnerRelation具有三列:id,objectId,ownerId

objectId =对象中的id

ownerId =所有者中的ID

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

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


阅读 159

收藏
2021-04-15

共1个答案

小编典典

无法强制执行约束:

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

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

最终, DRI不允许子表对父项施加约束。

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

2021-04-15