Beruflich Dokumente
Kultur Dokumente
von imMENSEm Vorteil wäre es das Attribut Child als Menge von Verweisen auf andere Personen
darzustellen
Person (SSN: String, Name: String, PhoneN: {String}, Child {Person} )
hier würde das Child Attribut wiederrum ein Personenobjekt darstellen, somit wären Abfragen der
Form
SELECT P.Child.Child.PhoneN
FROM Person P
WHERE P.Name = ‘Emin S‘
P.Child.Child.PhoneN ist ein Pfadausdruck
2.3 Klassen
semantisch gleichartige Objekte werden zu Klassen zusammengefasst (z.B. alle Objekte die Personen
darstellen Klasse PERSON)
Klasse besteht aus: Typ, Signaturen der Methode, Extent (Menge aller Objekte in der Klasse)
Klassen sind hierarchisch, IS A-Beziehung
3. Objektrelationale Datenbanken
Eine Objektrelationale DB besteht aus einer Menge von Top-Level Klassen mit Tuple Objekten, diese
haben die Form (oid, value).
3.1 Row-Typen
sind gleich zu sehen wie Tuples. In ORDBs kann ein Row Typ auch als Typ eines einzelnen Attributes
eines Tuples auftreten
CREATE TABLE PERSON ( Name CHAR(20), Adress ROW(Number Integer, Street
CHAR(20), ZIP CHAR(5)))
3.1.1 Abfrage
Pfadausdrücke…
SELECT P.Name FROM PERSON P WHERE P.Adress.ZIP = ‘12345‘
3.1.2 Insert/Updates
mittels Row Typ Konstruktor
INSERT INTO PERSON(Name, Adress) VALUES (‘Emin S‘, ROW(666, ‘Hollow Rd.‘,
‘66666‘))
UPDATE PERSON SET Adress.ZIP = ‘55555 ‘ WHERE Adress.ZIP = ‘66666 ‘
UPDATE PERSON SET Adress = ROW(21, ‘Main St‘,‘12345‘) WHERE Adress = ROW(123,
‘Maple Dr.‘, ‘54321‘) AND Name=‘Emin S‘
3.3 Objekte
CREATE TABLE STUDENT OF StudentType vs.
CREATE TABLE STUDENT1 (Name CHAR(20), Adress ROW(Number INTEGER, Street
CHAR(20)))
beide sind von der gleichen Struktur aber nur Tuples in STUDENT bekommen eine oid und sind damit
Objekte!
3.4 Abfragen auf Benutzerdefinierte Typen
keine große Herausforderung – wer’s glaubt…
SELECT T.Student.Name, T.Grade FROM TRANSCRIPT T WHERE
T.Student.Adress.Street = ‘Main St‘
Attribut Name ist nicht ein Element des StudentType sondern wird von PersonType geerbt
3.6 Referenzen
ideal wäre es eine Tabelle mit Studentenobjekten zu haben, auf diese kann dann einfach referenziert
werden
CREATE TABLE STUDENT2 OF StudentType REF IS stud_oid
Tabelle mit Referenz
CREATE TABLE TRANSCRIPT1 (Student REF(StudentType) SCOPE STUDENT2, CrsCode
CHAR(6), Semester CHAR(6), Grade CHAR(1))
hier wird das Attribut Student als Referenz auf ein Objekt des Typs StudentType definiert.
SCOPE schränkt die Referenzen auf die Objekte ein welche in der Tabelle STUDENT2 definiert sind
Um Referenzen in einer Query zu verfolgen wird statt des „.“Operators der „“ Operator verwendet
SELECT T.StudentName, T.Grade FROM TRANSCRIPT1 T WHERE
T.StudentAdress.Street = ‘Main St.‘
Einfügen eines Tuples mit einer Referenz durch Verwendung eines Selects und der Self-Referencing-
Spalte
INSERT INTO TRANSCRIPT1 (Student, Course, Semester, Grade) SELECT
S.stud_oid, ‘HIS666‘,‘F1462‘,‘D‘ FROM STUDENT2 S WHERE S.Id = ‘111111111‘
3.7 Vererbung
Tabelle STUDENT vom Typ StudentType und Tabelle PERSON vom Typ PersonType
CREATE TABLE PERSON OF PersonType
CREATE TABLE STUDENT OF StudentType
wird ein Datensatz in STUDENT eingetragen ist er NICHT in PERSON, wäre nur der Fall wenn STUDENT
explizit von PERSON „abgeleitet“ wäre
CREATE TABLE STUDENT OF StudentType UNDER PERSON
PERSON is Supertable von STUDENT und alle Tuples, die in STUDENT eingefügt werden sind
automatisch in PERSON sichtbar
3.8 Collections
Mengentypen = Collections
MULTISET = wie eine Menge, jedoch kann ein Element mehrfach vorkommen
CREATE TYPE CourseType (CrsCode CHAR; Name CHAR; Description CHAR)
CREATE TABLE COURSE OF CourseType
CREATE TYPE StudentType UNDER PersonType AS (Id INTEGER, Status CHAR(2),
Enrolled REF(CourseType) MULTISET)
und wie löst man ein MULTISET auf? Multiset-Attribut in eine einspaltige Tabelle umwandeln
(UNNEST)
SELECT S.Id, S.Adress, C.Name FROM STUDENT S, COURSE C WHERE C.CrsCode IN
(SELECT E CrsCode FROM UNNEST(S.Enrolled) E)
und versteht das ein Schwein? NEIN!
mit MULTISET kann auch der umgekehrte Weg
gegangen werden
CREATE TABLE TRANSCRIPT2 (Student
REF(StudentType), Course
REF(CourseType), CrsCode CHAR(6),
Semester CHAR(6), Grade CHAR(1))
INSERT INTO STUDENT (Id, Status, Enrolled) VALUES (123456789, ‘H2‘, MULTISET
(SELECT T.Course FROM TRANSCRIPT2 T WHERE TId=4711)
4.1 Strukturen
Hauptidee: Programmiersprache gleich Datensprache
- Objekte der Programmiersprache können direkt auf Datenbankobjekte abgebildet werden
- einige Objekte der Applikation werden als persistent deklariert – Funktion von Proxies im Bezug zu
den aktuellen DB-Objekten, Änderungen beeinflussen direkt das zugehörige Datenbankobjekt
- Zugriff auf Objekt über OID bringt es direkt aus der DB in den Speicher und die Applikation arbeitet
direkt damit als ob es in der Programmiersprache definiert wurde
5. Object-Relational Mapping
nicht durchgesetzt – wie lassen sich Objekte auf relationale Strukturen „mappen“?
- Objektserialisierung
- Manuelles Mapping
- Mapping Tools
- OO DB’s