Tabele odnośników (lub tabele kodów , jak nazywają je niektóre osoby) są zwykle zbiorem możliwych wartości, które można podać dla określonej kolumny.
Załóżmy na przykład, że mamy tablicę przeglądową o nazwie party
(przeznaczoną do przechowywania informacji o partiach politycznych), która ma dwie kolumny:
party_code_idn
, który przechowuje generowane przez system wartości liczbowe i (pozbawiony znaczenia domeny biznesowej ) działa jako surogat dla prawdziwego klucza.party_code
, jest prawdziwym lub „naturalnym” kluczem tabeli, ponieważ utrzymuje wartości mające konotacje z domeną biznesową .
Powiedzmy, że taka tabela zachowuje następujące dane:
+----------------+------------+
| party_code_idn | party_code |
+----------------+------------+
| 1 | Republican |
| 2 | Democratic |
+----------------+------------+
party_code
Kolumna, która utrzymuje „republikański” i „demokratyczny”, będąc prawdziwym kluczem stołu, jest skonfigurowana z ograniczeniem wyjątkowy, ale opcjonalnie dodany wartości party_code_idn
i określił go jako PK tabeli (choć logicznie rzecz biorąc , party_code
może działać jako KLUCZ PODSTAWOWY [PK]).
Pytanie
Jakie są najlepsze praktyki wskazywania wartości wyszukiwania z tabel transakcji ? Czy powinienem ustanowić odniesienia do klucza OBCEGO (FK) albo (a) bezpośrednio do wartości naturalnej i znaczącej, albo (b) w celu zastąpienia wartości?
Opcja (a) , na przykład
+---------------+------------+---------+
| candidate_idn | party_code | city |
+---------------+------------+---------+
| 1 | Democratic | Alaska |
| 2 | Republican | Memphis |
+---------------+------------+---------+
ma następujące właściwości 1 :
- Czytelny dla użytkownika końcowego (+)
- Łatwy do importu-eksportu między systemami (+)
- Trudno zmienić wartość, ponieważ wymaga modyfikacji we wszystkich tabelach odsyłających (-)
- Dodanie nowej wartości nie jest kosztowne (=)
Myślę, że jest prawie jak „ przekazywanie przez wartość ”, aby wyciągnąć analogię z wywołania funkcji w żargonie programowania aplikacji.
Opcja (b) , na przykład
+---------------+----------------+---------+
| candidate_idn | party_code_idn | city |
+---------------+----------------+---------+
| 1 | 1 | Alaska |
| 2 | 2 | Memphis |
+---------------+----------------+---------+
ma właściwości poniżej:
- Nieczytelne dla użytkownika końcowego (-)
- Trudne do importu-eksportu ponieważ musimy go usunąć z odniesienia (-)
- Łatwa do zmiany wartości, ponieważ przechowujemy tylko referencje w tabelach transakcji (+)
- Dodanie nowej wartości nie jest kosztowne (=)
Jest bardzo podobny do „ pass by reference ”, jeśli porównać do wywołania funkcji w języku programowania aplikacji.
Import-eksport można również wykonać w inny sposób, np. Po prostu ponownie wypełniając tabelę przeglądową, a następnie ponownie wypełniając kolumnę zastępczą. Mam nadzieję, że dobrze to rozumiem. Właśnie to usłyszałem jako możliwość.
1. Należy pamiętać, że +
, -
i =
wskazują na korzyści z tych właściwości.
Pytanie
Co ważne: czy istnieje różnica między wyszukiwaniem (lub kodem) tabelą ) a referencją FK, jeśli zamierzamy zastosować to drugie podejście? Myślę, że działają tak samo.
FOREIGN KEY
w innej tabeli, może być dość niechlujny, ale YMMV.UNIQUE CONSTRAINT
s iNOT NULL
s - cóż, wpisy w tabeli kodów znajdują sięFOREIGN KEY
w tabelach, które ich używają / odnoszą się do nich - więc pojęcia są powiązane, ale nie takie same. Klucz zastępczy tabeli kodów to pole pojawiające się w tabeli „potomnej” - z pewnością mniej czytelne, aleINT
niezbyt duże - nie wymaga dużo miejsca, co jest zaletą kluczy zastępczych.Istnieje trzecie podejście, które ma niektóre zalety dwóch opcji - umieść rzeczywisty kod w tabeli kodów. Rozumiem przez to krótką sekwencję znaków, która oddaje esencję pełnej wartości i jest wyjątkowa. W twoim przykładzie może to być
Kod jest przenoszony do tabel transakcyjnych jako klucz obcy. Jest krótki, zrozumiały i nieco niezależny od „prawdziwych” danych. Przyrostowe zmiany nazwy nie sugerują zmiany kodu. Should Republikanie DeCamp en masse , jednak zmiana kodu może być konieczne, z towarzyszącymi jej problemami, że id zastępczym nie poniosą.
Ten styl został nazwany skrótem kodującym. Mogę polecić pismo Celko na ten temat. Książki Google zawierają kilka przykładów. Wyszukaj „Kodowanie Celko”.
Inne przykłady: kodowanie 2- lub 3-literowe dla krajów, kodowanie 3-literowe (GBP, USD, EUR) dla kodów walut. Krótkie, samo wyjaśniające się i niezmienne (a dla nich istnieje ISO).
źródło