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
- Co to jest klucz zastępczy (surrogate key) i jakie posiada właściwości?
- Dlaczego nie stosować kluczy z systemu źródłowego?
- Czy przechowywać klucze biznesowe z systemu źródłowego w wymiarze w hurtowni danych?