Upload
armina
View
46
Download
0
Embed Size (px)
DESCRIPTION
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) - PowerPoint PPT Presentation
Citation preview
1
Teorie zpracování dat
SÍŤOVÝ DATOVÝ MODEL
2
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
3
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.
4
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.
5
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.
6
Grafické znázornění prvků modelu (místo ERD)
typ záznamu Katedra
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
7
Grafické znázornění prvků modelu
výskyt setukatedra Kat.inform. . . . Uk
zaměstn Čáp Uk
zaměstn Kos Uk
. . .
zaměstn Orel Uk
8
Pravidla pro definování setů
Typ záznamu může být vlastníkem jednoho setu a členem jiného setu .Fak
Fak_katKat
Kat_zamZam
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_fakKat Stud
9
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.
ZamZam_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
10
Jazyk pro definici dat
Deklarace schématu SCHEMA NAME IS jméno_schématu
RECORD SECTIONdeklarace_záznamů
SET SECTIONdeklarace_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ů
11
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)
...
12
Jazyk pro definici dat
Deklarace typů setů SET NAME IS jméno_typu_setu
OWNER IS jméno_typu_vlastníkauspořá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íkaFIXED ... nemůže měnit vlastníka OPTIONAL ... nepovinný členAUTOMATIC ... začlenění automaticky i do setu
MANUAL ... začlenění ručně uživatel v aplikaciDUPLICATE IS NOT ALLOWED ... jednoznačnost
13
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)
14
Jazyk pro definici dat
15
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 XXX02 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 XXX02 název PIC X(15)02 ročník PIC 9
RECORD NAME IS Úvazek LOCATION MODE IS SYSTEM-DEFAULT
02 ču PIC XXX02 čp PIC XXX02 hodin PIC 99
16
Jazyk pro definici dat
SET SECTIONSET 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-KEYSET NAME IS Učí_předmět OWNER IS Předmět ORDER IS PERMANENT SORTED BY DEFINED KEYSMEMBER 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
17
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áznamy kaž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
18
Jazyk pro manipulaci s daty
Paměť pro jeden ČU jméno ... Záznam Učitel
výskyt každého ČP název ... Záznam Předmět
typu záznamu ČU ČP hodin Záznam Úvazek
Ukazatele DB-KEY program Current of PROGRAM
aktuálních DB-KEY Učitel Current of Učitel
výskytů DB-KEY Předmět Current of Předmět
záznamů DB-KEY Úvazek Current of Úvazek
. . .
Ukazatele DB-KEY U-Ú Current of Učitel_učí
uvnitř setu DB-KEY U-P Current of Učí_předmět
. . .
Systémové proměnné
DB-STATUS . . .
Příklad: pracovní oblast pro databázi FAKULTA
19
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 Current of Program, příslušného Current of RECORD a příslušných Current of SET
GET přesune do uživatelské oblasti aktuální záznam programuSTORE 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 programuERASE vymaže aktuální záznam programu z DB
CONNECT vloží aktuální záznam programu do výskytu setuDISCONNECT vyjme aktuální záznam programu z výskytu setuRECONNECT přesune aktuální záznam do jiného setu
20
Jazyk pro manipulaci s daty – seznam příkazů
ORDER setřídí setACCEPT přesun hodnot systémových DB proměnných do položek v
programuKEEP uzamkne výskyt záznamu pro ostatní uživateleFREE odemkne výskyt záznamuREADY otevře pracovní uživatelskou oblast pro práci s DBFINISH 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íč
21
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;
22
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;
23
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;
24
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žkyFIND 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;
25
Jazyk pro manipulaci s daty - příkazy
Student Kolejjmeno mesto ulice nazev
Horák Karviná … Moravská
Novosad Opava Opletalova
Novotný Ostrava Zelená 23 Studentská
Krejčí Opava Dr. Malého
… …
…
Student
Kolej
Ukaz – program
Ukaz – Student
Ukaz – Kolej
Ukaz –Bydli
chyba
26
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
27
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;
28
Jazyk pro definici dat
29
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;
30
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
31
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;
32
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 ;
33
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 ;
34
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.
35
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í;
36
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í;
37
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í
38
Jazyk pro manipulaci s daty - příkazy
Animace příkazů
find duplicate using pol.exe
39
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