С наближаването на празниците, Дядо Коледа се нуждае от допълнителна помощ, за да достави подаръци на деца по целия свят. Днес ще разработим модел на данни, който може да помогне на Дядо Коледа и неговите елфи да работят по-ефективно.
Фон
Работата на Дядо Коледа е изключително важна, така че той трябва да направи всичко възможно, за да осигури успех навреме. Просто си спомнете всички проблеми, които Хауърд срещна в „Jingle All the Way“, когато се опитваше да намери една единствена фигура на Turbo Man – не можем да позволим на Дядо Коледа да се изплъзне отново, или репутацията му ще бъде съсипана. Така че, за да помогнем на Дядо Коледа да остане организиран, ще разделим дейностите му на три основни фази.
-
Планиране
Първо, Дядо Коледа трябва да планира всичко. В крайна сметка той не може да накара своите елфи да тичат из фабриката и да се паникьосват, докато се опитват да осмислят милиардите доставки! Освен да четем тазгодишните писма и да определяме какви подаръци биха искали децата, трябва също да анализираме всички тенденции от предишни години, за да съберем някои общи материали или дори да изготвим подаръци преди време. Това ще помогне да се намали част от изоставането, когато започнем да работим по производството.
-
Производство
След фазата на планиране сме готови да започнем да произвеждаме подаръци. С помощта на елфите на Дядо Коледа можем бързо да изработим и опаковаме подаръци според списъците с желания, които получихме. За да направим процеса по-ефективен обаче, трябва да организираме всички материали и информация, които имаме под ръка, така че елфите да могат да грабнат нещата, от които се нуждаят възможно най-бързо.
-
Доставка
Моментът бързо наближава! Елените на Дядо Коледа са готови, а самият мъж тревожно си гледа часовника. Подаръците бързо се товарят в шейната от помощниците на Дядо Коледа. В този момент Дядо Коледа за последно разглежда графика си, за да се увери, че има всички правилни адреси, както и всички бележки, които ще трябва да вземе предвид.
Сега, когато имаме малко информация за вида информация, с която ще трябва да работим, най-накрая можем да започнем да проектираме модела на данните на Дядо Коледа.
Моделът на данните
Този модел на данни се състои от три раздела:
- Елементи
- Лица и списъци с желания
- Доставки
Нека разгледаме по-отблизо всеки от тях.
Раздел 1:Артикули
Нашият модел на данни започва със секцията Елементи, която съдържа много таблици, които са централни за останалите две секции.
item_type
таблицата е може би най-важната тук. Тази таблица съдържа списък на всички артикули, които ще трябва да произведем във фабриката на Дядо Коледа. За всеки артикул ще съхраняваме следната информация:
item_name
— името на артикула.properties
— текстови двойки ключ-стойност, обозначаващи размера, формата, цвета и други свойства на произведения артикул, съхранявани в структуриран формат.description
— неструктурирано текстово описание на елемента.
Ако някога имаме два подобни елемента, които се различават само по някои от свойствата си, като например цвят, ще продължим и ще ги съхраняваме като отделни записи в таблицата.
За целите на нашия модел на данни ще приемем, че Дядо Коледа няма да купува подаръци, а вместо това ще нареди на своите елфи да произвеждат всичко в къщата. За всеки различен тип артикул ще имаме списък с предпоставките, които трябва да изпълним. Това може да бъде труд или материали като дърво, пластмаса, метал и бои. Ще трябва да съхраним списък с всички възможни предпоставки и да ги свържем с всеки артикул, който трябва да произведем. Ще използваме четири таблици, за да постигнем това.
Първата от тези четири таблици е prerequisite
, който, както подсказва името, съхранява списък с всички възможни предпоставки. За всеки запис в тази таблица ще съхраняваме уникално име на предпоставка, всички допълнителни properties
(този път в неструктуриран формат) и препратки към prerequisite_type
и речници на единици. prerequisite_type
речникът ще се използва за съхраняване на списък с всички задължителни категории, като „труд“ и „материали“. unit
речникът ще се използва за съхраняване на списък с всички единици, които ще използваме за количествено определяне на нашите предпоставки. Например, можем да очакваме трудът да бъде измерен в часове или минути, а материалите да бъдат измерени по отношение на производствените разходи (долари), теглото (килограми) или обема (литри).
Последната таблица в този раздел е warehouse
, който ще използваме за проследяване на текущото състояние на инвентара си както за артикули, така и за материали (оттук и item_type_id
и prerequisite_id
външни ключове). Само един от тези два ключа ще съдържа стойност във всеки даден момент от време. В допълнение към тези ключове, ние ще съхраняваме крайното quantity
която е била налична на определена warehouse_date
.
Раздел 2:Лица и списъци с желания
Критична част от нашия модел на данни, този раздел се занимава с нещата, които децата искат да намерят под коледните си елхи! Ще работим от дясно на ляво.
Двете най-десни таблици са country
и city
. Ще използваме тези две таблици, когато се позоваваме на местоположението на дете, което е изпратило списък с желания на Дядо Коледа. country
таблицата съдържа само уникалното country_name
атрибут и списък на всички съществуващи countries
. За да бъдем по-точни с нашите местоположения, ще използваме city
маса за съхранение на всички градове, които Дядо Коледа трябва да посети. За всеки град в тази таблица ще съхраняваме:
city_name
— името на града, което не е непременно уникално.postal_code
— пощенския код на града.country_id
— идентификационният номер на държавата, в която се намира градът. Заедно с предишните два атрибута, това формира уникалния ключ за тази таблица.latitude
иlongitude
— използва се, за да помогне на Дядо Коледа да намери града на картата си или да въведе координатите му в навигационната система, която използва.
Разбира се, не можете да имате желания без хора! Ще съхраняваме списък с всички хора в person
маса. За всеки човек ще съхраняваме first_name
, last_name
, birth_date
и city
. Също така ще съхраняваме адреса на лицето, както и всички допълнителни delivery_details
Може да се наложи Дядо Коледа да обмисли (като бележка, показваща, че човек няма комин).
Последната таблица на този раздел съдържа пълния wish_list
който съхранява всички коледни пожелания, направени някога. За всяко желание трябва да знаем:
person_id
— препратка към лицето, което е пожелало.item_type_id
— препратка към артикула (вида), който лицето е поискало.quantity
— желаното количество от артикула, посочено в желанието.details
— всички подробности, които могат да помогнат на Дядо Коледа да изпълни желанието.ts
— обозначава момента, в който желанието е било съхранено в нашата система, което е важно за определяне на годината, в която е направено желанието.gift_id
— препратка към таблицата с подаръци, обозначаваща подаръка, който е доставен за изпълнение на това желание.
Раздел 3:Доставки
Сега най-накрая стигнахме до най-интересната част от нашия модел на данни – подаръци и доставки!
След като бъде произведен един елемент, ще вмъкнем свързания с него запис в item
маса. Имайте предвид, че когато даден артикул е произведен, той все още не е присвоен на никакъв подарък, така че gift_id
атрибутът ще съдържа стойност null, докато елементът не бъде свързан с конкретен подарък. Ще трябва също да съхраним типа на произведения артикул (item_type_id
), както и неговото quantity
. Докато количеството на артикула ще бъде предимно 1, можем да очакваме различни количества в някои специални случаи (например повече от 1 артикул, комбиниран в комплект – това е много необичайно, но въпреки това е възможно).
Продължавайки нататък, ще комбинираме един или повече артикула, за да създадем gift
. Ще актуализираме item.gift_id
след като опаковаме избраните от нас артикули в този подарък. Всеки подарък ще бъде доставен на свързаното му лице (person_id
) и ще има състояние на проследяване (current_status_id
). ), както и времева марка за това кога Дядо Коледа планира да достави подаръка (delivery_time_planned
). Също така ще актуализираме стойността на wish_list.gift_id
атрибут за всички успешно доставени артикули.
Последните две таблици в този модел на данни се отнасят за проследяване на статусите на доставка. Първо, status
таблицата съдържа уникален status_name
стойност, която ще използваме при препращане към текущото състояние на gft (gift.current_status_id
). Освен това status_history
таблицата ще съхранява списък с всички състояния за всички подаръци в нашата база данни, както и времевите отпечатъци на всички актуализации на състоянието (ts).
Надяваме се, че нашият модел на данни ще помогне на Дядо Коледа да завърши още една успешна година на доставки, за да можем всички да получим подаръците си навреме. Ако сте в настроение за повече SQL с коледна тематика, Vertabelo Academy е подготвил специално ваканционно предизвикателство с 24 заявки. Продължете и проверете! От името на семейство Вертабело се надяваме да имате прекрасна Коледа!