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