Вставить в таблицу при использовании суррогатного ключа - PullRequest
0 голосов
/ 28 октября 2018

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

Таблица 1:

  • product_id (INT 11) - ПК, автоинкремент
  • category (INT 11) - индекс, от FK до Table2.category_id
  • product (VARCHAR 255)

Таблица 2:

  • category_id (INT11) - ПК, автоинкремент
  • category_name (VARCHAR 255)

Теперь, при добавлении нового товара в таблицу 1, мне нужно INSERT как по категории, так и по товару.Но категория - это суррогатный ключ, который относится к столбцу Table2.category_id (в каждой категории есть столбец), что означает, что при вставке я на самом деле не знаю category_id, просто category_name.

Есть идеи, как заставить эту работу работать эффективно?

Или я должен просто отказаться от суррогатных ключей и полностью перейти к естественным ключам?

Спасибо

1 Ответ

0 голосов
/ 28 октября 2018

Если вы хотите вставить новый продукт, но вы знаете только category_name, но не category_id, тогда мы попробуем сделать INSERT INTO ... SELECT:

INSERT INTO table1 (category, product)
SELECT category_id, 'new product'
FROM table2
WHERE category_name = 'some category';

Мне кажется, что это плохой дизайн по ряду причин. Во-первых, предположительно, ваше приложение (например, PHP) будет иметь дело с category_id под капотом, , а не с category_name. Поэтому в идеале вам не нужно запрашивать table2, чтобы эта вставка работала. Другая проблема заключается в том, что две или более категорий могут иметь одно и то же имя (но различное category_id). Всегда лучше работать напрямую с первичным ключом, если это возможно.

...