我有一个包含五列的表格:A、B、C、D 和 E。
并且我需要遵守以下限制:
- A 是主键。
- 对于一个B,只能有一个C,即:1-1; 2-1 ; 3-2 但不是 1-2。
- B-C和D可以取任意值但不能重复,即:1-1 1 ; 1-1 2 ;不再是 1-1 1。
- E 可以取任何值。
所以,考虑下面的顺序
| A | B | C | D | E |
| 1 | 1 | 1 | 1 | 1 | -> OK
| 2 | 1 | 2 | 1 | 1 | -> Should fail, because there is a B with another C, 1-2 must be 1-1.
| 3 | 1 | 1 | 2 | 1 | -> OK
| 4 | 1 | 1 | 2 | 1 | -> Should fail, because relation between B-C and D is repeated.
| 5 | 2 | 1 | 1 | 1 | -> OK
有没有办法通过数据库中的某些约束来遵守这种行为?
谢谢!
最佳答案
A和E与问题无关,可以忽略。
通过在 BCD 上创建唯一索引可以轻松解决 BCD 规则。
如果对于每个 B 只能有一个 C,则您的数据库未规范化。用 B 和 C 创建一个新表。将 B 设为主键或在 B 上创建唯一索引。然后从原始表中删除 C。 (此时 BCD 上的唯一索引成为 BD 上的唯一索引。)
如果不对表进行规范化,我认为没有任何方法可以通过约束来做到这一点。您当然可以使用触发器或代码来完成。
关于sql - 如何给数据库约束以确保表中的这种行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40750288/