• Keine Ergebnisse gefunden

Nachteile relationaler Datenbanken

N/A
N/A
Protected

Academic year: 2021

Aktie "Nachteile relationaler Datenbanken "

Copied!
21
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Kapitel 11 1

Moderne Datenbankkonzepte

Verteilte Datenbanken

¾ Wünschenswert,

¾ aber extrem aufwändig (Æ Zweiphasen Commit)

Objektrelationale Datenbanken

¾ Kompromiss zwischen relational und rein objektorientiert

¾ seit 1999 normiert in SQL3 (SQL99)

¾ seit Oracle V8.0 implementiert

(2)

Objektorientierte Datenbanken

Definition (objektorientierte Datenbanken)

¾ Eine Datenbank heißt objektorientiert, wenn sie grundlegende objekt- orientierte Konzepte wie Objekte, Klassen, Methoden, Kapselung und Vererbung enthält.

Warum objektorientierte Datenbanken?

¾ Komplexe Datenstrukturen können direkt in die Datenbank übernommen werden

¾ Objektorientierte Ansätze wie Kapselung oder Vererbung können eingesetzt werden

¾ Ziel: Direkte Abbildung der Realität in die Datenbank mit überschaubarem und leicht modifizierbarem Code

(3)

Kapitel 11 3

Nachteile relationaler Datenbanken

Nachteile Auswirkung

Flache Struktur Komplexe Objekte werden „flachgeklopft“; ihr Auf- bau ist aus dem Design nicht mehr direkt ersichtlich Keine Rekursion Der Aufbau komplexer Objekte kann nur schwer

nachvollzogen werden (Stücklistenproblem)

Vielzahl von Relationen Häufige Joins auf zusammengehörige Relationen verlängern die Laufzeit

(4)

Objekte am Beispiel: Aufbau eines Fahrrads

Fahrrad

Lackierter Rahmen

Sattel Gruppe Deore

Räder Lenker Pedale

Geschweißter Rahmen

Gabel Rohre Tretlager

Felgen Bereifung Schlauch

(5)

Kapitel 11 5

Objektrelationale Datenbanken

Ansatz:

Erweiterung relationaler Datenbanken durch Hinzufügen von objekt- orientierten Strukturen und Methoden

Basis:

NF2-Relationen (NF2 = NFNF = Non-First-Normal-Form) Definition (NF2-Relationen)

¾ Eine Relation ist in der n-ten NF2-Form (n>1), falls sie in der n-ten Normalform ist, wobei aber die Bedingung der ersten Normalform (Atomarität der Attribute) nicht erfüllt sein muss.

(6)

SQL3 (SQL99)

Es wird unterstützt:

¾ NF2-Relationen

¾ Anwendungssprache, um Rekursion, Konstruktor, Methoden und Datenkapselung zu unterstützen

¾ Klassenobjekte (mit private, public, protected Elemente)

¾ Templates (parametrisierte Typen)

¾ Neue Operatoren wie Recursive Union (für Stücklistenproblem)

¾ Neue Datentypen CREATE TYPE

CREATE TABLE erweitert

IF-, WHILE-, FOR- Kontrollstrukturen

(7)

Kapitel 11 7

Objektrelationale Erweiterungen in Oracle ab V8.0

Wirtssprache ist PL/SQL, was etwas von der SQL3-Norm abweicht.

Objektorientierte Strukturen in Oracle:

¾ Objekt

¾ Objekt-Sichten

¾ Variable Felder

¾ Eingebettete Relationen (nested table)

(8)

Create-Type-Befehl (1)

CREATE [ OR REPLACE ] TYPE Typname AS OBJECT ( Spalte Datentyp [ , … ] ,

[ MEMBER { Prozedurname | Funktionsname } [ , … ] ] ) CREATE [ OR REPLACE ] TYPE BODY Typname AS

MEMBER { Prozedurdeklaration | Funktionsdeklaration } ; [ , … ] END

Beispiel:

CREATE OR REPLACE TYPE TAdresse AS OBJECT ( Strasse CHARACTER ( 30 ) ,

PLZ CHARACTER ( 5 ) ,

Ort CHARACTER ( 20 ) ) ;

(9)

Kapitel 11 9

Verwendung des neuen Datentyps

CREATE TABLE LieferantNeu

( Nr INTEGER PRIMARY KEY ,

Name CHARACTER ( 30 ) NOT NULL ,

Adresse TAdresse ,

Sperre CHARACTER ) ;

Vorteil:

In allen drei Relationen Lieferant, Kunde, Personal werden die gleichen Datentypen verwendet!

Aber:

Wie werden die Daten von Lieferant übertragen?

Wie wird auf die Relation LieferantNeu zugegriffen?

(10)

Zugriff auf Relation LieferantNeu

Einfügen aus Relation Lieferant:

INSERT INTO LieferantNeu

SELECT Nr, Name, TAdresse(Strasse, PLZ, Ort), Sperre FROM Lieferant ;

Lesezugriffe:

SELECT * FROM LieferantNeu ;

SELECT Name, L.Adresse.Ort FROM LieferantNeu L;

(11)

Kapitel 11 11

Objekt-Sichten

Beispiel Lieferant:

Vorteilhaft: Sicht statt neue Relation

CREATE VIEW SLieferant ( Nr, Name, Adresse, Sperre ) AS

SELECT L.Nr, L.Name, TAdresse (L.Strasse, L.PLZ, L.Ort), L.Sperre FROM Lieferant L;

Zugriffe:

SELECT * FROM SLieferant ;

SELECT Name, L.Adresse.Ort FROM SLieferant L;

(12)

Variable Felder

CREATE TYPE Typname AS

{ VARRAY | VARRYING ARRAY } ( Anzahl ) OF Datentyp Beispiel:

Nicht atomare Relation Verkäufer-Produkt (max. 20 Produkte)

CREATE TYPE TProdukt AS VARRAY ( 20 ) OF CHARACTER ( 30 ) ; CREATE TABLE VerkaeuferProdukt

( Verk_Nr CHARACTER ( 4) PRIMARY KEY , Verk_Name CHARACTER (20) NOT NULL ,

Adresse TAdresse ,

Produkt TProdukt ,

Umsatz NUMERIC (10, 2) ) ;

(13)

Kapitel 11 13

Zugriff auf variable Felder

Einfügen einer neuen Zeile:

INSERT INTO VerkaeuferProdukt VALUES

( 'V1', 'Meier', TAdresse ('Postfach 100111', '80075', 'München'), TProdukt ('Waschmaschine', 'Herd', 'Kühlschrank'), 17000 ) ; Lesezugriff:

Select Verk_Name, Adresse, Produkt From VerkaeuferProdukt ;

Lesen von einzelnen Produktelementen nur mit Programmierung:

z.B.: in Produkt.Count ist die Anzahl der Elemente gespeichert

(14)

Eingebettete Relationen

Syntax:

CREATE TYPE Typname AS TABLE OF Datentyp

Beispiel: Einbettung der Relation Auftragsposten in die Relation Auftrag

AuftrNr Datum Kundnr Persnr

1 04.08.03 200002 2 800,00 1 2 2 06.09.03 100002 3 1.950,00

200001 1 400,00 3 5

3 07.10.03 100001 1 700,00

500002 2 100,00 4 2

4 18.10.03

100001 1 700,00 500001 4 30,00 500008 1 94,00

6 5

5 03.11.03 500010 1 40,00

500013 1 30,00 1 2

(15)

Kapitel 11 15

Realisierung der Einbettung

CREATE OR REPLACE TYPE TEinzelposten AS OBJECT ( Teilenr INTEGER,

Anzahl INTEGER,

Gesamtpreis NUMERIC(10,2) ) ;

CREATE TYPE ET_Einzelposten AS TABLE OF TEinzelposten ; CREATE TABLE AuftragNeu

( AuftrNr INTEGER PRIMARY KEY,

Datum DATE,

Einzelposten ET_Einzelposten,

Kundnr INTEGER REFERENCES Kunde

ON DELETE NO ACTION ON UPDATE CASCADE, Persnr INTEGER REFERENCES Personal

ON DELETE SET NULL ON UPDATE CASCADE ) NESTED TABLE Einzelposten STORE AS ET_Einzelposten_TAB ;

(16)

Zugriff auf eingebettete Relationen

Einfügen:

INSERT INTO AuftragNeu VALUES ( 2, '06-Sep-98',

ET_Einzelposten ( TEinzelposten (100002, 3, 1950),

TEinzelposten (200001, 1, 400) ), 3, 5 ) ; Lesezugriffe:

SELECT * FROM AuftragNeu ;

SELECT Einzelposten FROM AuftragNeu WHERE AuftrNr = 2 ;

Einzelposten(Teilenr, Anzahl, Gesamtpreis)

ET_Einzelposten(TEinzelposten(100002, 3, 1950),

TEinzelposten(200001, 1, 400), TEinzelposten(500013, 2, 60))

(17)

Kapitel 11 17

Komplexere Ausgaben

Funktion THE ( ) :

Wandelt eingebettete Relation in Ausgaberelation um.

Beispiel: Ausgabe der Einzelposten als „normale“ Relation:

SELECT * FROM THE ( SELECT Einzelposten FROM AuftragNeu

WHERE AuftrNr = 2 ) ;

Teilenr Anzahl Gesamtpreis

100002 3 1950

200001 1 400

500013 2 60

(18)

Komplexe Ausgabe (2)

Aufgabe: Ausgabe des Gesamtvolumens des Auftrags 2

SELECT Sum ( T. Gesamtpreis )

FROM THE ( SELECT Einzelposten

FROM AuftragNeu

WHERE AuftrNr = 2 ) T ;

(19)

Kapitel 11 19

Einfügen in eingebettete Relation

Einfügen eines weiteren Auftragsposten zum Auftrag 2 INSERT INTO

THE (SELECT Einzelposten FROM AuftragNeu WHERE AuftrNr = 2 ) VALUES ( TEinzelposten ( 500013, 2, 60 ) ) ;

(20)

Ausgabe von Daten mehrerer eingebetteter Relationen

Ziel:

Ausgabe aller Einzelpositionen zu allen Aufträgen mit einem Gesamtwert von über 600 Euro

Benötigt:

Funktion Multiset: Fast eingebettete Relationen zusammen Cast-Operator: Umwandeln in geeigneten Datentyp

SELECT A1.AuftrNr,

CAST (MULTISET (SELECT * FROM

THE (SELECT Einzelposten FROM AuftragNeu A2 WHERE A2.AuftrNr = A1.AuftrNr ) T WHERE T.Gesamtpreis > 600

) AS ET_Einzelposten) FROM AuftragNeu A1;

(21)

Kapitel 11 21

Weitere objektorientierte Datenbankansätze

PostgreSQL:

PostgreSQL ist eine Erweiterung relationaler Datenbanken.

PostgreSQL unterstützt weitgehend den SQL-3 Standard.

PostgreSQL baut auf der Datenbank Ingres auf und wurde an der Universität von Berkeley entwickelt und hat auch die Datenbank Ingres selbst beeinflusst.

PostgreSQL ist frei verfügbar.

Referenzen

ÄHNLICHE DOKUMENTE

<!ATTLIST EDIFACT-name CDATA #FIXED "NAD"

Eine teleologische Auslegungsperspektive spricht ebenso für die Fest- stellung, dass Ungleichbehandlungen im Ergebnis dem Gesellschaftsinteresse dienen müssen. Das Anliegen

ƒ Datentypen keine eigenständige Einheiten, sondern beschreiben Inhalt von Elementen oder Attributen. ƒ Attribut-Werte

Fremdschlüssel können Nullwerte aufweisen, wenn sie nicht Teil eines Primärschlüssels sind.. Schlüsselkandidaten können Nullwerte aufweisen, wenn nicht explizit NOT NULL

• Owner Entity und Weak Entity müssen in einer 1:n- Beziehung stehen (ein Owner, mehrere Weak Entities).

• Performancegewinne und Verluste durch Zweitschlüssel – Gewinne beim Lesen.. – Verluste

Ein Fremdschlüssel bezüglich einer Relation R1 ist ein (ggf. zusammengesetztes) Attribut FS einer Relation R2, für das zu jedem Zeitpunkt gilt: zu jedem Wert (ungleich NULL) von FS

MEMBER FUNCTION distance (p point_t) RETURN FLOAT IS BEGIN. RETURN sqrt(power(SELF.x-p.x,