MySQL 中特定数据库约束的解决方案
Solution for specific database constraint in MySQL
我需要在数据库中拥有:
Id C1 C2 C3
1 T R P1
2 T R P2
3 T1 R P1
4 T1 R P2
5 T2 U P1
6 T2 U P2
鉴于以上数据,数据库不允许有:
7 T1 U P1
8 T1 U P2
这意味着:
如果C1中出现值T1,C2中出现R,
那么没有其他包含 T1 的行与 R 以外的其他值必须发生。
或者,另一种解释:
令 x 为 C1 列 = 值 1,y 列 C2 = 值 2。如果 DB 中存在具有给定值的 (x,y),则除 2 之外的其他 y 值一定不会出现其他值 1,但是值 2 可能与 1
以外的其他值一起出现
或者,新值示例:
1 2 1
1 2 2
2 2 1
2 2 2
3 2 1
3 2 2
有效。
鉴于数据库的这种状态,必须无法插入以下行:
1 1 2
2 1 1
3 3 2
基本上这意味着在给定原始数据库状态的情况下,第一列中的 1 只能与第二列中的 2 一起出现。
是否可以实现这种约束? (除了在后端代码或触发器中检查它)
此约束意味着您的架构未正确规范化。您应该从此 table 中删除 C2
列,然后像这样创建另一个 table:
CREATE TABLE C1_C2 (
C1 INT PRIMARY KEY,
C2 INT
);
那么你原来的table应该有C1
作为C1_C2.C1
的外键,你可以用一个JOIN
把两个table结合起来s.
我需要在数据库中拥有:
Id C1 C2 C3
1 T R P1
2 T R P2
3 T1 R P1
4 T1 R P2
5 T2 U P1
6 T2 U P2
鉴于以上数据,数据库不允许有:
7 T1 U P1
8 T1 U P2
这意味着:
如果C1中出现值T1,C2中出现R,
那么没有其他包含 T1 的行与 R 以外的其他值必须发生。
或者,另一种解释:
令 x 为 C1 列 = 值 1,y 列 C2 = 值 2。如果 DB 中存在具有给定值的 (x,y),则除 2 之外的其他 y 值一定不会出现其他值 1,但是值 2 可能与 1
以外的其他值一起出现或者,新值示例:
1 2 1
1 2 2
2 2 1
2 2 2
3 2 1
3 2 2
有效。 鉴于数据库的这种状态,必须无法插入以下行:
1 1 2
2 1 1
3 3 2
基本上这意味着在给定原始数据库状态的情况下,第一列中的 1 只能与第二列中的 2 一起出现。
是否可以实现这种约束? (除了在后端代码或触发器中检查它)
此约束意味着您的架构未正确规范化。您应该从此 table 中删除 C2
列,然后像这样创建另一个 table:
CREATE TABLE C1_C2 (
C1 INT PRIMARY KEY,
C2 INT
);
那么你原来的table应该有C1
作为C1_C2.C1
的外键,你可以用一个JOIN
把两个table结合起来s.