Nie widzę odpowiedzi, która wskazuje (co uważam za) naprawdę fundamentalną kwestię - mianowicie, że klucz podstawowy gwarantuje, że nie otrzymasz dwóch wpisów w tabeli dla tej samej encji ze świata rzeczywistego (jak modelowane w bazie danych). Ta obserwacja pomaga ustalić, które opcje są dobre, a jakie złe dla klucza podstawowego.
Na przykład w tabeli nazw i kodów stanów (USA) nazwa lub kod mogą być kluczem podstawowym - stanowią one dwa różne klucze kandydujące, a jeden z nich (zwykle krótszy - kod) jest wybierany jako klucz podstawowy. W teorii zależności funkcjonalnych (i zależności sprzężonych - od 1NF do 5NF - to klucze kandydujące są kluczowe, a nie klucz podstawowy.
Dla kontrprzykładu imiona ludzkie generalnie są złym wyborem dla klucza podstawowego. Jest wielu ludzi, którzy nazywają się „John Smith” lub mają inne podobne imiona; nawet biorąc pod uwagę drugie imię (pamiętaj: nie każdy je ma - na przykład ja nie), istnieje wiele możliwości powielania. W rezultacie ludzie nie używają nazw jako kluczy podstawowych. Wymyślają sztuczne klucze, takie jak numer ubezpieczenia społecznego (SSN) lub numer pracownika, i używają ich do wyznaczenia osoby.
Idealny klucz główny jest krótki, niepowtarzalny, niezapomniany i naturalny. Wyjątkowość tych cech jest obowiązkowa; reszta musi się zgiąć, biorąc pod uwagę ograniczenia rzeczywistych danych.
Jeśli chodzi o określenie klucza podstawowego danej tabeli, musisz przyjrzeć się, co ta tabela reprezentuje. Jaki zestaw lub zestawy wartości kolumn w tabeli jednoznacznie identyfikuje każdy wiersz w tabeli? To są klucze kandydatów. Teraz, jeśli każdy klucz kandydujący składa się z 4 lub 5 kolumn, możesz zdecydować, że są one zbyt niezdarne, aby utworzyć dobry klucz podstawowy (głównie ze względu na krótkość). W takich okolicznościach możesz wprowadzić klucz zastępczy - sztucznie wygenerowaną liczbę. Bardzo często (ale nie zawsze) prosta 32-bitowa liczba całkowita jest wystarczająca dla klucza zastępczego. Następnie wyznaczasz ten klucz zastępczy jako klucz podstawowy.
Jednak nadal musisz upewnić się, że inne klucze kandydujące (ponieważ klucz zastępczy jest również kluczem kandydującym, a także wybrany klucz podstawowy) są utrzymywane jako niepowtarzalny identyfikator - zwykle poprzez umieszczenie unikalnego ograniczenia na tych zestawach kolumn.
Czasami ludziom trudno jest zidentyfikować, co sprawia, że wiersz jest wyjątkowy, ale powinno być coś do zrobienia, ponieważ zwykłe powtórzenie informacji nie czyni jej bardziej prawdziwą. A jeśli nie jesteś ostrożny i otrzymujesz dwa (lub więcej) wiersze rzekomo przechowujące te same informacje, a następnie musisz zaktualizować informacje, istnieje niebezpieczeństwo (szczególnie jeśli używasz kursorów), że zaktualizujesz tylko jeden wiersz zamiast każdego wiersza, więc wiersze są niezsynchronizowane i nikt nie wie, który wiersz zawiera poprawne informacje.
Pod pewnymi względami jest to dość ostry pogląd.
Nie mam szczególnego problemu z używaniem GUID, gdy są potrzebne, ale są one zwykle duże (jak w przypadku 16-64 bajtów) i są używane zbyt często. Bardzo często wystarczyłaby idealnie dobra 4-bajtowa wartość. Użycie identyfikatora GUID, w którym wystarczyłaby 4-bajtowa wartość, marnuje miejsce na dysku i spowalnia nawet indeksowany dostęp do danych, ponieważ na stronę indeksową przypada mniej wartości, więc indeks będzie głębszy i trzeba będzie odczytać więcej stron, aby dostać się do Informacja.