Kapitel 14: Objekt-relationale und erweiterbare Datenbanken Flashcards
Was sind die Konzepte einer objekt-relationalen Datenbank?
- Große Objekte (LOBs)
- Datentypen die es erlauben sehr große Attributwerte wie Multimedia-Daten zu speichern.
- Mengenwertige Attribute
- Einem Tupel (Objekt) wird in einem Attribut eine Menge von Werten zugeordnet (quasi Feld in DB)
- z.b. Studenten mehrwertiges Attribut Sprachkenntnisse zuzuordnen
- Geschachtelte Relationen
- Geht einen Schritt weiter als Mengenwertige Attribute und erlaubt es Attributen selbst Relationen zu sein
- Student hat Attribut absolviertePrüfungen, unter dem die Mengen von Prüfungentupeln gespeichert sind
- Typdeklarationen
- Erlaubt user defined types (UDTs)
- z.b. NotenTyp
- oft unterscheidet man zwischen Wertbasierten Typen (Attribut) und Objekt-Typen (row-typ)
- Referenzen
- Attribute können direkte Referenzen auf Tupel / Objekte als Wert haben
- Somit lassen sich n:m Relationen ohne Beziehungsrelation darstellen
- Beispiel: Student.hört ist eine Menge von Referenzen auf Vorlesungen.
- Objektidentität
- Referenzen setzten voraus, dass man Objekte (Tupel) anhand einer unveränderlichen Objektidentität eindeutig identifizieren kann
- Pfadausdrücke
- Pfadausdrücke müssen aufgrund der Referenzen realisierbar sein (s.hoert.gelesenVon.Name)
- Vererbung
- Typen können von Obertyp erben
- Tupel von Unerrelationen erben von Oberrelationen
- Unterrelationen sind implizit auch in Oberrelation enthalten
- Hiermit wird Generalisierung / Spezialisierung realisiert
- Operationen
- Den Objekttypen zugeordnet
- Einfache Operationen können direkt in SQL implementiert werden
- Komplexere werden in “Wirtssprachen” wie Java realisiert
Welche Arten von LOBs gibt es und wie werden diese realisiert?
- CLOB
- Character large objet (großer String). In DB wird ein Locator gespeichert, der auf den CLOB verweist.
- BLOB
- Binary Large Object: Große Binärdaten (z.b. Film) kann nur durchgereicht werden
- NCLOB
- Für die Speichervon von Sonderzeichen, da CLOBs auf 1-Byte Character beschränkt sind
create table Professoren ( PersNr integer primary key, Name varchar(30) not null, Rang character(2) check (Rang in ('C2', 'C3', 'C4')), Raum integer unique, Passfoto BLOB(2M), Lebenslauf CLOB(75K) );
LOB (Lebenslauf) store as
( tablespace Lebensläufe
storage (initial 50M next 50M) );
Was sind Benutzer-definierte Typen: Distinct types und worauf muss man achten?
CREATE DISTINCT TYPE NotenTyp AS DECIMAL (3,2) WITH COMPARISONS;
CREATE FUNCTION NotenDurchschnitt(NotenTyp) RETURNS NotenTyp Source avg(Decimal());
- Vergleichen Geht nicht: Scheitert an dem unzulässigen Vergleich zweier unterschiedlicher Datentypen NotenTyp vs. decimal
- Um unterschiedliche Datentypen miteinander zu vergleichen, muss man sie zunächst zu einem gleichen Datentyp transformieren (casting).
Was ist eine “echte” geschachtelte Relation und wie sieht diese aus?
Wird verwendet für:
- Modellierung von Aggregationen
- Also bei Assoziationen der Art
- Exklusive Zuordnung (1:N)
- Existenzabhängige Zuordnung
- Schachtelung der schwachen Entities im übergeordneten Objekt
Beispiel:
CREATE OR REPLACE TYPE PruefungenTyp AS OBJECT ( Inhalt REF VorlesungenTyp,
Pruefer REF ProfessorenTyp,
Note DECIMAL(3,2),
Datum Date,
MEMBER FUNCTION verschieben(neuerTermin Date) RETURN DATE )
CREATE OR REPLACE TYPE PruefungsListenTyp AS TABLE OF PruefungenTyp
CREATE OR REPLACE TYPE StudentenTyp AS OBJECT ( MatrNr NUMBER,
Name VARCHAR(20),
Semester NUMBER,
hoert VorlRefListenTyp,
absolviertePruefungen PruefungsListenTyp,
MEMBER FUNCTION Notenschnitt RETURN NUMBER,
MEMBER FUNCTION SummeWochenstunden RETURN NUMBER
)
Wie könnte Beispielsweise eine Studenten Tabelle aufgebaut sein? (Geschachtelte Relation)
Studenten-TAbelle:
CREATE TABLE StudentenTab OF StudentenTyp (MatrNr PRIMARY KEY)
NESTED TABLE hoert STORE AS BelegungsTab
NESTED TABLE absolviertePruefungen STORE AS ExamensTab;
INSERT INTO StudentenTab VALUES(24002, ‘Xenokrates’, 18, VorlRefListenTyp(), PruefungsListenTyp());
INSERT INTO StudentenTab VALUES (29120, ‘Theophrastos’, 2, VorlRefListenTyp( ), PruefungsListenTyp());
INSERT INTO TABLE (SELECT s.hoert
from StudentenTab s
where s.Name = ‘Theophrastos’) /* grosser Fan von Sokrates */ select REF(v)
from VorlesungenTab v
where v.gelesenVon.Name = ‘Sokrates’;
Prüfungen einfügen:
INSERT INTO TABLE
(SELECT s.absolviertePruefungen
FROM StudentenTab s
WHERE s.Name = ‘Theophrastos’) //wo wird eingefügt
VALUES ((select REF(v) from VorlesungenTab v where v.Titel=’Maeeutik’),
(select REF(p) from ProfessorenTab p where p.Name=’Sokrates’), 1.3, SYSDATE); //was wird eingefügt
INSERT INTO TABLE
(SELECT s.absolviertePruefungen
FROM StudentenTab s
WHERE s.Name = ‘Theophrastos’)
VALUES ((select REF(v) from VorlesungenTab v where v.Titel=’Ethik’),
(select REF(p) from ProfessorenTab p where p.Name=’Sokrates’), 1.7, SYSDATE);
Wie sehen Anfragen auf geschachtelte Relationen aus?
SELECT s.Name, p.Note
FROM StudentenTab s, TABLE(s.absolviertePruefungen) p;
//NAME NOTE
//Theophrastos 1.3
//Theophrastos 1.7
SELECT s.Name, p.Pruefer.Name, p.Inhalt.Titel, p.Note FROM StudentenTab s, TABLE(s.absolviertePruefungen) p;
//NAME PRUEFER.NAME INHALT.TITEL NOTE
//Theophrastos Sokrates Maeeutik 1.3
//Theophrastos Sokrates Ethik 1.7
Wie funktioniert Vererbung von Objekttypen?
CREATE TYPE Angestellte_t AS (PersNr INT,
Name VARCHAR(20))
INSTANTIABLE
REF USING VARCHAR(13) FOR BIT DATA MODE DB2SQL;
CREATE TYPE Professoren_t UNDER Angestellte_t AS (Rang CHAR(2),
Raum INT) MODE DB2SQL;
CREATE TYPE Assistenten_t UNDER Angestellte_t AS (Fachgebiet VARCHAR(20),
Boss REF(Professoren_t)) MODE DB2SQL;