sql >> Databáze >  >> RDS >> Database

Doručování vánočních dárků:Santov datový model

S rychle se blížícími svátky potřebuje Santa nějakou další pomoc, aby mohl doručit dárky dětem po celém světě. Dnes vyvineme datový model, který pomůže Santovi a jeho elfům pracovat efektivněji.

Pozadí

Santova práce je nesmírně důležitá, takže musí udělat vše, co je v jeho silách, aby zajistil úspěch včas. Jen si vzpomeňte na všechny problémy, se kterými se Howard setkal ve hře ‚Jingle All the Way‘, když se pokoušel najít jedinou figurku Turbo Mana – nesmíme nechat Santa znovu uklouznout, jinak bude zničena jeho pověst. Abychom Santovi pomohli udržet si pořádek, rozdělíme jeho aktivity do tří hlavních fází.

  1. Plánování

    Nejprve musí Ježíšek vše naplánovat. Koneckonců, nemůže nechat své elfy běhat po továrně a panikařit, když se snaží pochopit miliardy dodávek! Kromě čtení letošních dopisů a určování, jaké dárky by si děti přály, bychom měli také analyzovat případné trendy z minulých let, abychom shromáždili nějaké běžné materiály nebo dokonce vyrobili dárky s předstihem. To pomůže snížit část nevyřízených záležitostí, když začínáme pracovat na produkci.

  2. Produkce

    Po fázi plánování jsme připraveni začít vyrábět dárky. S pomocí Santových skřítků můžeme rychle vyrobit a zabalit dárky podle seznamů přání, které jsme dostali. Aby byl proces efektivnější, musíme uspořádat všechny materiály a informace, které máme po ruce, aby elfové mohli co nejrychleji uchopit věci, které potřebují.

  3. Doručení

    Ta chvíle se rychle blíží! Santovi sobi jsou připraveni a muž sám úzkostlivě kontroluje hodinky. Santovi pomocníci rychle nakládají dárky do saní. V tuto chvíli se Santa naposledy podívá na svůj rozvrh, aby se ujistil, že má všechny správné adresy a také poznámky, které bude muset vzít v úvahu.

Nyní, když máme trochu pozadí o druhu informací, se kterými budeme potřebovat pracovat, můžeme konečně začít navrhovat Santov datový model.

Datový model




Tento datový model se skládá ze tří částí:

  1. Položky
  2. Osoby a seznamy přání
  3. Dodávky

Pojďme se na každou z nich podívat blíže.

Část 1:Položky

Náš datový model začíná sekcí Položky, která obsahuje mnoho tabulek, které jsou ústřední pro zbývající dvě sekce.

item_type tabulka je zde pravděpodobně nejdůležitější. Tato tabulka obsahuje seznam všech položek, které budeme muset vyrobit v Santově továrně. Pro každou položku uložíme následující informace:

  • item_name — název položky.
  • properties — textové páry klíč–hodnota označující velikost, tvar, barvu a další vlastnosti vyrobené položky, uložené ve strukturovaném formátu.
  • description — nestrukturovaný textový popis položky.

Pokud někdy budeme mít dvě podobné položky, které se liší pouze některými svými vlastnostmi, jako je barva, budeme pokračovat a uložíme je jako jednotlivé záznamy v tabulce.

Pro účely našeho datového modelu budeme předpokládat, že Santa nebude kupovat dárky, ale místo toho nařídí svým elfům, aby vše vyrobili doma. Pro každý jiný typ položky budeme mít seznam předpokladů, které musíme splnit. Mohou to být práce nebo materiály jako dřevo, plast, kov a barvy. Budeme si muset uložit seznam všech možných předpokladů a propojit je s každou položkou, kterou potřebujeme vyrobit. K tomu použijeme čtyři tabulky.

První z těchto čtyř tabulek je prerequisite , který, jak název napovídá, uchovává seznam všech možných předpokladů. Pro každý záznam v této tabulce uložíme jedinečný název předpokladu, všechny další properties (tentokrát v nestrukturovaném formátu) a odkazy na prerequisite_type a jednotkové slovníky. prerequisite_type slovník bude použit k uložení seznamu všech kategorií předpokladů, jako je „práce“ a „materiály“. unit slovník bude použit k uložení seznamu všech jednotek, které použijeme ke kvantifikaci našich předpokladů. Můžeme například očekávat, že práce se bude měřit v hodinách nebo minutách a materiály se budou měřit z hlediska výrobních nákladů (dolary), hmotnosti (kilogramy) nebo objemu (litry).

Poslední tabulka v této sekci je warehouse , který budeme používat ke sledování aktuálního stavu našeho inventáře pro položky i materiály (proto item_type_id a prerequisite_id cizí klíče). Pouze jeden z těchto dvou klíčů bude v daném časovém okamžiku obsahovat hodnotu. Kromě těchto klíčů uložíme konečné quantity který byl k dispozici v konkrétní warehouse_date .

Část 2:Osoby a seznamy přání

Tato část, která je kritickou součástí našeho datového modelu, se zabývá věcmi, které děti chtějí najít pod svými vánočními stromečky! Budeme pracovat zprava doleva.

Dvě tabulky zcela vpravo jsou country a city . Tyto dvě tabulky použijeme při odkazování na místo dítěte, které poslalo Santovi seznam přání. country tabulka obsahuje pouze jedinečný country_name atribut a seznam všech existujících countries . Abychom byli přesnější s našimi místy, použijeme city stůl pro uložení všech měst, která bude Santa muset navštívit. Pro každé město v této tabulce uložíme:

  • city_name – název města, který nemusí být nutně jedinečný.
  • postal_code — PSČ města.
  • country_id — ID země, ve které se město nachází. Spolu s předchozími dvěma atributy tvoří jedinečný klíč pro tuto tabulku.
  • latitude a longitude — používá se k tomu, aby pomohl Santovi najít město na mapě nebo k zadání jeho souřadnic do navigačního systému, který používá.

Samozřejmě nemůžete mít přání bez lidí! V person stůl. Pro každého jednotlivce uložíme first_name , last_name , birth_date a city . Uložíme také adresu osoby a všechny další delivery_details Santa možná bude muset zvážit (například poznámku o tom, že člověk nemá komín).

Poslední tabulka této sekce obsahuje úplný wish_list která uchovává všechna vánoční přání, která kdy byla vyrobena. Pro každé přání potřebujeme vědět:

  • person_id — odkaz na osobu, která přání vyslovila.
  • item_type_id — odkaz na položku (typ), kterou osoba požadovala.
  • quantity — požadované množství položky uvedené v přání.
  • details — všechny detaily, které mohou Ježíškovi pomoci splnit přání.
  • ts — označuje okamžik, kdy bylo přání uloženo v našem systému, což je důležité pro určení roku, ve kterém bylo přání provedeno.
  • gift_id — odkaz na dárkovou tabulku označující dárek, který byl doručen ke splnění tohoto přání.

Část 3:Dodávky

Nyní jsme se konečně dostali k nejzajímavější části našeho datového modelu – dárkům a dodávkám!

Po vyrobení jedné položky vložíme její související záznam do item stůl. Upozorňujeme, že když je položka vyrobena, stále není přiřazena k žádnému dárku, takže gift_id atribut bude obsahovat hodnotu null, dokud nebude položka spojena s konkrétním dárkem. Budeme také muset uložit typ položky, která byla vyrobena (item_type_id ), stejně jako jeho quantity . Zatímco množství položky bude většinou 1, v některých speciálních případech můžeme očekávat různá množství (např. více než 1 položka spojená do sady – to je velmi neobvyklé, ale přesto možné).

Poté zkombinujeme jednu nebo více položek a vytvoříme gift . Aktualizujeme item.gift_id jakmile do tohoto dárku zabalíme vybrané položky. Každý dárek bude doručen jeho spřízněné osobě (person_id ) a bude mít stav sledování (current_status_id ), a také časové razítko, kdy Ježíšek plánuje doručit dárek (delivery_time_planned ). Aktualizujeme také hodnotu wish_list.gift_id atribut pro všechny položky, které byly úspěšně doručeny.

Poslední dvě tabulky v tomto datovém modelu se týkají sledování stavů doručení. Nejprve status tabulka obsahuje jedinečný status_name hodnotu, kterou použijeme při odkazování na aktuální stav gft (gift.current_status_id ). Navíc status_history tabulka bude ukládat seznam všech stavů pro všechny dárky v naší databázi a také časová razítka všech aktualizací stavu (ts).

Doufejme, že náš datový model pomůže Santovi dokončit další úspěšný rok dodávek, abychom všichni mohli dostat své dárky včas. Pokud máte náladu na další SQL s vánoční tématikou, Vertabelo Academy připravila speciální prázdninovou výzvu s 24 dotazy. Neváhejte a zkontrolujte to! Jménem rodiny Vertabelo vám přejeme krásné Vánoce!


  1. Oracle 11g na Mac OS X

  2. Seznam všech indexů a indexových sloupců v SQL Server DB

  3. Jak mohu zabít všechny relace připojující se k mé databázi Oracle?

  4. WordPress připravil prohlášení s IN() podmínkou