@Matt Sheppard:
Powiedz, że masz tabelę klientów. Na pewno nie chcesz, aby klient pojawił się w tabeli więcej niż jeden raz, w przeciwnym razie w działach sprzedaży i logistyki pojawi się wiele nieporozumień (zwłaszcza jeśli wiele wierszy o kliencie zawiera różne informacje).
Masz więc identyfikator klienta, który jednoznacznie identyfikuje klienta, i upewniasz się, że jest on znany klientowi (na fakturach), dzięki czemu klient i pracownicy obsługi klienta mają wspólne referencje na wypadek potrzeby komunikacji. Aby zagwarantować brak duplikatów rekordów klientów, dodajesz do tabeli ograniczenie unikatowości, albo poprzez klucz podstawowy w identyfikatorze klienta, albo poprzez ograniczenie NOT NULL + UNIKALNE w kolumnie identyfikatora klienta.
Następnie, z jakiegoś powodu (o którym nie mogę myśleć), zostaniesz poproszony o dodanie kolumny GUID do tabeli klientów i uczynienie z niej klucza podstawowego. Jeśli kolumna z identyfikatorem klienta pozostanie bez gwarancji jednoznaczności, poprosisz o przyszłe problemy w całej organizacji, ponieważ identyfikatory GUID zawsze będą unikalne.
Niektórzy „architekci” mogą powiedzieć, że „och, ale radzimy sobie z ograniczeniem prawdziwej wyjątkowości klienta w naszej warstwie aplikacji!”. Dobrze. Moda związana z tymi językami programowania ogólnego przeznaczenia i (szczególnie) platformami warstwy środkowej zmienia się cały czas i generalnie nigdy nie przeżyje twojej bazy danych. I istnieje bardzo duża szansa, że w pewnym momencie będziesz musiał uzyskać dostęp do bazy danych bez przechodzenia przez obecną aplikację. == Kłopoty. (Ale na szczęście ty i „architekt” już dawno minęli, więc nie będziesz tam, aby posprzątać bałagan.) Innymi słowy: utrzymuj oczywiste ograniczenia w bazie danych (i na innych poziomach, jeśli masz czas).
Innymi słowy: mogą istnieć dobre powody, aby dodać kolumny GUID do tabel, ale nie daj się zwieść pokusie obniżenia ambicji spójności w rzeczywistej (== nie GUID) informacji.