Wręcz przeciwnie, nie, NIE musisz zawsze mieć numerycznej PK AutoInc.
Jeśli dokładnie analizujesz swoje dane, często identyfikujesz naturalne klucze w danych. Często dzieje się tak, gdy dane mają istotne znaczenie dla firmy. Czasami PK są artefaktami ze starożytnych systemów, które użytkownicy biznesowi używają jako drugiego języka do opisywania atrybutów swojego systemu. Widziałem na przykład numery VIN pojazdów używane jako podstawowy klucz tabeli „Vehicle” w systemie zarządzania flotą.
Jakkolwiek powstało, JEŚLI masz już unikalny identyfikator, użyj go. Nie twórz drugiego, pozbawionego znaczenia klucza podstawowego; jest to marnotrawstwo i może powodować błędy.
Czasami można użyć AutoInc PK w celu wygenerowania znaczącej wartości dla klienta, np. Numerów polis. Ustawienie wartości początkowej na coś sensownego i stosowanie reguł biznesowych dotyczących zer wiodących itp. Jest to prawdopodobnie podejście „najlepsze z obu światów”.
Jeśli masz małą liczbę wartości, które są względnie statyczne, użyj wartości, które mają sens dla użytkownika systemu. Po co używać 1,2,3, gdy można użyć L, C, H, gdzie L, H i C reprezentują Życie, Samochód i Dom w kontekście „Typu ubezpieczenia”, lub, wracając do przykładu VIN, może skorzystać z „TO „dla Toyoty? Wszystkie samochody Toyata mają numer VIN, który zaczyna się od „DO”. To jedna rzecz, o której użytkownicy nie muszą pamiętać, co zmniejsza prawdopodobieństwo wprowadzenia błędów programistycznych i błędów użytkownika, a nawet może być użytecznym odpowiednikiem pełnego opisu w raportach zarządczych, co upraszcza raporty. pisać i być może szybciej generować.
Dalszy rozwój tego jest prawdopodobnie „mostem za daleko” i generalnie nie polecam go, ale dołączam go dla kompletności i możesz znaleźć dla niego dobre zastosowanie. Oznacza to, że użyj opisu jako klucza podstawowego. Dla szybko zmieniających się danych jest to obrzydliwość. W przypadku bardzo statycznych danych zgłaszanych przez cały czas , być może nie. Po prostu wspominając o tym, więc jest to możliwe.
Używam AutoInc PK, po prostu angażuję swój mózg i najpierw szukam lepszych alternatyw. Sztuka projektowania baz danych polega na tworzeniu czegoś znaczącego, na co można szybko uzyskać zapytanie. Zbyt wiele połączeń utrudnia to.
EDYCJA Innym kluczowym przypadkiem, w którym nie jest potrzebny autogenerowany PK, jest przypadek tabel reprezentujących przecięcie dwóch innych tabel. Aby trzymać się analogii samochodu, samochód ma 0..n Akcesoria, każde akcesorium można znaleźć w wielu samochodach. Aby to przedstawić, tworzysz tabelę Car_Accessory zawierającą PK z samochodu i akcesoriów oraz inne istotne informacje o dacie łącza itp.
To, czego nie potrzebujesz (zwykle), to AutoInc PK na tym stole - będzie dostępny tylko za pośrednictwem samochodu „powiedz mi, jakie akcesoria są w tym samochodzie” lub z akcesorium „powiedz im, jakie samochody mają to akcesorium”