Database
 sql >> база данни >  >> RDS >> Database

911/112:Модел на данни за услугата за спешни повиквания

Обаждането на номер за спешни случаи като 911 или 112 не е нещо, което очакваме с нетърпение, но се радваме, че го имаме, когато имаме нужда! От другата страна на линията това е стресираща работа и има малко място за грешки. Всичко трябва да работи перфектно.

Днес ще разгледаме модела на данни, който службата за спешни случаи може да използва, за да обработва и отговаря на входящи повиквания.

Идея

Номерата за спешни повиквания се различават в различните държави. Числата 911 (Северна Америка и някои други страни) и 112 (Европа и части от Африка и Азия) са широко използвани. Тези номера се използват за връзка с трите служби за спешна помощ (полиция, линейка и пожарна и спасителна служба) с едно обаждане. Някои държави използват различен номер; други нямат централизиран номер за спешни повиквания. В този модел ще се съсредоточа върху ситуации, в които съществува такъв централизиран номер.

Основната идея е, че когато някой се обади, операторът се грижи за това обаждане, събира цялата необходима информация и препраща тази информация на отговорните. Един пример може да се случи автомобилна катастрофа:след като получи обаждането, операторът трябва да знае къде се е случил инцидентът и колко сериозен е той. След това могат да изпратят полиция и линейка, за да се справят със ситуацията. Друг пример може да бъде пожар в жилищна сграда, който може да изисква и трите служби за спешна помощ.

Модел на данни

Моделът на данни се състои от три предметни области:

  • Countries & cities
  • Calls
  • Actions & services

Ще опишем всяка от тези тематични области в реда, в който са изброени.

Държави и градове

Тази тематична област не е специфична за този модел, но все пак е необходима за проследяване на местоположенията, откъдето идват обажданията.

Имаме само две таблици в тази област. country таблицата съдържа списък с УНИКАЛНИ country_name стойности. Можем да очакваме, че тук ще имаме само една държава, защото службите за спешна помощ работят предимно на национално ниво. В по-голяма държава тази таблица може да се използва за съхраняване на имена на щати или провинции.

Списък с всички градове и села се съхранява в city речник. За всеки град ще съхраняваме УНИКАЛНА комбинация от country_id - city_name . Можем да очакваме, че тази таблица ще съдържа списък на всички градове и села в дадена държава.

Обаждания

Има две предметни области, които са специфични за този модел на данни:Calls и Actions & services . В потока от време обажданията идват първи и предизвикват други събития. Затова първо ще опишем този раздел.

Calls предметната област се състои от пет таблици. Докато call таблицата очевидно е централната, първо ще опишем останалите четири таблици, защото всички те са посочени в таблицата за повиквания.

Потребителите започват разговори, като използват своите стационарни или мобилни телефони. Трябва да съхраняваме всеки номер, който се е обадил на 112 или 911, така че ще ни трябва phone_number маса. Всеки път, когато бъде инициирано ново обаждане, ние ще проверяваме дали номерът вече съществува в тази таблица. Ако не, ще вмъкнем нов ред. За всеки запис на таблица ще съхраняваме:

  • phone_number – Номерът, който инициира обаждане.
  • number_status_id – Препратка към number_status речник. Тази стойност ще означава дали номерът, осъществил „първия контакт“, е „в черен списък“ или „блокиран“ и т.н. Тази стойност може да ни помогне да решим какво да правим, напр. да не създавате ново обаждане, ако номер е блокиран, да извеждате предупреждение, ако номерът е в черен списък, или просто да записвате информация за оператора.
  • notes – Всички бележки, свързани с този номер, въведени от всеки оператор. Това не е задължително поле и ще съдържа предимно NULL стойности.

operator таблицата се използва за съхраняване на списък с всички оператори, които получават повиквания. За всеки оператор ще съхраняваме УНИКАЛЕН operator_code (вътрешно обозначение), first_name на оператора и тяхното last_name . Тук няма да съхраняваме подробности, като информация за контакт на оператора или флаг, обозначаващ дали операторът в момента е зает или не.

За всяко обаждане искаме да присвоим определен статус. За да направим това, първо ще ни трябва call_status речник. Този речник съдържа набор от UNIQUE status_name стойности. Някои очаквани стойности са:„обаждането е прекъснато“, „повикването е прекратено“, „успешно обаждане“ и „пренасочено повикване“.

Сега сме готови да опишем call маса. Повикване се инициира от обаждащия се. След като номерът бъде вмъкнат в базата данни (ако е неизвестен преди това номер), повикването също се вмъква. За всяко обаждане ще трябва да съхраняваме:

  • operator_id – Препратка към operator който получи това обаждане.
  • phone_number_id – Номерът, който е извършил обаждането. В почти всички случаи този атрибут ще съдържа стойност, отнасяща се до phone_number маса. Все пак оставих опция за вмъкване на обаждане без телефонен номер. Това може да се случи, когато номер е скрит или ако има някаква мрежова грешка.
  • call_status_id – Препратка към call_status речник, който описва резултата от обаждането. Тази стойност ще бъде вмъкната в края на разговора.
  • city_id – Препратка към city речник, обозначаващ града, където е направено обаждането. Това също може да е NULL, тъй като тази информация може да е неизвестна или ненужна.
  • call_start_time – Означава кога е започнало повикването. Тя може да бъде NULL в някои специални случаи, напр. операторът е чул звъненето на линията, но повикването така и не е било установено.
  • call_end_time – Когато разговорът приключи. Тази стойност ще бъде актуализирана в момента, в който разговорът приключи. Той ще съдържа стойност NULL, ако повикването никога не е започнало или ако повикването е започнало, но все още е в ход.
  • notes – Всички бележки в свободен текстов формат, въведени от оператора във връзка с това обаждане.

Действия и услуги

След обаждането е време за действие. Тези действия трябва автоматично да предупреждават необходимите служби за спешна помощ; също така трябва да можем да вмъкваме или премахваме сигнали, ако е необходимо.

За да покрием това, ще използваме още пет таблици.

В emergency_service таблица, ще съхраняваме списък с всички налични услуги за спешна помощ. Тази таблица съдържа УНИКАЛНО service_name и всякаква информация, необходима за установяване на контакт. Информацията за контакт се съхранява в структуриран формат, подобен на JSON, в contact_details атрибут. Някои от очакваните служби за спешна помощ са „полиция“, „пожарна служба“ и „линейка“. Все пак бихме могли да имаме и други, като „планински спасители“, „гражданска охрана“ и т.н.

action_catalog речникът съдържа списък с всички възможни действия, които биха могли да се изискват в резултат на повикване. Тази таблица съдържа списък с такива УНИКАЛНИ action_name стойности. Някои очаквани стойности тук са „предупреди всички услуги“, „предупреди линейка“ и т.н.

Сега трябва да дефинираме списък с всички сигнали, които трябва да се появяват автоматично, когато дадено действие е присвоено на повикване. Тези стойности се съхраняват в alert_service маса. Ще съхраняваме УНИКАЛНАТА двойка action_catalog_idemergency_service_id , което означава, че трябва да се свърже с определена спешна служба, когато е възложено това действие. Все пак понякога може да искаме да преразгледаме това, така че ще оставя опция да го направя. Ако флагът always_alert е зададено на True, ние ще изпратим този сигнал без ръчен надзор; в противен случай операторът може да се намеси.

Присвояването на действие към повикване се извършва чрез action_required маса. Може да се наложи да имаме повече от едно действие за всяко обаждане, така че имаме нужда от тази таблица. Ще съхраним УНИКАЛНАТА комбинация call_idaction_id както и бележките, ако има такива, въведени от оператора.

Последната таблица в нашия модел е alerted_service маса. УНИКАЛНИ двойки action_required_idemergency_service_id обозначават действителните сигнали, които са били инициирани за това действие (и повикване). Това ще бъдат всички записи с alert_service.always_alert зададете на True и всички сигнали се задават ръчно, след като операторът ги е преразгледал.

Възможни подобрения

Този модел е само гръбнакът на едно възможно решение. Аз лично мога да предложа много подобрения:

  • Как се съхраняват данните на операторите.
  • Включително възможността за проследяване на случилото се след сигнала на службите за спешна помощ.
  • Позволяване на оператор да започне обаждане.
  • Свързване на събития в базата данни, за да можем да дефинираме дали определено обаждане е свързано с друго обаждане, действие или предупреждение. В момента знаем само техния ред.

Как работят подобни услуги във вашата страна? Пропуснахме ли нещо? Какво бихте добавили или премахнали от този модел? Моля, кажете ни в коментарите по-долу.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL IN срещу SQL СЪЩЕСТВУВА

  2. Разбиране на изявленията PIVOT, UNPIVOT и Reverse PIVOT

  3. Как AI ще промени разработката и тестването на софтуер

  4. Често срещани задачи на Postgres на CentOS 7

  5. Изследване на въздействието върху производителността на Adhoc работно натоварване