Wstęp
Co w relacyjnej bazie danych otwiera klucz? Nazwa klucz pochodzi od sposobu wyszukiwania. Czyli wyszukiwania danych według pewnego klucza. Wiersze w tabeli możesz wyszukiwać według wartości wielu kolumn. Dlaczego pewne kombinacje kolumn nazywane są kluczami, a inne nie? Każda tabela relacyjnej bazy danych powinna posiadać klucz główny. Jakimi cechami powinien charakteryzować się klucz aby być mianowanym na klucz główny tabeli? O tym i jeszcze więcej w niniejszym materiale.
Klucz kandydujący
Klucz otwiera drogę do danych. Każda kolumna lub zestaw kolumn, która może pełnić rolę klucza głównego nazywana jest kluczem kandydującym. Aby pełnić rolę klucza głównego musi jednoznacznie identyfikować każdy wiersz w danej tabeli. Innymi słowy wartość kolumny musi być unikalna i stale obecna w wierszu. Czyli kolumna nie może dozwalać NULLi. Wartości klucza głównego nie powinny podlegać zmianom. Tabela może mieć wiele kluczy kandydujących. Na przykład tabela obywatel może mieć klucze kandydujące jak:
- siatkówka oka
- linie papilarne
- PESEL
- DNA
- identyfikator nadany przez właściciela bazy danych

Jak widzisz po moim przerysowanym przykładzie, wybór klucza głównego może nastręczać pewne problemy z uwagi na różnorodność kandydatów. Niemniej ostatecznie wybierasz tylko jeden jako właściwy klucz główny. Pozostałe klucze kandydujące mogą być dalej używane jako tak zwane klucze alternatywne. Inną nazwą klucza kandydującego jest klucz potencjalny.
Klucz naturalny
Klucz naturalny to taki klucz główny, który wywodzi się bezpośrednio z rzeczywistej domeny danych. Jest to istniejąca niezależnie od Twojej bazy danych właściwość bytu, która jest naturalnie unikalna. Na przykład adres email, numer VIN pojazdu czy numer ISBN książki. Zaletami klucza naturalnego są:
- naturalna unikalność – w wielu przypadkach unikalność wynika z samej natury danych
- łatwiejsze rozpoznawanie – dla użytkownika końcowego naturalne klucze mogą być bardziej zrozumiałe niż abstrakcyjne identyfikatory nadane przez twórców bazy danych
Wadami są:
- potencjalne zmiany – jeśli coś, co wydaje się stałe (na przykład numer dokumentu), ulegnie zmianie, aktualizacja kluczy głównych w Twojej bazie danych staje się bardzo trudna. Nie kontrolujesz tych zmian
- wydajność – naturalne klucze mogą być dłuższe (na przykład ciągi znaków), co wpływa na rozmiar indeksów i czas operacji łączenia zbiorów
Klucz naturalny stosuj gdy: dane są naprawdę stabilne i praktycznie nigdy się nie zmieniają.

Na przykład PESEL w Polsce jest przypisany na stałe. Naturalny identyfikator jest krótki i łatwy do indeksowania. Na przykład krótkie kody produktów. Naturalny klucz jest znaczący biznesowo — czyli użytkownicy lub procesy biznesowe na co dzień rzeczywiście posługują się tym identyfikatorem. Chcesz zwiększyć czytelność danych bez konieczności robienia dodatkowych JOIN-ów. Na przykład kiedy numer klienta od razu coś mówi bez szukania w innej tabeli.
Klucz sztuczny
Klucz sztuczny to specjalnie wprowadzony techniczny identyfikator, który nie ma znaczenia poza bazą danych. Często stosuje się automatycznie generowane liczby. Motory baz danych dostarczają łatwych i wygodnych w użyciu funkcjonalności. Na przykład:
- AUTO_INCREMENT w MySQL
- IDENTITY w SQL Server
- IDENTITY w Oracle od 12c
- IDENTITY w PostgreSQL
Warto zwrócić uwagę, że upublicznienie wartości klucza głównego nadawanych mechanizmem generującym kolejne numery może prowadzić do niekontrolowanego wycieku danych. Na przykład nadawanie sekwencyjnych numerów faktur czy przesyłek i upublicznianie ich w URL aplikacji lub wiadomościach może spowodować, że użytkownik uzyska dostęp do nie swoich faktur czy informacji o przesyłkach. Będzie także w stanie oszacować wielkość sprzedaży sprawdzając o ile zmienił się numer faktury w odcinku czasu. Bezpieczniejszym rozwiązaniem jest stworzenie publicznie dostępnego klucza alternatywnego wypełnionego wartościami UUID. Czyli uniwersalnego unikalnego identyfikatora nadawanego oprócz niepublicznego numeru sekwencyjnego.

Zalety klucza sztucznego:
- stabilność – sztuczne klucze nie zmieniają się i są niezależne od zmian w danych rzeczywistych
- wydajność – zwykle są krótkimi liczbami całkowitymi, co sprzyja szybkiemu indeksowaniu
- łatwość zarządzania – upraszczają tworzenie relacji między tabelami
Wady klucza sztucznego:
- brak znaczenia biznesowego – sztuczne klucze nic nie mówią o danych, co czasem utrudnia czytelność bez dodatkowych zapytań
- potrzeba dodatkowych ograniczeń – trzeba samodzielnie dbać o unikalność danych biznesowych, bo klucz sztuczny sam jej nie zapewnia
Klucz sztuczny warto wybrać, kiedy:
- naturalne dane mogą się zmieniać. Na przykład adres e-mail użytkownika nie nadaje się na klucz główny bo jest duże prawdopodobieństwo, że ulegnie zmianie
- naturalny identyfikator jest długi lub skomplikowany. Na przykład skomplikowane numery seryjne albo bardzo długie kody klienta
- w systemie mogą występować wyjątki lub zmiany reguł. Na przykład co kilka lat firma zmienia schemat nadawania numerów produktom
- chcesz uprościć strukturę bazy i relacje — sztuczne klucze są krótkie, łatwe do indeksowania, idealne do pracy z dużymi bazami danych
- planujesz skalowanie. Na przykład łatwiej synchronizować dane między systemami lub zmieniać strukturę, gdy klucze są techniczne, a nie powiązane z biznesową logiką
Klucz prosty
Każdy klucz naturalny i sztuczny może być kluczem prostym. Jest to klucz główny, który składa się z jednej kolumny tabeli. Jest to najczęściej spotykany rodzaj klucza w codziennej pracy z bazami danych. Zwłaszcza w prostych modelach danych, gdzie pojedyncza właściwość wystarcza do jednoznacznej identyfikacji wiersza.

Zalety klucza prostego:
- prostota – łatwy w implementacji i zrozumieniu
- wydajność – indeksowanie i wyszukiwanie według pojedynczej kolumny jest szybkie i efektywne
- łatwiejsze zarządzanie relacjami – tworzenie kluczy obcych jest mniej skomplikowane. Do tabeli zależnej wystarczy skopiować jedną kolumnę
Wady klucza prostego: ograniczenia modelowe – czasami trudno znaleźć naturalny pojedynczy atrybut, który byłby unikalny i stabilny.
Klucz złożony
Jeśli klucz naturalny czy sztuczny nie jest kluczem prostym to może być kluczem złożonym. Klucz złożony to klucz główny składający się z więcej niż jednej kolumny. Jest używany wtedy, gdy wartości pojedynczej kolumny nie wystarczają do jednoznacznej identyfikacji wiersza, ale kombinacja wartości kilku kolumn już tak.

Zalety klucza złożonego:
- lepsze odzwierciedlenie rzeczywistości – w niektórych przypadkach model danych naturalnie wymaga kilku atrybutów do identyfikacji wiersza
- redukcja redundancji – nie trzeba sztucznie tworzyć dodatkowych identyfikatorów
Wady klucza złożonego:
- złożoność – klucze złożone są trudniejsze do utrzymania, zwłaszcza przy tworzeniu relacji między tabelami
- wpływ na wydajność – indeksowanie wielokolumnowe może być mniej efektywne niż indeksowanie pojedynczej kolumny
- problemy przy migracjach i zmianach schematu – dodanie lub zmiana atrybutu klucza może wymagać większych modyfikacji w bazie.
Podsumowanie
Dziękuję za przeczytanie niniejszego materiału. Wiesz z niego, że klucz główny jest niezbędnym elementem każdej tabeli w relacyjnej bazie danych. Gwarantuje jednoznaczność wierszy i umożliwia budowanie spójnych powiązań między wierszami. W zależności od kontekstu i wymagań projektu można wybrać między kluczem naturalnym lub sztucznym. Wybrany może być prosty lub złożony.
Każdy typ ma swoje mocne i słabe strony:
- Klucze proste oferują przejrzystość i szybkość.
- Klucze złożone świetnie odzwierciedlają bardziej złożone zależności, ale wprowadzają pewną komplikację.
- Klucze naturalne są intuicyjne, ale niosą ryzyko zmian.
- Klucze sztuczne zapewniają stabilność i wydajność, choć wymagają dodatkowych zabezpieczeń integralności biznesowej.
- Jeśli naturalny klucz jest absolutnie stabilny i prosty – możesz go użyć.
- Jeśli masz jakiekolwiek wątpliwości co do zmienności lub długości danych – lepiej stosuj sztuczny klucz i zabezpiecz unikalność wartości własnymi mechanizmami.
Świadomy wybór odpowiedniego typu klucza głównego jest, nomen omen, kluczowy dla trwałości, skalowalności i jakości całego projektu bazy danych. Dlatego warto dobrze rozumieć dostępne opcje i dostosować je do konkretnego zastosowania. Dobór rodzaju klucza głównego wpływa na wydajność, przejrzystość i łatwość rozwoju bazy danych.
Niech Twój klucz główny zawsze pewnie prowadzi zapytania przez świat relacji! A jeśli chcesz, by Twoje bazy danych były równie spójne co wydajne – koniecznie śledź mój blog!
