Database
 sql >> Baza danych >  >> RDS >> Database

911/112:model danych usługi połączeń alarmowych

Wywołanie numeru alarmowego, takiego jak 911 lub 112, nie jest czymś, na co czekamy, ale cieszymy się, że możemy go mieć, gdy go potrzebujemy! Po drugiej stronie jest to stresująca praca i nie ma miejsca na błędy. Wszystko musi działać idealnie.

Dzisiaj przyjrzymy się modelowi danych, z którego służby ratunkowe mogą korzystać do przetwarzania i odpowiadania na połączenia przychodzące.

Pomysł

Numery alarmowe różnią się w zależności od kraju. Liczby 911 (Ameryka Północna i kilka innych krajów) i 112 (Europa oraz część Afryki i Azji) są powszechnie używane. Numery te służą do skontaktowania się ze wszystkimi trzema służbami ratunkowymi (policją, pogotowiem ratunkowym oraz strażą pożarną i ratownictwem) w ramach jednego połączenia. Niektóre kraje używają innego numeru; inni nie mają scentralizowanego numeru alarmowego. W tym modelu skupię się na sytuacjach, w których istnieje taka scentralizowana liczba.

Główną ideą jest to, że gdy ktoś wykonuje połączenie, operator zajmuje się tym połączeniem, zbiera wszystkie istotne informacje i przekazuje je osobom odpowiedzialnym. Jednym z przykładów może być wypadek samochodowy:po odebraniu połączenia operator powinien wiedzieć, gdzie ten wypadek się wydarzył i jak poważny jest. Następnie mogą wysłać policję i karetkę pogotowia, aby zajęły się sytuacją. Innym przykładem może być pożar w budynku mieszkalnym, który może wymagać wszystkich trzech służb ratunkowych.

Model danych

Model danych składa się z trzech obszarów tematycznych:

  • Countries & cities
  • Calls
  • Actions & services

Opiszemy każdy z tych obszarów tematycznych w kolejności, w jakiej są wymienione.

Kraje i miasta

Ten obszar tematyczny nie jest specyficzny dla tego modelu, ale nadal jest potrzebny do śledzenia lokalizacji, z których nadeszły połączenia.

W tej dziedzinie mamy tylko dwie tabele. country tabela zawiera listę UNIKATOWYCH country_name wartości. Możemy się spodziewać, że będziemy mieli tu tylko jeden kraj, ponieważ służby ratunkowe działają głównie na poziomie krajowym. W większym kraju ta tabela może służyć do przechowywania nazw stanów lub prowincji.

Lista wszystkich miast i wiosek jest przechowywana w city słownik. Dla każdego miasta będziemy przechowywać UNIKALNĄ kombinację country_id - city_name . Możemy się spodziewać, że ta tabela będzie zawierać listę wszystkich miast i wsi w danym kraju.

Połączenia

Istnieją dwa obszary tematyczne, które są specyficzne dla tego modelu danych:Calls oraz Actions & services . W strumieniu czasu telefony przychodzą pierwsze i wywołują inne zdarzenia. Dlatego najpierw opiszemy tę sekcję.

Calls obszar tematyczny składa się z pięciu tabel. Podczas call tabela jest oczywiście centralną, najpierw opiszemy pozostałe cztery tabele, ponieważ wszystkie są przywoływane w tabeli wywołań.

Użytkownicy inicjują połączenia za pomocą telefonów stacjonarnych lub komórkowych. Musimy zapisać każdy numer, który dzwonił 112 lub 911, więc będziemy potrzebować phone_number stół. Za każdym razem, gdy inicjowane jest nowe połączenie, sprawdzamy, czy numer już istnieje w tej tabeli. Jeśli nie, wstawimy nowy wiersz. Dla każdego rekordu tabeli przechowujemy:

  • phone_number – Numer, który zainicjował połączenie.
  • number_status_id – Odniesienie do number_status słownik. Wartość ta będzie oznaczać, czy numer nawiązujący „pierwszy kontakt”, jest „na czarnej liście” czy „zablokowany” itp. Ta wartość może nam pomóc w podjęciu decyzji, np. co zrobić. nie tworzyć nowego połączenia, jeśli numer jest zablokowany, rzucać ostrzeżenie, jeśli numer jest na czarnej liście, lub po prostu rejestrować informacje dla operatora.
  • notes – Wszystkie notatki związane z tym numerem, wstawione przez dowolnego operatora. To nie jest wymagane pole i będzie zawierało głównie wartości NULL.

operator tabela służy do przechowywania listy wszystkich operatorów odbierających połączenia. Dla każdego operatora będziemy przechowywać UNIKALNY operator_code (oznaczenie wewnętrzne), first_name operatora i ich last_name . Nie będziemy tutaj przechowywać szczegółów, takich jak dane kontaktowe operatora lub flaga wskazująca, czy operator jest obecnie zajęty, czy nie.

Każdemu połączeniu chcemy przypisać określony status. Aby to zrobić, najpierw potrzebujemy call_status słownik. Ten słownik zawiera zestaw UNIKALNYCH status_name wartości. Niektóre oczekiwane wartości to:„połączenie przerwane”, „połączenie odrzucone”, „połączenie udane” i „połączenie przekierowane”.

Teraz jesteśmy gotowi do opisania call stół. Połączenie jest inicjowane przez dzwoniącego. Po wpisaniu numeru do bazy danych (jeśli jest to numer wcześniej nieznany) wprowadzane jest również połączenie. Dla każdego połączenia musimy zapisać:

  • operator_id – Odniesienie do operator który otrzymał to wezwanie.
  • phone_number_id – Numer, z którego wykonano połączenie. W prawie wszystkich przypadkach ten atrybut będzie zawierał wartość odwołującą się do phone_number stół. Mimo to zostawiłem opcję wstawienia połączenia bez numeru telefonu. Może się to zdarzyć, gdy liczba jest ukryta lub występuje jakiś błąd sieci.
  • call_status_id – Odniesienie do call_status słownik opisujący wynik połączenia. Ta wartość zostanie wstawiona na końcu połączenia.
  • city_id – Odniesienie do city słownik, oznaczający miasto, z którego wykonano połączenie. Może to być również NULL, ponieważ te informacje mogą być nieznane lub niepotrzebne.
  • call_start_time – Wskazuje, kiedy rozpoczęło się połączenie. Może być NULL w niektórych szczególnych przypadkach, np. operator usłyszał dzwonek linii, ale połączenie nigdy nie zostało nawiązane.
  • call_end_time – Kiedy rozmowa się zakończyła. Ta wartość zostanie zaktualizowana w momencie zakończenia połączenia. Będzie zawierać wartość NULL, jeśli połączenie nigdy się nie rozpoczęło lub jeśli połączenie rozpoczęło się, ale nadal trwa.
  • notes – Wszystkie notatki w dowolnym formacie tekstowym, które operator wstawił w związku z tym połączeniem.

Działania i usługi

Po wykonaniu połączenia nadszedł czas na działanie. Działania te powinny automatycznie zaalarmować wymagane służby ratunkowe; powinniśmy również być w stanie w razie potrzeby wstawiać lub usuwać alerty.

Aby to omówić, użyjemy jeszcze pięciu tabel.

W emergency_service tabeli, przechowamy listę wszystkich dostępnych służb ratunkowych. Ta tabela zawiera UNIKALNĄ service_name oraz wszelkie informacje potrzebne do nawiązania kontaktu. Informacje kontaktowe są przechowywane w ustrukturyzowanym formacie JSON w contact_details atrybut. Niektóre z oczekiwanych służb ratunkowych to „policja”, „straż pożarna” i „pogotowie ratunkowe”. Mimo to moglibyśmy mieć też inne, takie jak „ratownictwo górskie”, „straż cywilna” itp.

action_catalog słownik zawiera listę wszystkich możliwych działań, które mogą być wymagane w wyniku połączenia. Ta tabela zawiera listę takich UNIKALNYCH action_name wartości. Niektóre oczekiwane wartości to „alert all services”, „alarm ambulance” itp.

Teraz musimy zdefiniować listę wszystkich alertów, które powinny wystąpić automatycznie, gdy akcja zostanie przypisana do połączenia. Te wartości są przechowywane w alert_service stół. Przechowamy UNIKALNĄ parę action_catalog_idemergency_service_id , co oznacza, że ​​po przypisaniu tej akcji należy skontaktować się z określoną służbą ratunkową. Mimo to czasami możemy chcieć to zmienić, więc zostawię opcję, aby to zrobić. Jeśli flaga always_alert jest ustawiona na True, wyślemy ten alert bez ręcznego nadzoru; w przeciwnym razie operator może interweniować.

Przypisanie akcji do połączenia odbywa się za pomocą action_required stół. Możemy potrzebować więcej niż jednej akcji dla każdego wywołania, więc potrzebujemy tej tabeli. Przechowamy UNIKALNĄ kombinację call_idaction_id jak również notatki, jeśli są, wstawione przez operatora.

Ostatnia tabela w naszym modelu to alerted_service stół. UNIKALNE pary action_required_idemergency_service_id oznaczają rzeczywiste alerty, które zostały zainicjowane dla tej akcji (i połączenia). Będą to wszystkie rekordy z alert_service.always_alert ustawione na Prawda, a wszystkie alerty ustawione ręcznie po ich poprawieniu przez operatora.

Możliwe ulepszenia

Ten model to tylko podstawa jednego z możliwych rozwiązań. Mogę osobiście zaproponować wiele ulepszeń:

  • Jak przechowywane są dane operatorów.
  • W tym możliwość śledzenia, co się stało po powiadomieniu służb ratunkowych.
  • Pozwól operatorowi na nawiązanie połączenia.
  • Powiązanie zdarzeń w bazie danych, dzięki czemu możemy określić, czy dane połączenie było powiązane z innym połączeniem, działaniem lub alertem. W tej chwili znamy tylko ich kolejność.

Jak takie usługi działają w Twoim kraju? Czy coś przegapiliśmy? Co byś dodał lub usunął z tego modelu? Powiedz nam w komentarzach poniżej.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odkryj 10 mniej znanych funkcji SQL Diagnostic Manager

  2. Łączenie z Vertica w IRI Workbench

  3. Sztuka agregacji danych w SQL od prostych do agregacji przesuwnych

  4. Jak zaokrąglić liczbę do najbliższej liczby całkowitej w SQL?

  5. Niezamierzone skutki uboczne – sesje snu trzymające kłódki