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