Mam następujące tabele w mojej bazy danych, które mają wiele-do-wielu relacji, która jest wyrażona przez łączącej tabeli, która ma kluczy obcych do kluczy podstawowych każdego z głównych tabelach:Jeden lub dwa klucze główne w tabeli wielu do wielu?
- Widget: widgetid (PK), tytuł, cena
- użytkownika: ID użytkownika (PK), imię, nazwisko
Załóżmy, że każda kombinacja użytkownika Widget jest wyjątkowy. Widzę dwie opcje jak struktura stół łączący, który określa relację danych:
- UserWidgets1: UserWidgetID (PK), widgetid (FK), ID użytkownika (FK)
- UserWidgets2: widgetid (PK, FK), ID użytkownika (PK, FK)
Opcja 1 ma pojedynczą kolumnę klucza podstawowego. Jednak wydaje się to zbędne, ponieważ jedynymi danymi przechowywanymi w tabeli są relacje między dwiema podstawowymi tabelami, a ta sama relacja może tworzyć unikalny klucz. W ten sposób prowadząc do opcji 2, która ma dwukolumnowy klucz podstawowy, ale traci unikalny identyfikator jednej kolumny, który ma opcję 1. Mogłem również opcjonalnie dodać do pierwszej tabeli unikalny indeks dwukolumnowy (WidgetID, UserID).
Czy istnieje jakaś realna różnica między tymi dwoma względami pod względem wydajności lub jakiegokolwiek powodu preferowania jednego podejścia do drugiego w celu ukształtowania tabeli Wiele_ do wielu użytkowników UserWidget?
Indeksy potrzebne są podyktowane wymaganiami zapytania, a nie swój projekt schematu. – dkretz