390 likes | 513 Views
SÍŤOVÝ DATOVÝ MODEL. Teorie zpracování dat. SÍŤOVÝ DATOVÝ MODEL. první databázový model, nejprve implementace různé 1971 definován pracovní skupinou pro databáze (DBTG = Data Base Task Group) při sdružení CODASYL (Conference on Data System Languages)
E N D
SÍŤOVÝ DATOVÝ MODEL Teorie zpracování dat
SÍŤOVÝ DATOVÝ MODEL • první databázový model, nejprve implementace různé • 1971 definován pracovní skupinou pro databáze (DBTG = Data Base Task Group) při sdružení CODASYL (Conference on Data System Languages) • u nás starší síťové databázové systémy z konce 80.let IDMS (IBM 360, IBM 370, EC 1045, 1055) DBMS (SMEP, DEC, VAX) IMAGE (Hewlet-Packard, ADT) • v současnosti některé principy síťového modelu k využití u objektově-relačních SŘBD
Základní pojmy síťového modelu Logický model databáze ... schéma Externí schéma ... subschéma Typ entity … typ záznamu (RECORD) Atributy … komponenty Entity … výskyty záznamů příslušného typu. Množina výskytů záznamů deklarovaných typů … databáze Výskyty záznamů rozlišeny hodnotou databázového klíče. Vztah, vazba … množina (SET) Typ vazby … typ setu, má jméno a je definován typem záznamu vlastníka (OWNER) a typem záznamu člena setu (MEMBER). Vztah je reprezentován řadou výskytů setu.
Základní pojmy síťového modelu Základní rozdíl proti relačnímu datovému modelu je v realizaci vztahů. Jako u RDM realizovány jen vazby kardinality 1:M. SDM zaznamenává vztah pomocí ukazatelů na vazební entitu. K datové tabulce je připojena systémová část s tolika odkazy, ke kolika jiným typům záznamů je záznam v tabulce vázán.
Základní pojmy síťového modelu SETY • výskyt setu obsahuje právě jeden výskyt záznamu vlastníka a právě ty výskyty záznamů členů setu, které jsou s vlastníkem výskytu setu v příslušném vztahu • výskyt setu může obsahovat pouze výskyt záznamu vlastníka (prázdný výskyt setu) • množiny členů dvou výskytů téhož typu setu jsou disjunktní • implementace setu pomocí cyklického zřetězeného seznamu: ukazatel od vlastníka na prvního člena, pak zřetězeny členské záznamy, od posledního člena zpět na vlastníka.
Grafické znázornění prvků modelu (místo ERD) typ záznamuKatedra typ setu (hrana od vlastníka ke členu) jméno typu vlastníka Katedra jméno typu setu PRACOVNÍK-KATEDRY jméno typu člena Zaměstnanec výskyt záznamu Katedra kat.informatiky ... UK
Grafické znázornění prvků modelu výskyt setu
Pravidla pro definování setů Typ záznamu může být vlastníkem jednoho setu a členem jiného setu . Fak Fak_kat Kat Kat_zam Zam Typ záznamu může být členem libovolného počtu setů. Fak Kolej Stud_fak Stud Ubytov Typ záznamu může být vlastníkem libovolného počtu setů. Fak Fak_kat Stud_fak Kat Stud
Pravidla pro definování setů Vlastník a člen setu nemohou být téhož typu, unární vztah 1:N se realizuje prostřednictvím dalšího pomocného typu záznamu LINK. Zam Zam_link Link_zam LINK Vztah typu M:N není možno realizovat přímo a realizuje se pomocí dvou vazeb typu 1:M prostřednictvím spojovacího typu záznamu. Ten je členem v obou typech setů. Učit Třída Učit_učí Výuka_třídy Výuka
Jazyk pro definici dat • Deklarace schématu • SCHEMA NAME IS jméno_schématu • RECORD SECTION • deklarace_záznamů • SET SECTION • deklarace_setů • Deklarace subschématu • můžeme vynechat komponenty záznamů, záznamy nebo některé sety. • komponentám záznamů je možno přiřadit jiný datový typ, změnit pořadí uvnitř záznamu, přiřadit jiná jména. • neuvádíme vlastnosti definované ve schématu. • SUBSCHEMA jméno_subschématu WITHIN jméno_schématu • RECORD SECTION • deklarace_záznamů • SET SECTION • deklarace_setů
Jazyk pro definici dat Deklarace typů záznamů (syntaxe z Cobolu) RECORD NAME IS jméno_typu_záznamu Způsob umístění nových záznamů LOCATION MODE IS SYSTEM ... umístí sám systém DIRECT ... přímo dle DB-klíče CALC proc USING sez-pol ... hašováním VIA ... pro členy setu "blízko" vlastníka 01 <komponenta 1> PIC 9(n){9 znamená cifru} 01 <komponenta 2> PIC X(n){X znamená znak} 02 <komponenta 3> PIC X(n) ... 01 <komponenta 5> PIC X(n) ...
Jazyk pro definici dat Deklarace typů setů SET NAME IS jméno_typu_setu OWNER IS jméno_typu_vlastníka uspořádání členů setu ORDER IS FIRST ... uložení v setu jako první LAST ... poslední NEXT ... před aktuální PRIOR ... za aktuální SORTED BY DEFINES KEYS ... zatříděně PERMANENT ... není možno měnit pořadí v aplikaci MEMBER IS <jméno typu člena> MANDATORY ... povinný člen, může měnit vlastníka FIXED ... nemůže měnit vlastníka OPTIONAL ... nepovinný člen AUTOMATIC ... začlenění automaticky i do setu MANUAL ... začlenění ručně uživatel v aplikaci DUPLICATE IS NOT ALLOWED ... jednoznačnost
Jazyk pro definici dat Příklad: Typy záznamů: Učitel (ČU, jméno, funkce, plat) Předmět (ČP, název, ročník) Úvazek (ČU, ČP, hodin) Student (jméno, město, ulice) Kolej (název) Typy setů: UČITEL_UČÍ (Učitel, Úvazek) UČÍ_PŘEDMĚT (Předmět, Úvazek) BYDLÍ (Kolej, Student)
Jazyk pro definici dat SCHEMA NAME IS Fakulta RECORD SECTION RECORD NAME IS Učitel LOCATION MODE IS CALC hash_ču USING ču IN Učitel 02 ču PIC XXX 02 jméno PIC X(15) 02 funkce PIC X(10) 02 plat PIC 9(6) RECORD NAME IS Předmět LOCATION MODE IS CALC hash_čp USING čP IN Předmět 02 čp PIC XXX 02 název PIC X(15) 02 ročník PIC 9 RECORD NAME IS Úvazek LOCATION MODE IS SYSTEM-DEFAULT 02 ču PIC XXX 02 čp PIC XXX 02 hodin PIC 99
Jazyk pro definici dat SET SECTION SET NAME IS Učitel_učí OWNER IS Učitel ORDER IS PERMANENT SORTED BY DEFINED KEYS MEMBER IS Úvazek MANDATORY AUTOMATIC KEY IS ASCENDING čp IN Úvazek DUPLICATE ARE NOT ALLOWED SET SELECTION IS THRU Učitel_učí IDENTIFIED BY CALC-KEY SET NAME IS Učí_předmět OWNER IS Předmět ORDER IS PERMANENT SORTED BY DEFINED KEYS MEMBER IS Úvazek MANDATORY AUTOMATIC KEY IS ASCENDING ču IN Úvazek DUPLICATE ARE NOT ALLOWED SET SELECTION IS THRU Učí_předmět IDENTIFIED BY CALC-KEY
Jazyk pro manipulaci s daty • Jazyk pro manipulaci s daty je vnořen do hostitelského jazyka • (COBOL, PL/1). Dále předpokládáme hostitelský jazyk Pascal. • Pro každý aplikační program (v paměti jich může současně být více) je v paměti počítače zvláštní oblast, nazývaná pracovní oblast uživatele (user work area). • V každé uživatelské pracovní oblasti jsou umístěny: • - místo pro uchování jeden záznam každého typu záznamu • - ukazatele na aktuální objekty • = ukazatele na naposledy zpracovávané záznamykaždého typu • = odkazy na naposledy zpracovávané záznamy v každém setu • = odkaz na naposledy zpracovávaný záznam celého programu • - stavové proměnné detekující chyby
Jazyk pro manipulaci s daty Příklad: pracovní oblast pro databázi FAKULTA
Jazyk pro manipulaci s daty – seznam příkazů FIND vyhledá výskyt záznamu v DB a definuje jej za aktuální záznam programu, aktuální záznam příslušného typu záznamu, případně aktuálním záznamem setů, v nichž je záznam zařazen … databázový klíč vyhledaného výskytu záznamu je uložen do položek Currentof Program, příslušného Current ofRECORD a příslušných Current of SET GET přesune do uživatelské oblasti aktuální záznam programu STORE uloží nový výskyt záznamu do DB, definuje jej za aktuální záznam programu, aktuální záznam příslušného typu záznamu a za aktuální záznamy setů, do nichž je případně automaticky zařazen MODIFY modifikuje aktuální záznam programu ERASE vymaže aktuální záznam programu z DB CONNECT vloží aktuální záznam programu do výskytu setu DISCONNECT vyjme aktuální záznam programu z výskytu setu RECONNECT přesune aktuální záznam do jiného setu
Jazyk pro manipulaci s daty – seznam příkazů ORDER setřídí set ACCEPT přesun hodnot systémových DB proměnných do položek vprogramu KEEP uzamkne výskyt záznamu pro ostatní uživatele FREE odemkne výskyt záznamu READY otevře pracovní uživatelskou oblast pro práci s DB FINISH ukončí práci s pracovní uživatelskou oblastí . . . Poznámka: Příkazy FIND a STORE mění obsah tabulky běžných ukazatelů, ostatnípříkazy pracují s aktuálním záznamem jako s operandem. Označíme: T ... typ záznamu S ... typ setu DBK ... db-klíč
Jazyk pro manipulaci s daty - příkazy • GET T • načte výskyt záznamu do uživatelské pracovní oblasti, pokud aktuálním záznamem programu je výskyt záznamu typu T • Příkaz FIND • vyhledává záznamy v DB a definuje je za aktuální záznam programu, • má mnoho tvarů podle typu vyhledávání. • Vyhledání záznamu podle hodnoty databázového klíče • FIND T RECORD BY DB-KEY DBK • Příklad:klíč:=CURRENT OF Učitel; • . . . • FIND Učitel RECORD BY DB-KEY klíč; • GET Učitel;
Jazyk pro manipulaci s daty - příkazy • Vyhledání záznamu podle CALC-klíče • FIND T RECORD BY CALC_KEY • je nutné dosadit hodnotu položkám definovaným jako CALC-klíče pro T • Příklad:Najděte učitele s číslem U1. • Učitel.ČU:="U1"; • FIND Učitel RECORD BY CALC-KEY; • GET Učitel;
Jazyk pro manipulaci s daty - příkazy • Vyhledání dalších výskytů záznamů s hodnotou CALC- klíče • FIND DUPLICATE T RECORD BY CALC-KEY • Příklad:Předpokládejme deklaraci typu záznamu Úvazek se způsobem umístění pomocí CALC-KEY, kde ČU je definováno jako CALC-klíč tohoto záznamu. Z původní definice ČP je CALC-klíč záznamu Předmět. Pak názvy všech předmětů, které učí učitel U1 zjistíme takto: • Úvazek.ČU:="U1”; • FIND Úvazek RECORD BY CALC-KEY; • WHILE (DB-STATUS=0) DO • BEGIN • GET Úvazek; • Předmět.ČP:=Úvazek.ČP; • FIND Předmět RECORD BY CALC-KEY; • GET Předmět; • PRINT(Předmět.ČP, Předmět.název); • FIND DUPLICATE Úvazek RECORD BY CALC-KEY • END;
Jazyk pro manipulaci s daty - příkazy • Selektivní vyhledávání podle předem zadaných hodnot položek: • FIND T RECORD USING POL • Příklad:V záznamu STUDENT hledáme ulici, kde bydlí NOVÁK. • Student.jméno:="NOVÁK"; • FIND Student RECORD USING jméno; • GET Student; • PRINT(Student.ulice); • Vyhledání dalších záznamů se stejnými hodnotami zadané položky • FIND DUPLICATE T RECORD USING POL • Příklad: Chceme vypsat všechna jména studentů, kteří bydlí v Opavě. • Student.město:="Opava"; • FIND Student RECORD USING město ; • WHILE (DB-STATUS=0) DO • BEGIN • GET Student ; • PRINT(Student.jméno) ; • FIND DUPLICATE Student RECORD USING město • END;
Jazyk pro manipulaci s daty - příkazy Student Kolej Student Kolej Ukaz – program Ukaz – Student Ukaz – Kolej Ukaz –Bydli chyba
Jazyk pro manipulaci s daty - příkazy • Vyhledání záznamů uvnitř výskytu setu • Pokud při hledání výskytu záznamu víme, do kterého setu záznam patří, hledání se výrazně urychlí. Hledat můžeme buď v právě aktuálním setu (CURRENT SET) nebo v setu daném vlastníkem (OWNER). • Vyhledání vlastníka aktuálního výskytu zadaného setu: • FIND OWNER OF CURRENT S SET • Vyhledání prvního člena aktuálního výskytu zadaného setu: • FIND FIRST T RECORD IN CURRENT S SET • Vyhledání následujícího výskytu záznamu uvnitř aktuálního výskytu setu • FIND NEXT T RECORD IN CURRENT S SET
Jazyk pro manipulaci s daty - příkazy Příklad: Vypište seznam všech předmětů, které učí učitel Bouchala. Učitel.jméno:=„Bouchala"; FIND Učitel RECORD USING jméno; FIND FIRST Úvazek RECORD IN CURRENT Učitel_učí SET WHILE (DB-STATUS=0) DO BEGIN FIND OWNER OF CURRENT Předmět_učí SET; GET Předmět; PRINT(Předmět.název); FIND NEXT Úvazek RECORD IN CURRENT Učitel_učí SET END;
Jazyk pro manipulaci s daty - příkazy • Selektivní vyhledávání záznamů uvnitř aktuálního výskytu setu: • FIND T RECORD IN CURRENT S SET USING POL • FIND DUPLICATE T RECORD IN CURRENT S SET USING POL • Příklad: Vypište čísla učitelů, kteří učí předmět Logika 4 hodiny/týd • Předmět.název:= „Logika“; • FIND Předmět RECORD USING název; • Úvazek.hodin:= 4; • FIND Úvazek RECORD IN CURRENT Učí-před SET • USING hodin; • WHILE (DB-STATUS = 0) DO • BEGIN • GET Úvazek; • PRINT(Úvazek.ČU); • FIND DUPLICATE Úvazek RECORD IN CURRENT • Před-učí SET USING hodin; • END;
Jazyk pro manipulaci s daty - příkazy • Vyhledání záznamů podle hodnot z tabulky aktuálních ukazatelů • FIND CURRENT OF T RECORD • Nastaví aktuální záznam nějakého typu za aktuální záznam programu. • FIND CURRENT OF S SET • Nastaví aktuální záznam typu setu za aktuální záznam programu
Jazyk pro manipulaci s daty - příkazy Příklad: Učí učitel U1 předmět Logika? Pokud ano, v jakém rozsahu? Učitel.ČU:="U1"; FIND Učitel RECORD BY CALC-KEY; neučí:=TRUE; FIND FIRST Úvazek RECORD IN CURRENT Učitel-učí SET; WHILE (DB-STATUS=0) AND neučí DO BEGIN FIND OWNER OF CURRENT Učí_předmět SET; GET Předmět; IF Předmět.název = "Logika" THEN BEGIN FIND CURRENT OF Úvazek RECORD; GET Úvazek; PRINT(Úvazek.hodin); neučí:=FALSE END ELSE FIND NEXT Úvazek RECORD IN CURRENT Učitel-učí SET END;
Jazyk pro manipulaci s daty - příkazy Nový záznam STORE T Zapíše nový záznam do databáze. Nejprve vytvoříme výskyt záznamu v pracovní uživatelské oblasti a odtud ho příkazem STORE do DB uložíme. Ukládaný záznam se stane aktuálním záznamem programu a je zařazen do všech setů, v nichž je deklarován jako člen typu AUTOMATIC. Příklad: Do databáze Fakulta přidáme další výskyt záznamu učitele do záznamu Učitel. Učitel.jméno:="Novotný“ Učitel.ČU:=123; Učitel.funkce:="Docent"; STORE Učitel ;
Jazyk pro manipulaci s daty - příkazy Modifikace záznamu MODIFY T Modifikace záznamu. Záznam v DB najdeme příkazem FIND, načteme do pracovní oblasti příkazem GET, opravíme příslušné komponenty záznamu a pomocí příkazu MODIFY zapíšeme zpět. Příklad: Student Novotný se přestěhoval do ulice Zelené 23. Student.jméno:="Novotný"; FIND Student USING jméno ; GET Student ; Student.ulice:="Zelená 23" ; MODIFY Student ;
Jazyk pro manipulaci s daty - příkazy Zrušení záznamu ERASE T [ PERMANENT ] [ SELECTIVE ] [ ALL ] Zruší aktuální záznam programu (vyhledaný pomocí FIND), pokud není vlastníkem neprázdného výskytu nějakého setu. Je-li zadáno PERMANENT a aktuální záznam programu je vlastníkem výskytů setů, pak jsou spolu zrušeny i všechny členské záznamy s členstvím MANDATORY (= povinné členství). SELECTIVE navíc zruší všechny členské záznamy s členstvím OPTIONAL (= nepovinné členství), pokud nejsou zařazeny v žádném jiném setu. ALL zruší všechny členské záznamy bez ohledu na druh členství a zařazení v jiných setech.
Jazyk pro manipulaci s daty - příkazy Modifikace struktury setů CONNECT T TO S zařadí aktuální záznam programu jako aktuální výskyt zadaného setu; nelze použít pro druh členství MANDATORY AUTOMATIC (= povinné automatické členství). Příklad: Máme set BYDLÍ s vlastníkem Kolej a členem Student. Máme zařadit studentku se jménem Kosová Helena na kolej Opletalovu. Kolej.název:="Opletalova"; FIND Kolej RECORD USING název; Student.jméno:="Kosová Helena"; FIND Student RECORD USING jméno; CONNECT Student TO Bydlí;
Jazyk pro manipulaci s daty - příkazy Modifikace struktury setů DISCONNECT T FROM S vyřadí aktuální záznam programu z výskytu zadaného setu. Druh členství v setu musí být OPTIONAL. Příklad: Vyloučení studenta Jana Skřivánka z koleje Mánesova. Kolej.název:="Mánesova"; FIND Kolej RECORD USING název; Student.jméno:="Skřivánek Jan"; FIND Student RECORD USING jméno; DISCONNECT Student FROM Bydlí;
Jazyk pro manipulaci s daty - příkazy Modifikace struktury setů RECONNECT T TO S přesune aktuální záznam z původního do aktuálního výskytu setu. Příklad: Student Novotný se přestěhoval z koleje Opletalovy do koleje Mánesovy. Student.jméno:="Novotný"; FIND Student RECORD USING jméno; Kolej.název:="Mánesova"; FIND Kolej RECORD USING název; RECONNECT Student TO Bydlí
Jazyk pro manipulaci s daty - příkazy Animace příkazů find duplicate using pol.exe
Hierarchický datový model • Používán hlavně v počátcích rozvoje databázových systémů,zjednodušený síťový model. • Zobrazíme-li záznamy jako uzly a vazby jako hrany grafu, odpovídá databázi v síťovém modelu obecný graf. Databázi v hierarchickém modelu odpovídá strom (graf bez cyklů) nebo les (množina stromů) . • Záznam nemůže patřit do více než jednoho setu. • Při popisování se používá rodinné terminologie - místo vlastník otec, místo člen syn. • vlastník otec • členové synové • síťový model hierarchický model