Non-Standard-Datenbanken Neue Datentypen
Objektrelationale Datenbanken
SQL3 Standard Oracle
1. Datenbanksysteme nach Stonebraker
Relationale DBMS
Datei- systeme
Objekt- speichersy steme
hoch
niedrig
Komplexität der Zugriffe/Anfragen
Komplexität der
DBMS
Objektrelationale
Objektorientierte
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
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; O
2, Objectivity
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
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
3. Objektorientierte
Erweiterungen in SQL3/SQL99
• Large Objects (LOB)
• User Defined Types (UDTs)
– User Defined Methods
• Comparison
• Casts
• Type Constructors
– Referenced Types
– Collection Types
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)
4.1 Beispiel: Tabellendefinition mit LOBs
CREATE TABLE Buchtabelle (
Titel VARCHAR(200),
Buch_ID INTEGER PRIMARY KEY, ZusammenfassungCLOB(32K),
Buch_Text CLOB(20M),
Film BLOB(2G)
4.2 Benutzung von LOBs
Einfügen, Entfernen, Aktualisieren
Kein Vergleich (<, >)
Kein Index oder Schlüssel
• BLOB
– LIKE (Gleichheit)
• CLOB
– TRIM, SUBSTRING, POSITION, LENGTH
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)
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
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
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;
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
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),
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’)
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
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
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
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 ' ,
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? Typ
X FLOAT(126)
Y FLOAT(126)
5.5. Nested Tables
CREATE TYPE PolygonType AS TABLE OF point_t;
CREATE TABLE Polygons ( Name VARCHAR2(20), punkte PolygonType)
polygontype TABLE OF POINT_T Name Null? Typ
X FLOAT(126)
Y FLOAT(126)
Name Null? Typ
NAME VARCHAR2(20) PUNKTE POLYGONTYPE
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
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
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;
6.2 Beispiel MEMBER – Funktion in Oracle (fort.)
insert into Points VALUES(1,1);
insert into Points VALUES(1,4);
insert into Points VALUES(4,4);
insert into Points VALUES(4,1);
select * from points p where p.distance(point_t(0,0))>=4;
X Y 1 4
6.3 Vergleichsoperationen
• Formen:
a) EQUALS ONLY
• Nur Test auf Gleichheit
• Ergebnistyp: Boolean (TRUE/FALSE)
b) ORDER FULL
• Test auf <, =, >
• Ergebnistyp: < 0, = 0, >0
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
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)
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
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',
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)
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')
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;
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
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
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
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;