Datenbanken, Relationale Datenbanken, Datenbanksprache
Datenbanken
—> Selbständige, auf Dauer ausgelegte Datenorganisationen
—> Verwalten und strukturieren Datenbestände sicher und
flexibel
—> Nur Datenbankstruktur kenntnis reicht nicht aus, man muss auch SQL zum Löschen, Andern und Lesen können
Relationale Datenbanken = häufigste Form der
Datenspeicherung
Datenbanksprache = Schnittstelle zwischen Benutzer &
DBMS (Structured Query Language ), Standardisiert,
Implementierung je nach DBMS unterschiedlich
DBMS
DatenBankManagementSystem DBMS
—> Kern der Datenbank
—> Organisiert physikalische Speicherung und
Zugriffssteuerung von Daten
—> Hat alle zur Datenverwaltung notwendigen
Systemroutinen zum Suchen, Lesen & Schreiben
Typische Vertreter:
Oracle Database, IBM DB2, Microsoft SQL Server
Relation
Datensatz
Entität
Attribut
NULL Wert
Gesamte Tabelle
Teilmenge kartesischen Produkts
Tabellenzeile
Eigenständiger Datensatz, Geschäftsobjekt
Eigenschaft von Entität
kein Wert gespeicht
Die drei Schlüssel Arten?
Primärschlüssel - primary key
—> Idenzifizierer
- identifiziert Entität eindeutig
- keine zwei Entitäten mit gleichem Primärschlüssel geben
- darf niemals NULL sein
- (fachliche/ technische) ID darf alsAttribut tabellenweit nur 1x
vorkommen
Fremdschlüssel - foreign key
- referenziert auf Primarschlüssel einer anderen Tabelle
(!referenzielle Integrität)
Künstlicher Schlüssel - surrogate key
- zusätzlich hinzugefügtes Attribut, falls kein eindeutiger
Primarschlüssel vorhanden
- hat ausserhalb DB keine Bedeutung
Löschen
Löschen = kritische Operation
! Refrentielle Integrität sicherstellen
- alle verbleibende sind Datensätze fachlich konsistent (Attribute von Fremdschlüssel müssen auch als Attributwert eines Primarschlüssels vorhanden sein = auf existierende Entitäten verweisen)
Erhaltung referentieller Integrität
CASCADE = Änderungen übernehmen
SET NULL = Fremdschlüssel auf NULL
RESTRICT = Löschen, Änderungen an referenzierten Tabelle verbieten
NO ACTION = keine Änderungen an referenzierter Tabelle
SET DEFAULT = Rücksetzung auf Defaultwert
Grundlegender SQL Befehle
+ ohne Dublikate
SELECT spaltenname FROM tabellenname
(* falls alle spalten)
SELECT DISTINCT spaltenname FROM tabellenname (ohne Dublikate)
Verschachtelte Abfrage
Abfrage mit Anfangsbuchstabe M und anzahl Wortlänge zählen
Reihenfolge
Verschachtelt:
SELECT * FROM Tabelle WHERE Spalte Vergleichsoperator ( SELECT Unterabfrage);
SELECT * FROM tabelle WHERE spalte Like ‘M%’ AND LENGTH (name)= 5;
Reihenfolge: ASC - Aufsteigend (ascending) = default & DSC - Absteigend (descending)
SQL Sprachtypen
Data Manipulation Language (DML)
—> Erstellen, Lesen, Ändern Löschen von Daten in Tabellen
Lesen: Datensätze lesen: SELECT
Erstellen: Datensätze einfügen: INSERT INTRO
Andern: Vorhandene Datensätze ändern: UPDATE
LöschenDatensätze löschen: DELETE
Data Defintion Language (DDL)
—> Erstellen, Ändern der Tabellenstruktur
Erstellen: Tabelle erstellen: CREATE TABLE Tabellenname (Attribute
mit Datentypen)
Andern: Tabelle ändern: ALTER TABLE Tabellenname ADD (neuer
Attributname mit Datentyp)
Beziehungen verwalten: ALTER TABLE … ADD
CONSTRAINT
Tabelle löschen: DROP TABLE
Dateneinsichten erstellen: CREATE VIEW … AS
Transaction Control Language (TCL)
“Ganz oder gar nicht”
—> Transaktionsüberwachung: Mehrere Befehle sollen
zusammen oder nicht ausgeführt werden
—> Sorgt für unveränderten Datenbestand, wenn Operation
nicht vollständig ausgeführt wird (z.B. Harwarefehler,
Stromausfall)
Data Control Language (DCL)
—> Vewaltung von Zugriffsrechte
Logische Operatoren
Vergleichsoperatoren
Operatoren
NOT
OR
AND
=, !=, <(=), >(=)
BETWEEN
Name LIKE A%
Code IS (NOT) NULL
IN Entität
COUNT *
SUM Spalte
AVG Spalte
MAX Spalte
MIN Spalte
AS SpaltennameNeu
Datentypen in SQL
Datumsfunktion
Text
CHAR (n) = n Zeichen
VARCHAR (n) = variable, beschränkte Länge
TEXT = viele Zeichen
Zahlen
INTEGER/ INT = Ganze Zahlen 32 Bit
DECIMAL (n, m) = max. n gesamt und genau m Stellen nach Komma
REAL = Gleitkommzahlen 32 Bit
Datum
DATE YYYY-MM-DD
TIME HH:MM:SS
TIMESTAMP YYYY-MM-DD HH:MM:SS
BOOLEAN
VARBINARY (n) = binär mit var. Länge, max. n Zeichen
CURRENT_DATE YYYY:MM:DD
CURRENT_TIMESTAMP YYYY-MM-DD HH-MM-SS
Normalisierung und Normalform
Normalisierung = alle Datenbankregeln erfüllt (DB in Normalform bringen)
Weniger… Redundanz (dopplete Speicherung von Daten)
Anomalien (fehlerhafte Situationen) …beim Einfügen, Ändern, Löschen von Daten
1. Normalform
—> Jedes Attribut speichert genau einen Wert
—> Jeder Datensatz ist über Primärschlüssel identifizierbar
2. Normalform
—> Jedes Nichtschlüsselattribut ist voll abhängig vom gesamten zusammengesetzten Primärschlüssel, nicht nur einem Teil
—> Hat Primarschlüssel mind. 2 Attribute = müssen auch alle anderen vom gesamten Schlüssel abhängig sein
3. Normalform (optimum)
—> Jedes Nichtschlüsselattribut ist immer direkt vom Schlüsselattribut abhängig
—> Keine funktionalen Abhängigkeiten zwischen Attributen die nicht Primärschlüssel sind
Entity Relationship Modell
Entity Relationship Modell —> grafische Modellierung von Datenbanken durch Modellierungsformen:
• Chen-Notation
• Martin-Notation (Krähenfussnotation)
—> beschreiben neben Daten auch Strukturen mit Entitäten, Attributen und Beziehungen
• UML Klassendiagramm
—> (OO) beschreibt das Verhalten von Klassen, Beziehungen, Methoden
+ Verschiedene Werkzeuge zur Modellierung
Gibt: 1:1, 1:N, N:M Beziehungen
Single table
Joined Subclass Table
Table per Class
Single Table
Alle Klassen werden in einer Tabelle gespeichert.
Basisklasse hat eigene Tabelle, jede Unterklasse hat eigene Tabelle mit Fremdschlüssel
Jede Klasse (auch Basisklasse) hat eigene Tabelle
Verbundmenge
—> (inner) join innerer Verbund (übereinstimmende Zeilen)
—> natural join natürlicher Verbund (automatischer inner join)
—> left join linker Verbund (alle linken Zeilen)
—> right join rechter Verbund (alle rechten Zeilen)
SELECT spalte1, spalte2, spalte3
FROM tabelle1 INNER JOIN tabelle2
ON tabelle1.ID1=tabelle2.ID2;
Verbundttypen:
• INNER/LEFT/RIGHT JOIN mit ON
• INNER/LEFT/RIGHT JOIN mit USING
(natural join ohne)
INNER JOIN mit WHERE (Veraltet)
Mengenoperationen
Mengenoperatoren
SELECT spalten FROM tabelle1
UNION (dubplikatfrei) | UNION ALL (alle)
INTERSECT (Schnittmenge) | MINUS
SELECT spaltenliste FROM tabelle2
WHERE
GROUP BY
ORDER BY
Datenansichten
CREATE VIEW nameAnsicht AS
SELECT spalte FROM tabelle1 INNER JOIN tabelle2 USING (spaltenID)
(WHERE Verfuegbarkeit = ‘sofort’)
ORDER BY spalte;
X Aggregatsfunktion, Konstante, Ausdrücke
X JOIN, DISTINCT & GROUP BY
X Unterabfragen
—> bezieht sich nur auf Tabelle, keine Unterabfragen
Datenverlust
Neue Datensätze einfügen
Datenverlust vorbeugen = Bereits in Anwendung Datentypen prüfen (X float, double in int)
Neue Datensätze einfügen = INSERT INTO tabelle (spalte1, …, spalteN) VALUES (wert1, …, wertN)
Nicht angegebene Spalten:
AUTO_INCREMENT = DBMS erstellt Wert/ Einsatz als künstlicher Schlüssel
Default Wert = DBMS speichert Defaultwert | NULL-Wert = DBMS speichert NULL-Wert
—> Fehlermeldung = ansonsten wird INSERT ohne Änderung abgebrochen
Aktualisieren
Tabelle löschen
Ändern
Tabelle ändern
Spalte hinzufügen
Spalte löschen
Constraint hinzufügen
Constraint löschen
SELECT spalte FROM tabelle
optional:
?
UPDATE tabelle SET spalte1 = wert1, …, spalteN = wertN WHERE Auswahlbedingung;
DELETE FROM tabelle WHERE bedingung;
DROP TABLE Adresse
ALTER spaltendefintion
ALTER TABLE tabelle
ADD spaltendefinition
DROP spalten
ADD CONSTRAINT constraintdefiniton
DROP CONSTRAINT constraintname
WHERE (Bedingung)
GROUP BY (Einschränkung/ Berechnung (SUM, COUNT, AVG))
GROUP BY HAVING (Bedingung die von Gruppenelement erfüllt sein muss)
ORDER BY (Sortierung)
Typenumwandlung
Automatische Typumwandlung
—> implicit casting
—> Datentypen werden stillschweigend in kompatiblen Datentypen konvertiert (int => float)
—> Fehlerrisiko durch Datenverlust
Komplexe Typumwandlung
—> explicit casting
—> Datentypen werden in mehrstufigen Schritten umgewandelt (VARBINARY => INT)
—> Format/ Länderspezifische Unterschiede
Transaktionen
Nutzen
Eigenschaften
Transaktion starten
Transaktionen gewährleisten ACID Eigenschaften und vermeiden unvollständige Updates, Dateninkonsistenz und Datenverluste bei unerwarteten Fehlern
Eigenschaften von Transaktionen/ ACID Eigenschaften
Atomarität (atomicity): Transaktion ist atomar, wird nur
vollständig oder gar nicht ausgeführt, in keinem Fall
teilweise
Konsistenz (consistency): Transaktion erhält die Konsistenz
der DB, überführt Datenbestand von konsistenten Zustand
in einen anderen konsistenten Zustand
Isoliertheit (isolation): Transaktionen beeinflussen sich nicht
gegenseitig, parallele TA à nacheinander, gleichzeitige
Ausführung mehrerer TA und Mehrbenutzerbetrieb.
Dauerhaftigkeit (durability): Transaktion erfolgreich
abgeschlossen, sind die Aenderungen dauerhaft in DB
gespeichert.
Transaktionen steuern
START TRANSACTION;
SQL-Statement1;
…
SQL-StatementN;
COMMIT;
Isolationsphänomene
Isolationsphänomene = unerwünschte Effekte, beim gleichzeitigen Ausführen mehrerer Transaktionen auf denselben Datensatz
- Lost Update, Dirty Read, Non-repetable Read, Phantom Read
Isolationslevel
Isolationslevel = in DBMS eingestellter Kompromiss zwischen Datenkonsistenz und Mehrbenutzerbetrieb, Grad der
gleichzeitigen Ausführung wird gezielt konfiguriert
—> Read Uncomitted (auch ohne COMMIT wird gelesen) ist Niedrigstes Isolationslevel und erlaubt:
—> Read Comitted (nur lesen von COMMIT bestätigten Daten) vermeidet Dirty Read
—> Repetable Read (mehrfachlesen dennoch gleiche Daten) vermeidet Non Repeatable Read
—> Serialize (mehrfachlesen, immer gleihe Datenmenge) vermeidet Phantom Read und Lost Update
No SQL wenn:
NoSQL wenn
nicht relational
verteilte, horizontale Skalierbarkeit
einfache Datenreplikation, zur Unterstützung verteilter Architektur
(schwach) schemafrei
Basis ist Konsistenzmodell (Eventually Consistent & BASE, nicht ACID)
einfache API & Open Source
Gruppen von NoSQL Systemen
Key Value Systeme
—> Zu Schlüssel wird Key gespeichert
(Redis, Chrodless, Riak)
Document Stores
—> speichert Text als XML, JSON
(CouchDB, MongoDB)
Wide Column Stores
—> speichert Spalten- statt zeilenweise
(HBase, Cassandra, Amazon SimpleDB)
Graphdatenbanken
—> speichert Knoten und Kanten
(AllegroGraph, Neo4j)
Zuletzt geändertvor einem Monat