Datenbanken I

Werbung
Datenbanken I Zusammenfassung
Datenbanken I
Views
Verwendung
Ein View kapselt eine bestimmte Implementierung.
Ein zentral erstellter View kann bei Schemaänderungen angepasst werden.
Häufig verwendete identische Abfragen werden einmal zentral durch einen View definiert.
Syntax
CREATE VIEW TeleView AS
SELECT name, vorwahl, rufnummer
FROM Telephon
WHERE vorwahl = ‘0711’ OR lebensalter < 25
Primärschlüssel, Verweise und Itegritätsbedingungen
Begriffe
- Kardinalität (Die Anzahl der Zeilen einer Relation)
- Tupel (Eine einzelne Zeile einer Relation)
- Primary Key (ermöglicht die eindeutige Identifikation eines Tupels)
- Domäne (der Wertebereich, den eine Spalte einer Relation annehmen kann) Beispiel, die
Domäne der Wochentage {Mo, Di, Mi, Do, Fr, Sa, So}
Relationen
Als Ausgangspunkt betrachten wir zwei Mengen M={Tisch, Stuhl, Vase} und F={rot, gelb} und bilden
aus diesen die Menge aller Kombinationen, die so genannte Kreuzmenge:
K=M×F={(Tisch, rot),(Stuhl, rot),(Vase, rot),(Tisch, gelb),(Stuhl, gelb),(Vase, gelb)}
Diese Kreuzmenge K darf Menge genannt werden, da alle Wertepaare untereinander verschieden
sind.
Wir können nun eine Teilmenge R der Kreuzmenge betrachten, z.B.:
R={(Stuhl, rot),(Tisch, rot),(Tisch, gelb)} K
Eine solche Teilmenge R der Kreuzmenge K heißt in der Mengenlehre eine Relation zwischen den
Mengen M und F.
Eine Relation ist eine logisch zusamenhängende Einheiten von Informationen. Bestehend aus einer
festen Anzahl von Attributen (Spalten) und einer variablen Anzahl von Tupeln (Datensätzen)
Eigenschaften
- keine doppelten Tupel (d.h. Tupel, bei denen alle Attribute gleichen Inhalt haben)
- die Reihenfolge, in der die Tupel in der Relation gespeichert sind, ist nich definiert
- die Reihenfolge der Attribute in der Relation ist nicht definiert (ansprechen nur mit dem
Namen des Attributs)
- Die Werte eines Attributs unterliegen einer Domäne. Und sind deshalb atomar.Ist diese
Eigenschaft erfüllt entspricht die DB der 1. Normalform
Candidate Key
Der C. ist ein eindeutiger Schlüssel, dass heisst, dass alle Werte der Attributmenge, die den Schlüssel
bilden eindeutig (unique) sind. Ausserdem dürfen keine überflüssigen Attribute Teil des Schlüssels
sein, jedes A ist für die Eindeutigkeit notwendig. Jede Relation hat mindestens einen Candidate Key
(wegen der Eigenschaft keine doppelten Tupel) Candidate Keys werden in SQL über das
Schlüsselwort UNIQUE definiert.
Primary Keys
Der P. dient dazu, ein Tupel eindeutig zu identifizieren. Primary Keys sind also Candidate Keys. PK
dürfen keine Nullwerte enthalten. Der PK ist quasi die Adresse des Tupels.
1/7
ver. 0.1| mh066
Datenbanken I Zusammenfassung
Foreign Key
Ein Schlüssel wird Foreign Key gennant, wenn sein Wertebereich in einer anderen Relation definiert
wird. FK dienen dazu, unterschiedliche Relationen in Beziehung zu setzen.
Relationen und Schemata
Definition
Es gibt Relationen die syntaktisch voneinander abhängig sind z.B. die Relationen Lieferung,
Lieferanten, Teile
Tritt nun ein Fehler beim Erstellen einer der Relationen auf, so bedeutet dies, eine teilweise,
unvollständige Umsetzung des Konzepts. Dieser Zustand ist prinzipiell unbefriedigend, da die
Relationen sogar konzeptionell eine Einheit bilden.
Aus diesem Grund gibt es die Möglichkeit einer Schemadefinition , in welcher entweder alle am
Schema beteiligten Relationen erstellt werden, oder überhaupt keine.
Syntax
CREATE SCHEMA AUTHORIZATION dbo
CREATE TABLE Teil(
tid CHAR(4) PRIMARY KEY
,tname CHAR(20)
,farbe CHAR(15)
,gewicht NUMERIC(6)
,stadt CHAR(25)
)
CREATE TABLE Lieferanten(
lid CHARR(4) PRIMARY KEY
,lname CHAR(20)
,status NUMERIC(3)
,stadt CHAR(25)
)
CREATE TABLE Lieferung(
lsid NUMERIC(5) PRIMARY KEY
,tid CHAR(4)
,lid CHAR(4)
,menge NUMERIC(6)
,UNIQUE(tid,lid)
,FOREIGN KEY (tid) REFERENCES Teil
,FOREIGN KEY (lid) REFERENCES Lieferanten
)
Erzwingen von Integritätsregeln
CHECK Constraint
Beispielsweise soll die Lieferantenidentität lid im Lieferanten/Teile Beispiel stets mit einem "L"
beginnen und danach von einer Ziffer gefolgt werden, Rest beliebig (%). Wir erzielen dies mittels einer
CHECK Klausel
Syntax
CREATE TABLE Namen(
name CHAR(5)
,CHECK (name LIKE "L[0-9]%")
)
CREATE TABLE Blume(
name CHAR(10)
,farbe CHAR(10)
,CHECK (farbe IN ('rot','gelb','blau','grün'))
)
2/7
ver. 0.1| mh066
Datenbanken I Zusammenfassung
Garantieren der referenziellen Integrität
Bislang haben wir über Datenbankzustände mit referentieller Integrität gesprochen. Es stellt sich die
Frage, wie diese bei allgemeinen Operationen wie update, insert und delete zu garantieren ist.
RESTRICT
Die Löschoperation wird auf diejenigen Datensätze begrenzt, für welche keine
referenzierenden Foreign Keys in anderen Relationen existieren. In unserem Beispiel kann die
Lieferung 1 nicht gelöscht werden.
CASCADE
Die Löschoperation planzt sich auf alle Datensätze in referenzierenden Relationen mit
passenden Foreign Keys fort. In unserem Beispiel werden die Lieferung 1 und 10 ebenfalls
gelöscht.
Operationen in SQL
Selektion durch eine Indexmenge
Eine weitere Möglichkeit zur Bildung eines logischen Ausdrucks ist die Bedingung, dass ein Attribut in
einer Menge von Werten enthalten ist. Die Menge ist in diesem Beispiel {0711, 0221}:
Syntax
SELECT *
FROM Telephon
WHERE vorwahl IN ('0711','0221')
Subqueries
Definition
Dabei wird die im SELECT Zweig enthaltene Aufzählung ersetzt durch eine Abfrage, deren Ergebnis
aus einer Relation mit einem einzigen Attribut besteht.
Bedingung für Subqueries
- Das Ergebnis der "inneren" Abfrage darf nur aus genau einer Spalte bestehen.
- Der Datentyp des Ergebnisses der "inneren" Abfrage muss zum Typ des Attributs im WHERE Clause
der "äußeren" Abfrage passen.
Syntax
SELECT *
FROM Telephon
WHERE vorwahl IN (
SELECT vorwahl
FROM Stadtvorwahl
WHERE bundesland = 'BaWü'
)
Reguläre Ausdrücke
Die Sprache SQL erlaubt über das Schlüsselwort LIKE die Einbindung von Suchmustern. Reguläre
Ausdrücke können auch in CHECK CONSTRAINTS von CREATE TABLE Anweisungen auftreten
SELECT *
FROM Orte
WHERE name LIKE '[0-9][0-9][0-9][0-9] [A-Z]%'
Automatische Vergabe von Zählern
Syntax
CREATE SCHEMA AUTHORIZATION dbo
CREATE TABLE Rechnung(
rechNr NUMERIC(5) IDENTITY PRIMARY KEY
,name CHAR(16)
,datum DATETIME
)
3/7
-- Automatische Vergabe --
ver. 0.1| mh066
Datenbanken I Zusammenfassung
Aggregatfunktionen
Funktion und Syntax
AVG (Durchschnitt)
MIN (Minimum)
MAX (Maximum)
COUNT (Zähe Stand)
MIN (Zähle Alle)
SELECT
SELECT
SELECT
SELECT
SELECT
AVG(stand) AS Durchschnitt FROM Konto
MIN(stand) AS Minimum FROM Konto
MAX(stand) AS Maximum FROM Konto
COUNT(stand) AS non_null_stand FROM Konto
COUNT(*) AS selected_lines FROM Konto
Die Verwendung des Schlüsselwortes DISTINCT führt zu einer Eliminierung doppelt vorhandener
Werte vor der Auswertung der jeweiligen Aggregatfunktion!
Benutzerdefinierte Datentypen
Erstellen eines Benutzerdefinierten Datentyps über stored procedures:
Syntax:
EXECUTE sp_addtype POSITIONSNUMMER, 'NUMERIC(5)', 'IDENTITY'
EXECUTE sp_addtype BEZEICHNUNG, 'CHAR(20)'
EXECUTE sp_addtype GEWICHT, 'NUMERIC(5)'
Unter Verwendung der zuvor definierten Datentypen kann nun eine Relation erstellt werden:
CREATE TABLE Lieferung(
posNr POSITIONSNUMMER
,bezeichnung BEZEICHNUNG
,gewicht GEWICHT
)
Löschen von Benutzerdefinierten Datentypen über sp_droptype GEWICHT
Das Entity-Relationship Modell
Weak Entities
Weak Entities sind nur identifizierbar durch ihre Beziehung zu einem "Besitzer". Wir betrachten
als Beispiel Familien mit Kindern: Die Kinder haben als Attribute den Vornamen und das
Geburtsdatum. Kinder verschiedener Eltern können in allen Attributen übereinstimmen.
Für die Eltern kann ein Elternteil als identifizierender Stellvertreter verwendet werden, im
gewählten Beispiel der Vater. Ein Kind wird nun indirekt durch seinen Bezug zum Vater und
dessen eindeutigem Merkmal svNr identifiziert.
Weak Entities haben immer eine totale Teilnahme in einer Relation zu ihrer "Besitzer"-Entity. Die
4/7
ver. 0.1| mh066
Datenbanken I Zusammenfassung
Umkehrung gilt nicht: Ein Führerschein hat ebenfalls eine totale Teilnahme in der Relation zu
seinem Besitzer. Dennoch kann der Führerschein unabhängig von seinem Besitzer durch die
Seriennummer identifiziert werden und ist daher keine Weak Entity.
Repräsentation
1. Fall
Dies ist der einfachste Fall: Wir bilden auf der "n" Seite einen Foreign Key auf den Primärschlüssel der
"1" Seite:
CREATE SCHEMA AUTHORIZATION dbo
CREATE TABLE Studiengang(
bezeichnung CHAR(10) PRIMARY KEY
,dauer NUMERIC(5)
)
CREATE TABLE Student(
matrNr NUMERIC(10) PRIMARY KEY
,name CHAR(10)
,studiert CHAR(10) REFERENCES Studiengang
)
5/7
-- Matrikel-Nr. --- Familienname --- Fachrichtung --
ver. 0.1| mh066
Datenbanken I Zusammenfassung
2. Fall
Wir nehmen an, ein Student dürfte auch eingeschrieben sein, wenn er keinem Studiengang angehört.
Ein Student kann also einem Studiengang zugeordnet sein oder nicht. Im letzteren Fall hat ein
Studentensatz keinen Verweis auf einen Studiengang. Wir können dies in SQL abbilden, indem wir für
den Verweis NULL Werte zulassen:
CREATE TABLE Student(
svNr CHAR(10) PRIMARY KEY
,name CHAR(10)
,studiert CHAR(10) NULL
REFERENCES Studiengang
)
-- Sozialvers.-Nr --- Familienname --- Fachrichtung --
3.Fall
Interessant ist nun der Fall, wenn wir erlauben, dass jeder Student in mehreren Studiengängen
eingeschrieben sein kann, wir haben dann den Fall einer n zu m Relation.
CREATE SCHEMA AUTHORIZATION dbo
6/7
ver. 0.1| mh066
Datenbanken I Zusammenfassung
CREATE TABLE Studiengang(
bezeichnung CHAR(10) PRIMARY
,dauer NUMERIC(5)
)
CREATE TABLE Student(
svNr NUMERIC(10) PRIMARY KEY
,name CHAR(10)
)
CREATE TABLE Matrikel(
studiert CHAR(10) REFERENCES
,svnr NUMERIC(10) REFERENCES
,PRIMARY KEY(studiert, svnr)
Studiengang -)
KEY
-- Sozialvers.-Nr --- Familienname -Studiengang
Student
-- Max. ein Eintrag pro Student u.
Normalformen
Informelle Regeln zum Erzielen eins guten Datenbankdesigns
- Bedeutung der Attribute
- Vermeiden redundanter Informationen
- Vermeiden von NULL Werten
Regel zur Normalisierung von Datenbanken
Nicht Normalisierte Datenbank Es exisitieren Wiederholungsfelder
Erste Normalform ist erfüllt
„Felder, die wiederholt auftreten in eine gesonderte Tabelle
auslagern“.
Zweite Normalform ist erfüllt
„Felder aus 1.NF-Tabelle entfernen, die vom zusammengesetzten
Primärschlüssel funktional abhängig sind“.
Dritte Normalform ist erfüllt
„Felder aus 2.NF-Tabellen entfernen, die von anderen NichtSchlüsselfelder funktional abhängig sind. Informationsneutrale
Sortierbarkeit sicherstellen“.
Eine Normalisierte Datenbank ist Redundanzfrei!
7/7
ver. 0.1| mh066
Herunterladen