Да, хорошей практикой является использование первичного ключа в каждой таблице.
Но, НЕ в каждой таблице должен быть один столбец идентификатора автоматического номера.Я чувствовал необходимость разъяснить это, потому что по какой-то причине многие люди склонны добавлять дополнительные идентификаторы во все таблицы, даже если уже существует достаточно хороший кандидат.Например, таблица «многие ко многим», представляющая Users <-> Groups
, должна использовать {user_id, group_id}
.
Помимо остановки дубликатов у двери, ограничение первичного ключа также несет информацию, которая используется оптимизатором при генерации выполненияпланы.
Вот почему у меня всегда, или, по крайней мере, с очень немногими исключениями, есть первичный ключ для всех таблиц, которые я создаю.Фактически, я даже создаю первичные ключи для таблиц отчетов, где большинство столбцов являются частью первичного ключа.Потому что во время разработки я получу хотя бы одно уникальное нарушение ограничения, потому что я сделал что-то не так.С кучей данных и отсутствием ограничений я бы не заметил ошибку.