Analýza dat a modelování Přednáška 3
Hierarchický model Hierarchical Data Manipulation Language - HDML manipulace s daty (vyhledávání) pomocí příkazů HDML v hierarchickém SŘBD připomíná princip práce se seznamy (např. spojovým seznamem) v programovacích jazycích
HDML procházení je sekvenční SŘBD udržuje ukazatel na aktuální záznam aktuální databázový záznam (current database record) = poslední záznam, ke kterému přistoupil nějaký příkaz posloupnost DB příkazů probíhá od aktuálního záznamu, může definovat nový aktuální záznam
HDML základní příkaz pro nalezení aktuálního záznamu GET: GET FIRST <typ záznamu> [WHERE<podm.>] prohledává databázi od začátku hierarchické sekvence, hledá první instanci záznamu splňující podmínku (sekce podmínky je nepovinná) GET NEXT <typ záznamu> [WHERE<podm.>] prohledává od aktuálního záznamu a hledá další záznam splňující podmínky příkaz nastaví příznak DB-Status podle výsledku operace (0 = úspěch)
Hierarchický model Kuldanů Novák 1 3 2
Hierarchický model 320612/1234 František Kuldanů (záznam otec ) 1, 100, 25.3.1990,10.11.2005 (záznamy syn ) 3, 150, 26.3.1990,10.11.2005 521006/567 Josef Novák (záznam otec ) 2, 100, 25.3.1990,20.11.2005 (záznam syn )
výpis všech čtenářů HDML get first ctenar; while DB-status = 0 do begin print(ctenar.jmeno,ctenar.prijmeni); get next ctenar; end
HDML výpis všech čtenářů, kteří mají příjmení Novák get first ctenar where ctenar.prijmeni=" Novak"; while DB-status = 0 do begin print(ctenar.jmeno,ctenar.prijmeni); get next ctenar where ctenar.prijmeni=" Novak"; end
HDML příkaz pro nalezení dalšího záznamu, který má stejný rodičovský záznam GET NEXT WITHIN PARENT <typ záznamu> [WHERE<podm.>]
HDML výpis všech exemplářů, které si vypůjčil Novák get first ctenar where ctenar.prijmeni=" Novak"; get next within parent exemplar; while DB-status = 0 do begin print(exemplar.prir_c); get next within parent exemplar; end
HDML aktualizační příkazy: INSERT vloží záznam do databáze DELETE vymaže záznam z databáze GET HOLD používá se pro nastavení daného záznamu jako aktuálního záznamu
HDML zápis nové výpůjčky čtenáře exemplar.prir_c := 3; exemplar.datum_vyp := 12.10.2016; insert exemplar where ctenar.rc = "320212/1234";
Síťový model vznikl v roce 1969 tvůrce Charles Bachman specifikace publikována na konferenci Conference on Data Systems Languages (CODASYL) Consortium standardizován v 80. letech jako specifikace ISO
Síťový model Základní princip data jsou uložena ve formě vzájemně fyzicky provázaných záznamů (tvoří síť) na rozdíl od stromového hierarchického modelu, kde syn má pouze 1 rodiče, může mít záznam i dva předky srovnejte logické databázové modely: relační model: množina logicky provázaných relací (tabulek) přes cizí klíče síťový model: graf síť hierarchický model: graf - strom
E-R model ČTENÁŘ (0,n) RČ JMÉNO PSČ (0,m) SI_VYPŮJČIL SI_REZERVOVAL DATUM_VÝP (0,1) (1,1) EXEMPLÁŘ (0,n) (0,n) KNIHA DATUM_REZ PŘÍR_Č CENA D_NÁK JE_OD TITUL AUTOR ISBN
Síťový databázový model logické schéma EXISTENCE člen EXEMPLÁŘ ČTENÁŘ KNIHA vlastník VÝPŮJČKA REZERVACE KNIHA je vlastník (více) EXISTENCÍ členský záznam nemůže existovat ve více než jedné instanci Poznámka: srovnejte s hierarchickým modelem, který je stromem některé záznamy existují ve více instancích
Příklad konkrétní databáze Josef Novák RČ: 521006/5678 František Kuldanů RČ: 320612/1234 22.10.2013 22.10.2013 22.10.2013 22.10.2013 22.10.2013 Babička ISBN: 80-85190-38-9 Učebnice jazyka C ISBN: 80-85828-02-2 Bylo nás pět ISBN: 80-00-00076-8 Divá Bára ISBN: 9788000005027
Síťový model Implementace dva typy objektů: záznamy (records) reprezentuje entity programátorsky: typ záznam reprezentuje entitní typ C-množiny (Sets) reprezentuje vztahy programátorsky: typ C-množina reprezentuje typ vztahu
Síťový model typ záznamu je analogický typ record v Pascalu JDD a JMD byly de facto programovací jazyky odvozené od Pascalu type ctenar = record RC: string; jmeno: string; PSC: string; end;
Síťový model typ množiny je uspořádáná dvojice { vlastník, {členové} } {čtenář1, {výpůjčka1, výpůjčka2} } množina je implementována jako kruhový spojový seznam
Síťový model ČTENÁŘ1 VÝPŮJČKA1 VÝPŮJČKA2
Síťový model jiný příklad zdroj: RNDr. Palovská
toto je 1 instance, ve skutečnosti má dva ukazatele na následníky ze dvou seznamů Síťový model
Síťový model - DML nalezení všech účastí osob AKCE1 begin FIND A1 Record by Database Key Akce1; Get A1; print(a1.nazev); FIND FIRST ucast_k_akci within UCAST; while Not EOF UCAST do Get ucast_k_akci; FIND OWNER within OSOBA; Get osoba; print(osoba.jmeno); FIND NEXT ucast_k_akci within UCAST; End; End;