Что выбрать: primary key или unique для уникального foreign key?

Дано

Таблица Автор
Поля: ID |… |…
Таблица Книга
Поля: ID |… |…
Таблика КнигаАвтор
Поля: КнигаID | АвторID

Отношения:
КнигаID -> Книга.ID
АвторID -> Автор.ID
(-> = foreign key)

Нужное поведение: одинаковые книга-автор могут быть заданы только один раз.

Каким образом лучше это сделать? Задать (КнигаID, АвторID) как UNIQUE, либо (КнигаID, АвторID) как composite Primary Key?

Использование NULL не предполагается…
  • Вопрос задан
  • 5129 просмотров
Пригласить эксперта
Ответы на вопрос 5
reaferon
@reaferon
На всякий случай: убедитесь в уникальности «книга — автор». Например, если подразумевается интернет-магазин или каталог, нужно учитывать, что одну и ту же книгу могут издавать разные издательства. Кроме того, даже в одном издательстве автор может фигурировать в разных ипостасях: «Б.Акунин», «Акунин Б.» «Борис Акунин» и т.п.
Ответ написан
@MikhailEdoshin
Если для учебного проекта, то лучше как primary ID.
Ответ написан
Комментировать
Sardar
@Sardar
Лучше UNIQUE. Это позволит иметь отдельный простой точный id для связной таблицы. Это обычно упрощает работу потом, если придется работать со связной таблицей в параллельных запросах вне serialized транзакций. Лишний индекс для int primary key не проблема.
Ответ написан
Комментировать
beliyadm
@beliyadm
because open source matters
Уникальный идентификатор в любом случае должен быть.
Если речь про книги — то я бы дублировал уникальность по ID UNIQUE и полю с ISBN, если даже одна книга разных издательств — номер будет другой
Ответ написан
Комментировать
freeek
@freeek
Можно в таблицу КнигаАвтор добавить пару полей, например: КнигаАвторID и Note :)
Оять же, зависит от поставленных целей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы