如何跨多个层次结构级别应用唯一约束

时间:2017-11-12 04:01:37

标签: sql sql-server sql-server-2014

我有以下布局的表格:

  • Project可以有很多Entity个关系。
  • Entity可以有很多DataPoint关系。

如何强制Name表的DataPoint列必须是 项目 唯一?

目前,我在项目的Entity中有一个外键,在DataPoint中有一个外键用于该实体。我考虑将ProjectId添加为DataPoint表中的另一个外键列,以便我可以使用DataPoint.ProjectId, DataPoint.Name创建一个唯一约束,但这会引入一个无法保证DataPoint的新问题。 EntityId实际上是DataPoint.ProjectId的子代。

1 个答案:

答案 0 :(得分:0)

您希望阻止指向同一项目的两个实体具有相同的数据点。 SQL约束不直接支持这一点,这意味着触发器是一种解决方案。

如果您可能产生一些额外的开销,您可以有效地做同样的事情:在projectid中加入datapoint。然后包括以下约束:

 constraint foreign key (projectid, entityid) refers to entities(projectid, entityid);

constraint unique (projectid, name);

第一个约束是多余的(不需要projectid),但它没有什么害处。最大的问题是您需要在projectid中加入datapoint - 并记住插入它。