To trochę religijna debata. Moje osobiste preferencje to posiadanie syntetycznych kluczy podstawowych, a nie naturalnych kluczy podstawowych, ale istnieją dobre argumenty po obu stronach. Realistycznie, o ile jesteś konsekwentny i rozsądny, każde z tych podejść może działać dobrze.
Jeśli używasz kluczy naturalnych, dwa główne wady to obecność kluczy złożonych i mutowanie wartości klucza podstawowego.Jeśli masz złożone klucze główne, oczywiście musisz mieć wiele kolumn w każdej tabeli podrzędnej. To może stać się nieporęczne z perspektywy modelu danych, gdy istnieje wiele relacji między podmiotami. Ale może to również wywoływać żal dla osób, które opracowują zapytania - niezwykle łatwo tworzyć zapytania, które wykorzystują warunki N-1 N dołączenia i uzyskać prawie poprawny wynik. Jeśli masz naturalne klucze, nieuchronnie natkniesz się na sytuację, w której wartość klucza naturalnego zmienia się, a następnie musisz wprowadzić zmiany w wielu różnych jednostkach - to znacznie bardziej skomplikowane niż zmiana unikalnej wartości w tabeli.
Z drugiej strony, jeśli używasz kluczy syntetycznych, marnujesz przestrzeń, dodając dodatkowe kolumny, dodając dodatkowe obciążenie, aby utrzymać dodatkowy indeks, i zwiększasz ryzyko, że uzyskasz funkcjonalnie powielone wyniki. Bardzo łatwo jest zapomnieć o utworzeniu unikalnego ograniczenia na kluczu biznesowym lub sprawdzić, czy istnieje nieunikalny indeks w połączeniu i po prostu założyć, że był to unikalny indeks. Właśnie zostałem ugryziony przez to szczególne niepowodzenie kilka dni temu - zindeksowałem złożony klucz naturalny (z nieunikalnym indeksem) zamiast tworzyć unikalne ograniczenie. Głupi błąd, ale stosunkowo łatwy do wykonania.
Z punktu widzenia pisania i nazywania konwencji, wolałbym również preferować klucze syntetyczne, ponieważ dobrze jest wiedzieć, kiedy dołączasz do tabel, których kluczem podstawowym A jest A_ID, a klucz podstawowy B jest będzie B_ID. To o wiele bardziej samo-dokumentowanie niż próba zapamiętania, że kluczem podstawowym A jest kombinacja A_NAME i A_REVISION_NUMBER, a kluczem podstawowym B jest B_CODE.
Czasami bardzo trudno jest zidentyfikować odpowiedź - wszystkie są tak dobre :) –
Tak, są, zgadzam się. =) A sposób, w jaki działa SO, to głosowanie i zaakceptowana odpowiedź. Bądź dobrym sędzią i wybierz ten, który jest bardziej kompletny. Zajmij miejsce dla początkujących i przeczytaj je, a następnie postaraj się dowiedzieć, jakiej odpowiedzi nauczyłeś się najbardziej. Nikt nie będzie na ciebie zły! ;-) Ponadto, ludzie będą szczęśliwi, starając się pomóc, odpowiadając na pytania, gdy mają większe szanse na podniesienie swojej reputacji (gdy tylko na to zasłużyli). Uważaj i życzymy miłego dnia/nocy! =) –