Datenbanken - home.hs

Werbung
Datenbanken
1
Vorlesung IT-Management
Teilbereich Datenbanken
SS 2007
Prof.Dr.Kühn
Die Vorlesungskopien sollen die Studierenden entlasten – sie enthalten nicht den gesamten klausurrelevanten Stoff und ersetzen nicht den Besuch der
Vorlesung
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
2
Datenbanken: Überblick
Datenbanken bestehen aus einer Ansammlung vieler verschiedener Daten,
auf die über ein Verwaltungsprogramm zugegriffen werden kann.
Unterscheidungskriterien:
‹ Was wird gespeichert
‹ formatierte Daten
‹ unformatierte Daten
‹ Für welchen Zweck
‹ operativen Einsatz: OLTP
‹ Managementinformation: OLAP
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
3
1.4 Typen von Datenbanksystemen
¾ Hierarchische DBMS: seit ca.1960
¾ Netzwerk-DBMS: seit ca.1970
¾ Relationale DBMS:
seit ca.1980
¾ Objektorientierte DBMS:
seit ca.1990
Gemeinsamkeiten
• Speicherung von Daten
• Verwaltung v. Beziehungen
• Strukturänderungen
möglich
• alles vom DBMS verwaltet
Prof.Dr.Kühn /Fb W
Unterschiede
• Welche Datentypen
• wie Beziehungen hergestellt werden
• Flexibilität bzgl. Strukturänderungen
• Effizienz bei vorgesehenen Abfragen
• Flexibilität bzgl. ad-hoc Abfragen
• Unterstützung objektorientierter
Konzepte
2007
IMM-Kap1-SQL
Datenbanken
4
SQL
SQL ist eine deskriptive, mengenorientierte Sprache und enthält alle
Komponenten, die für die Einrichtung einer Datenbank, die
Datenmanipulation und den Datenbankbetrieb nötig sind
Normung von SQL:
• 1982: Normungsbeginn
• 1986: erster Standard (SQL/86).
• 1989: eine Revision (SQL/89), wichtigste Neuerung: Elemente zur Unterstützung
der Datenbankintegrität.
• 1992: weitere Standardisierungsrichtlinien (SQL/92 oder SQL2);
Hauptthema: Constraint-Bearbeitung, Transaktionsverarbeitung
Erstmals gewisse Normung von embedded-SQL
• 1999: SQL3: Erweiterung in Richtung Objektorientierung.
Die Anbieter objektrelationaler Systeme (s. dort) beziehen sich alle auf diesen
neuen Standard, allerdings sind auch herstellerspezifische Lösungen üblich.
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
5
Relationenalgebra:
Die Basisbefehle zur Manipulation relationaler Datenbanken
Tabellenoperationen
Mengenoperationen
• Selektion von Zeilen
• Vereinigung
σ[Auswahlbedingung] (Tabelle)
• Projektion auf Spalten
π[Attributliste] (Tabelle)
• Verbund von Tabellen (Join)
M1 U M2
• Durchschnitt
M1 ∩ M2
•
Differenz
Tab1
M1 - M2
Tab2 [Verbundbedingung]
• Zuordnung von Tabellen
• Produkt
Tab1=Tab2
M1 x M2
Die Relationenalgebra arbeitet mengenorientiert und prozedural
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
6
Relationenalgebra Beispiel-1:
Relationen R1, R2, R3
R1
A
a1
a1
a2
B
b1
b1
b2
C
c1
c2
c2
R2 C D
c2 d1
c3 d2
R3 A B C
a2 b2 c1
a2 b2 c2
Anwendung von Mengenoperationen
Vereinigung A
R1 U R3:
a1
E= R1 U R3 a1
a2
a2
Prof.Dr.Kühn /Fb W
B C
b1
b1
b2
b2
c1
c2
c2
c1
Durchschnitt A B C
R1 ∩ R3
a2 b2 c2
E= R1 ∩ R3
2007
Differenz
R1 - R3
A
B
C
a1 b1 c1
E=R1 - R3 a1 b1 c2
IMM-Kap1-SQL
Datenbanken
7
Kartesisches
Produkt R1 x R2
E= R1 x R2
A
B
C
C
D
a1
a1
a1
a1
a2
a2
b1
b1
b1
b1
b2
b2
c1
c1
c2
c2
c2
c2
c2
c3
c2
c3
c2
c3
d1
d2
d1
d2
d1
d2
Anwendung von Tabellenoperationen
Selektion in R1 mit
C=c2
E= σ[C=c2] (R1)
A
B
C
a1
a2
b1
b2
c2
c2
Join von R1 mit R2 mit
Bedingung (inner Join)
(C in R1:= C in R2)
Projektion in R1
bzgl. A und B
E= π[A,B] (R1)
A B C
a1 b1 c2
a2 b2 c2
Prof.Dr.Kühn /Fb W
C
c2
c2
D
d1
d1
E=R1
A
B
a1
a2
b1
b2
R2 [R1.C=R2.C]
2007
IMM-Kap1-SQL
Datenbanken
8
Beispiel 2
Relation Rechnung
RechNr
0081
0082
0083
0084
Relation Kunden
KdNr Rechdat RechBetrag
2133 1.7.02
10600
7533 23.7.02
28400
2133 4.8.02
1000
8511 5.8.02
20900
KdNr
2133
3557
7533
8511
Relation Vertreter
V-Nr
211
115
224
V-Name
Berger
Adam
Zeiss
Relation
liefnr
L1
L2
L3
L4
L5
Lieferant
liefname
Alu-GmbH
Bike- GmbH
Cross- GmbH
Wichtel&Sachs
Rad AG
Prof.Dr.Kühn /Fb W
KdName
Meier
Müller
Schmitz
Schneider
Ort
Bayreuth
Bonn
Köln
Bonn
V-Nr
224
115
115
115
Relation Lieferprogramm
Bezirk
Nord
Mitte
Süd
Ums-Sum
74 800
127 900
91750
2007
liefnr
L1
L1
L2
L2
L2
L3
L3
L4
teilenr
0009
0010
0009
0010
0011
0003
0004
0012
IMM-Kap1-SQL
Datenbanken
9
SQL:
TCL:
GRANT,
REVOKE,
DDL:
CREATE
DML:
DML:
INSERT
SELECT
UPDATE
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
10
SELECT [DISTINCT] < * | Liste der Attribute, evt. aus
verschiedenen Relationen>
FROM <Liste der benötigten Relationen>
[WHERE <Bedingungen auf Zeilen>]
[GROUP BY <Gruppenangabe>]
[HAVING <Bedingungen auf Gruppen>]
[ORDER BY <Sortierspalten> [asc | desc]] ;
Das Ergebnis eines SELECT-Befehls ist immer eine unbenannte und temporäre
Tabelle, die i.a. auf dem Bildschirm angezeigt wird.
Bedeutung der Klammern (die Klammern werden NICHT eingegeben)
[…] : Inhalt kann weggelassen werden;
<…> : Inhalt vom Benutzer sinngemäß anzugeben
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
Basisoperationen der
Relationenalgebra
1. Vereinigung v. Mengen
2. Durchschnitt v. Mengen
3. Differenz v. Mengen
4. Kartesisches Produkt
5. Selektion
6. Projektion
7. Join
Prof.Dr.Kühn /Fb W
11
Realisierung in SQL
<Menge1 > UNION < Menge2> ;
<Menge1 > INTERSECT < Menge2 > ;
<Menge1 > MINUS < Menge2 > ;
SELECT * FROM <Tabelle1>,
keine Verbundbedingung
<Tabelle2>;
SELECT * FROM <Tabelle> WHERE
<Bedingung>;
SELECT <Attributliste> FROM
<Tabelle>;
SELECT * FROM
<Tabelle1>, <Tabelle2>
WHERE <Verbundbedingung>;
2007
IMM-Kap1-SQL
Datenbanken
12
Wie lauten die folgenden Aktionen in SQL (jeweils 1 Befehl)
1. Projektion von Rechnung auf KdNr, RechBetrag
2. Selektion in Rechnung mit Rechbetrag>20 000
3. Join von Rechnung und Kunde mitRechnung.KdNr = Kunde.KdNr
4. Gesucht sind Name und Wohnort der Kunden die vom Vertreter des
Bezirks ‚Mitte’ betreut werden
5. Gesucht sind Teilenummern und Name der Lieferanten, die Teile mit den
Nummern 9 bis 11 liefern.
6. Gesucht ist eine Liste mit allen Namen (Vertreter und Kunden), die in
der Datenbank vorkommen. Formulierung mit Mengenoperator
7. Gibt es Namen, die nur bei Kunden, aber nicht bei Vertretern
vorkommen
8. Gibt es Namen, die in beiden Tabellen vorkommen
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
13
Weitere Beispiele zu SELECT
select * from Kunde where KdName IS NULL;
select * from Kunde where KdName = ‘ ‘;
select * from Kunde where KdName LIKE ‘M%’;
select * from Kunde where KdName LIKE ‘Me_er’;
select * from Kunde where UPPER(KdName)=’MEIER’;
select liefnr from lieferprogramm where teilenr in (3,9,10);
select KdName, VName from Kunde K, Vertreter V where V.Vnr=K.VNr
and Bezirk=’West’;
select distinct Ort from Kunde;
select count(KdNr) “Anzahl Kunden” from Kunde;
select count(*) “Anzahl Kunden” from Kunde;
select VNr, count(VNr) from Kunde group by VNr;
select sum(UmsSum) from Vertreter;
select VNr, sum(UmsSum) from Vertreter group by VNr;
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
14
Noch DML: SQL-Befehle zur Datenmanipulation
INSERT: neue Zeilen in vorhandene Tabellen einfügen
a) INSERT INTO <Tabname>
VALUES <Auflisten aller Attributwerte>;
INSERT INTO Vertreter VALUES (117,‘Becker’,’Mitte’,0);
b) INSERT INTO <Tabname (Attributnamen) >
VALUES < zugehörige Attributwerte>;
INSERT INTO Vertreter (VName, VNr, UmsSum, Bezirk)
VALUES ( ‘Becker’,117, 0,‘Mitte’);
c) INSERT INTO <Tabname >
SELECT <Auswahlbedingung>;
INSERT INTO Vertreter
SELECT * FROM Vertreter_alt WHERE Bezirk=‘Nord’;
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
15
UPDATE: einzelne Attributwerte in vorhandenen Tabellen
ändern
UPDATE <Tabname>
SET <Wertezuordnung zu den Attributen>
WHERE <Bedingung> ;
UPDATE Vertreter SET VName=‘Becker’ WHERE VNr=115;
UPDATE Vertreter SET Bezirk =
(SELECT Bezirk FROM Vertreter WHERE VNr=224)
WHERE VNr=115;
UPDATE Kunde SET VNr=211;
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
16
DELETE: Zeilen aus Tabellen entfernen
DELETE FROM <Tabname> WHERE <Bedingung>;
DELETE FROM Kunde WHERE K-NR=7557;
DELETE FROM Kunde WHERE Ort=‘Karlsruhe’;
DELETE FROM Kunde WHERE VNr=115;
DELETE FROM KUNDE;
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
17
Befehle zur Definition und Änderung von Tabellen (DDL)
•
CREATE TABLE
Definieren einer Tabellenstruktur und evt. Festlegen von
Constraints
•
CREATE INDEX
Erzeugen einer Zugriffshilfe (Indextabelle)
•
ALTER TABLE
Ändern einer Tabelle (bzgl. der Struktur u./o. der Constraints)
•
DROP TABLE
Löschen einer Tabelle
•
CREATE VIEW
Definieren einer virtuellen Tabelle
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
18
CREATE TABLE <tabname>
( <Attr1 Typ1 [column constraint 1],
<Attr2 Typ2 [column constraint 2],
.... , [table constraint] );
a) Erstellen einer neuen Tabelle und Füllen mit Inhalten:
CREATE TABLE Vertreter (VNr Number(3), VName Varchar2(30),
Bezirk Varchar2(30), UmsSum Number(7) );
INSERT INTO Vertreter Values (250,’Kaiser’,’B111’,0);
b) Kopieren einer anderen Tabelle: (Aufbau und Inhalt; auch teilweise)
(es gebe bereits eine gefüllte Tabelle Vertrieb (MANr,Name,Bezirk,UmsSum)
CREATE TABLE Vertreter AS SELECT * FROM Vertrieb;
CREATE TABLE Vertreter (VNr,VName)
AS SELECT MANr,Name FROM Vertrieb;
CREATE TABLE Vertreter (VNr,VName)
AS SELECT MANr,Name FROM Vertrieb WHERE UmsSum>10000;
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
19
mögliche Datentypen bei Oracle: (vordefiniert)
CHAR (n)
feste Länge, max 2000; default: n=1;
VARCHAR2(n)
VARCHAR(n)
variable Länge , n<=4000,
DATE
Datum; Standard: ‘Mon-TT-JJJJ’
LONG
CLOB
BLOB
NUMBER
alphanum, variabel, bis 4 Gbyte
character large object, bis 4 Gbyte
binary large object; bis 4 GByte
ganze Zahlen u. Dezimalzahlen; Speicherung wie
Eingabe
Speicherung als Ganzzahl
NUMBER(n)
NUMBER(n,0)
NUMBER(n,m)
Speicherung als Festkomma Dezimalzahl mit n
Stellen insgesamt, dabei m Nachkommastellen
u.a.
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
20
Beispiele (Quelle: Oracle Handbuch):
Specified As
Stored As
Actual Data
7456123.89
NUMBER
7456123.89
7456123.89
NUMBER(9)
7456124
7456123.89
NUMBER(9,2) 7456123.89
7456123.89
NUMBER(9,1) 7456123.9
7456123.89
NUMBER(6)
exceeds precision
7456123.89
NUMBER(7,-2) 7456100
.01234
NUMBER(4,5) .01234
.00012
NUMBER(4,5) .00012
.000127
NUMBER(4,5) .00013
.0000012
NUMBER(2,7) .0000012
.00000123
NUMBER(2,7) .0000012
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
21
Beispiel:
R1
Benutzer
1
R2
n
Ausleihe
1
BenNr, Name, Adresse,... ANr, RueckDat, VKennz,...
1
Buch
BuchNr, Titel,...
1. Minimaldefinition:
CREATE TABLE Buch (BuchNr Char(10), Titel Char(40), ....);
CREATE TABLE Benutzer
(BenNr Char(8), Name Char(20), Adresse Char(40));
CREATE TABLE Ausleihe
(ANr Number(5), RueckDat DATE, Vkennz Number(1),
BenNr Char(8), BuchNr Char(10));
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
22
Constraints (Randbedingungen)
Sie werden beim Erstellen der Tabellenstruktur vereinbart
(CREATE TABLE) , können aber auch nachträglich
hinzugefügt werden (ALTER TABLE).
Es gibt 2 Arten der Constraint-Formulierung:
♦ column constraint
column constraint:
<Spaltenname> <Typ> [CONSTRAINT <constraintname>]
<constraintart>
♦ table constraint:
[CONSTRAINT <constraintname> ] <constraintart>
(<Spaltennamename>)...;
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
23
mögliche Constraints:
• NULL / NOT NULL (nur column constraint);
• UNIQUE (column constraint oder table constraint)
Für ein UNIQUE-Attribut wird stets eine Indextabelle angelegt
• CHECK (nur column constraint)
Bedingung für den Wert eines Attributs
Beispiel:
CREATE TABLE Ausleihe
(Anr Number(5) NOT NULL,
….
Mahnung NUMBER(1) CHECK (Mahnung IN (1,2,3)),
.......);
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
24
• PRIMARY KEY (column constraint oder table constraint)
automatisch NOT NULL UNIQUE / pro Tabelle nur ein PK
Es wird stets eine Indextabelle angelegt
Der PK kann zusätzlich Fremdschlüsssel sein
• FOREIGN KEY (column constraint oder table constraint)
(„referential integrity constraint“); stellt eine Beziehung her,
die das DBMS überprüft.
Es ist erlaubt, daß der Fremdschlüssel und der Bezugsschlüssel
sich in derselben Tabelle befinden (Selbstbezug)
• ON DELETE CASCADE (Option b. foreign key constraint)
Legt fest, daß beim Löschen einer Tabellenzeile, auf die sich ein
„foreign key“ bezieht, alle Zeilen mit diesem Schlüsselwert in
der untergeordneten Tabelle ebenfalls gelöscht werden sollen
(gegebenenfalls rekursiv).
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
25
Beispiel-1:
CREATE TABLE Buch
(BuchNr CHAR(10) PRIMARY KEY, Titel CHAR(40),
AutorNr NUMBER(5) REFERENCES Autoren(PersNr));
oder
CREATE TABLE Buch
(BuchNr CHAR(10),
Titel CHAR(40),
AutorNr NUMBER(5),
PRIMARY KEY (BNr),
FOREIGN KEY (AutorNr) REFERENCES Autoren(PersNr));
CREATE TABLE Ausleihe
(Anr Number(5) CONSTRAINT Ausl_PK PRIMARY KEY,
RueckDat (DATE), Vkennz Char(2),
BenNr Char(8) REFERENCES Benutzer(BenNr) ON DELETE
CASCADE,
BuchNr CHAR(10) REFERENCES Buch (BuchNr));
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
26
Beispiel-2: (Formulierungen mit column constraints)
CREATE TABLE Vertreter (
VNr Number(3) PRIMARY KEY,
VName Varchar2(30) ,
Bezirk Varchar2(30) CHECK (Bezirk IN (’Nord’, ’Mitte’, ’Sued’)),
UmsSum Number(7) DEFAULT 0);
CREATE TABLE Kunde (
KdNr Number(4) UNIQUE NOT NULL,
KdName Varchar2(30) NOT NULL,
Ort Varchar2(30),
VNr Number(3) REFERENCES Vertreter(VNr) );
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
27
Beispiel-2: (Formulierungen mit table constraints)
CREATE TABLE Vertreter (
VNr Number(3), VName Varchar2(30) ,
Bezirk Varchar2(30), UmsSum Number(7) DEFAULT 0,
PRIMARY KEY (VNr),
CHECK (Bezirk IN (’Nord’, ’Mitte’, ’Sued’)) );
CREATE TABLE Kunde (
KdNr Number(4) NOT NULL, KdName Varchar2(30) NOT NULL,
Ort Varchar2(30), VNr Number(3),
UNIQUE (KdNr),
FOREIGN KEY (VNr) REFERENCES Vertreter(VNr));
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
28
Tabellen nachträglich verändern:
ALTER TABLE <tabname> ADD (<spaltenname spaltentyp>);
ALTER TABLE emp ADD (Beurteilung varchar2(50));
ALTER TABLE <tabname> DROP COLUMN <spaltenname>;
ALTER TABLE emp DROP COLUMN Beurteilung;
ALTER TABLE <tabname> MODIFY (<spaltenname neuer_spaltentyp>);
ALTER TABLE emp MODIFY (ename varchar2(50));
ALTER TABLE emp MODIFY (ename varchar2(30) NOT NULL);
ALTER TABLE <tabname> ADD <constrainttyp (<spaltenname>);
ALTER TABLE emp ADD CONSTRAINT emp_PK primary key (empno);
ALTER TABLE <tabname> [ENABLE | DISABLE] CONSTRAINT
<constraintname>;
ALTER TABLE emp DISABLE constraint emp_PK;
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
29
VIEWS (virtuelle Tabellen; Benutzersichten)
• VIEWS werden stets aus (einer oder mehreren) permanenten
Tabellen (Basistabellen) mit Hilfe eines SELECT-Befehls erzeugt.
• Sie erhalten einen Namen und werden über diesen Namen wie
Tabellen angesprochen und verwendet.
• In der Datenbank wird nicht die View, sondern der sie erzeugende
Select-Befehl gespeichert und bei jedem Aufruf der View neu
ausgeführt.
Bsp.:
CREATE VIEW Katalog AS SELECT BNr,Titel FROM Buch;
CREATE VIEW Mahnung AS
SELECT Name, Adresse, RueckDat, BNr FROM Benutzer,
Ausleihe
WHERE RueckDat < Sysdate-7 AND
Ausleihe.BenNr=Benutzer.BenNr;
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
30
Bzgl. SELECT-Befehlen besteht kein Unterschied in der Verwendung
von Tabellen bzw. Views
Unter bestimmten Bedingungen können auf eine View auch ändernde
DML-Befehle angewandt werden (insert, update, delete)
Dies ist nicht zulässig, wenn
- in der View „NOT NULL“-Spalten fehlen
- die View sog. „virtuelle Spalten“ (aus mehreren Basisspalten) enthält
- die View auf mehreren permanenten Tabellen basiert (s.Beispiel 2).
Views dienen 2 Zwecken:
1. Datenschutz und Datensicherheit.
2. Benutzungskomfort
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Datenbanken
31
Views und Tabellen:
CREATE VIEW Mahnung1 AS
SELECT Name, Adresse, RueckDat, BNr FROM Benutzer,
Ausleihe WHERE RueckDat < Sysdate-7 AND
Ausleihe.BenNr=Benutzer.BenNr;
SELECT * FROM Mahnung1
CREATE TABLE Mahnung2 AS
SELECT Name, Adresse, RueckDat, BNr FROM Benutzer,
Ausleihe WHERE RueckDat < Sysdate-7 AND
Ausleihe.BenNr=Benutzer.BenNr;
SELECT * FROM Mahnung2
Würden Sie die View Mahnung1 oder die Tabelle Mahnung2 erstellen?
Begründung?
Prof.Dr.Kühn /Fb W
2007
IMM-Kap1-SQL
Herunterladen