我有这两个表:
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 |
+--------+----------+
我需要添加这样一个限制,即,sell_brands列只接受在汽车表(宝马,奥迪,丰田)中填充的值。
我想象那样:
+----+----------------+----------+
| 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
答案 0 :(得分:1)
将逗号分隔值或任何类型的列表放入数据库中几乎总是一个坏主意。通常,当你认为你需要一个“清单”时,你真正需要的是另一张桌子;在你的情况下:
cars
- car_id
- info about the car
shops
- shop_id
- info about the shop
car_shop
- car_id
- shop_id
如果商店“拥有”多辆汽车,car_shop中的多行将参考其shop_id。如果一辆车在一个以上的商店,car_shop中的多行将拥有其car_id。 car_shop
也可用于包含数量,价格等信息......