В таблице LOAN
вы должны гарантировать уникальность следующих столбцов:
- movie_id (замените на
copy_id
при условии, что имеется несколько копий фильма)
- friend_id
- loan_date
... потому что я или кто-либо другой должен иметь возможность снимать один и тот же фильм более одного раза. Это также столбцы, которые чаще всего нужно искать ...
Имея это в виду, идея определения столбца с именем loan_id
в качестве первичного ключа для таблицы должна быть избыточной. ORM предписывают использование несоставных первичных ключей для упрощения запросов ...
Но это делает запросы проще ...
На первый взгляд, это облегчает удаление или обновление определенного кредита / и т. Д. - до тех пор, пока вы не поймете, что вам нужно знать соответствующее значение идентификатора сначала . Если вам нужно искать это значение идентификатора на основе фильма, пользователя / друга и даты, тогда вам лучше было бы использовать критерии непосредственно.
Но составные ключи сложны ...
В этом примере ограничение первичного ключа гарантирует, что три столбца - movie_id, friend_id и loan_date - будут уникальными и проиндексированными (в наши дни большинство баз данных автоматически индексируют первичные ключи, если кластеризованный индекс еще не существует) используя лучший возможный индекс для таблицы.
Подход одиночного первичного ключа означает, что loan_id
индексируется с наилучшим индексом для таблицы (SQL Server и MySQL называют их кластерными индексами, для Oracle они все являются просто индексами) и требуют дополнительного составного уникального ограничения / индекс. Для некоторых баз данных может потребоваться дополнительная индексация, выходящая за пределы уникального ограничения ... Таким образом, это делает модель данных более сложной / сложной и бесполезной:
- Некоторые базы данных, такие как MySQL, ограничивают объем пространства, которое вы можете использовать для индексов.
- первичный ключ получает самый идеальный индекс, но значение не имеет отношения к данным в таблице, поэтому использование индекса, связанного с первичным ключом, будет редко, если вообще когда-либо.
Заключение
Мне еще предстоит увидеть законное обоснование для первичного ключа из одного столбца над составным первичным ключом.