我在猜如何对下表做正确的对照:
表m\U选项:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(32) | NO | PRI | NULL | |
| name | varchar(255)| NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
表m\u选项\u值:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(32) | NO | PRI | NULL | |
| option | int(32) | NO | INDX| NULL | |
| name | varchar(255)| NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
餐桌产品:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(32) | NO | PRI | NULL | |
| name | varchar(255 | NO | | NULL | |
| option | int(32) | NO | INDX| NULL | |
| opt_val | int(32) | NO | INDX| NULL | |
+----------+-------------+------+-----+---------+-------+
在表product中,“option”和“opt\u val”列是索引,并且有一个约束选项“被约束到表m\u option中的外键“id”,而“opt\u val”被约束到表m\u option\u value中的外键“id”。我试图实现的是不仅将“opt\u val”值约束到其主表,而且约束到当前表列选项。我的意思是,我只想在满足两个条件的情况下允许“opt\u val”中的值:值必须存在于option中(已通过常规约束实现),并且值必须与“option”列值具有相同的主表标识符。如果我没有正确表达mysqlf,我将举几个例子:
表m\U选项值:
1-颜色
2-形状
表m\u选项\u值:
1-1(颜色)-红色
2-1(颜色)-蓝色
3-2(形状)-方形
4-2(形状)-圆
表产品价值:
1-toy1-1(颜色)-1(红色)正确
2-toy2-2(形状)-3(方形)正确
允许3-toy3-1(颜色)-4(圆圈),但不正确
第3行“opt\u val”列不正确,因为该列应该只允许“color”值,在“m\u option\u values”中定义,“option”值设置为“1”。
1条答案
按热度按时间c0vxltue1#
外键定义错误。大概是:
然后需要一个复合引用: