Święta zbliżają się wielkimi krokami, więc Święty Mikołaj potrzebuje dodatkowej pomocy w dostarczaniu prezentów dzieciom na całym świecie. Dzisiaj opracujemy model danych, który pomoże Mikołajowi i jego elfom pracować wydajniej.
Tło
Praca Mikołaja jest niezwykle ważna, więc musi zrobić wszystko, co w jego mocy, aby zapewnić sobie sukces na czas. Pamiętaj tylko o wszystkich problemach, jakie Howard napotkał w „Jingle All the Way”, próbując znaleźć pojedynczą figurkę Turbo Mana — nie możemy pozwolić, aby Święty Mikołaj znów się pomylił, bo inaczej jego reputacja zostanie zrujnowana. Tak więc, aby pomóc Mikołajowi zachować porządek, podzielimy jego działania na trzy główne etapy.
-
Planowanie
Najpierw Mikołaj musi wszystko zaplanować. W końcu nie może pozwolić, aby jego elfy biegały po fabryce i panikowały, próbując zrozumieć miliardy dostaw! Oprócz przeczytania tegorocznych listów i ustalenia, jakie prezenty chciałyby dzieci, warto też przeanalizować trendy z poprzednich lat, aby zebrać wspólne materiały, a nawet przygotować prezenty z wyprzedzeniem. Pomoże to zmniejszyć część zaległości, gdy zaczniemy pracować nad produkcją.
-
Produkcja
Po fazie planowania jesteśmy gotowi do rozpoczęcia produkcji prezentów. Z pomocą elfów Świętego Mikołaja możemy szybko wyprodukować i zapakować prezenty zgodnie z otrzymanymi listami życzeń. Aby jednak proces był bardziej wydajny, musimy uporządkować wszystkie materiały i informacje, które mamy pod ręką, aby elfy mogły jak najszybciej zabrać potrzebne im rzeczy.
-
Dostawa
Chwila szybko się zbliża! Renifery Świętego Mikołaja są gotowe, a sam mężczyzna z niepokojem spogląda na zegarek. Pomocnicy Świętego Mikołaja szybko ładują prezenty do sań. W tym momencie Mikołaj po raz ostatni spogląda na swój harmonogram, aby upewnić się, że ma wszystkie właściwe adresy, a także wszelkie notatki, które musi wziąć pod uwagę.
Teraz, gdy mamy już trochę informacji na temat rodzaju informacji, z którymi będziemy musieli pracować, możemy wreszcie zacząć projektować model danych Świętego Mikołaja.
Model danych
Ten model danych składa się z trzech sekcji:
- Przedmioty
- Osoby i listy życzeń
- Dostawy
Przyjrzyjmy się każdemu z nich.
Sekcja 1:Pozycje
Nasz model danych zaczyna się od sekcji Pozycje, która zawiera wiele tabel, które są centralne dla pozostałych dwóch sekcji.
item_type
tabela jest tutaj prawdopodobnie najważniejsza. Ta tabela zawiera listę wszystkich przedmiotów, które będziemy musieli wyprodukować w fabryce Świętego Mikołaja. Dla każdego przedmiotu będziemy przechowywać następujące informacje:
item_name
— nazwa przedmiotu.properties
— tekstowe pary klucz-wartość określające rozmiar, kształt, kolor i inne właściwości wytwarzanego elementu, przechowywane w ustrukturyzowanym formacie.description
— nieustrukturyzowany opis tekstowy przedmiotu.
Jeśli kiedykolwiek będziemy mieć dwa podobne elementy, które różnią się tylko niektórymi właściwościami, takimi jak kolor, przechowamy je jako osobne rekordy w tabeli.
Na potrzeby naszego modelu danych założymy, że Święty Mikołaj nie kupi prezentów, ale zamiast tego zleci swoim elfom produkcję wszystkiego we własnym zakresie. Dla każdego innego typu przedmiotu będziemy mieć listę wymagań wstępnych, które musimy spełnić. Mogą to być robocizna lub materiały, takie jak drewno, plastik, metal i farby. Będziemy musieli przechowywać listę wszystkich możliwych wymagań wstępnych i powiązać je z każdym przedmiotem, który musimy wyprodukować. Aby to osiągnąć, użyjemy czterech tabel.
Pierwsza z tych czterech tabel to prerequisite
, który, jak sama nazwa wskazuje, przechowuje listę wszystkich możliwych wymagań wstępnych. Dla każdego rekordu w tej tabeli będziemy przechowywać unikatową nazwę wymagania wstępnego, wszystkie dodatkowe properties
(tym razem w nieustrukturyzowanym formacie) i odwołania do prerequisite_type
i słowniki jednostek. prerequisite_type
słownik będzie używany do przechowywania listy wszystkich kategorii wymagań wstępnych, takich jak „praca” i „materiały”. unit
słownik będzie używany do przechowywania listy wszystkich jednostek, których użyjemy do ilościowego określenia naszych wymagań wstępnych. Na przykład możemy oczekiwać, że praca będzie mierzona w godzinach lub minutach, a materiały będą mierzone pod względem kosztów produkcji (dolary), wagi (kilogramy) lub objętości (litry).
Ostatnia tabela w tej sekcji to warehouse
, którego użyjemy do śledzenia bieżącego stanu naszych zapasów zarówno dla przedmiotów, jak i materiałów (stąd item_type_id
i prerequisite_id
klucz obcy). Tylko jeden z tych dwóch kluczy będzie zawierał wartość w danym momencie. Oprócz tych kluczy będziemy przechowywać ostateczną quantity
który był dostępny w określonej warehouse_date
.
Sekcja 2:Osoby i listy życzeń
Ta sekcja, kluczowa część naszego modelu danych, dotyczy rzeczy, które dzieci chcą znaleźć pod choinkami! Będziemy pracować od prawej do lewej.
Dwie skrajnie prawe tabele to country
i city
. Użyjemy tych dwóch tabel, odnosząc się do lokalizacji dziecka, które wysłało Mikołajowi listę życzeń. country
tabela zawiera tylko unikalną country_name
atrybut i listę wszystkich istniejących countries
. Aby dokładniej określić nasze lokalizacje, użyjemy city
tabela do przechowywania wszystkich miast, które Święty Mikołaj będzie musiał odwiedzić. Dla każdego miasta w tej tabeli zapiszemy:
city_name
— nazwa miasta, która niekoniecznie jest unikalna.postal_code
— kod pocztowy miasta.country_id
— identyfikator kraju, w którym znajduje się miasto. Razem z dwoma poprzednimi atrybutami tworzy to unikalny klucz dla tej tabeli.latitude
ilongitude
— pomagał Mikołajowi znaleźć miasto na jego mapie lub wprowadzić jego współrzędne do używanego przez niego systemu nawigacyjnego.
Oczywiście nie możesz mieć życzeń bez ludzi! Przechowamy listę wszystkich osób w person
stół. Dla każdej osoby przechowamy first_name
, last_name
, birth_date
i city
. Przechowamy również adres osoby, a także wszelkie dodatkowe delivery_details
Święty Mikołaj może wymagać rozważenia (np. notatki wskazującej, że dana osoba nie ma komina).
Ostatnia tabela w tej sekcji zawiera pełną wish_list
przechowuje wszystkie życzenia świąteczne, jakie kiedykolwiek złożyłeś. W przypadku każdego życzenia musimy wiedzieć:
person_id
— odniesienie do osoby, która złożyła życzenie.item_type_id
— odniesienie do przedmiotu (rodzaju) osoby, o którą prosił.quantity
— żądana ilość przedmiotu określona w życzeniu.details
— wszystkie szczegóły, które mogą pomóc Mikołajowi spełnić życzenie.ts
— oznacza moment, w którym życzenie zostało zapisane w naszym systemie, co jest ważne dla określenia roku, w którym życzenie zostało złożone.gift_id
— odniesienie do tabeli prezentów oznaczającej prezent, który został dostarczony, aby spełnić to życzenie.
Sekcja 3:Dostawy
Teraz w końcu dotarliśmy do najciekawszej części naszego modelu danych — prezentów i dostaw!
Po wyprodukowaniu pojedynczego elementu wstawimy powiązany z nim rekord do item
stół. Pamiętaj, że wyprodukowany przedmiot nadal nie jest przypisany do żadnego prezentu, więc gift_id
atrybut będzie zawierał wartość null, dopóki przedmiot nie zostanie powiązany z konkretnym prezentem. Będziemy również musieli przechowywać typ produktu, który został wyprodukowany (item_type_id
), a także jego quantity
. Chociaż ilość przedmiotu będzie w większości wynosić 1, możemy spodziewać się różnych ilości w niektórych szczególnych przypadkach (np. więcej niż 1 przedmiot połączony w zestaw — jest to bardzo nietypowe, ale mimo to możliwe).
Idąc dalej, połączymy jeden lub więcej elementów, aby wyprodukować gift
. Zaktualizujemy item.gift_id
po spakowaniu wybranych przedmiotów do tego prezentu. Każdy prezent zostanie dostarczony do powiązanej z nim osoby (person_id
) i będzie mieć status śledzenia (current_status_id
), a także sygnaturę czasową, kiedy Święty Mikołaj planuje dostarczyć prezent (delivery_time_planned
). Zaktualizujemy również wartość wish_list.gift_id
atrybut dla wszystkich przedmiotów, które zostały pomyślnie dostarczone.
Ostatnie dwie tabele w tym modelu danych dotyczą śledzenia statusów dostawy. Najpierw status
tabela zawiera unikalną status_name
wartość, której użyjemy podczas odwoływania się do aktualnego statusu gft (gift.current_status_id
). Dodatkowo status_history
tabela będzie przechowywać listę wszystkich statusów dla wszystkich prezentów w naszej bazie danych, a także sygnatury czasowe wszystkich aktualizacji statusów (ts).
Mamy nadzieję, że nasz model danych pomoże Mikołajowi zakończyć kolejny udany rok dostaw, abyśmy wszyscy mogli otrzymać prezenty na czas. Jeśli masz ochotę na więcej SQL o tematyce świątecznej, Vertabelo Academy przygotowało specjalne wyzwanie świąteczne z 24 zapytaniami. Śmiało i sprawdź to! W imieniu rodziny Vertabelo życzymy wspaniałych Świąt Bożego Narodzenia!