Возможно ли использовать несколько внешних ключей в одном поле? - PullRequest
2 голосов
/ 17 августа 2011

Я хочу знать, есть ли способ иметь несколько значений в одном поле в базе данных MySQL, где каждое значение является внешним ключом, ссылающимся на еще одну таблицу.

Я проектирую базу данных с продуктомстол и таблица сертификации продукции.

Я использую InnoDB и ограничения внешнего ключа.

Таблица «product» содержит сведения о конкретных экземплярах продукта.Одной из деталей, содержащихся в таблице продукта, является столбец «product_certification_id», который является внешним ключом, который ссылается на индекс в таблице «product_certification» из двух столбцов.

Таблица сертификации продуктов содержит возможные сертификаты, которые может иметь экземпляр продукта.

Моя проблема связана с тем фактом, что сертификаты продукта не являются взаимоисключающими, поэтому мне интересно, возможно ли иметь несколько значений внешнего ключа в одном поле, ссылающемся на одну и ту же таблицу.

Кроме того, я обеспокоен возможностью добавления большего количества сертификатов в будущем, поэтому мне нужно разработать его в легко масштабируемом стиле в этом смысле.

Спасибо за ваши мысли.

Ответы [ 3 ]

4 голосов
/ 17 августа 2011

Что вы обычно делаете, это устанавливаете связь «многие ко многим» с промежуточной таблицей ссылок.Что-то вроде следующего:

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
);
0 голосов
/ 17 августа 2011

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

0 голосов
/ 17 августа 2011

Если я вас правильно понимаю, отношение product: product_certification равно 1:M, вы можете создать внешний ключ от product_certification до products через product_id вместо product_certification_id в products таблица (что недопустимо, поскольку продукт может иметь более 1 сертификации)

...