5 kluczy do relacyjnej bazy danych

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.

Publikacja w formie wideo

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
Przykład kluczy kandydujących

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ą.

Przykład kluczy naturalnych

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.

Przykład klucza sztucznego

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.

Przykład klucza prostego

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.

Przykład klucza złożonego

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!

Marcin Badtke

Przyjaźnie o SQL, bazach danych i ludziach

Może Ci się spodobać...

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *