Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

KarczewskiDatenbanken II1 Objekt-Relationale (OR) Datenbanken Übersicht Einführung: Objekt-relationale Erweiterungen von SQL (ORSQL) Objekte und Tabellen.

Ähnliche Präsentationen


Präsentation zum Thema: "KarczewskiDatenbanken II1 Objekt-Relationale (OR) Datenbanken Übersicht Einführung: Objekt-relationale Erweiterungen von SQL (ORSQL) Objekte und Tabellen."—  Präsentation transkript:

1 KarczewskiDatenbanken II1 Objekt-Relationale (OR) Datenbanken Übersicht Einführung: Objekt-relationale Erweiterungen von SQL (ORSQL) Objekte und Tabellen OR-Create, -Insert, -Update, -Select User-Defined Functions (UDFs) und Methoden Literatur O´Neil / O´Neil: Database – Principles, Programming, and Performance, 2nd Edition. Morgan Kaufmann Publishers, 2001.

2 KarczewskiDatenbanken II2 ORSQL Möglichkeiten Relationale Tabellendefinitionen werden erweitert durch user defined types: Spalten, die mehr als einen Eintrag besitzen und solche, die eine interne Struktur haben (wie ein Record), sind erlaubt (Verletzung 1NF). Beispiel: eidenamepositiondependents dep_namedep_age e01Smith, JohnAgentMichael J.9 Susan R.7 e02Andrews, DavidSuperintendentDavid M. Jr.10 e03Jones, FranklinAgentAndrew K.11 Mark W.9 Louisa M.4

3 KarczewskiDatenbanken II3 Objekte und Tabellen Ein Objekt-Typ besitzt Attribute unterschiedlicher Typen, analog zu Spalten einer Tabelle. Beispiel (Oracle): create type name_t as object-- Create Object Type ( lnamevarchar(30),-- last name fnamevarchar(30),-- first name michar(1)-- middle initial ); /-- SQL*Plus

4 KarczewskiDatenbanken II4 Nach der Definition eines Typs (mit create type) kann man diesen so definierten Typ wie ein gewöhnliches Attribut benutzen. Beispiel (Oracle): create table teachers-- Create Table Scheme ( tidint,-- identifier tnamename_t,-- object type defined above roomint-- room number ); Bis hierher existieren noch keine Objekte vom Typ name_t. Objekte und Tabellen

5 KarczewskiDatenbanken II5 Einträge in die zuvor definierte Tabelle sind wie in SQL durch den insert-Befehl möglich. Insert wird erweitert um die Möglichkeit, Objekt-Typen zu integrieren. Dies geschieht durch Benutzung eines Objekt-Konstruktors in dem insert-Befehl. Beispiel (Oracle): insert into teachers values ( 1234, name_t(Einstein, Albert, E), 120 ); Objekt-Konstruktor Objekte und Tabellen

6 KarczewskiDatenbanken II6 Nach Ausführung des insert-Befehls liegt folgender Tabelleninhalt vor: Beispiel (Oracle): tid 1234 tname lnamefnamemi EinsteinAlbertE room 120 Objekte und Tabellen

7 KarczewskiDatenbanken II7 Die Punkt-Notation wird konsequent genutzt, um Werte des Objekt- Typs zu nutzen: selectt.tid from teachers t wheret.room = 120; -- normal SQL-select selectt.tid, t.tname.fname, t.tname.lname fromteachers t wheret.room = 123; -- extended SQL selecttid, tname.fname, tname.lname fromteachers whereroom = 123; -- doesn´t work Der alias t muss verwendet werden, damit die mehrfache Punkt- Notation funktioniert. Objekte und Tabellen

8 KarczewskiDatenbanken II8 Man kann die Objekt-Typ-Definition innerhalb einer anderen Objekt- Typ-Definition verwenden. Beispiel: create type person_t as object ( ssnoint, pnamename_t,-- must be defined first ageint ); / person_t ist abhängig von name_t, d.h. man kann name_t nicht löschen bevor person_t gelöscht ist. Objekte und Tabellen

9 KarczewskiDatenbanken II9 Eine Tabelle wird Objekt-Tabelle genannt, wenn ihre Zeilen vom Objekt-Typ sind. Das bedeutet: Jede Zeile enthält ein Objekt dieses Typs. Beispiel: create table people of person_t ( primary key(ssno) ); Objekte und Tabellen

10 KarczewskiDatenbanken II10 Beispiel-Tabelle people: nameless top-level column (Zeilen-Objekte) named columns (also known as top-level attributes) attributes within pname row 1 row 3 row 2 ssno 123550123 023894455 245882134 pname pname.lname pname.fname pname.mi Sanchez Jose F Delaney Patrick X March Jacquelin E age 23 30 59 people row objects column objects select * select value(p) Objekte und Tabellen

11 KarczewskiDatenbanken II11 select p.age from people p where p.ssno = 123550123 (wie bei SQL) select p.pname from people p where p.age > 25 Spalten werden mit vorangestelltem Typ ausgegeben, z.B. name_t(´Sanchez´, ´Jose´, ´F´) select * from people p where p.age > 25 Liefert die top-level Attribute (row objects) ssnopname(lname,fname,mi) age --------- ------------------------------- ---- 245882134name_t(´Delaney´,´Patrick´,´X´) 59 023894455name_t(´Sanchez´,´Jose´,´F´) 30 Objekte und Tabellen ( select-statements )

12 KarczewskiDatenbanken II12 select value(p) from people p where age > 25 Die Zeilen-Objekte werden ausgegeben (nameless top level column). Value(p) ist nicht zu verwechseln mit VALUES im insert-Befehl. Value(p)(ssno,pname(lname,fname,mi), age) ------------------------------------ ---- person_t(245882134,name_t(´Delaney´,´Patrick´,´X´), 59) person_t(023894455,name_t(´Sanchez´,´Jose´,´F´), 30) Person_t ist der Objekt-Konstruktur, mit dem die Tabelle definiert wurde. Das Ergebnis ist ein anderes als das beim select *-Befehl. Durch den Objekt-Konstruktor gibt es eine (neue) Objekt-Sicht auf die Zeilen der Tabelle. Objekte und Tabellen ( select-statements )

13 KarczewskiDatenbanken II13 select value(p) from people p where p.pname = name_t(´Sanchez´,´Jose´,´F´) Der Objekt-Konstruktor name_t(´Sanchez´,´Jose´,´F´) kann auch innerhalb der where-Klausel verwendet werden. Value(p)(ssno,pname(lname,fname,mi), age) ------------------------------------ ---- person_t(023894455,name_t(´Sanchez´,´Jose´,´F´), 30) Objekte und Tabellen ( select-statements )

14 KarczewskiDatenbanken II14 select p.pname, p.age from people p where p.pname.fname like Pat% and p.age > 50; Nested dot-Notation ist erlaubt. Der Vorname startet mit Pat und das Alter ist größer als 50. pname(lname,fname,mi)age ------------------------ name_t(´Delaney´,´Patrick´,´X´)59 Objekte und Tabellen ( select-statements )

15 KarczewskiDatenbanken II15 Wichtig: Man muss immer den vollqualifizierten Namen mit einem Alias verwenden, um auf strukturierte Attribute zuzugreifen. select pname.fname from people pname.fname ist kein Top Level-Attribut -> Der Befehl funktioniert so nicht. select people.pname.fname from people Auch hier muss ein Alias benutzt werden. Das Voranstellen des Tabellennamen nutzt nichts. -> Der Befehl funktioniert so nicht. select p.pname.fname from people p; Korrekte Alternative! Objekte und Tabellen ( select-statements )

16 KarczewskiDatenbanken II16 create table scientists of name_t (primary key (lname)); Generierung der Tabelle mit Namen scientists des zuvor definierten Objekt- Typs name_t. insert into scientists select p.pname from people p; Insert mit Einfügen mehrerer Zeilen durch Selektion aller pnames von people. In diesem Fall werden alle Namen aus people eingefügt. insert into scientists values (Einstein, Albert, E); Direktes Einfügen einer Zeile mit dem insert-Befehl. Objekte und Tabellen ( create und insert )

17 KarczewskiDatenbanken II17 update scientists s set s = name_t(Eisenstein, Andrew, F) where values(s) = name_t(Einstein, Albert, E); Update einer Zeile mit Hilfe des Objekt-Konstruktors name_t. insert into people values (123441998, name_t(Einstein, Albert, E), 100); Einfügen einer Zeile in scientists mit direkten Werten. Der Objekt- Konstruktor name_t ist nötig bei dem strukturierten Attribut. insert into people values (321341223, null, null); insert into people (ssno) values (321341223); Zwei äquivalente Befehle, um unvollständige Zeilen mit NULL-Werten einzugeben. pname und age müssen optional sein. Objects and Tables ( insert )

18 KarczewskiDatenbanken II18 update people p set p.pname = name_t(Gould, Ben, null) where ssno = 321341223; Update einer Zeile mit NULL-Werten. Der middle initial bleibt NULL. update people p set p.pname.mi = C where ssno = 321341223; Update des middle initial der vorherigen Änderung. update people p set p = Person_t(332341223, name_t(Gould, Glen, A), 55) where ssno = 321341223; Update einer Person mit dem row object-Konstruktor. Auch der primary key ssno darf verändert werden. Objects and Tables ( update )

19 KarczewskiDatenbanken II19 Relational / Objekt-Relational Produkt:NummerBezeichnungFunktion 110222Tee-ServiceGebrauch 106222KanneGebrauch 201312SchaleDeko

20 KarczewskiDatenbanken II20 Relational / Objekt-Relational Markt:BezeichnungStandortKategorie Internationaler Töpfermarkt KrefeldTöpfermarkt Töpfermarkt Sommerhausen SommerhausenTöpfermarkt Internationaler Töpfermarkt HanauTöpfermarkt

21 KarczewskiDatenbanken II21 Relational / Objekt-Relational WAA:NummerBezeichnungStandort 110222Internationaler Töpfermarkt Krefeld 106222Internationaler Töpfermarkt Krefeld 201312Töpfermarkt Sommerhausen Sommerhausen 201312Internationaler Töpfermarkt Hanau

22 KarczewskiDatenbanken II22 Beispiel ORDB Markt:BezeichnungStandortKategorieMarktteilnehmer NummerBezeichnungFunktion Internationaler Töpfermarkt KrefeldTöpfer- markt 110222Tee-ServiceGebrauch 106222KanneGebrauch Töpfermarkt Sommerhausen Sommer- hausen Töpfer- markt 201312SchaleDeko Internationaler Töpfermarkt HanauTöpfer- markt 201312SchaleDeko

23 KarczewskiDatenbanken II23 Beispiel ORDB Markt Bezeichnung Standort Kategorie Collection of Produkt_T

24 KarczewskiDatenbanken II24 Beispiel ORDB

25 KarczewskiDatenbanken II25 Beispiel ORDB

26 KarczewskiDatenbanken II26 Beispiel ORDB

27 KarczewskiDatenbanken II27 Beispiel ORDB

28 KarczewskiDatenbanken II28 Beispiel ORDB

29 KarczewskiDatenbanken II29 Beispiel ORDB

30 KarczewskiDatenbanken II30 Beispiel ORDB

31 KarczewskiDatenbanken II31 Beispiel ORDB

32 KarczewskiDatenbanken II32 Beispiel ORDB

33 KarczewskiDatenbanken II33 Beispiel ORDB

34 KarczewskiDatenbanken II34 User Defined Functions (UDF) können zur Bindung von Funktionen an Objekte genutzt werden (Methoden-Begriff). Die Definition von UDFs erfolgt in zwei Schritten: 1.Definition des Funktionskopfes (function header) 2.Definition des Funktionsrumpfes (function body) Der function header wird zusammen mit den Attributen des Objekttyps definiert. Der function body wird definiert mit einem speziellen Kommando mit einer Referenz zum header. User Defined Functions

35 KarczewskiDatenbanken II35 Beispiel (Personen und ihre Mitarbeiter (dependents)): create type name_t as object-- Create Object Type ( lnamevarchar(30),-- last name michar(1),-- middle initial fnamevarchar(30)-- first name ); / create type person_t as object ( ssnoint, pnamename_t,-- must be defined first ageint ); / create type depPerson_t as table of person_t; / User Defined Functions

36 KarczewskiDatenbanken II36 Example (Function Header): create type Employee_t as object (ENRint, Personperson_t, depPersondepPerson_t, member function NumberOfDep return integer, member function BigBoss return varchar ); / Die function header (auch mehrere möglich) werden hinter allen Attribut- Definitionen definiert. Die Schlüsselwörter member function und return mit entsprechendem Datentyp sind notwendig. User Defined Functions

37 KarczewskiDatenbanken II37 Beispiel (Funktionsrumpf): create type body Employee_t as member function NumberOfDep return integer is begin return self.depPerson.count; end NumberOfDep; member function BigBoss return varchar is begin if self.depPerson.count > 2 then return 'Big Boss'; else return 'Boss'; end if; end BigBoss; end; / User Defined Functions Der Rumpf der Funktionen erhält den selben Namen wie der zuvor definierte Objekt-Typ (Verbindung zwischen Kopf und Rumpf). Der Name und return-Typ muss hier wiederholt werden. Innerhalb begin und end wird die Funktion definiert. Mindestens ein return- Befehl ist nötig.

38 KarczewskiDatenbanken II38 Beispiel (Tabellen-Definition): create table Employee of Employee_t ( primary key (ENR) ) nested table depPerson store as dep_tab; User Defined Functions Diese Tabellendefinition realisiert die gewünschte Tabelle. Der Primärschlüssel kann erst hier definiert werden. Die nested table-Klausel erlaubt die Nutzung von Tabellen innerhalb der Tabelle. Möglich sind auch mehrere nested tables innerhalb einer Tabelle.

39 KarczewskiDatenbanken II39 Beispiel (Insertion): insert into Employee values (1, person_t(11, name_t('Josef', 'R', 'Ewing'), 59), depPerson_T(person_t(33, name_t('Franz', 'X', 'Nonsense'), 33), person_t(44, name_t('Uschi', 'K', 'Glas'), 48), person_t(55, name_t('Mika', 'L', 'Most'), 52)) ); insert into Employee values (2, person_t(22, name_t('Karla', 'M', 'Hut'), 34), depPerson_T(person_t(66, name_t('Hans', 'L', 'Moser'), 72), person_t(77, name_t('Paul', 'A', 'Popp'), 41)) ); User Defined Functions Das Einfügen geschieht wie bisher. Die UDFs ändern das bisherige Vorgehen nicht!

40 KarczewskiDatenbanken II40 Beispiel (Selection): select ENR, E.NumberOfDep() from Employee E; ENR E.NUMBEROFDEP() ---------- --------------- 1 3 2 2 User Defined Functions Beispiel (Selection): select ENR, E.BigBoss() from Employee E; ENR E.BIGBOSS() ---------- ------------ 1 Big Boss 2 Boss Der Resultat-Wert des Funktionsaufrufs wird als eigene Spalte ausgegeben. Die Klammern müssen angegeben werden. Der alias ist Pflicht!

41 KarczewskiDatenbanken II41 Beispiel ORDB (UDF)

42 KarczewskiDatenbanken II42 Beispiel ORDB (UDF)

43 KarczewskiDatenbanken II43 Beispiel ORDB (Ref) Produkt Nummer: int Bezeichnung: String Funktion: String Subprodukt: collection of Produkt anzsub: int … weitere Methoden zur Stückliste

44 KarczewskiDatenbanken II44 Beispiel ORDB (Ref)

45 KarczewskiDatenbanken II45 Beispiel ORDB (Ref)

46 KarczewskiDatenbanken II46 Beispiel ORDB (Ref)

47 KarczewskiDatenbanken II47 Beispiel ORDB (Ref)

48 KarczewskiDatenbanken II48 Beispiel ORDB (Ref)

49 KarczewskiDatenbanken II49 Beispiel ORDB (Ref)


Herunterladen ppt "KarczewskiDatenbanken II1 Objekt-Relationale (OR) Datenbanken Übersicht Einführung: Objekt-relationale Erweiterungen von SQL (ORSQL) Objekte und Tabellen."

Ähnliche Präsentationen


Google-Anzeigen