我有以下布局的表格:
Project
可以有很多Entity
个关系。Entity
可以有很多DataPoint
关系。如何强制Name
表的DataPoint
列必须是 项目 唯一?
目前,我在项目的Entity
中有一个外键,在DataPoint
中有一个外键用于该实体。我考虑将ProjectId添加为DataPoint
表中的另一个外键列,以便我可以使用DataPoint.ProjectId, DataPoint.Name
创建一个唯一约束,但这会引入一个无法保证DataPoint的新问题。 EntityId实际上是DataPoint.ProjectId的子代。
答案 0 :(得分:0)
您希望阻止指向同一项目的两个实体具有相同的数据点。 SQL约束不直接支持这一点,这意味着触发器是一种解决方案。
如果您可能产生一些额外的开销,您可以有效地做同样的事情:在projectid
中加入datapoint
。然后包括以下约束:
constraint foreign key (projectid, entityid) refers to entities(projectid, entityid);
constraint unique (projectid, name);
第一个约束是多余的(不需要projectid
),但它没有什么害处。最大的问题是您需要在projectid
中加入datapoint
- 并记住插入它。