有没有办法在Mysql中创建“EQUAL”约束?
想象一下我有一张这样的 table
tb_1:
id | id_fk | order | id_tb_2 | Column D
----------------------------------------
1 | 1 | 1 | 10 | AAA
2 | 1 | 2 | 20 | BBB
3 | 2 | 1 | 30 | CCC
4 | 3 | 1 | 40 | DDD
还有:
tb_2:
id_tb_2 | id_type
------------------
10 | 100
20 | 200
30 | 300
40 | 400
还有:
tb_3:
id_type | model | other_prop
--------------------------------
100 | model_A | A
200 | model_A | B
300 | model_B | C
400 | model_C | D
我想确保 tb_2.id_type.model
对于 id_fk
的相同值将相等和不同order
.
所以我有一个 UNIQUE
[id_fk, order]
的约束
我需要一个EQUAL
[id_fk, id_tb_2.id_type.model]
的约束
这样,我应该无法在 tb_1
中创建值像:
id | id_fk | order | id_tb_2 | Column D
----------------------------------------
1 | 1 | 1 | 10 | AAA
2 | 1 | 2 | 20 | BBB
5 | 1 | 3 | 30 | EEE <--- This has a different model in tb_2
如何创建一个?
最佳答案
使用适当关系规范化的解决方案是删除 tb_1.Column D
列。
那么对 tb_2.id_tb_2
的引用以及扩展对 tb_3.id_type
的引用将是明确的。
tb_1:
id | id_fk | order | id_tb_2
----------------------------
1 | 1 | 1 | 10
2 | 1 | 2 | 20
3 | 2 | 1 | 30
4 | 3 | 1 | 40
换句话说,通过在 tb_1 中包含 D 列,您违反了 Third Normal Form ,因为列 D 是一个属性,它依赖于 tb_1 主键之外的其他内容。
但我不确定您是否已告诉我们您要解决的问题的全部范围。
关于Mysql如何创建EQUAL约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59569124/