Badania pokazują, że samochody pozostają zaparkowane przez 95% swojego życia, co sugeruje, że systemy zarządzania parkingami powinny być inteligentne, wydajne i solidne. W tym artykule zbudujemy model danych dla takiego systemu.
Wprowadzenie
Zanim zaczniemy konstruować nasz model danych, powinniśmy najpierw zrozumieć, jak zbudowane są parkingi i jak działają. Rzućmy okiem na te dwa kluczowe obszary.
-
Jaka jest struktura parkingów?
Typowy parking składa się z jednego lub więcej bloków, które są dalej podzielone na piętra. Każde piętro zawiera wiele skrzydeł, które pomagają kierowcom w orientacji i zapamiętywaniu miejsc parkingowych. Są one zwykle oznaczone literami, takimi jak „A”, „B”, „C” i tak dalej. Podłoga zwykle ma limit wysokości, który uniemożliwia niektórym pojazdom wjazd na parking. Dodatkowo piętro zawiera kilka unikatowo ponumerowanych miejsc parkingowych. Niektóre z tych miejsc są zarezerwowane dla osób niepełnosprawnych; inne mogą być zarezerwowane przez stałych gości po określonej cenie.
-
Jak działają parkingi?
Aby zrozumieć, jak działają parkingi, musimy wiedzieć więcej o typach osób, które odwiedzają parkingi. Klienci wjeżdżający na parking należą do jednej z następujących grup:
- Stały klient, który kupił bilet dwutygodniowy, miesięczny lub roczny.
- Klient przedpłacony, który zdalnie zarezerwował slot (przez telefon lub online).
- Klient, który nie ma biletu ani nie zarezerwował miejsca na odległość. Miejsce zostanie przydzielone takiemu klientowi na podstawie dostępności.
Stali klienci zazwyczaj otrzymują karty/naklejki do umieszczenia w widocznym miejscu na desce rozdzielczej lub przedniej szybie, aby kierownictwo parkingu mogło łatwo stwierdzić, że klienci nie naruszają żadnych zasad parkowania. W przeciwieństwie do okazjonalnych gości, stałym klientom nigdy nie wydaje się kuponów parkingowych na co dzień. Parking zazwyczaj rezerwuje cały blok lub piętro dla swoich stałych gości, aby mieć pewność, że zawsze mają miejsce do parkowania. Stali klienci mogą również rezerwować miejsca dla siebie, aby codziennie parkować swoje pojazdy w tych samych wyznaczonych miejscach, ale zazwyczaj kosztuje to więcej.
Ci, którzy dokonują rezerwacji miejsc parkingowych na odległość, mogą zazwyczaj korzystać z wyznaczonych miejsc tylko przez ograniczony czas, wynoszący kilka godzin, po czym miejsca są zwalniane. Kiedy ci goście wejdą na parking, muszą zaparkować na zarezerwowanych dla siebie miejscach. Klientom, którzy nie opuszczą parkingu po upływie ich okien czasowych, naliczana jest kara, ale z pewnością klienci mogą opuścić parking przed wygaśnięciem rezerwacji. Niektóre parkingi mają ustalone minimalne okna czasowe (np. klient może być zmuszony zarezerwować miejsce na trzy godziny, nawet jeśli nie będzie go trwał tylko godzinę).
Klienci, którzy wejdą na parking, otrzymują kupony parkingowe, gdy wjeżdżają na parking. Miejsce parkingowe jest następnie przydzielane klientowi podczas generowania kwitu na podstawie określonych przez niego preferencji. Proces rezerwacji jest tutaj zasadniczo taki sam, jak w przypadku klientów przedpłaconych. Jednak rezerwacja przy wejściu zależy wyłącznie od dostępności. Slot może kosztować Cię więcej niż w przypadku wcześniejszej rezerwacji miejsca, zwłaszcza jeśli jest ograniczona dostępność i duże zapotrzebowanie.
Model danych
Mając na uwadze te wymagania, przejdźmy dalej i stwórzmy nasz model danych. Tym razem będziemy pracować z trzema głównymi sekcjami:
- Parking
- Klient
- Rezerwacja parkingu
Przyjrzyjmy się bliżej każdemu z tych obszarów naszego modelu danych.
Sekcja 1:Parking
Sekcja Parking nie tylko przechwytuje wszystkie ważne informacje o samym parkingu, ale także upraszcza sposób, w jaki firma może zarządzać najmniejszą jednostką parkingu (slotem). Niektóre kolumny tabeli zostały dodane wyłącznie w celu zwiększenia wydajności rezerwacji i operacji parkingowych w późniejszych sekcjach.
Zgodnie ze strukturą parkingu, którą omówiliśmy we wstępie, stworzyliśmy poniższe tabele, aby uchwycić każdy szczegół, którego potrzebujemy.
parking_lot
– przechowuje podstawowe informacje o parkingu. Kolumny w tej tabeli to:
id
– klucz podstawowy dla tej tabeli. Przypisuje unikalny numer do każdego parkingu.number_of_blocks
– śledzi liczbę bloków na parkingu.is_slot_available
– wskazuje, czy na parkingu są aktualnie dostępne wolne miejsca.address
– przechowuje pełny adres parkingu.zip
– przechowuje kod pocztowy parkingu, umożliwiając klientom łatwiejsze wyszukiwanie dostępnych parkingów w określonym obszarze poprzez proste zapytanie o żądany kod pocztowy.is_reentry_allowed
– oznacza, czy klient może wyjechać z parkingu i ponownie wjechać z tym samym biletem parkingowym. Pamiętaj, że wiele parkingów zazwyczaj nie pozwala na to klientom. Na takich parkingach za każdym razem, gdy wjeżdżasz ponownie danego dnia, musisz wykupić nowy slip.operating_company_name
– przechowuje nazwę firmy obsługującej parking.is_valet_parking_available
– oznacza, czy parking oferuje usługi parkingowego.
block
– parking podzielony jest na jeden lub więcej bloków. Ta tabela przechowuje informacje o każdym bloku parkingu. Kolumny w tej tabeli to:– parking podzielony jest na jeden lub więcej bloków. Ta tabela przechowuje informacje o każdym bloku parkingu. Kolumny w tej tabeli to:
id
– klucz podstawowy dla tej tabeli.parking_lot_id
– przywoływana kolumna zparking_lot
tabela identyfikująca parking, do którego należy blok.block_code
– przechowuje kod powiązany z tym blokiem. Blokom zwykle nadawane są jednoznacznie identyfikujące kody, takie jak „A”, „B”, „C”, „11”, „22”, „33” i tak dalej.number_of_floors
– przechowuje liczbę pięter w tym bloku. Liczba „1” wskazuje, że jest to blok na parterze bez pięter.is_block_full
– wskazuje, czy blok jest obecnie pełny.
floor
– na parkingach wielopoziomowych bloki mogą mieć więcej niż jedną kondygnację. Jednak do tej tabeli można również odwoływać się za pomocą bloków na poziomie gruntu. Kolumny w tej tabeli to:
id
– klucz podstawowy dla tej tabeli.block_id
– identyfikuje blok, do którego należy podłoga.floor_number
– reprezentuje numer piętra (gdzie 1 =poziom gruntu).max_height_in_inch
– na parkingu wielopoziomowym każde piętro ma ograniczenie wysokości. Ta kolumna przechowuje maksymalną dopuszczalną wysokość pojazdów na podłodze.number_of_wings
– piętro jest dodatkowo podzielone na skrzydła, które pomagają klientom zapamiętać, gdzie zaparkowali. Ta kolumna przechowuje liczbę skrzydeł znajdujących się na podłodze.number_of_slots
– przechowuje liczbę gniazd, które istnieją na podłodze.is_covered
– określa, czy podłoga jest zakryta. Najwyższe piętro parkingu wielopoziomowego lub parkingu naziemnego nigdy nie zostanie zakryte.is_accessible
– wskazuje, czy podłoga jest łatwo dostępna, zwłaszcza dla osób niepełnosprawnych. Jeśli wielopoziomowa działka ma działającą windę, każde z jej pięter jest uważane za dostępne.is_floor_full
– wskazuje, czy piętro jest w pełni zajęte.is_reserved_reg_cust
– wskazuje, czy piętro jest zarezerwowane wyłącznie dla stałych klientów.
parking_slot
– ta tabela przechowuje wszystkie informacje o miejscach parkingowych danego parkingu. Kolumny w tej tabeli to:
id
– klucz podstawowy dla tej tabeli.floor_id
– identyfikuje piętro, do którego należy slot.slot_number
– przechowuje unikalny identyfikator slotu na konkretnym piętrze.wing_code
– identyfikuje skrzydło, w którym znajduje się gniazdo.
Sekcja 2:Klienci
Idąc dalej, zaczniemy teraz wyszczególniać wszystkie istotne informacje o klientach. Należy pamiętać, że parkingi nie zajmują się przechwytywaniem i przechowywaniem danych osobowych, takich jak nazwiska, adresy itp., ponieważ w razie potrzeby mogą uzyskać dostęp do swoich lokalnych portali DMV w dowolnym momencie.
customer
– przechowuje wszystkie istotne informacje o wszystkich rodzajach klientów, którzy mogą odwiedzić parking (zwykły, jednorazowy i przedpłacony). Kolumny w tej tabeli to:
id
– unikalny identyfikator klienta.vehicle_number
– przechowuje numer rejestracyjny pojazdu klienta.registration_date
– przechowuje datę pierwszej rejestracji pojazdu na parkingu.is_regular_customer
– wskazuje, czy klient posiada przepustkę regularną. Jeśli kolumna przechowuje wartość true, musi istnieć prawidłowy wpis wregular_pass
stół. Po wygaśnięciu karnetu, a klient jeszcze go nie odnowił, wartość w tej kolumnie zostanie zaktualizowana na fałsz.contact_number
– przechowuje numer kontaktowy klienta. Ponieważ niektórzy ludzie niechętnie dzielą się swoimi numerami kontaktowymi z parkingami, utrzymaliśmy tę kolumnę jako nieważną.
regular_pass
– przechowuje informacje o regularnych karnetach wydawanych klientom. Kolumny w tej tabeli to:
id
– klucz podstawowy dla tej tabeli.customer_id
– kolumna odniesienia z tabeli klientów.purchase_date
– przechowuje datę zakupu karnetu.start_date
– przechowuje datę, w której karnet zostanie uznany za ważny, co niekoniecznie musi być datą zakupu, ponieważ niektórzy klienci kupują karnety z wyprzedzeniem.duration_in_days
– przechowuje liczbę dni, przez które karnet jest ważny. Bilet miesięczny zwykle pozostaje ważny przez 30 dni.cost
– przechowuje koszt w lokalnej walucie, który klient musi zapłacić, aby kupić karnet.
Sekcja 3:Rezerwacje
Nasza ostatnia sekcja poświęcona jest szczegółowym opisom procesu rezerwacji miejsc parkingowych. Dokonując rezerwacji, klient zazwyczaj musi podać pewne szczegóły, takie jak przewidywana data i godzina przybycia, czas, na jaki chciałby zarezerwować czas, i tak dalej. Poniżej omówimy dwie główne tabele w tej sekcji.
parking_slot_reservation
– utrzymuje szczegóły rezerwacji. Kolumny w tej tabeli to:
id
– przypisuje unikalny numer referencyjny do indywidualnego wniosku o rezerwację.customer_id
– odniesienie do identyfikatora klienta, który dokonuje tej rezerwacji.start_timestamp
– przechowuje przewidywaną datę i godzinę przybycia klienta.duration_in_minutes
– przechowuje czas, na jaki została dokonana rezerwacja.booking_date
– przechowuje datę dokonania rezerwacji.parking_slot_id
– wewnętrzna kolumna, która przypisuje klientowi miejsce parkingowe po przechwyceniu jego żądania i dokonaniu płatności.
parking_slip
– przechowuje informacje o godzinach wejścia i wyjścia klienta oraz ewentualnych opłatach. Stworzyliśmy tę tabelę dla parkingów, które umożliwiają wielokrotne wjazdy i wyjazdy w ramach tej samej rezerwacji. Kolumny w tej tabeli to:
id
– klucz podstawowy dla tej tabeli.parking_slot_reservation_id
– kolumna odniesienia, która identyfikuje powiązane żądanie rezerwacji.actual_entry_time
– przechowuje datę i czas przybycia klienta.actual_exit_time
– przechowuje datę i godzinę wyjazdu (wyjścia) klienta.basic_cost
– przechowuje podstawowy koszt rezerwacji.penalty
– domyślnie przechowuje wartość 0. Jeśli klient opóźni wyjście, zostanie naliczona opłata karna, a wartość w tej kolumnie zostanie zaktualizowana.total_cost
– ta kolumna jedynie dodaje wartościbasic_cost
i kolumny kar.is_paid
– ponowny wjazd jest zazwyczaj dozwolony tylko wtedy, gdy klient uiścił opłatę parkingową. Ta kolumna wskazuje, czy płatność została dokonana.
Wniosek
W artykule przedstawiliśmy przegląd modelu danych dla systemu zarządzania parkingami. Istnieje wiele aplikacji, które pomagają użytkownikom znaleźć miejsca parkingowe poprzez wyodrębnianie, przetwarzanie i kompilowanie danych (takich jak dostępność i koszty) parkingów w określonej okolicy. Jest to szczególnie przydatne dla osób odwiedzających duże miasta, takie jak Nowy Jork, Los Angeles i inne, w których znalezienie parkingu może być koszmarem, jeśli nie zaplanujesz dokładnie wizyty. Takie aplikacje polegają na dobrze zaprojektowanych modelach danych i interfejsach API baz danych do pobierania tych informacji.
W następnym artykule przekształcimy nasz obecny model danych w rozwiązanie dla systemu dostępności parkingów w czasie rzeczywistym. Zachęcamy do publikowania swoich przemyśleń, opinii i rekomendacji w sekcji komentarzy poniżej.