Mysql如何创建EQUAL约束?

标签 mysql triggers constraints unique-constraint check-constraints

有没有办法在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/

相关文章:

php - 从数据库回显自动\n

php - 当值通过变量传递时会出现错误

php - 使用提交按钮显示数据库中的数据

mysql - 递归MySQL触发器,调用同一个表和同一个触发器

ios - 向 UITableViewCell 添加约束

ios - 尝试设置 UIButton 的约束时出错

php - 优化此 SQL 查询的最佳方法是什么?

oracle10g - 如何使用触发器获取序列中的下一个值

php - SQL 中的插入查询花费了很多时间

grails - 向List的元素添加约束