Istnieje wiele tabel, gdzie może chcesz mieć kolumnę tożsamości jako klucz podstawowy. Jednak w przypadku tabeli relacji M: M, którą opisujesz, najlepszą praktyką NIE jest używanie nowej kolumny tożsamości dla klucza podstawowego.
Link do łącza RThomas w jego komentarzu stanowi doskonały powód, dla którego najlepszą praktyką jest NIE dodawanie kolumny tożsamości. Oto that link.
Minusy przeważają nad profesjonalistami praktycznie w każdym przypadku, ale ponieważ prosiłeś o plusy i minusy, włożyłem też kilka nieprawdopodobnych plusów.
Wady
Plusy
Wszystkie plusy są dość pobieżne
Jeśli miał sytuację, w której trzeba było użyć klucza podstawowego tabeli związku w postaci przyłączenia do oddzielna tabela (np. tabela audytu?) połączenie będzie prawdopodobnie szybsze. (Jak już wspomniano - dodawanie i usuwanie rekordów będzie prawdopodobnie wolniejsze.) Ponadto, jeśli twoja tabela relacji jest relacją między tabelami, które same używają unikalnych identyfikatorów, wzrost prędkości od użycia jednej kolumny tożsamości w łączeniu względem dwóch będzie minimalny.)
Aplikacja, dla uproszczenia, może przyjąć, że każda tabela, z którą działa, ma unikalny identyfikator jako klucz podstawowy. (To kiepski projekt w aplikacji, ale możesz nie mieć nad nim kontroli.) Można sobie wyobrazić scenariusz, w którym lepiej wprowadzić jakąś dodatkową złożoność w DB, niż dodatkową złożoność w takiej aplikacji.
Prosty artykuł na temat profesjonalnych kluczy złożonych: http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx – RThomas
nie ma potrzeby stosowania kolumny tożsamości, klucz podstawowy to w zasadzie zestaw kolumny (1 lub więcej), które jednoznacznie definiują twoje dane. Dodając kolumnę tożsamości, dodajesz dodatkowy indeks, a dzięki indeksowi najprawdopodobniej będziesz używał najwięcej (z dwoma ważnymi kolumnami) jako niezgrupowanego, a aktualizacje/wstawki będą wolniejsze, itd. Itd. Zasadniczo, nie ma potrzeby. – Rodolfo
@RThomas - W tym blogu używają relacji Klienci-> Produkty, która nie powinna mieć klucza złożonego, ponieważ wskazuje dane transakcyjne. Tam * może * być wieloma relacjami utworzonymi w różnym czasie, ta tabela potrzebuje klucza unikatowej tożsamości. np. Zamawianie butelek wina pod tą samą SKU - do której odnosi się pojedynczy identyfikator produktu - (nie jest to idealne, ale możliwe). Ale jeśli każda butelka ma swój własny identyfikator, "limit zamówienia" jest dyskusyjny, ponieważ musisz utworzyć osobny rekord transakcji dla każdej pozycji. Albo źle zbudowałeś strukturę, albo śledzisz dane niepoprawnie. – hajikelist