mysql约束-允许列值与主表标识符匹配

mpbci0fu  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(358)

我在猜如何对下表做正确的对照:
表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”。

c0vxltue

c0vxltue1#

外键定义错误。大概是:

create table option_values (
    . . .,
    unique (option, name)
);

然后需要一个复合引用:

create table products (
    . . .,
    foreign key (option, opt_val) references option_values (option, name),
    foreign key (option) references options(id)
);

相关问题