Ani SQL, ani model relacyjny nie są zakłócane przez klucze obce, które odwołują się do klucza naturalnego. W rzeczywistości odwoływanie się do naturalnych kluczy często znacznie poprawia wydajność. Byłbyś zaskoczony, jak często potrzebne informacje są całkowicie zawarte w naturalnym kluczu; odwołanie się do tego klucza powoduje zamianę złączenia na szerszą tabelę (i w konsekwencji zmniejsza liczbę wierszy, które można przechowywać na jednej stronie).
Z definicji potrzebne informacje są zawsze całkowicie zawarte w naturalnym kluczu każdej tabeli „wyszukiwania”. (Pojęcie tabela odnośników jest nieformalne. W modelu relacyjnym wszystkie tabele są tylko tabelami. Tabela kodów pocztowych w USA może mieć wiersze wyglądające tak: {AK, Alaska}, {AL, Alabama}, {AZ, Arizona} itp. Większość osób nazwałaby to tabelą odnośników).
W dużych systemach często zdarza się, że tabele mają więcej niż jeden klucz kandydujący. Nie jest niczym niezwykłym, że tabele, które służą jednej części przedsiębiorstwa, odnoszą się do jednego klucza kandydującego, a tabele, które służą innej części przedsiębiorstwa, do odwołania się do innego klucza kandydującego. Jest to jedna z mocnych stron modelu relacyjnego i jest to część modelu relacyjnego, który dość dobrze obsługuje SQL.
Podczas odwoływania się do kluczy naturalnych w tabelach, które również mają klucz zastępczy, napotkasz dwa problemy.
Najpierw zaskoczysz ludzi. Chociaż zwykle mocno lobbuję za zasadą najmniejszej niespodzianki , jest to jedna sytuacja, w której nie mam nic przeciwko zaskakującym ludziom. Gdy problem polega na tym, że programiści są zaskoczeni logicznym użyciem kluczy obcych, rozwiązaniem jest edukacja, a nie przeprojektowanie.
Po drugie, ORM nie są na ogół projektowane wokół modelu relacyjnego i czasami zawierają założenia, które nie odzwierciedlają najlepszych praktyk. (W rzeczywistości często wydaje się, że zostały zaprojektowane bez potrzeby korzystania z danych specjalisty od bazy danych). Wymaganie numeru identyfikacyjnego w każdej tabeli jest jednym z tych założeń. Kolejny zakłada, że aplikacja ORM „jest właścicielem” bazy danych. (Więc tworzenie, usuwanie i zmiana nazw tabel i kolumn jest bezpłatne).
Pracowałem nad systemem baz danych, który przez 30 lat obsługiwał dane setek programów aplikacyjnych napisanych w co najmniej dwóch tuzinach języków. Ta baza danych należy do przedsiębiorstwa, a nie do ORM.
Widelec, który wprowadza przełomowe zmiany, powinien być przeszkodą.
Zmierzyłem wydajność zarówno przy użyciu kluczy naturalnych, jak i zastępczych w firmie, w której pracowałem. Jest punkt zwrotny, w którym klucze zastępcze zaczynają przewyższać klucze naturalne. (Zakładając, że nie będzie żadnych dodatkowych wysiłków w celu utrzymania wysokiej wydajności naturalnego klucza, takich jak partycjonowanie, indeksy częściowe, indeksy oparte na funkcjach, dodatkowe przestrzenie tabel, używanie dysków półprzewodnikowych itp.) Według moich szacunków dla tej firmy osiągną ten punkt zwrotny w około 2045. W międzyczasie uzyskują lepszą wydajność dzięki naturalnym kluczom.
Inne istotne odpowiedzi: w mylącym schemacie bazy danych
Jeśli nie znasz odpowiedzi, skorzystaj z Surogatu. Oto dlaczego - jeśli przyjmowane są założenia dotyczące reguł biznesowych, a te założenia są fałszywe lub reguły się zmieniają, dane są śmieciowe. Oto przykład:
Osoba, rola, rola personalna
obecna reguła biznesowa mówi, że osoba ma jedną rolę. Tworzysz tabelę, która łączy osobę i rolę, w której PersonRole (PersonName, PersonBirthDate, PersonMotherMaidenName, ..., RoleCode)
Teraz jesteś prawdziwym purystą, jeśli chodzi o naturalne klucze! A tak na poważnie, co jeśli organizacja zdecyduje, że dana osoba może teraz pełnić wiele ról? Jakie są dalsze skutki wspierania zmiany potrzeb biznesowych?
źródło