Teil 2 -

Werbung
Teil 2
6. Vorlesung
Modul: Programmierung B-PRG
Grundlagen der Programmierung II
Professur für Datenbanken und Informationssysteme
Dr. Karsten Tolle
[email protected]
1
Schlüssel ?
PLZ
ORT
STRASSE_NR
30419
Hannover
Schaumburgstr. 2
30419
Hannover
Quetlinburger Weg 12
37308
Schirmberg
Bergstraße 1
37308
Bodenrode
Hauptstraße 12
37308
Geismar
Bergstraße 1
35279
Neustadt
Gartenstraße 7
53577
Neustadt
Gartenstraße 7
keine Abhängigkeiten
Schlüssel: PLZ, ORT, STRASSE_NR
2
Grundlagen der Programmierung II
DBIS - SS2011
Fahrzeuge der Firma AB
HERSTELLER
KENNZEICHEN
ZUGEL_GES_GEW
FÜHRERSCHEIN
VW
F-AB 123
bis 3.5t
B
MB
F-AB 234
bis 7.5t
C1
MB
F-AB 235
bis 7.5t
C1
MAN
F-AB 236
bis 12t
C
MB
F-AB 239
bis 12t
C
…
…
…
Abhängigkeiten?
3
Grundlagen der Programmierung II
DBIS - SS2011
Fahrzeuge der Firma AB
HERSTELLER
KENNZEICHEN
ZUGEL_GES_GEW
FÜHRERSCHEIN
VW
F-AB 123
bis 3.5t
B
MB
F-AB 234
bis 7.5t
C1
MB
F-AB 235
bis 7.5t
C1
MAN
F-AB 236
bis 12t
C
MB
F-AB 239
bis 12t
C
MB
F-AB 230
bis 17t
C
…
…
…
…
… aus ZUGEL_GES_GEW folgt hier FÜHRERSCHEIN:
ZUGEL_GES_GEW
FÜHRERSCHEIN
… umgekehrt nicht!
4
Grundlagen der Programmierung II
DBIS - SS2011
… ein wenig abgewandelt …
HERSTELLER
TYP
ZUGEL_GES_GEW
FÜHRERSCHEIN
VW
Transporter
bis 3.5t
B
MB
Laster
bis 7.5t
C1
MB
Laster
bis 7.5t
C1
MAN
Laster
bis 12t
C
MB
Lastzug
bis 17t
CE
MB
Lastzug
bis 7t
CE
…
…
…
…
… aus ZUGEL_GES_GEW und TYP folgt hier FÜHRERSCHEIN:
ZUGEL_GES_GEW TYP
FÜHRERSCHEIN
5
Grundlagen der Programmierung II
DBIS - SS2011
… ein wenig mehr abgewandelt …
HERSTELLER
TYP
ZUGEL_GES_GEW
FÜHRERSCHEIN
VW
Transporter
bis 3.5t
B
MB
Laster
bis 7.5t
C1
MB
Laster
bis 7.5t
C1
MAN
Laster
bis 12t
C
MB
Lastzug
bis 17t
CE
MB
Lastzug
bis 7.5t
C1E
VW
Lastzug
bis 12t
C1E
…
…
…
…
… C1E: (nur mit C1) C1 Fahrzeuge + Anhänger von mehr als 750 kg
bis max. 12 t
6
Grundlagen der Programmierung II
DBIS - SS2011
Funktionale Abhängigkeit (FD)
Seien X und Y Teilmengen von R.
Eine Relation r(R) erfüllt (satisfies) die funktionale
Abhängigkeit (functional dependency) FD X → Y,
wenn für je zwei (beliebige) Tupel u, v ∈ r(R) gilt:
u(X) = v(X) ⇒ u(Y) = v(Y).
X → Y ⇔ u(X) = v(X) ⇒ u(Y) = v(Y)
7
Grundlagen der Programmierung II
DBIS - SS2011
Beispiel
Gegeben ist die Relation r(R):
A
B
C
D
E
a1
b1
c1
d1
e1
a1
b2
c2
d2
e1
a2
b1
c3
d2
e1
a2
b1
c4
d3
e1
a3
b2
c5
d1
e1
Geben Sie an, welche der folgenden Abhängigkeiten r nicht widerspricht:
A→D
AB → D
C → BDE
E→A
8
A→E
A → BC
Grundlagen der Programmierung II
DBIS - SS2011
Schlüssel
Ein Schlüssel identifiziert eine Entität. Er besteht aus
einer Menge von Attributen, deren Werte alle Instanzen
einer Entität eindeutig bestimmen.
Ein Schlüssel (key) einer Relation r(R) ist eine minimale
Teilmenge K von R, so dass für je zwei verschiedene
Tupel t1, t2 ∈ r gilt:
• t1(K) ≠ t2(K)
und
• keine echte Teilmenge K' von K hat diese Eigenschaft.
Ein Schlüssel kann als Integritätsbedingung angesehen
werden. Falls K Schlüssel von r(R), t1 ∈ r, t1(K) = t2(K),
t1 ≠ t2 dann dürfte t2 nicht in r(R) eingefügt werden.
9
Grundlagen der Programmierung II
DBIS - SS2011
Schlüssel
Gegeben seien ein Relationenschema R und eine Menge
F von FDs.
X ⊆ R ist ein Oberschlüssel für R
⇔
X→R
X ist ein Schlüssel für R
⇔
X → R und X minimal (¬(∀A∈X: X\A → R))
10
Grundlagen der Programmierung II
DBIS - SS2011
1. Normalform
FIRSTNME
LASTNME
BIRTH
STREET
NUMBER
TOWN
ZIP
Jon
Lucas
12.03.1969
{Zeil, Lange
Str.}
{12, 114}
{Frankfurt,
Frankfurt}
{60313,
60313}
Lucas
Jon
24.12.1980
Gräfstr.
27
Frankfurt
60325
…
…
…
…
…
…
…
FIRSTNME
LASTNME
BIRTH
STREET
NUMBER
TOWN
ZIP
Jon
Lucas
12.03.1969
Zeil
12
Frankfurt
60313
Jon
Lucas
12.03.1969
Lange Str.
114
Frankfurt
60313
Lucas
Jon
24.12.1980
Gräfstr.
27
Frankfurt
60325
…
…
…
…
…
…
…
DBIS - SS2011
1. Normalform
Definition:
Ein Relationenschema R ist in 1. Normalform
(1NF), wenn die Wertebereiche aller Attribute
von R atomar sind.
1.NF
⇔
Wertebereiche atomar
12
Grundlagen der Programmierung II
DBIS - SS2011
vorrat
(Teil
Lager
Menge
Lageradresse)
1
101
1
25
Waag. 10
102
3
410
Krugerstr. 42
102
1
300
Waag. 10
112
4
10
Brunnerstr. 105
Probleme:
Redundanz
– Lageradresse für jedes Teil im Lager
redundant gespeichert
Einfüge-Anomalie
– Kein Teil ohne Lager eingefügt werden
Lösch-Anomalie
– Lager ohne Teile könnten gelöscht werden
13
Grundlagen der Programmierung II
DBIS - SS2011
vorrat
(Teil
Lager Menge Lageradresse)
101
1
25
Waag. 10
102
3
410
Krugerstr. 42
102
1
300
Waag. 10
112
4
10
Brunnerstr. 105
F = { Teil Lager → Menge Lageradresse
Lager → Lageradresse }
14
Grundlagen der Programmierung II
DBIS - SS2011
Prim
Ein Attribut A heißt prim in R, wenn es in einem
Schlüssel von R enthalten ist, sonst heiße es
nicht prim.
A ist prim
⇔
X: X ist Schlüssel, A∈X
15
Grundlagen der Programmierung II
DBIS - SS2011
volle funktionale Abhängigkeit
Eine funktionale Abhängigkeit X → Y heißt volle
funktionale Abhängigkeit, wenn für keine
Teilmenge X´ ⊂ X, X´ → Y gilt. Y heißt dann
voll funktional abhängig von X.
X → Y voll funktional
⇔
∃ X´⊂ X : X´ → Y
16
Grundlagen der Programmierung II
DBIS - SS2011
2. Normalform
Ein Relationenschema R ist in 2. Normalform
(2NF), wenn es in 1NF ist und jedes nicht prime
Attribut voll funktional von jedem Schlüssel von
R abhängig ist.
2. NF
⇔
A nicht prim ⇒ Schlüssel → A voll funktional
Die 2. NF ist verletzt, wenn ein Teil eines Schlüssels
ein Nicht-Schlüsselattribut funktional bestimmt.
17
Grundlagen der Programmierung II
DBIS - SS2011
Beispiel 1
vorrat
(Teil
Lager
Menge Lageradresse)
101
1
25
Waag. 10
102
3
410
Krugerstr. 42
102
1
300
Waag. 10
112
4
10
Brunnerstr. 105
F = { Teil Lager → Menge Lageradresse
Lager → Lageradresse }
vorrat
18
(Teil
Lager Menge
lager
101
1
25
1
Waag. 10
102
3
410
3
Krugerstr. 42
102
1
300
4
Brunnerstr. 105
112
4
10
Grundlagen der Programmierung II
(Lager Lageradresse)
DBIS - SS2011
Beispiel 2
R = ABCD F = {AB→CD, B→D}
B→D verletzt 2. NF
Zerlegung in:
R1 = (ABC) mit F1 = {AB→C}
R2 = (BD) mit F2 = {B→D}
19
Grundlagen der Programmierung II
DBIS - SS2011
2. NF ?
ID
HERSTELLER
ZUGEL_GES_GEW
FÜHRERSCHEIN
1
VW
bis 3.5
B
2
MB
bis 7.5
C1
3
MB
bis 8.5
C
4
MAN
bis 12
C
5
MB
bis 12
C
6
VW
bis 12
C
…
…
…
F = { ID
R,
ZUGEL_GES_GEW
20
FÜHRERSCHEIN}
Grundlagen der Programmierung II
DBIS - SS2011
Trotzdem Probleme ?
ID
HERSTELLER
ZUGEL_GES_GEW
FÜHRERSCHEIN
1
VW
bis 3.5
B
2
MB
bis 7.5
C1
3
MB
bis 8.5
C
4
MAN
bis 12
C
5
MB
bis 12
C
6
VW
bis 12
C
…
…
…
21
Grundlagen der Programmierung II
DBIS - SS2011
Normalformen
Über die Normalformen (NF) werden Kriterien
definiert, um Redundanzen und Anomalien zu
verhindern.
Es gibt: 1 NF
2 NF
3 NF
4 NF
5 NF
6 NF
BCNF
1 NF
2 NF
3 NF…
DBIS - SS2011
Normalisierung / Denormalisierung
Normalisierung: Der Prozess des Aufspaltens von
Relationen, um Anomalien/Redundanzen zu
verhindern.
Denormalisierung: Der Prozess des
Zusammenlegens von Relationen, um
Performanz zu gewinnen.
DBIS - SS2011
Vorgehen beim Prüfen auf NF (WICHTIG!!!)
Ausgangspunkt: Relation R (mind. 1. NF) und
Menge der FDs gegeben.
1. Welche Schlüssel gibt es?
nicht primen Attribute!
was sind die
2. Prüfe auf 2. NF (voll funktional abhängig von
ALLEN Schlüsseln?)
24
Grundlagen der Programmierung II
DBIS - SS2011
SQL (ein Einblick)
Structured Query Language
DBS – Sprachen
Das DBS stellt als Schnittstelle eine
Datenbanksprache(n) für die folgenden Zwecke
zur Verfügung:
• Datenabfrage und -manipulation – Data Manipulation
Language (DML)
• Verwaltung der Datenbank – Data Definition Language
(DDL)
• Berechtigungssteuerung – Data Control Language
(DCL)
z.B. SQL
DBIS - SS2011
Structured Query Language
SQL ist für Relationale Datenbanksysteme!
Standards:
SQL-1 von 1986 bzw. 1989 (ca. 120 Seiten)
SQL-2 (SQL92) von 1992 (ca. 580 Seiten)
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
SQL-3 (SQL99) von 2000 (ca. 1200 Seiten)
http://www.cse.iitb.ac.in/dbms/Data/Papers-Other/SQL1999/ansi-iso-9075-2-1999.pdf
SQL 2003 - ISO/IEC 9075:2003
SQL:2006 - ISO/IEC 9075-14:2006 (SQL/XML)
DBIS - SS2011
Erstellen
-
create
Einfügen
-
insert
Anfragen
-
select
Was braucht man zum üben/testen?
28
Grundlagen der Programmierung II
DBIS - SS2011
SQL-Online-Tutorial
http://sqlzoo.net/
DBIS - SS2011
SQL Online Tutorial
Anfragen können interaktiv ausgeführt werden.
DBIS - SS2011
Tabellen erstellen
Eine Tabelle wird im Minimalfall mit ihrem
eindeutigen Namen sowie der Liste der
zugehörigen Attribute samt Domänen nach
folgendem Schema definiert:
create table Relations-Name (
Attribut-Name Domäne { , Attribut-Name
Domäne}∗
);
DBIS - SS2011
die wichtigsten SQL Datentypen
• integer
• blob(n)
• character(n)
• …
• varchar(n)
• float(m)
• date
• time
• timestamp
• clob(n)
DBIS - SS2011
create table Konto (
KtoNr integer,
KundenName varchar(25),
FilialName varchar(25),
Saldo real
);
create table Kunde (
Name varchar(25),
Vorname varchar(25),
Straße varchar(25),
Stadt varchar(25),
GebDatum date
);
DBIS - SS2011
Primärschlüssel
Mittels der Klausel primary key kann eine unter
den Attributfolgen einer Relation – bei der Definition
der Tabelle – als Primärschlüssel ausgezeichnet
werden. Die Benutzung dieser Klausel ist nur
einmal pro Relation gestattet.
create table Konto (
KtoNr integer primary key not null,
KundenName varchar(25),
FilialName varchar(25),
Saldo real ) ;
abhängig vom DBMS,
ob „not null“ nötig ist
DBIS - SS2011
Primärschlüssel
Wenn mehr als ein Attribut als Primärschlüssel
definiert werden sollen, wird die Klausel in der
Form primary key (Attributnamen-Liste)
verwendet.
create table Transaktion (
vonKtoNr integer not null,
anKtoNr integer not null,
Datum date not null,
Betrag real,
primary key (vonKtoNr, anKtoNr, Datum) ) ;
DBIS - SS2011
Einfügen von Tupeln
Um Daten einzufügen, spezifiziert man entweder das
Tupel, das eingefügt werden soll …
Die Werte für die Attribute der Tupel müssen aus der
Domäne der Attribute sein.
insert into Kunde
values ( 'Otto', 'Hans', 'Bäckerweg 12', 'Frankfurt',
'1970-12-01' ) ;
Der Kunde "Hans Otto" wird eingefügt.
DBIS - SS2011
Syntaktische Grundform der SQL-Anfrage
select
A1,A2, ... ,An
from
R1, R2, ... ,Rm
[where
conditions]
[group by clause]
[having
clause]
[order by clause];
DBIS - SS2011
Anfragen ohne Bedingungen
Filiale ( Name Leiter Stadt Einlagen )
select Name, Leiter from Filiale;
select Leiter, Name from Filiale;
select Stadt from Filiale;
select * from Filiale;
DBIS - SS2011
SQL verwirklicht das Prinzip der
„Vielfachmenge“ (engl. multiset). In den
Ergebnismengen können demnach Duplikate
auftreten.
Sind keine Duplikate erwünscht, müssen sie
explizit durch den Zusatz distinct entfernt
werden.
select distinct Stadt from Filiale;
DBIS - SS2011
Aggregatfunktionen
Die sog. Aggregatfunktionen können in der
select-Klausel anstelle von einzelnen Attributen
angegeben werden.
Ergebnis einer Aggregatfunktion ist ein Wert,
kein Tupel.
select count(∗) as AnzahlKonten
from Konto;
DBIS - SS2011
Aggregatfunktionen
• min( A ) zur Berechnung des Minimalwerts aller Tupel unter dem
Attribut A.
• max( A ) zur Berechnung des Maximalwerts aller Tupel unter dem
Attribut A.
• avg( [ distinct ] A ) zur Berechnung des Durchschnittswerts aller
Tupel unter dem Attribut A, wobei unter Angabe von distinct
mehrfach gleiche Werte nur einmal in die Berechnung eingehen.
• sum( [ distinct ] A ) zur Berechnung der Summe aller Tupel unter
dem Attribut A, wobei unter Angabe von distinct mehrfach gleiche
Werte nur einmal in die Berechnung eingehen.
• count( ∗ ) zum Zählen der Tupel der betrachteten Relation.
• count( [ distinct ] A) zum Zählen der Tupel der betrachteten
Relation, wobei zunächst eine Duplikateneliminierung bezogen auf
Werte unter dem Attribut A stattfindet.
DBIS - SS2011
where-Klausel
Bezüglich der Bedingung sind Vergleiche mit den
üblichen Operatoren, den logischen
Verknüpfungen and und or sowie beliebige
Klammerungen gestattet.
Konto ( KontoNr KundenNr FilialName Saldo )
select * from Konto
where Saldo > 5000 or KundenNr <= 100;
DBIS - SS2011
Textvergleiche - LIKE
Kunde ( KundenNr Name Vorname Straße Stadt )
select KundenNr
from Kunde
where Name like 'To%' and
Vorname not like '_arste%';
Bem.:
% für beliebige Zeichenfolgen
_ für genau ein Zeichen
DBIS - SS2011
Anfrage über mehrere Relationen
Werden in der from-Klausel mehrere Relationen
spezifiziert, so erfolgt die Berechnung des
kartesischen Produktes.
Konto ( KontoNr KundenNr FilialName Saldo )
Filiale ( Name Leiter Stadt Einlagen )
select * from Filiale, Konto;
… im Ergebnis wird jeder DS auf Filiale
mit jedem DS aus Konto verbunden!
DBIS - SS2011
Beispiel
seit
Person
AusweisNr.
45
(0:n)
lebt_in
(0:n)
Name Vorname
Ort
PLZ
PERSON
(AusweisNr., Name, Vorname)
ORT
(PLZ, Ortsname)
LEBT_IN
(AusweisNr., PLZ, seit)
Grundlagen der Programmierung II
Ortsname
DBIS - SS2011
Beispiel mit Instanzen
PERSON
Ort
AusweisNr
Name
Vorname
PLZ
Ortsname
001
Jon
Lucas
501
Buli
003
Jon
Smith
503
Wali
103
Lucas
Jon
603
Kali
LEBT_IN
AusweisNr
PLZ
seit
001
501
23.12.2000
003
501
17.08.2004
001
503
01.01.1999
Jon Lucas (001) lebt_in Buli (501), seit dem 23.12.2000!
46
Grundlagen der Programmierung II
DBIS - SS2011
CREATE TABLE EMPLOYEE
(FIRSTNME varchar(20),
LASTNME varchar(20),
BIRTH date,
Foreign Key (ADR_SID) references ADDRESS(ID));
Fremdschlüssel /
Forein Key
FIRSTNME
LASTNME
BIRTH
ADR_ID
Jon
Lucas
12.03.1969
1
Jon
Smith
30.09.1973
2
Lucas
Jon
24.12.1980
3
Jon
Smith
24.12.1976
4
Lucas
Smith
01.01.1975
1
ID
STREET
NUMBER
TOWN
ZIP
1
Zeil
12
Frankfurt
60313
2
Lange Str.
114
Frankfurt
60313
3
Gräfstr.
27
Frankfurt
60325
4
Gundhofstr.
27
MörfeldenWalldorf
64546
DBIS - SS2011
Join – Verknüpfung von Tabellen
Konto ( KontoNr KundenNr FilialName Saldo )
Filiale ( Name Leiter Stadt Einlagen )
select * from Filiale, Konto
where Filiale.Name = Konto.FilialName;
alternativ mit Alias
select * from Filiale F, Konto K
where F.Name = K.FilialName;
DBIS - SS2011
Weitere Dinge …
Inner und Outer Join
Alter und Drop Table
Mengenoperationen: Union, Minus, Intersect
Sichten/Views
Index
Trigger
… und vieles vieles mehr!!!!
• … auch abhängig vom DBMS und der SQL-Version
DBIS - SS2011
Herunterladen