AdamátorZápiskyHlášky

Návrh schématu pro databázi hlášek

Zde je příklad protokolu na předmět Dekompozice databázových systémů (18DDS), který jsem úspěšně obhájil u zkoušky.

Motivace

Kdysi dávno jsem si začal zapisovat vtipné hlášky, které řekli lidé kolem mě (původně šlo o vyučující na mém gymnáziu, následně se to rozšířilo). K zapisování jsem využíval vlastní aplikaci obsahující jednoduchou databázi, kterou jsem postupně vylepšoval, ovšem nevěděl jsem v té době, jak správně navrhnout relační databázi. Zde je pokus o tento správný návrh, který bych v budoucnu mohl prakticky využít.

Model

Lidé

Fyzické osoby, které mohou být autory nebo zapisovateli hlášek. Relevantní údaje:

ID
Primární klíč.
Skutečné jméno
Jméno dané osoby, využívané při zapisování hlášky pro identifikaci.
Zobrazované jméno
Jméno využívané při zobrazování hlášek. Může se lišit od skutečného jména v případě, že daná osoba požádala o anonymizaci hlášek.
Pohlaví
Využívané pro správnou gramatiku ve frázích jako „Zapsal Adam Blažek“.

Hlášky

Hlavní obsah databáze. Hláška se může skládat z více částí řečených různými lidmi.

ID
Primární klíč.
Části
Jednotlivé části hlášky, z nichž každá má autora a text. Jelikož jde o seznam, musí být reprezentován další tabulkou.
Kontext
Řetězec popisující, v jaké situaci byla hláška řečena, je-li tato informace relevantní.
Čas
Datum a čas, kdy byla hláška řečena.
Zapisovatel
Osoba, která hlášku zapsala. Může být anonymní.

Skupiny

Tematické skupiny lidí (např. FJFI vyučující) využívané ke generování „Hláškotestů“.

ID
Primární klíč.
Název
Název skupiny.
Členové
Členové skupiny. Jelikož jde o seznam, musí být reprezentován další tabulkou.

ERA diagram

Primární klíče jsou vyznačeny tučně, cizí klíče kurzívou.

Hláška id-hláška      INT kontext        STR datum-čas      DATE zapisovatel-id INT Osoba id-osoba          INT skutečné-jméno    STR zobrazované-jméno STR pohlaví           STR(1) zapsána nejvýše jednou Část hlášky hláška-id INT pořadí    INT autor-id  INT text      STR náleží jedné         řečena jednou Skupina id-skupina INT název      STR Příslušnost skupina-id INT osoba-id   INT přísluší do jedné  jedné  týká se

Pohledy

Hlášky podle autora

Umožňuje zjistil, kolik hlášek řekla (nebo se na nich podílela) daná osoba a kdy byla pro danou osobu řečena nejstarší a nejnovější hláška. Nezobrazuje osoby, které nejsou autorem žádné části hlášky.

Hlášky podle autora  PROJ zobrazované-jméno, pohlaví,  COUNT(DISTINCT hláška-id) AS počet-hlášek,  MIN(datum-čas) AS nejstarší,  MAX(datum-čas) AS nejnovější  GROUP BY id-osoba,  zobrazované-jméno, pohlaví JOIN autor-id = id-osoba JOIN hláška-id = id-hláška Část hlášky Hláška Osoba

Hlášky podle zapisovatele

Umožňuje zjistil, kolik hlášek zapsala daná osoba a kdy zapsala nejstarší a nejnovější hlášku. Nezobrazuje osoby, které nezapsaly žádnou hlášku.

Hlášky podle zapisovatele  PROJ zobrazované-jméno, pohlaví,  COUNT(DISTINCT id-hláška) AS počet-hlášek,  MIN(datum-čas) AS nejstarší,  MAX(datum-čas) AS nejnovější  GROUP BY id-osoba,  zobrazované-jméno, pohlaví JOIN zapisovatel-id = id-osoba Hláška Osoba

Členové skupiny

Umožňuje zjistil, kolik členů má daná skupina osob.

Členové skupiny  PROJ název,  COUNT(DISTINCT osoba-id) AS počet-členů  GROUP BY id-skupina, název JOIN skupina-id = id-skupina Skupina Příslušnost