9.2. Netzwerk-Datenbanksysteme 9.2.1. Das Netzwerk

Werbung
- 213 -
9.2. Netzwerk-Datenbanksysteme
- 214 -
Grundstruktur eines Sets:
Lieferant
Entwicklung Anfang der 70er Jahre
im wesentlichen: Erweiterung von COBOL
Record-Typ
um CODASYL - DDL/DML
Record
Teile
liefert
L1
L2
Set-Typ Record-Typ
T2 T4 T5
T 1 T2
Records
owner
record
L2
L1
Database Task Group (DBTG) of
Conference on Data System Languages
T2
9.2.1. Das Netzwerk-Modell (NM)
T4
T5
T1
T2
logische Struktur: Ringliste:
implementierbar über Pointer als “chain linked to next”.
NM ist eingeschränktes ERM mit nur binären
besser: doppelt verkettete Ringliste
besser: jeweils zusätzlicher Link zum Owner
1 : n Beziehungen
set
implementiert als Links (Zeiger)
9.2.2. Zehn Regeln für Sets
1. Set Typ muß durch Namen eindeutig identifizierbar sein.
2. Alle Member Records eines Sets sind vom gleichen Typ.
3. Alle owner Records eines Sets sind vom gleichen Typ.
member
records
- 215 -
- 216 -
4. Typ des Members und Owners eines Sets dürfen nicht gleich sein.
(d.h. keine direkte Rekursion, z.B.: Personalhierarchie)
5. Ein Record kann nicht gleichzeitig Member in zwei Sets vom
gleichen Typ sein.
7. Übersichtliche Darstellung auf Typ Ebene (keine Instanzen) im
Bachmann Diagramm
Record
Lieferant
Set _LT
6. Ein Record kann sowohl Member in einem Set, als auch Owner in
einem anderen Set sein.
zu 5.:
verboten:
T4
Set _LT
Set
Record
L2
T5
T2
Modellierung:
a) E/R-Modell
b) Auflösung von n : m Beziehungen in n : 1 und 1 : m Beziehungen
c) Überführung in Bachmann Diagramm.
d) Netzwerk DB
T1
verboten!
Lösung: Einführung sog. Kett-Records:
erlaubt:
Record (genauer: Kett-Record)
LT
Teile
L1
Set
8. Set darf leer sein.
L3
L2
L1
9. Mitglieder eines Sets sind geordnet (erster, nächster, ..., letzter)
Duplikate im Set möglich.
L1T4
T4
L1T5
T5
L2T2
L1T2
T2
L2T1
T1
KettRecords
10.Set kann in beiden Richtungen durchlaufen werden.
member
owner
owner
member
- 217 -
- 218 -
Ausführliches Beispiel:
NM:
Lieferant
Relational:
Bachmann-Diagramm
Lieferant
liefert
E/R-Diagramm
n
liefert
Preis
Teile
Tragen Sie hier bitte die (vereinfachte) Pointerstruktur für dieses Beispiel ein:
m
Teile
Lieferant
liefert
Teile
(!)
L#
L1
L2
L3
L#
Name
Smith
Jones
Huber
P#
Prio
20
10
30
P1
3.00
L1
P2
2.00
L1
P3
4.00
L2
P1
3.00
L2
P2
4.00
L3
P2
2.00
T_Name
Niete
Bolzen
Schraube
Schraube
L1 Smith 20 London
3.00
2.00
4.00
P1 Niete 1516
Preis
L1
T#
P1
P2
P3
P4
Stadt
London
Paris
München
Nebenbemerkung:
T_Norm
1516
12
141
368
L2 Jones 10 Paris L3 Huber 30 München
3.00
P2 Bolzen 12
4.00
P3 Schraube 141
2.00
P4 Schraube 368
- 219 -
9.2.3. DB auf Basis des NM
• Erreichbarkeit:
Jeder Record der DB muß erreichbar sein, entweder als
Einstiegspunkt (Schlüssel) oder über eine Folge von Sets.
-> Vorsicht beim Löschen eines Records, das sowohl Member als
auch Owner eines anderen Sets ist!
• Retrieval:
Ausgehend vom Einstiegspunkt muß der Benutzer den Zugriffspfad
für jeden Record selbst anlegen.
-> Navigierend durch die DB
• Verarbeitung geschieht record-weise (= tupelweise)
• zum Navigieren ist User-Working-Area (UWA) erforderlich
(Kommunikationsbereich).
- 220 -
Jeder Satz, den das Applikations-Programm aus der Datenbank liest,
wird vom Datenbanksystem im zugehörigen Speicherbereich des UWA
abgelegt und von dort mit Cobol-Anweisungen weiterverarbeitet.
X
Programmierumgebung
X
DB
Prog. Variable
X
Record Template
X
X
X
Aktualitätszeiger
X
User working area (UWA):
Jedes Applikations-Programm enthält einen Kommunikationsbereich
(“user working area”, UWA). Dieser enthält:
• Positionszeiger: drei Arten
• CRT = current of record-type: pro Record-Typ, Verweis auf
den zuletzt zugegriffenen Record dieses Typs
• CRS = current of set type: pro Set-Typ, Verweis auf den
zuletzt zugegriffenen Record dieses Typs
• CRU =current of run unit: Verweis auf den Record, auf den
man zuletzt zugegriffenen hat.
damit ist “Finde nächsten Record in Set S” immer eindeutig lösbar.
• Speicherbereich für jeden angesprochenen Record-Typ
• Status Code Wort (= Ergebnis einer Operation: ok, error, end of set,
etc.)
UWA
9.2.4. Retrieval
1. Suche eines Records:
FIND NEXT <record> { USING <value> }
FIRST
| WITHIN <set> |
PRIOR
ANY
...
OWNER [ WITHIN <set>]
2. Übernahme des Records in UWA:
GET
X
- 221 -
- 222 -
9.2.5. Zusammenfassung
Bsp.:
System
Einstiegspunkt
SNAME
Angestellter
Set_AP
Ang_Pro
Set_PA
Projekt
Query: Name und Nummer der Projekte in denen der Angestellte mit
Nr. N arbeitet.
READ (N)
ANG_NR := N
FIND ANY ANGEST USING ANG_NR
FIND FIRST ANGPRO WITHIN SET_AP
IF STATUS_WORT =’NO_MEMBER’ THEN GOTO ENDE
LOOP:FIND OWNER WITHIN SET_PA
Nachteile des NM:
• Query-Abfragen bedeuten navigieren im Netzwerk. Navigieren =
Ändern von Positionen im UWA; d.h. der Programmierer muß sagen
“wie” man die gesuchten Daten findet (prozeduraler
Programmierstil) , statt “was” gesucht wird (deklarativer
Programmierstil, wie z.B. SQL).
Der Applikations-Programmierer muß folglich das ganze Netzwerk
im Kopf haben!
• Views sind im NM nur sehr eingeschränkt (bis gar nicht) möglich
(Subschema).
• Delete: Problem der Sub-Baum Löschung:
Löschen des Record-Tupels L ⇒ L darf nicht Owner eines Sets ≠ Ø
sein.
Rekursiv fortpflanzendes Delete?
• Im Relationenmodell ist das Ergebnis einer Query wieder eine
Relation:
⇒ Schachtelung ergibt kompakte Querysprache
Im NM ist das Ergebnis einer Query kein Teilnetz, sondern Record
im UWA
⇒ im allgemeinen keine kompakte Schachtelung möglich.
⇒ Queries werden lang und unübersichtlich.
GET PROJEKT
PRINT (...)
FIND NEXT ANGPRO WITHIN SET_AP
IF STATUS_WORT =’NO_NEXT_MEMBER’ THEN GOTO ENDE
GOTO LOOP
ENDE: ...
Vorteile des NM:
• Vorteil gegenüber hierarchischen Datenbanksystemen:
Update-Anomalien über geeignete Kett-Records im Prinzip völlig
vermeidbar
(vgl. Normalisierung). D.h. eine redundanzfreie Speicherung ist
möglich.
Aber: Übersichtlichkeit des Netzwerks?
• Vorteil gegenüber Relationenmodell:
Hohe Performanz (da Pointerverfolgung schneller als Joins mit
Wertevergleich)
Abhilfe im RM: Sekundärindexe, Clustering.
Herunterladen