Non-Standard-Datenbanken Neue Datentypen

Werbung
Non-Standard-Datenbanken
Neue Datentypen
Objektrelationale Datenbanken
SQL3 Standard  Oracle
Sebastian Wappler
1. Datenbanksysteme nach
Stonebraker
Objektrelationale
niedrig
Dateisysteme
Objektorientierte
B
Relationale
DBMS
D
hoch
M
S
Komplexität der
Zugriffe/Anfragen
Objektspeichersy
steme
Komplexität der
Datenstrukturen
niedrig
hoch
2
1.1 Relationale DBMS
• Einfache vordefinierte Datenstrukturen
– Relationen, Tabellen, Datentypen
• INTEGER, FLOAT, DATE, VARCHAR
• Anfragesprache SQL - optimiert
– Manipulation der Werte
– Auswertung  Mengenbeschreibung
• Dauerhaftigkeit, Integrität, Schutz
3
1.2 Objektspeichersysteme
• Speicherung komplexer Objekte
– Kombination von Objekten zu neun Objekten
– Komplexe Beziehungen zwischen Objekten
• Nachbarschaftsbeziehungen von Polygonen; CAD
• Dauerhafte Speicherung von
Anwendungsprogrammobjekten
• Smalltalk, Tycoon; O2, Objectivity
4
1.3 Objektrelationale /
Objektorientierte DBMS
• Anfragen auf komplexe Daten
– Geographisch Daten: Nahverkehrsnetz
• „Alle Bushaltenstellen im Umkreis von 500 m?“
– Bild: Objekte, Personen, Beziehungen
• „Alle Bilder auf denen Person X zu sehen ist?“
– Audio: Mitschnitt, Sprecher, Stimmmuster
• „Alle Mitschnitte in denen ‚äh‘ 20 mal vorkommt?“
– Volltextsuche
• „Wort Objekt in der Nähe von relational?“
5
2. Motivation zu
objektrelationalen DBMS
Relationale DBMS
- Keine komplexen
Strukturen
- Nur Basistypen
- Begrenzte Anzahl von
Prädikaten
 Relationen Algebra
 Tabellen effizient (z.B.
Index, Schlüssel)
Objektspeichersysteme
- Kein anerkannter
Standard
- Navigierender Zugriff
besser als
anfrageorientierter
 Komplexe Strukturen
und Methoden
6
3. Objektorientierte
Erweiterungen in SQL3/SQL99
•
•
Large Objects (LOB)
User Defined Types (UDTs)
– User Defined Methods
•
•
•
Comparison
Casts
Type Constructors
– Referenced Types
– Collection Types
– Table/View Hierarchies
7
4 Large Objects (LOBs)
 mehrere Gigabyte große Objekte
 Festgelegte Maximallänge
 Speicherung im DBMS
• Binarry Large Objects (BLOBs)
– Jede Art von digital gespeicherte Information
• Character Large Objects (CLOBs)
– Zeichenketten
– Auswertung innerhalb des DBMS
– NCLOB - mehr-Byte Zeichensätze (Oracle)
8
4.1 Beispiel: Tabellendefinition
mit LOBs
CREATE TABLE Buchtabelle
(
Titel
VARCHAR(200),
Buch_ID
INTEGER PRIMARY KEY,
Zusammenfassung CLOB(32K),
Buch_Text
CLOB(20M),
Film
BLOB(2G)
);
9
4.2 Benutzung von LOBs
Einfügen, Entfernen, Aktualisieren
Kein Vergleich (<, >)
Kein Index oder Schlüssel
• BLOB
– LIKE (Gleichheit)
• CLOB
– TRIM, SUBSTRING, POSITION, LENGTH
10
4.2 Benutzung von LOBs (fort.)
• Puffer für LOBs im Anwendungsprogramm
• Zeiger auf LOBs (LOB-Locator)
– 4 Byte
• Stückweise Verarbeitung der LOBs
 Zeiger „überlebt“ Transaktionsende (Std)
11
5 User Defined Types
• UDTs auch Abstract Datatypes (ADTs)
• Abbildung der Realität
• Vordefinierte Datentypen sind Basis für
UDTs
• Definition durch Anwender
• Eigens Verhalten (Prozeduren, Funktionen)
• Gleiche Verwendung wie vordefinierte
Datentypen
12
5.1 User Defined Distinct Types
• Benutzerdefinierter Name für einen
vordefinierten Datentyp (Urtyp)
• Zwei benutzerdefinierte Typen mit gleichem
Urtyp sind verschieden (distinct)
• Vergleiche auf Ebene des Urtyps realisiert
• Zusätzlich eigenes Verhalten
• CASTs: benutzerdefinierter Typ
Urtyp
13
5.1.1 Beispiel: User Defined
Distinct Types
CREATE TYPE roomtype
AS CHAR(10) FINAL;
CREATE TYPE meters
AS FLOAT FINAL;
CREATE TYPE squaremeters
AS FLOAT FINAL;
CREATE TABLE RoomTable
(
RoomID
roomtype,
RoomLength meters,
RoomWidth
meters,
RoomArea
squaremeters
);
UPDATE RoomTable
SET RoomWidth = RoomLength;
UPDATE RoomTable
SET RoomArea = RoomLength;
  ERROR!
14
5.2 User Defined Structured
Types
•
•
•
•
Komplexe Datenstrukturen
Verwendung in Spalten
Als ganze Tabelle
Enthalten Attribute, Prozeduren und
Funktionen
• Constructor-Fkt. wird vom DBMS erstellt
• Methoden zur Manipulation von Attributen
15
5.2.1 Beispiel: User Defined
Structured Types
CREATE TYPE adresse_t AS OBJECT (
Strasse
VARCHAR(20),
Hausnummer
NUMBER(3),
Ortsname
VARCHAR(30));
CREATE TYPE personal_t AS OBJECT (
Nachname
VARCHAR(20),
Vorname
VARCHAR(20),
Geburtsdatum DATE,
Gehalt
NUMBER(7,4),
Kinder
NUMBER(5),
Adresse
adresse_t );
16
5.2.2 Beispiel: User Defined
Structured Types (fort.)
CREATE TABLE personal(
P_ID
INTEGER,
Angestellter
personal_t);
INSERT INTO personal (P_ID, Angestellter)
VALUES( 320,
personal_t(’Mustermann’,
’Gabi’,
’07-aug-1971’,
2500.00,
2,
adresse_t(’Musterstr.’,1,’Musterstadt’)
)
17
);
5.3 Subtypes - Supertypes
• Untertyp ist Spezialisierung des Obertyps
+ Erbt Attribute und Verhalten des Obertyps
+ Neue Attribute und neues Verhalten
• Kann Attribute und Methoden
überschreiben (Overriding)
• Untertyp kann anstelle des Obertypen
verwendet werden
18
5.3.1 Subtypes – Supertypes
FINAL / NOT FINAL
FINAL
• Tiefster Untertyp
• Nur Distinct - Typen
NOT FINAL
• Kann Untertypen
haben
• Nur strukturierte
Typen
SQL4: Beide Kombinationen erlaubt
19
5.3.2 Beispiel: Subtypes Supertypes
CREATE TYPE address AS(
Street
CHAR(30),
city
CHAR(20),
state
CHAR(2),
zip
INTEGER
) NOT FINAL;
CREATE TYPE german_addr
UNDER address(
Family_name VARCHAR(30)
) NOT FINAL;
CREATE TYPE us_addr
UNDER address(
Area_code INTEGER,
phone
INTEGER
) NOT FINAL;
CREATE TABLE properties(
price
NUMBER(11,4),
owner
VARCHAR(30),
location
address
);
20
5.3.2 Beispiel: Subtypes Supertypes
INSERT INTO properties
VALUES(
1000000, 'Mr.S.White',
us_addr('1654Haeth Road','Heath','OH',45394,
1222, 5550231));
PRICE OWNER
LOCATION(STREET, CITY, STATE, ZIP)
1000000 Mr.S.White US_ADDR(
'1654Haeth Road
', 'Heath
'
,
'OH', 45394,
1222, 5550231)
21
5.4 Rowtypes / Typed tables
CREATE TYPE point_t AS OBJECT(
x
FLOAT,
y
FLOAT );
CREATE TABLE Points OF point_t;
DESC Points;
Name Null?
X
Y
Typ
FLOAT(126)
FLOAT(126)
22
5.5. Nested Tables
CREATE TYPE PolygonType
AS TABLE OF point_t;
polygontype TABLE OF POINT_T
Name
X
Y
CREATE TABLE Polygons (
Name
VARCHAR2(20),
punkte PolygonType)
NESTED TABLE punkte
STORE AS PunkteTab;
Null? Typ
FLOAT(126)
FLOAT(126)
Name Null? Typ
NAME
VARCHAR2(20)
PUNKTE
POLYGONTYPE
23
6 User Defined Methods
• Prozeduren und Funktionen in SQL
• Auswertung, Berechnung, Manipulation
• Ergebnis wird im DBMS berechnet –
weiniger Datentransfer
• Vereinbarung außerhalb der Typdefinition
• Punktnotation: Typ.Mehtode()
• Werden mit vererbt; Override möglich
24
6.1 MEMBER – STATIC
• MEMBER
– Bezieht sich auf eine Instanz des Typs
– Verändert keine Attribute
– Impliziter Parameter SELF
• STATIC
– Bezieht sich auf den Typ
– Kein impliziter SELF Parameter
25
6.2 Beispiel MEMBER –
Funktion in Oracle
CREATE TYPE point_t AS OBJECT(
x FLOAT,y FLOAT,
MEMBER FUNCTION distance (p point_t) RETURN FLOAT );
CREATE OR REPLACE TYPE BODY point_t AS
MEMBER FUNCTION distance (p point_t) RETURN FLOAT IS
BEGIN
RETURN sqrt(power(SELF.x-p.x, 2)+power(SELF.y-p.y, 2));
END;
CREATE TABLE Points OF point_t;
26
6.2 Beispiel MEMBER –
Funktion in Oracle (fort.)
insert
insert
insert
insert
into
into
into
into
Points
Points
Points
Points
VALUES(1,1);
VALUES(1,4);
VALUES(4,4);
VALUES(4,1);
select * from points p where
p.distance(point_t(0,0))>=4;
X
1
4
4
Y
4
4
1
27
6.3 Vergleichsoperationen
•
Formen:
a) EQUALS ONLY
•
•
Nur Test auf Gleichheit
Ergebnistyp: Boolean (TRUE/FALSE)
b) ORDER FULL
•
•
Test auf
Ergebnistyp:
<,
< 0,
=,
= 0,
>
>0
28
6.3.1 Vergleichskategorien
• STATE – Funktion (EQUALS ONLY)
– Vom DBMS selbst erzeugt
– Ergebnistyp: Boolean (TRUE/FALSE) –
– Muss für den Obertyp definiert werden
• RELATIVE
–
–
–
–
Vom Anwender definiert
Zwei Eingabeparameter
Ergebnistyp:
< 0,
= 0,
>0
Muss für den Obertyp definiert werden
• MAP
– Nur ein Parameter
– Wandelt in vordefinierten Typ um  Vergleich
29
6.3.2 Anwendung der
Vergleichskategorien
• STATE
– State_comp_func (Value1, Value2) =
TRUE/FALSE
• RELATIVE
– Relative_comp_func (Value1, Value2) = 0 , >0
oder <0
• MAP
– Map_func1 (Value1) = Map_func2 (Value2)
30
6.4 Cast - Funktionen
•
•
UDT erschient wie anderer Datentyp
Distinct UDTs mit impliziter CAST – Fkt.
CREATE TYPE meters
AS INTEGER FINAL
CAST ( SOURCE AS DISTINCT ) WITH meters
CAST ( DISTINCT AS SOURCE ) WITH INTEGER;
- - CREATE CAST( typ1 AS typ2 ) WITH
FUNCTION cast_func( typ1 );
31
6.5 Erzeugerfunktion
CREATE TYPE emp_t AS OBJECT(
ename
CHAR(31),
dept CHAR(20),
STATIC FUNCTION new_emp (name VARCHAR2, dept VARCHAR2)
RETURN emp_t);
CREATE BODY emp_t IS
STATIC FUNCTION new_emp (name VARCHAR2, dept VARCHAR2)
RETURN emp_t IS
BEGIN
RETURN emp_t(name, dept);
END;
END;
INSERT INTRO emps VALUES (emp_t.new_emp('Jörgen',
'Service'));
32
6.5.1 Abstrakte UDTs
• Keine Erzeugung einer Instanz möglich
• UDT, mit mindestens einem Untertypen
CREATE TYPE Individuum AS OBJECT(
Name VARCHAR(30), Adresse VARCHAR(100)
) NOT FINAL NOT INSTANTIABLE;
CREATE TYPE Mensch UNDER Individuum(
Vorname VARCHAR(20), Telefon NUMBER(20)
) NOT FINAL INSTANTIABLE;
33
7 Referenzen
• Object ID (OID) für jede Instanz = Zeiger
• Referenzen (REFs) sind diese Zeiger
SELECT REF(e) FROM emps e WHERE ename='Jörgen';
REF(E)
0000280209342BDA0E8BFA417F9ADF6812510BB1176C32804
72D7748EA84B2BD78AA84C447020001420000
SELECT VALUE(e) FROM emps e WHERE ename='Jörgen';
VALUE(E)(ENAME, DEPT)
EMP_T('Jörgen', 'Service')
34
7.1 Referenzieren und
dereferenzieren
CREATE TABLE workPeople
( W_ID
INTEGER PRIMARY KEY, Emp REF emp_t);
INSERT INTO workpeople (E_ID, Emp)
VALUES (
12,(SELECT REF(e) FROM emps e WHERE ename='Jörgen'));
SELECT W_ID, DEREF(emp).ename, DEREF(emp).dept
FROM workpeople;
W_ID
12
DEREF(W.EMP).ENAME
Jörgen
DEREF(W.EMP).DEPT
Service
35
8. Collection Types
• Arrays
–
–
–
–
–
–
Alle Elemente haben gleichen Typ
Typ kann UDT sein
Maximallänge muss definiert werden
Zugriff über ganzzahligen Feldindex
Verwendung als Datentyp für Spalten
In Oracle eigner UDT nötig
36
8.1 Beispiel: Collection Types
CREATE TABLE reports(
R_ID
INTEGER,
title
VARCHAR(100),
authors
VARCHAR(15) ARRAY[5]);
CREATE TYPE authors_array
AS VARRAY(5) OF CHAR(15);
CREATE TABLE reports_feld
( id INTEGER PRIMARY KEY,
authors authors_array,
title VARCHAR(100) );
SELECT R_ID,
authors[1] AS Name
FROM reports;
37
9. Table/View Hierarchies
•
•
•
•
•
•
•
Analog zu Ober-/Untertypen
Views und Tabellen gleich
Untertabellen erben alle Attribute und Methoden
Zusätzliche Attribute und Methoden
DML – Befehle für Hierarchien erweitert
Datensatz aus einer Untertabelle ist in Obertabelle
Datensatz aus Obertabelle muss nicht in einer
Untertabelle sein
38
9.1 Beispiel Tabellenhierarchie
CREATE TYPE Grundstueck
. . .
NOT FINAL;
CREATE TYPE Lager UNDER Grundsueck . . . NOT FINAL;
CREATE TYPE Haus UNDER Grundsueck . . . NOT FINAL;
CREATE TABLE Immobilien OF Grundstueck;
CREATE TABLE Lager_Lst OF Lager UNDER Immobilien;
CREATE TABLE Haeuser OF Haus UNDER Immobilien;
39
Herunterladen