У меня есть следующие таблицы в моей базе данных, которые имеют отношение «многие ко многим», которое выражается соединительной таблицей, которая имеет внешние ключи к первичным ключам каждой из основных таблиц:
- Виджет: WidgetID (PK), Название, Цена
- Пользователь: UserID (PK), Имя, Фамилия
Предположим, что каждая комбинация «Пользователь-виджет» уникальна. Я вижу два варианта того, как структурировать соединительную таблицу, определяющую отношение данных:
- UserWidgets1: UserWidgetID (PK), WidgetID (FK), UserID (FK)
- UserWidgets2: WidgetID (ПК, ФК), UserID (ПК, ФК)
Вариант 1 имеет один столбец для первичного ключа. Однако это кажется ненужным, поскольку в таблице хранятся только данные о связи между двумя первичными таблицами, и эта связь сама по себе может формировать уникальный ключ. Это приводит к варианту 2, который имеет первичный ключ из двух столбцов, но теряет уникальный идентификатор из одного столбца, который имеет вариант 1. Я также мог бы дополнительно добавить двухколоночный уникальный индекс (WidgetID, UserID) в первую таблицу.
Есть ли какая-либо реальная разница между этими двумя с точки зрения производительности или какая-либо причина предпочесть один подход другому для структурирования таблицы UserWidgets «многие ко многим»?