Добавьте ограничение, чтобы столбец принимал только значения, разделенные запятыми, из другого столбца - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть две таблицы:

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   |
+--------+----------+

Мне нужно добавить такое ограничение, чтобы столбец selling_brands принимал только заполненные значенияв автомобильном столе (BMW, Audi, Toyota).

Я представляю это так:

+----+----------------+----------+
| 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

1 Ответ

0 голосов
/ 26 апреля 2018

Поместить в базу данных значения, разделенные запятыми, или любые другие списки, почти всегда плохая идея.Обычно, когда вы думаете, что вам нужен «список», вам действительно нужна другая таблица;в вашем случае:

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 также может использоваться для хранения информации, такой как количество, цена и т. Д. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...