2009-02-10 10 views
5

Co do zasady lepiej jest użyć natywnych kluczy podstawowych (np. Istniejących kolumn lub kombinacji kolumn) lub ustawić klucz podstawowy na automatyczny wiersz generujący liczby całkowite?Macierzysty klucz podstawowy lub wygenerowany automatycznie?

EDIT:
Został on wskazał mi, że to bardzo podobne do this question.

Konsensus jest taki, że używam kluczy zastępczych, co było moją naturalną skłonnością, ale mój szef powiedział mi, że w miarę możliwości powinienem używać naturalnych kluczy. Jego rada może być najlepsza dla tej konkretnej aplikacji, ponieważ Nazwa w rzędzie jednoznacznie ją identyfikuje i musimy zachować możliwość przeglądania starych danych, dlatego wszelkie zmiany nazwy/reguły będą oznaczać nowy unikalny wiersz.

Podczas gdy odpowiedzi tutaj są pomocne, większość z nich opiera się na subiektywnym "tutaj jest to, co powinieneś" i nie cytuj źródeł wspierających. Czy brakuje mi jakiejś istotnej lektury lub czy projektowanie baz danych z najlepszymi praktykami jest wysoce subiektywne i/lub zależne od aplikacji?

Odpowiedz

4
+0

Dzięki, wykonałem kilka wyszukiwań przed zadawaniem tego pytania, szukałem tagów itp., Ale nie odkryłem żadnego z nich. –

+2

Tak, wyszukiwanie SO jest ... nie świetne. Musisz wiedzieć, czego szukać lub robić to, co często robię i wpisywać to w wyszukiwarce Google: site: stackoverflow.com – cletus

1

Cokolwiek to jest, spraw, aby nie miało ono znaczenia (klucz zastępczy). Znaczące klucze podstawowe są zabójcze.

+0

mógłbyś wyjaśnić to dalej? Co masz na myśli przez "znaczący"? –

+0

Myślę, że e-mail można traktować jako "znaczący" klucz podstawowy – Valentin

+0

Znaczenie - typowy przykład: SSN. Klucze nie powinny mieć żadnego biznesowego znaczenia. –

0

Powiedziałbym, że generowanie automatyczne, nie ma prawdziwego powodu, aby nie myśleć. Chyba że tworzymy jakiś rodzaj tablicy mieszającej, ale mimo to trzymałbym się unikalnego klucza podstawowego automatycznie tworzonego przez bazę danych. Jest szybki, prosty i niezawodny. Nie wynajduj ponownie koła, jeśli już tam jest.

+0

Nie mam pojęcia, dlaczego zostałeś zmodyfikowany, więc przeciwstawiłem się, nawet jeśli twoja odpowiedź jest powtórzeniem. –

1

To stara wojna między purystami i pragmatystami. Puryści nie akceptują zastępczych kluczy podstawowych i nalegają na używanie wyłącznie naturalnych. Jeśli mnie poprosisz, będę głosował na inkrementację (klucze zastępcze) w większości sytuacji.

8

klucz podstawowy

  1. musi określić rząd jednoznacznie.
  2. nie muszą zawierać dane, czy to się zmieni, gdy zmiany danych (co jest złe)
  3. powinna być szybka w porównaniu operacji (WHERE/przyłącza)

Idealnie użyć sztucznych (zastępczą) dla twoich wierszy, numeryczny typ danych integer (INT) jest najlepszy, ponieważ zajmuje mało miejsca i jest szybki.

Należy wprowadzić klucz podstawowy z minimalną liczbą pól do spełnienia warunków 1.-3. W przypadku większości tabel to minimum to: 1 pole.

Dla tabel relacji (lub bardzo specjalnych skrzyń krawędzi), może być wyższa. Odwoływanie się do tabeli ze złożonym kluczem podstawowym jest uciążliwe, więc klucz złożony nie jest zalecany dla tabeli, do której należy się odwoływać we własnym zakresie.

W tabelach relacji (m: n relations) klucz złożony jest tworzony z kluczy podstawowych powiązanych tabel, dlatego klucz złożony automatycznie spełnia wszystkie trzy warunki od góry.

Ty mógłby zrobić kluczy podstawowych z danymi, jeśli jesteś absolutnie pewien, że to będzie wyjątkowy i nigdy nie zmieni. Ponieważ jest to trudne do zagwarantowania, polecam przeciw.

+0

W jaki sposób utworzyć natywny klucz podstawowy, jeśli nie zawiera żadnych danych? –

+0

@nemo: Tworzysz sztuczny klucz: numer lub identyfikator GUID. Dane są rekordowym ładunkiem, nie liczę identyfikatora jako danych. – Tomalak

+0

Tylko punkt korekty - klucze zastępcze nigdy nie są tworzone z danych - są niezmienne. – RedFilter

2

Zawsze ints.

Docenisz zrobiłeś więc kiedy nadszedł czas, aby Odsyłacze te elementy w innych tabelach (za pomocą kluczy obcych)

Powiązane problemy