Скажем, у меня есть следующая таблица:
TABLE: product
============================================================
| product_id | name | invoice_price | msrp |
------------------------------------------------------------
| 1 | Widget 1 | 10.00 | 15.00 |
------------------------------------------------------------
| 2 | Widget 2 | 8.00 | 12.00 |
------------------------------------------------------------
В этой модели product_id
— это ПК, на который ссылается ряд других таблиц.
У меня есть требование, чтобы каждая строка была уникальной. В примере about строка определяется как столбцы name
, invoice_price
и msrp
. (В разных таблицах могут быть разные определения того, какие столбцы определяют «строку».)
ВОПРОСЫ:
- В приведенном выше примере следует ли сделать
name
,invoice_price
иmsrp
составным ключом, чтобы гарантировать уникальность каждой строки? - Если ответ на № 1 «да», это будет означать, что текущий ПК,
product_id
, не будет определен как ключ; скорее, это будет просто автоматически увеличивающийся столбец. Будет ли этого достаточно для использования другими таблицами для создания связей с определенными строками в таблицеproduct
?
Обратите внимание, что в некоторых случаях в таблице может быть 10 или более столбцов, которые должны быть уникальными. Это будет много столбцов, определяющих составной ключ! Это плохо?
Я пытаюсь решить, следует ли мне попытаться обеспечить такую уникальность на уровне базы данных или на уровне приложений. Я чувствую, что должен сделать это на уровне базы данных, но я обеспокоен тем, что могут быть непреднамеренные побочные эффекты использования не-ключа в качестве FK или наличия такого количества столбцов, определяющих составной ключ.