【发布时间】:2019-02-14 23:55:21
【问题描述】:
在下表中,(colA, colB, colC) 是主键。在colD中,我定义了一种新的id类型,每个(colA,colB)组合都是唯一的,即:
colD = f(colA,colB)
所以 (A,1) 应该给我 id_1,(B,2) 对应于 id_2 等,其中 id 是整数值。下表显示了一个错误,其中 (A,1) 有 2 个 id - id_1 和 id_2。
我想强制执行一个约束,即每对值 (colA,colB) 映射到 colD 中的一个且只有一个值。当然,我可以为 (colA,colB,colC,colD) 添加唯一约束,因为 (colA,colB,colC) 是主键,但这不会检测 colC 和 colD 同时发生变化。
我不确定这里最好的方法是什么。
+colA + colB + colC + colD +
+--------------------------+
| A | 1 |180901| id_1 |
| A | 1 |180902| id_1 |
| A | 1 |180903| id_1 |
| A | 1 |180904| id_2 |
| . | . | . | . |
| . | . | . | . |
| . | . | . | . |
| | | | |
| | | | |
| | | | |
| | | | |
【问题讨论】:
-
创建一个视图而不是存储计算值。 (或者有一个计算列。)
-
@jarlh 的重点是最终,primkey 将是 (colD,colC) 而 colA, colB 将被删除。
-
为什么不能为 (cola, colb, cold) 创建一个唯一的索引/约束?
-
@SalmanA - 因为在他们的样本中,他们有 3 行的组合
(A,1,id_1)并且他们希望允许这样做。
标签: sql sql-server tsql