View
1
Download
0
Category
Preview:
Citation preview
1
Datenbanksysteme 2013
Kapitel 16:Objektorientierte Datenbanken
Vorlesung vom 02.07.2013
Oliver Vornberger
Institut für InformatikUniversität Osnabrück
2
Schwächen relationaler SystemeBuch: {[ISBN, Verlag, Titel, Autor, Version, Stichwort]}
2 Autoren, 5 Versionen, 6 Stichworte 2 5 6 = 60 Einträge
Buch : {[ ISBN, Titel, Verlag ]} Autor : {[ ISBN, Name, Vorname]} Version : {[ ISBN, Auflage, Jahr ]} Stichwort : {[ ISBN, Stichwort ]}
Problem: "Liste Bücher mit den Autoren Meier & Schmidt"
3
Modellierung von Polyedern
Polyeder
Flächen
Begrzg
Hülle
StartEnde
Kanten
Punkte
X Y Z
(3, *)
(2, 2)
(2, 2)
(3, *)
(1, 1)
(4, *)
PolyederPolyID Gewicht Material . . .
cubo#5 25.765 Eisen . . .tetra#7 37.985 Glas . . .. . . . . . . . . . . .
FlächenFlächenID PolyID Material
f1 cubo#5 . . .f2 cubo#5 . . .. . . . . . . . .f6 cubo#5 . . .f7 tetra#7 . . .
KantenKantenID F1 F2 P1 P2
k1 f1 f4 p1 p4k2 f1 f2 p2 p3. . . . . . . . . . . . . . .
PunktePunktID X Y Z
p1 0.0 0.0 0.0p2 1.0 0.0 0.0. . . . . . . . . . . .p8 0.0 1.0 1.0. . . . . . . . . . . .
4
Schwachpunkte
• Segmentierung• Künstliche Schlüsselattribute• Fehlendes Verhalten• Externe Programmierschnittstelle erforderlich
5
Vorteile der objektorientierten Datenmodellierung
Struktur + Verhalten in einem Objekt-Typ integriert
objektorientierte Datenbasis
volume
rotatescale
weight
translate
specWeight
Anwendung AsomeCuboid->rotate('x', 10);
Anwendung Bw := someCuboid->weight( );
6
ODMG
Object Database Management Grouphttp://www.odbms.org/
entwickelt Standards für• objektorientiertes Datenmodell• objektorientierte Abfragesprache OQL• Schnittstellen zu C++, Smalltalk, Java
7
Eigenschaften von Objekten
Ein Objekt
• gehört zu einer Klasseentsteht durch Instanziierungist Teil der Extension = alle Objekte
• hat Identitätsystemweit eindeutig, unveränderbar
• Wert = Zustand = Ausprägung
8
Identität
relational: Schlüsselvom Anwender erdacht
objektorientiert:Objektidentifikator OIDvom System generiertunabhängig vom Zustandunabhängig vom Speicherorttransient + persistentmomentaner Speicherort = Tabelle[OID]
9
Objekte aus der Universitätswelt
PersNr: 2137Name: "Kant"Rang: "C4"residiertIn: id9
hatGeprueft: {. . . }liest: {id2 , id3 }
id1 Professoren
VorlNr: 5001Titel: "Grundzüge"SWS: 4gelesenVon: id1
Hoerer: {. . .}Nachfolger: {. . .}Vorgaenger: {. . .}
Vorlesungenid2
VorlNr: 4630Titel: "Die 3 Kritiken"SWS: 4gelesenVon: id1
Hoerer: {. . .} Nachfolger: {. . .} Vorgaenger: {. . .}
id3 Vorlesungen
10
Objekttypen-Definition
• Angaben zur Generalisierung und Spezialisierung
• Strukturbeschreibung mit Attributen und Beziehungen
• Verhaltensbeschreibungmit Operationen
11
Attribute
class Professoren {attribute long PersNr;attribute string Name;attribute string Rang;
};
12
strukturierte Attribute
class Person {attribute string Name;attribute struct Datum {
short Tag;short Monat;short Jahr;
} GebDatum;};
13
1:1 Beziehung
class Professoren {attribute long PersNr;...relationship Raeume residiertIn
inverse Raeume::beherbergt;};
class Raeume {attribute long RaumNr;attribute short Groesse;...relationship Professoren beherbergt
inverse Professoren::residiertIn;};
14
1:N-Beziehung
class Professoren {...relationship set <Vorlesungen> liest
inverse Vorlesungen::gelesenVon;};
class Vorlesungen {...relationship Professoren gelesenVon
inverse Professoren::liest;};
15
Binäre N:M-Beziehung
class Studenten {...relationship set <Vorlesungen> hoert
inverse Vorlesungen::Hoerer;};
class Vorlesungen {...relationship set <Studenten> Hoerer
inverse Studenten::hoert;};
16
Universität
RaeumeProfessorenStudenten
Pruefungen
Vorlesungen
Inhalt
wurdeAbgeprueft
wurdeGeprueft hatGeprueft
beherbergtresidiertIn
hoert liest
gelesenVonHoerer
Vorgaenger Nachfolger
PrueferPruefling
17
Extensionen und Schlüssel
class Studenten (extent AlleStudenten key MatrNr) {attribute long MatrNr;attribute string Name;attribute short Semester;
relationship set<Vorlesungen> hoertinverse Vorlesungen::Hoerer;
relationship set<Pruefungen> wurdeGeprueftinverse Pruefungen::Pruefling;
};
18
Operationen
• Objekt erzeugen mit Konstruktor
• Zustand erfragen mit Observer
• Zustand verändern mit Mutator
• Objekt zerstören mit Destruktor
19
Modellierung des Verhaltensclass Professoren {exception hatNochNichtGeprueft { };exception schonHoechsteStufe { };...float wieHartAlsPruefer() raises (hatNochNichtgeprueft);void befoerdert() raises (schonHoechsteStufe);
};
in C++:meinLieblingsProf->befoerdert();
in OQL:select p.wieHartAlsPruefer()from p in AlleProfessorenwhere p.name = "Kant";
20
Vererbung
Typ1
Objekttypen
Typ2
Typ3
A
B
C
is-a
is-a
A: . . .
Instanzen
Typ1id1
A: . . . B: . . .
id2
Typ2
A: . . . B: . . . C: . . .
id3
Typ3
21
Typhierarchie bei einfacher Vererbung
ANY
is-a is-a is-a
OT 1
is-ais-ais-a is-ais-ais-a
OT 2
is-a is-a is-a
OT n-1
is-a is-a is-a
OT n
22
Vererbungclass Angestellte (extent AlleAngestellte) {attribute long PersNr;attribute string Name;attribute date GebDatum;short Alter();long Gehalt();
};
class Assistenten extends Angestellte (extent AlleAssistenten) {attribute string Fachgebiet;
};
class Professoren extends Angestellte (extent AlleProfessoren) {attribute string Rang;relationship Raeume residiertIn inverse Raeume::beherbergt; relationship set(Vorlesungen) liest inverse Vorlesungen::gelesenVon; relationship set(Pruefungen) hatgeprueft inverse Pruefungen::Pruefer;
};
23
Extension AlleAngestellten
select sum(a.Gehalt()) from a in AlleAngestellten
PersNr: 2137Name: "Kant"GebDatum: . . .
id1 Professoren
PersNr: 3002Name: "Platon"GebDatum: . . .
id11 Assistenten
PersNr: 6001Name: "Maier"GebDatum: . . .
id7 Angestellte
AlleAngestellten: { id1, id11 , id7 }
24
OQL: select
Liste alle C4-Professoren (als Objekte):select pfrom p in AlleProfessorenwhere p.Rang = "C4";
Liste Name und Rang aller C4-Professoren (als Werte):select p.Name, p.Rangfrom p in AlleProfessorenwhere p.Rang = "C4";
Liste Name und Rang aller C4-Professoren (als Tupel):select struct (n: p.Name, r: p.Rang)from p in AlleProfessorenwhere p.Rang = "C4";
25
OQL: Pfadausdrücke
select s.Namefrom s in AlleStudenten, v in s.hoert
where v.gelesenVon.Name = 'Sokrates'
Studenten Vorlesungenhört
Professoren NamegelesenVon
Welche Studenten hören Vorlesungen von Sokrates ?
26
27
Datenbanksysteme 2013
Kapitel 17:Sicherheit
Oliver Vornberger
Institut für InformatikUniversität Osnabrück
28
Datenschutz
Datenbank
grant select on Professoren to Erika with grant option
29
30
Datenbanksysteme 2013
Kapitel 18:Data Warehouse
Oliver Vornberger
Institut für InformatikUniversität Osnabrück
31
OLTP versus OLAP
Opera-tionaleDB
Opera-tionaleDB
Opera-tionaleDB
Opera-tionaleDB
OLTP OLAP
Decision Support AnfragenData Mining
Periodischauffrischen
online transaction processing online analytical processing
32
Sternschema
Verkäufer
Zeit
KundenProdukte Krankheiten
Ärzte
Patienten
ZeitKrankenhäuser
BehandlungenVerkäufe
Filialen
Handelsunternehmen Krankenkasse
Fakten Dimensionen
33
VerkäufeVerkDatum Filiale Produkt Anzahl Kunde Verkäufer30-Jul-96...
Passau...
1347...
1...
4711...
825...
FilialenFilialenkennung Land Bezirk ...Passau...
D...
Bayern...
...
...
KundenKundenNr Name wiealt ...4711...
Kemper...
38...
...
...
VerkäuferVerkäuferNr Name Fachgebiet Manager wiealt ...825...
Handyman...
Elektronik...
119...
23...
...
...
ZeitDatum Tag Monat Jahr Quartal KW Wochentag Saison ......30-Jul-96...23-Dec-97...
...30...27...
...Juli...Dezember...
...1996...1997...
...3...4...
...31...52...
...Dienstag...Dienstag...
...Hochsommer...Weihnachten...
...
...
...
...
...
ProdukteProduktNr Produkttyp Produktgruppe Produkthauptgruppe Hersteller ...1347...
Handy...
Mobiltelekom...
Telekom...
Siemens...
...
...
Ausprä
gung
34
Star Join
select p.Hersteller, sum(v.Anzahl) as Anzahlfrom Verkäufe v, Filialen f, Produkte p, Zeit z, Kunden kwhere z.Saison = 'Weihnachten' and z.Jahr = 1996 and k.wiealt < 30 and p.Produkttyp = 'Handy' and f.Bezirk = 'Bayern' and v.VerkDatum = z.Datumand v.Produkt = p.ProduktNrand v.Filiale = f.Filialenkennungand v.Kunde = k.KundenNrgroup by Hersteller;
Welche Handys (d.h. von welchen Herstellern) haben junge Kunden in den bayrischen Filialenzu Weihnachten 1996 gekauft ?
570Nokia400Bosch650Motorola550Siemens
AnzahlHersteller
35
Verdichtungsgrad
Drill down:• mehr Attribute in group-by-Klausel• mehr Ergebniszeilen• geringere Verdichtung
Roll up:• weniger Attribute in group-by-Klausel• weniger Ergebniszeilen• stärkere Verdichtung
36
Handyverkäufe nach Herstellern
select p.Hersteller, sum(v.Anzahl) as Anzahlfrom Verkäufe v, Produkte pwhere v.Produkt = p.ProduktNrand p.Produkttyp = 'Handy'group by p.Hersteller ;
4.500Nokia
3.000Bosch
3.500Motorola
8.500Siemens
AnzahlHersteller
z.Jahr,
2.0001996Nokia
1.5001995Nokia
1.0001994Nokia
2.0001996Bosch
1.0001995Bosch
5001994Bosch
1.5001996Motorola
1.0001995Motorola
1.0001994Motorola
3.5001996Siemens
3.0001995Siemens
2.0001994Siemens
UmsatzJahrHersteller
, z.Jahr
Drilldown längs Zeitachse
8.5001996
6.5001995
4.5001994
AnzahlJahr
Rollup längs Hersteller
19.500
AnzahlUltimative Verdichtung:
37
Materialisierung
Hersteller \ Jahr 1994 1995 1996 ΣSiemens 2.000 3.000 3.500 8.500Motorola 1.000 1.000 1.500 3.500Bosch 500 1.000 1.500 3.000Nokia 1.000 1.500 2.000 4.500Σ 4.500 6.500 8.500 19.500
gewünscht:Handy-Verkäufe nach Jahr und Hersteller
38
Handy2Cube
Wunsch:verschieden aggregierte Teilergebnise vorberechnen:
create table Handy2DCube(Hersteller varchar(20),Jahr integer,Anzahl integer
);
39
Berechnung Hersteller + Jahrinsert into Handy2DCube
(select p.Hersteller, z.Jahr, sum(v.Anzahl)from Verkäufe v, Produkte p, Zeit zwhere v.Produkt = p.ProduktNrand p.Produkttyp = 'Handy'and v.VerkDatum = z.Datumgroup by z.Jahr, p.Hersteller)
union (select null, z.Jahr, sum(v.Anzahl)from Verkäufe v, Produkte p, Zeit zwhere v.Produkt = p.ProduktNrand p.Produkttyp = 'Handy'and v.VerkDatum = z.Datumgroup by z.Jahr)
union (select p.Hersteller, null, sum(v.Anzahl)from Verkäufe v, Produkte pwhere v.Produkt = p.ProduktNrand p.Produkttyp = 'Handy'group by p.Hersteller)
union (select null, null, sum(v.Anzahl)from Verkäufe v, Produkte pwhere v.Produkt = p.ProduktNrand p.Produkttyp = 'Handy');
40
Cube-Operator
select p.Hersteller, z.Jahr, f.Land, sum(Anzahl)as Anzahl
from Verkäufe v, Produkte p, Zeit z, Filialen fwhere v.Produkt = p.ProduktNrand p.Produkttpy = 'Handy'and v.VerkDatum = z.Datumand v.Filiale = f.Filialenkennunggroup by z.Jahr, p.Hersteller, f.Landwith cube;
Erzeugt bei k Attributen in group-by-Klausel2k Teilmengen (inkl. Null-Werte) und vereinigt sie.
41
Ergebnisdes CubeOperators
Handy3DCubeHersteller Jahr Land Anzahl
Siemens 1994 D 800Siemens 1994 A 600Siemens 1994 CH 600Siemens 1995 D 1.200Siemens 1995 A 800Siemens 1995 CH 1.000Siemens 1996 D 1.400
... ... ... ...Motorola 1994 D 400Motorola 1994 A 300Motorola 1994 CH 300
... ... ... ...Bosch ... ... ...... ... ... ...null 1994 D ...null 1995 D ...... ... ... ...
Siemens null null 8.500... ... ... ...null null null 19.500
42
MySQL: WITH ROLLUP
select Hersteller, Jahr, sum(Umsatz) as Umsatzfrom Handysgroup by Hersteller, Jahrwith Rollup
MySQL WorkBench
43
Data Mining
Datenbestand durchsuchen nach (bisher unbekannten) Zusammenhängen (Knowledge Discovery)
• Klassifikation von Objekten:z.B. Risikoabschätzung bei Versicherungspolicenmännlich + alt + Coupé hohes Risiko
• Assoziationsregeln:z.B. Analyse des Kaufverhaltens"Wer PC kauft, kauft auch Drucker"
44
Datamining: Beispiel für Klassifikation
geringVanm40
hochCoupém40
…………
geringVanm24
geringCoupéw38
hochCoupém19
geringVanw22
geringCoupéw18
geringVanw45
SchadenAutotypGeschlecht
Alter Geschlecht
Alter
Autotyp
GeringesRisiko
hohesRisiko
GeringesRisiko
hohesRisiko
männlich weiblich
Coupé Van
> 35<=35
45
Datamining: Beispiel für Assoziationen
Scanner555
Toner555
PC555
Papier555
Drucker555
PC444
Drucker444
Toner333
Papier333
Drucker333
Scanner222
PC222
Toner111
PC111
Papier111
Drucker111
ProduktTransID
3{Drucker, Papier, PC}{Drucker, Papier, Toner}{Drucker, PC, Toner}{Papier, PC, Toner}
33
32
3
2
{Drucker, Papier}{Drucker, PC}{Drucker, Scanner}{Drucker, Toner}{Papier, PC}{Papier, Scanner}{Papier, Toner}{PC, Scanner}{PC, Toner}{Scanner, Toner}
43423
{Drucker}{Papier}{PC}{Scanner}{Toner}
AnzahlFrequent Itemset-Kandidat
Recommended