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

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

我在猜如何对下表做正确的对照:
表m\U选项:

  1. +----------+-------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +----------+-------------+------+-----+---------+-------+
  4. | id | int(32) | NO | PRI | NULL | |
  5. | name | varchar(255)| NO | | NULL | |
  6. +----------+-------------+------+-----+---------+-------+

表m\u选项\u值:

  1. +----------+-------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +----------+-------------+------+-----+---------+-------+
  4. | id | int(32) | NO | PRI | NULL | |
  5. | option | int(32) | NO | INDX| NULL | |
  6. | name | varchar(255)| NO | | NULL | |
  7. +----------+-------------+------+-----+---------+-------+

餐桌产品:

  1. +----------+-------------+------+-----+---------+-------+
  2. | Field | Type | Null | Key | Default | Extra |
  3. +----------+-------------+------+-----+---------+-------+
  4. | id | int(32) | NO | PRI | NULL | |
  5. | name | varchar(255 | NO | | NULL | |
  6. | option | int(32) | NO | INDX| NULL | |
  7. | opt_val | int(32) | NO | INDX| NULL | |
  8. +----------+-------------+------+-----+---------+-------+

在表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#

外键定义错误。大概是:

  1. create table option_values (
  2. . . .,
  3. unique (option, name)
  4. );

然后需要一个复合引用:

  1. create table products (
  2. . . .,
  3. foreign key (option, opt_val) references option_values (option, name),
  4. foreign key (option) references options(id)
  5. );

相关问题