Я хочу знать, есть ли способ иметь несколько значений в одном поле в базе данных MySQL, где каждое значение является внешним ключом, ссылающимся на другую таблицу.
Я разрабатываю базу данных с таблицей продуктов и таблицей сертификации продуктов.
Я использую ограничения InnoDB и внешних ключей.
В таблице «продукт» содержатся сведения о конкретных экземплярах продукта. Одна из деталей, содержащихся в таблице продуктов, – это столбец «product_certification_id», который является внешним ключом, ссылающимся на индекс в таблице столбцов «product_certification».
В таблице сертификации продукта содержатся возможные сертификаты, которые могут иметь экземпляры продукта.
Моя проблема связана с тем, что сертификаты продукта не являются взаимоисключающими, поэтому мне интересно, возможно ли иметь несколько значений внешнего ключа в одном и том же поле, ссылающемся на одну и ту же таблицу.
Кроме того, меня беспокоит возможность добавления дополнительных сертификатов в будущем, поэтому мне нужно в этом смысле легко разработать масштабируемое решение.
Спасибо за ваши мысли.
То, что вы обычно делаете, – это установление отношений многих и многих с промежуточной таблицей ссылок. Что-то вроде следующего:
CREATE TABLE product ( `id` integer AUTO_INCREMENT NOT NULL, -- other cols -- PRIMARY KEY (`id`) ); CREATE TABLE certification ( `id` integer AUTO_INCREMENT NOT NULL, -- other cols -- PRIMARY KEY (`id`) ); CREATE TABLE product_certification ( `product_id` integer NOT NULL, `certification_id` integer NOT NULL, PRIMARY KEY (`product_id`, `certification_id`), CONSTRAINT `product_id_product_id` FOREIGN KEY (`product_id`) REFERENCES `product` (`id`) ON DELETE CASCADE, CONSTRAINT `certification_id_certification_id` FOREIGN KEY (`certification_id`) REFERENCES `certification` (`id`) ON DELETE CASCADE );
Если я правильно вас понимаю, product
отношений: product_certification
– 1:M
вы можете создать внешний ключ из product_certification
для products
через product_id
, вместо того, чтобы иметь product_certification_id
в таблице products
(что является недопустимым, поскольку продукт может иметь более 1 сертификации )
Одно поле не может быть внешним ключом для более чем одного поля в другой таблице. Это просто невозможно. Поскольку ваша внешняя таблица имеет составной ключ, ваша таблица должна иметь одинаковые поля.