klucz zastępczy

Co to jest klucz zastępczy? (surrogate key)

Klucz zastępczy (surrogate key) to koncept z teorii hurtowni danych. To identyfikator stworzony w hurtowni danych na potrzeby wymiaru albo faktu. Zastępuje klucz główny z systemu źródłowego.

Surrogate key posiada następujące właściwości:

  • Jest unikalny w obrębie wymiaru, nie ma dwóch takich samych wartości w ramach jednego wymiaru
  • Za tym kluczem nie stoi żadna logika biznesowa: to jest zwyczajny ciąg liczb lub znaków.
  • Wykorzystujesz go, żeby łączyć wymiar z faktem albo łączyć wymiary ze sobą

Nigdy nie łączysz wymiaru z faktem wykorzystując klucz naturalny albo klucz z systemu źródłowego.

Klucz zastępczy możesz być typu INT, BIGINT, GUID. Zazwyczaj jest to wartość generowana przez motor bazy danych, Lakehouse albo narzędzie ETL.

Dzięki kluczowi zastępczemu nie bazujesz na wartościach z systemu źródłowego. Pozwala Ci to na swobodę zarządzania kluczami. Określania jakiego typu są wartości, jaki jest ich cykl życia, w jaki sposób są tworzone.

Dlaczego NIE wykorzystywać klucza z systemu źródłowego?

Wyobraź sobie tabele klientów, która w systemie źródłowym wygląda następująco:

Klient
klient_id bigint
nazwa_klienta string
ulica string
miasto string
czy_aktywny string

W Hurtowni danych możesz mieć taki wymiar:

D_Klient
tk_klient_id bigint To jest klucz zastępczy
system_zrodlowy string
klient_id bigint
nazwa_klienta string
ulica string
miasto string
czy_aktywny string

Uzależnienie nie jest dobre.

W wyżej opisanym przykładzie klient_id jest unikalnym identyfikatorem z systemu źródłowego. Gdy oprzesz wymiar na tych wartościach, wtedy twoje rozwiązanie jest kruche.

Każda zmiana klucza w systemie źródłowym wpływa na zmiany w hurtowni danych. Może to doprowadzić do załadowania niepoprawnych danych w hurtowni danych i później niepoprawnego działanie raportów.

TK_Klient_ID - to surrogate key, klucz zastępczy, klucz nadany w hurtowni danych. Generowany, gdy wstawiany jest rekord do tabeli klient. Unikalny w obrębie tabeli.

Klient z dwóch systemów

Dodajmy jeszcze jedną komplikacje.

Wyobraź sobie, że klient pochodzi z dwóch różnych systemów: z księgowego i z systemu logistycznego. Klienci między systemami nie muszą być spójni. Niektórzy mogą istnieć tylko w jednym systemie. Mieć inne dane albo istnieć w obu systemach i mieć spójne dane biznesowe ale różne dane techniczne.

Wyobrażasz sobie że identyfikatory klienta z systemu źródłowego z obu systemów się pokrywają? Wtedy dodanie surrogate key do wymiaru nabiera jeszcze większego sensu.

Ostatni punkt do takiego modelu: czy przechowujesz w wymiarach klucze główne z systemu źródłowego? One nie są do niczego potrzebne. Wtedy wymiar Klient wyglądałaby w ten sposób

D_Klient
tk_klient_id bigint
system_zrodlowy string
nazwa_klienta string
ulica string
miasto string
czy_aktywny string

Pozbyliśmy się klucza klient_id z systemu źródłowego. Jedyny klucz, który istnieje to klucz wygenerowany w hurtowni danych: klucz zastępczy (Surrogate key).

Przechowywanie historii

W wymiarze możesz przechowywać historię zmian klienta. Na przykład zmienił się jego adres i chcesz to monitorować i przechowywać historyczne i aktualne wersje. Strategie przechowywania historii w wymiarach są opisane tutaj (Co to jest SCD?).

System źródłowy ze swojej natury nie przechowuje historii. Jest w nim dostępny tylko stan bieżący. W scenariuszu, gdy opierasz hurtownie na kluczach głównych z systemu źródłowego nie możesz zaimplementować przechowywania historii w prosty sposób. Klucz zastępczy systemu źródłowego rozwiązuje ten problem.

Nowy rekord dostaje nowy identyfikator. Tabela Klient w hurtowni wyglądałaby w następujący sposób:

TK_Klient_id System_zrodlowy Nazwa_klienta Ulica Miasto Aktywny_od Aktywny_do
17 Mag Cierpliwy Tomasz Spokojna Poznań 2020-01-01 2022-11-11
966 Mag Cierpliwy Tomasz Wyrozumiała Wrocław 2022-11-11 9999-12-31

Aktywne uczenie

  1. Co to jest klucz zastępczy (surrogate key) i jakie posiada właściwości?
  2. Dlaczego nie stosować kluczy z systemu źródłowego?
  3. Czy przechowywać klucze biznesowe z systemu źródłowego w wymiarze w hurtowni danych?