添加约束,使列只接受来自另一列的逗号分隔的值

hzbexzde  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(402)

我有两张table:

CREATE TABLE `car_shop` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `selling_brands` varchar(25) DEFAULT NULL,
  `some_col` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

CREATE TABLE `cars` (
  `car_id` int(11) NOT NULL AUTO_INCREMENT,
  `car_make` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`car_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

第二个包含以下内容:

+--------+----------+
| car_id | car_make |
+--------+----------+
|      1 | BMW      |
|      2 | Audi     |
|      3 | Toyota   |
+--------+----------+

我需要添加这样一个约束,即“销售品牌”列只接受car表中填充的值(宝马、奥迪、丰田)。
我是这样想的:

+----+----------------+----------+
| id | selling_brands | some_col |
+----+----------------+----------+
|  1 | BMW, Audi      | shop 1   |
|  2 | Toyota         | shop 2   |
+----+----------------+----------+

我试图添加如下约束,但它不起作用:

ALTER TABLE car_shop
ADD FOREIGN KEY (selling_brands) 
REFERENCES cars(car_make)

我得到:错误:(conn:24)无法添加外键约束错误代码:1215

vhmi4jdf

vhmi4jdf1#

将逗号分隔的值或任何类型的列表放入数据库几乎总是一个坏主意。通常,当你认为你需要一张“清单”时,你真正需要的是另一张table;就你而言:

cars
- car_id
- info about the car

shops
- shop_id
- info about the shop

car_shop
- car_id
- shop_id

如果一个商店“有”多辆车,则“汽车商店”中的多行将引用其“汽车商店id”。如果一辆车在多个商店中,则“汽车商店”中的多行将有其“汽车id”。 car_shop 也可用于包含诸如数量、价格等信息。。。

相关问题