Beruflich Dokumente
Kultur Dokumente
2. Grundlagen relationaler
Datenbanken
8. Einführung,
Projektierung im 7. Informations-
Betrieb und
bedarfsanalyse
BI-Umfeld Wartung
Spezialformen 9. Operational BI
10. Zukunft von
DW & BI
und Ausblick
Organisationssicht
Scheer (1992)
Teil 1
Chen (1976)
Chen (2002)
▪ Klassifikation
□ Definition von Klassen von Objekten mit gemeinsamen Eigenschaften
□ Beispiel: Personen, Autos, Flugzeuge, …
▪ Aggregation
□ Definition von Klassen von Objekten aus existierenden Komponenten
□ Beispiel: Name, Geschlecht -> Person
Vossen (2008)
▪ Attribut (attribute)
□ Eigenschaft von einem Entitätstyp oder einem
Beziehungstyp
□ bspw. Name, Datum, ID
Matrikel-
nummer
▪ Es gibt Fälle, in denen der Wert für ein Attribut einer Entität
nicht bekannt ist
Veran-
Matrikel- staltungs- Bezeichnung
Name
nummer nummer
VL-
Student Besuch Vorlesung
E1 E2
E
E11 EE22
Veran-
Matrikel- staltungs- Bezeichnung
Name
nummer nummer
(1,1) (0,n)
▪ Min-Max / ISO Student
Stu-
dium Hauptfach
N 1
▪ Chen Student
Stu-
dium Hauptfach
<<Relationship>>
hat >
0..N
▪ UML
< Hauptfach von
Student Hauptfach
1
▪ Zeitabschnitte
entliehen am,
□ Anfang und Ende je als ein Attribut zurück am
Entleihnummer
Person
(0,n)
(0,1) Hierar-
chie
Person
(0,n)
(0,n) Netz-
werk
(1,n) Vor-
Professor
lesung
(1,n)
(1,1)
(1,n)
Prüfung Modul
(1,n)
(1,n)
(1,n) Teil-
Student
nahme
E1
(0,n)
(0,n) (0,n)
En E-E-E-E E2
(0,n)
E3
Teil 2
Codd (1970)
Attribut (Spalte)
Relationenname
R
A1 ... An Relationenschema
▪ Schlüssel
□ minimale Menge von Attributen, deren Werte ein Tupel immer
eindeutig identifizieren
□ hat für jedes Tupel eine andere Ausprägung (UNIQUE)
□ muss entsprechend existieren (NOT NULL)
□ besondere Bedeutung bei der Referenzierung von Tupeln
□ einer der Schlüsselkandidaten wird als Primärschlüssel ausgewählt
▪ Unterscheidung
□ Merkmalsschlüssel (z.B. Name)
□ künstlicher Schlüssel (z.B. Bestellnummer)
□ Kombination aus Schlüsseln (z.B. Gebäude- und Raumnummer)
▪ Primärschlüssel
□ wird unterstrichen
□ Angestellte AKW Springfield (Vorname, Nachname, ID)
Kemper, Eickler (2013)
▪ Sekundärschlüssel
□ auch Schlüsselkandidaten (candidate key) genannt
□ sonst Eigenschaften wie Schlüssel
▪ Fremdschlüssel
□ auch: relationale Verknüpfung
□ wird mit # gekennzeichnet
□ Attribut
□ (welches nicht alleiniger Primärschlüssel ist)
□ welches den selben Wertebereich hat wie ein Primärschlüssel in einer
anderen Relation
□ welches beide Relationen miteinander verbindet
Staud (1995)
Relation Stadt
StadtID Name #BundeslandID
1 Würzburg BAY
2 Nürnberg BAY
3 Bremen BRE
... ... ...
Relation Staat
StaatID Name
BRE Bremen 1
... ... ...
▪ Objektintegrität
□ kein Tupel mit unvollständigem Schlüssel in einer Relation
▪ Referentielle Integrität
□ ein Fremdschlüssel (Ausprägung) darf nur eingetragen werden,
wenn er als Ausprägung des Schlüssels in einer anderen Relation
existiert
□ sonst können Fremdschlüsseleinträge nicht verknüpft werden
▪ Semantische Integrität
□ Logische Widerspruchsfreiheit und exakte Abbildung des
modellierten Realweltausschnitts
Relation Kunde
KundenID
Kunde
...
...
KundenID
Relation Kunde
KundenID Name
Kunde
... ...
... ...
KundenID Name
Teil 3
▪ Deklarative Programmiersprache
□ Algorithmische Lösung eines Problems nicht im Vordergrund
□ Beschreibung des Problems
▪ Beispiel
□ SELECT * FROM Kunde;
▪ Syntax:
CREATE TABLE tabellenname(
Spaltendefinition1,
Spaltendefinition2, …,
Spaltendefinitionn
[PRIMARY KEY (spaltenname,…)]
[UNIQUE (spaltenname,…)]
[FOREIGN KEY (spaltenname,…) REFERENCES
tabellenname(spaltenname,…)
[ON DELETE referenzoption]
[ON UPDATE referenzoption]
]
);
▪ Syntax
spaltenname datentyp [UNSIGNED][NULL | NOT NULL]
[DEFAULT default-wert] [AUTO-INCREMENT][UNIQUE |
PRIMARY KEY]
▪ Beispiele
□ Produktnummer INTEGER UNSIGNED NOT NULL UNIQUE
□ Verkaufspreis DECIMAL(5,2) NOT NULL
□ KNr INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY
▪ Syntax:
CREATE TABLE tabellenname(
Spaltendefinition1,
Spaltendefinition2, …,
Spaltendefinitionn
[PRIMARY KEY (spaltenname,…)]
[UNIQUE (spaltenname,…)]
[FOREIGN KEY (spaltenname,…) REFERENCES
tabellenname(spaltenname,…)
[ON DELETE referenzoption]
[ON UPDATE referenzoption]
]
);
▪ Syntax
INSERT INTO tabellenname [(spaltenname1, …)]
VALUES ({ausdruck | DEFAULT}, …);
▪ Beispiel
INSERT INTO Veranstaltung
VALUES (DEFAULT, 'Business Intelligence und
Reporting', 'BIR', 'V', 5, 'Saugut, muss man
hören!!!');
▪ Syntax
UPDATE tabellenname
SET spaltenname1 = ausdruck1 [, spaltenname2 =
ausdruck2, …]
[WHERE bedingung];
▪ Beispiel
□ Die SWS-Anzahl der Veranstaltung „BIR“ soll von 5 auf 6 erhöht
werden
UPDATE Veranstaltung
SET SWS = 6
WHERE Kuerzel = 'BIR';
▪ Syntax
SELECT [ALL | DISTINCT] spaltenname1, ….
FROM tabelle1 [, tabelle2, …]
[WHERE bedingung];
▪ Beispiel
□ Zeige alle Kunden an.
SELECT * FROM Kunde;
□ Zeige alle Artikel mit Lagerbestand von weniger als 50 an.
SELECT Artikelname, Lagerbestand
FROM Artikel
WHERE Lagerbestand < 50;
R
A B C A=a3(R)
a1 b1 c1 A=a (R) A B C
3
a1 b2 c2 a3 b2 c2
a3 b2 c2
▪ SELECT * R
FROM tabellenname A B C
WHERE ausdruck; 1 3 3
2 2 1
▪ SELECT * R 3 1 2
FROM R A B C
WHERE A=1; 1 3 3
R B,C(R)
A B C B C
a1 b1 c1 ΠB,C(R) b1 c1
a2 b2 c2 b2 c2
a3 b2 c2
▪ SELECT spaltenname R
FROM tabellenname; A B C
1 3 3
▪ SELECT A, C R 2 2 1
FROM R; A C 3 1 2
1 3
2 1
3 2
R X←B(R)
A B C A X C
a1 b1 c1 X←B(R) a1 b1 c1
a1 b2 c2 a1 b2 c2
a3 b2 c2 a3 b2 c2
R A;count(*)(R)
A B C A count(*)
a1 b1 c1 γA;count(*)(R) a1 2
a2 b2 c2 a2 1
a1 b2 c2
▪ COUNT()
□ Ermittelt Anzahl an Zeilen, die eine bestimmte Suchbedingung
erfüllen
▪ MIN() / MAX()
□ Gibt den minimalen bzw. maximalen Wert einer Spalte zurück
□ Spalte muss nicht numerischen Datentyp haben
▪ SUM()
□ Ermittelt Summe aller Werte einer Spalte
□ Nur numerische Datentypen erlaubt
□ Ergebnis muss im Bereich der darstellbaren Zahlen des Input-
Datentyps liegen
▪ AVG()
□ Ermittelt Durchschnitt aller Werte einer Spalte
□ Nur numerische Datentypen erlaubt
□ Auf NULL-Werte achten
R L R⋈C=DL
A B C R⋈C=DL D E A B C D E
a1 b1 c1 c1 e1 a1 b1 c1 c1 e1
a1 b2 c2 c2 e2 a1 b2 c2 c2 e2
a3 b2 c2 a3 b2 c2 c2 e2
▪ SELECT * R L
FROM tabellenname1 A B C D E
INNER JOIN tabellenname2 1 9 1 1 3
ON ausdruck;
2 8 2 2 3
3 7 2
▪ SELECT *
FROM R R⋈C=DL
INNER JOIN L A B C D E
ON R.C = L.D; 1 9 1 1 3
2 8 2 2 3
▪ Alternativ 3 7 2 2 3
SELECT *
FROM R, L
WHERE R.C = L.D
52 Business Intelligence und Reporting – Prof. Dr. Christian Janiesch
⋈ Natural Join
▪ SELECT * R L
FROM tabellenname1 A B C C D
NATURAL JOIN tabellenname2; 1 9 1 1 2
2 8 2 2 3
▪ SELECT * 3 7 2
FROM R
NATURAL JOIN L; R⋈L
A B C D
▪ Alternativ 1 9 1 2
SELECT * 2 8 2 3
FROM R 3 7 2 3
INNER JOIN L
USING(C);
▪ Beim Full (Outer) Join werden auch alle Tupel mit in die
Ereignisrelation aufgenommen, die keinen Join-Partner
gefunden haben
R⋈L
R L A B C D
A B C C D a1 b1 c1 d1
a1 b1 c1 c1 d1 a1 b2 c2 NULL
a1 b2 c2 c4 d2 a3 b2 c3 NULL
a3 b2 c3 NULL NULL c4 d2
▪ SELECT * FROM R FULL OUTER JOIN L USING(C);
▪ Syntax
SELECT spaltendefinition1, spaltendefinition2, …,
aggregatfunktion(spaltendefinitionx)
FROM tabellenname1, tabellename2, …
WHERE suchbedingung
GROUP BY spaltendefinition1, spaltendefinition2,
…
[HAVING gruppenbedingung]
[ORDER BY spaltendefinitioni [ASC|DESC]];
▪ Unterschied zu WHERE-Bedingung
□ HAVING wird nicht auf Zeilen, sondern auf Gruppen von Zeilen
angewendet
□ Zeilen, die WHERE-Bedingung nicht erfüllen, werden gar nicht erst in
Ergebnismenge aufgenommen
□ Zeilen, die HAVING-Bedingung nicht erfüllen, werden in
Ergebnismenge aufgenommen, aber ausgeblendet
▪ Aggregatfunktionen in HAVING-Bedingungen
▪ Beispiel
SELECT PLZ, Firma
FROM Kunde
ORDER BY PLZ DESC, Firma;
61 Business Intelligence und Reporting – Prof. Dr. Christian Janiesch
Unterabfrage (Subquery)