Allgemeines:
Eine Datenbank (DB) besteht aus beliebig vielen Tabellen, in denen logisch zusammenhängende Objekte (Daten) gespeichert sind.
Diese Objekte können reine Texte, Verknüpfungen oder Anweisungen sein.
Datenbanken findet man häufig im Bereich der dynamischen Webseiten, um Inhalte zu speichern.
Datenbank = DB (Data Base)
systematische, strukturierte Ansammlung von Daten
diese Daten stehen in einem sachlogischen Zusammenhang
Datenbankmanagementsystem = DBMS
Verwaltung und Nutzung der in der DB gespeicherten Daten
Datenbanksystem = DBS
Erstellung, Pflege und Verwaltung von einer oder mehreren Datenbanken (z.B. MySQL)
DB + DBMS
Datenbanksoftware
bezahlbar: Microsoft Access als Teil des Office-Pakets
kostenlos: OpenOfficeBase; XAMPP (webbasier, besteht u.a. aus Weboberfläche phpMyAdmin, Apache-Webserver und MySQL-Datenbankserver)
Relationale Datenbank
wichtigste Untergruppe der Datenbanken
besteht aus mindestens einer, meistens aus mehreren Tabellen (Relationen)
andere Datenbanken: hierarchische oder objektorientierte
Tabelle = Relation
Baustein der Relationalen Datenbank
besteht aus Datensätzen
kompakte Darstellung großer Datenmengen
sortierbar nach beliebigen Attributen
können nach vorgegebenen Kriterien gefiltert werden
können miteinander in Beziehung gesetzt werden
Datensatz = Tupel
Zeile einer Tabelle
ein Datensatz besteht aus mehreren Datenfeldern (z.B. Nname, Vname, E-Mail-Adresse)
Jeder Datensatz muss über einen Schlüssel eindeutig identifizierbar sein (z.B. Kundennummer)
Attribute
einzelne Zellen werden als Datenfelder bezeichnet
gleichartige Datenfelder sind spaltenweise angeordnet und als Attribute bezeichnet
jedes Attribut erhält einen Feldnamen (z.B. Nname)
Datentyp
jedem Attribut wird ein bestimmter Datentyp zugewiesen
INT (integer = ganze Zahlen) [TINYINT, SMALLINT, MEDIUMINT, BIGINT]
FLOAT, DOUBLE (Fließkommazahl)
DECIMAL (Dezimalzahlen)
CHAR (feste Speicherung z.B. CHAR(25) Reservierung für GENAU 25 Zeichen) [2^8 Zeichen]
VARCHAR (z.B. VARCHAR(25) speichert BIS ZU 25 Zeichen) [2^8 Zeichen]
BOOLEAN (Ja/Nein)
DATE (Datum)
TIME (Uhrzeit)
DATETIME (Kombination aus Datum und Uhrzeit YYYY-MM-DD HH:MM:SS)
TIMESTAMP (speichert die Zeit, zu der die Zeile begonnen wurde (falls nicht anders angegeben))
YEAR
BINARY (Binäre Daten z.B. Bilder)
TEXT (Zeichenketten) [BLOB, LONGTEXT, LONGBLOB]
Festlegung des Datentyps ist erforderlich zur weiteren Verarbeitung (z.B. Rechnen mit Zahlen, generieren von E-Mails mit Text, etc.)
Schlüssel
Jeder Datensatz muss eindeutig identifizierbar sein, daher wird in jeder Tabelle mindestens ein Schlüssel benötigt
über den Schlüssel wird der Zugriff beschleunigt
auto_increment = automatische Vergabe des Schlüsselwertes; d.h. doppelte Werte können nicht vorkommen
Verknüpfung von Tabellen miteinander erfolgt über Schlüssel
Primärschlüssel = Schlüssel zur Identifikation der Tupel der eigenen Tabelle; jede Tabelle kann nur einen Primärschlüssel enthalten
Fremdschlüssel = Verwendung eines Primärschlüssels in einer Tabelle, die selbst einen eigenen Primärschlüssel hat [Feldname in einer Tabelle, welcher eine Beziehung herstellt zu einem Schlüsselfeld einer anderen Tabelle]; die Verwendung mehrerer Fremdschlüssel ist möglich
Datenkategorien
Stammdaten = verändern sich nicht oder kaum (z.B. Name, Adresse, Produktbeschreibungen)
Bewegungsdaten = Daten, die sich häufig ändern (z.B. Inhalt des Warenkorbs)
Prozessdaten = Daten, die nicht in der Datenbank gespeichert werden (z.B. Alter einer Person; wird errechnet aus Systemzeit und Geburtsdatum)
Datenkonsistenz
jeder Datensatz muss eindeutig identifizierbar sein (konsistent lat. con = "zusammen" + sistere = "halten") [vgl. Fingerabdruck]
Primärschlüssel werden einmalig vergeben und auch nach löschen des Datensatzes nicht neu vergeben
Redundanzfreiheit
Redundanz = überflüssige oder mehrfach vorkommende, gleiche Informationen innerhalb verschiedener Datensätze (lat. redundare = "überlaufen, im Überfluss vorhanden sein")
Redundanzfreiheit = alle Daten werden nur ein einziges Mal erfasst und gespeichert
spart Speicherplatz und verhindert Probleme (Anomalien) bei späteren Änderungen
Sonstiges
Datensicherheit; um Datenverlust zu vermeiden, müssen Backups getätigt werden
Datenschutz
Multiuser-DB; Zugriffsmöglichkeit für mehrere Nutzer gleichzeitig
Reihenfolge der Datenerfassung ist unerheblich, die Daten organisieren und verwalten sich selbst
Aufbau digitaler Bild-, Text- oder Medienarchive
digitale Projektbearbeitung von der Datenerfassung bis zum fertigen Produkt
Print-Worflow
Personalisierung von Medienprodukten
E-Commerce-Lösungen, Webshops, CMS, Suchmaschinen, Foren
Lern-Management-Systeme (z.B. Moodle)
Soziale Netzwerke (z.B. Facebook)
Web-Enzyklopädien (z.B. Wikipedia)
Daten werden erfasst und gepflegt über Formulare
keine Kenntnisse über die Struktur der Daten nötig
bei der Datenerfassung erfolgen Überprüfungen auf Vollständigkeit und Korrektheit
fehlende Eingaben, leer gelassene Felder
falsche Eingaben (Buchstaben statt Ziffern, fehlendes @-Zeichen in der Mail-Adresse)
Rechtschreibprobleme (z.B. fehlende Großschreibung, Beginn eines Eintrags mit Leerzeichen)
der Datensatz wird erst akzeptiert, wenn er vollständig und fehlerfrei ist
Nicht kontrollierbar: wissentliche oder versehentliche Falscheingaben, Schreibfehler
= um Konsistenz und Redundanzfreiheit zu erreichen, werden Datensätze auf mehrere Tabellen verteilt; hierbei werden Normalformen unterschieden (bekannt: 5, relevant: 3)
Normalformen finden Anwendung bei Stamm- und Bewegungsdaten, NICHT bei Prozessdaten.
1. Normalform
Jedes Datenfeld enthält nur einen Eintrag (atomar = kleinster Wert, nicht weiter teilbar).
Achtung: Hausnummer und Straße gehören zusammen, PLZ und Ort gehören NICHT zusammen
keine Redundanzfreiheit
keine Datenkonsistenz
2. Normalform
Die Tabelle befindet sich in der 1. Normalform und alle Datenfelder sind von einem Schlüssel funktional abhängig.
die Tabelle wird zur Reduktion von Redundanzen in mehrere Tabellen zerlegt
z.B. wird jeder Produktnummer genau ein Produkt zugeordnet
keine Redundanzfreiheit
3. Normalform
Die Tabelle befindet sich in der 2. Normalform und alle Datenfelder, die keine Schlüssel sind, sind nicht funktional abhängig.
Beseitigung der letzten Redundanzen
Nachteil: Verschlechterung der Lesbarkeit mit jeder hinzugekommenen Tabelle, daher wird eine DBMS benötigt, die sich um die Organisation und Verwaltung kümmert
= Entwurfsverfahren, um bereits beim Datenbankentwurf dafür zu sorgen, dass sich eine konsistente und redundanzfreie Datenbank ergibt.
Die Chen-Notation verwendet drei grafische Elemente: Rechteck (= Entitätstyp), Raute (= Beziehung) und Ellipse (= Attribut)
Entitätstyp: Objekte, denen Informationen zugeordnet werden können (z.B. Produkt, Kunde)
Beziehung: Beziehungen, die zwischen Entitäten hergestellt werden (z.B. Kunde kauft Produkt)
Attribut: jede Entität hat bestimmte Eigenschaften (z.B. ein Kunde hat einen Namen)
Arten von Beziehungen
1:1-Beziehung
einer Entität ist höchstens eine andere Entität zugeordnet
Kunde kauft Produkt
1:n-Beziehung
einer Entität stehen keine, eine oder mehrere Entitäten gegenüber
Kunde kauft mehrere Produkte; der Kunde kann aber auch nur ein Produkt kaufen oder gar keins, aber es ist trotzdem eine mögliche 1:n-Beziehung
m:n-Beziehung
auf beiden Seiten stehen mehrere Entitäten in Beziehung zueinander
mehrere Kunden können mehrere Produkte kaufen
Problem bei einer m:n-Beziehung:
keine eindeutige Beziehung zwischen zwei Tabellen herstellbar
müssen durch Ergänzen weiterer Tabellen aufgelöst werden (z.B. Kunde-Produkt-Tabelle, die auflistet, welcher Kunde welches Produkt kauft)
aus jedem Entitätstyp entsteht eine Tabelle (Tabelle Kunde)
aus den Attributen werden die Tabellenspalten; evtl. werden weitere Spalten ergänzt (Kundendaten)
für die Beziehungen werden Primärschlüssel (Entität Kunde) und Fremdschlüssel (Entität Produkt) miteinander verbunden
Beispiel: ein Kunde kann mehrere Produkte kaufen, er erteilt mehrere Aufträge mit den dazugehörigen Auftragsnummern, jedes Produkt mit den dazugehörigen Produktnummern kann von mehreren Kunden gekauft werden --> Eindeutigkeit ergibt sich erst aus einer Kombination von Auftrags- und Produktnummer = zusammengesetzter Schlüssel
das DBS muss sicherstellen, dass Beziehungen zwischen Tabellen nicht zu Fehlern führen
Verhinderung von widersprüchlichen oder fehlerhaften Daten
Beispiel: ein Kunde ist zwar mit Kundendaten angelegt, hat aber bisher nichts bestellt; dieser Kunde kann gelöscht werden; ein Kunde, der bereits bestellt hat, darf nicht gelöscht werden (Fehler in der Auftragstabelle)
Structured Query Language
Erstellen von Datenbanken und Tabellen
Eingeben, Ändern und Löschen von Datensätzen
Abfragen (engl. Query) von Daten nach gewünschten Kriterien
ISO-standardisiert und plattformunabhängig
heutige DB-Software ermöglicht Zugriffe auf DB auch ohne SQL-Kenntnisse
not null → nicht leer; hier muss immer ein Eintrag erfolgen
auto_increment → der Wert wird automatisch vergeben und hochgezählt; eine doppelte Vergabe ist dadurch nicht möglich
CREATE DATABASE Tabelle → erstellt eine neue Datenbank
ALTER TABLE Tabelle → Verändern einer Tabelle
DROP TABLE Tabelle → Löschen einer Tabelle
CREATE DATABASE name → erstellt eine neue Datenbank
INSERT INTO Tabelle → Datensatz eingeben
INSERT INTO Tabelle
[(Spalte1 [, Spalte2, …])]
VALUES (Ausdruck | Default)[,(...),(...)];
INSERT INTO Kunden
(Firma, Straße)
VALUES („Winkler“, „Hauptstraße 23“);
DELETE FROM Tabelle → Datensatz Löschen
DELETE FROM Tabelle
WHERE Bedingungen
DELETE FROM Kunden
WHERE Knr = 5;
SELECT Spalten → Abfrage eines bestimmten Datensatzes
SELECT Spalten
FROM Tabelle
[WHERE Bedingungen]
[ORDER BY Sortierspalten]
[LIMIT Limits];
SELECT Firma, Straße
FROM Kunden
WHERE Firma
= „Mayer“;
SELECT *
FROM Kunden
ORDER BY Plz;
UPDATE Tabelle → Ändert Datensätze
UPDATE Tabelle
SET Spalte1 = Ausdruck1 [, Spalte2 = Ausdruck2]
[WHERE Bedingung];
UPDATE Kunden
SET Straße = „Gartenstraße 5“,
Plz = „77933“
Ort = „Lahr“
WHERE Knr = 5;
Fileserver-System
Zugriffe auf eine Datenbankdatei erfolgen direkt
clientseitig
Nachteil: die Performance der Datenbank sinkt ab einer hohen Benutzerzahl
daher sind die Fileserver-Systeme nur für kleinere und mittlere Datenbanksysteme empfehlenswert und ausreichend
Client-Server-System
ODBC = Open Database Connectivity
Verbindung zwischen Datenbank-Client und Datenbank-Server
Client --> ODBC-Schnittstelle --> Server/Datenbank
nutzt die Abfragesprache SQL
Datenbankanwendungsschnittstelle (API) der Datenbankabfragesprache SQL
serverseitige Auswertung
bessere Performance und geringe Netzbelastung, daher für sehr große Datenbanken mit hoher Benutzeranzahl geeignet
Zugriff auch über Skriptsprache möglich
Aufgaben von Datenbanksystemen DBS
Datenbankabfragen bearbeiten
Datensicherheit
Datenschutz
Multiuser-DB (Synchonisation von mehreren gleichzeitigen Zugriffen)
Werkzeuge für Datenbankentwürfe
"Assistenten" für Berichte, Formulare und Abfragen
Datenexport
drei große Systeme: DB2 von IBM, Microsoft SQL-Server und Oracle-Database
treten in relationalen Datenbanken auf
können durch nicht normalisierte bzw. denormalisierte Datenstrukturen entstehen
führen zu Inkonsistenzen
Änderungs-Anomalien
Änderungen führen häufig zu Fehlern, wenn nicht alle Datensätze gleichzeitig geändert werden
Lösch-Anomalien
entstehen, wenn durch das Löschen eines Datensatzes mehr Informationen als erwünscht verloren gehen
Einfüge-Anomalien
Teile des Datensatzes gehen verloren, da z.B. der Datentyp nicht übereinstimmt
repräsentiert sätmliche möglichen Kombinationen aller Zeilen zweier oder mehrerer Tabellen
erzeugt aus gegebenen Mengen eine neue Menge
jede Relation ist eine Teilmenge eines kartesischen Produktes
besteht aus der Menge aller Tupel, die Reihenfolge der Mengen und der entsprechenden Elemente ist fest vorgegeben
In der Datenbankentwicklung gibt es zwei grundsätzliche Verfahren.
Top-down "von oben nach unten"
vom Abstrakten, Allgemeinen, Übergeordneten hin zum Konkreten, Speziellen, Untergeordneten
erst steht das System, dann werden Daten eingepflegt
Nachteil: kann nur schwer in bereits laufende Prozesse integriert werden
Bottom-up "von unten nach oben"
aus vorhandenen Daten und Informationen wird ein DBS entwickelt
von Detail-Aufgaben zur Erledigung übergeordneter Prozesse
Nachteil: führt bei großen Datenmengen schnell zu Anomalien
(Quellen: Komp. 5. Aufl. Band II ab S. 154 + Spickzettel 2. Aufl. + eigener Kram)
Spricht man von einer Datenbank, meint man in der Regel ein Datenbanksystem (DBS). Dieses besteht aus zwei Teilen: Die eigentliche Datenbank (DB) ist eine programmunabhängige strukturierte Sammlung von Daten, die miteinander in Beziehung stehen. Um diese Daten sinnvoll und komfortabel nutzen zu können, wird eine Datenbanksoftware benötigt, das Datenbankmanagementsystem (DBMS).
Ziele einer Datenbank:
- Vereinheitlichung: Daten werden nur einmal erfasst und zentral gespeichert, sodass allen Benutzern eine einheitliche und aktuelle Datenbasis zur Verfügung steht.
- Flexibilität: Die erfassten Daten lassen sich mehrfach und unterschiedlich nutzen und auswerten.
- Programmunabhängigkeit der Daten: Wird durch die Trennung von DB und DBMS erreicht.
- Fehlerfreiheit: Datenbankfehler, die z.B. durch einen Programm- oder Computerabsturz entstehen, sollen automatisch korrigiert werden.
-Redundanz-Vermeidung: Unter Redundanz versteht man eine doppelte oder mehrfache Speicherung gleicher Daten. Dies führt zu Speicherplatzverschwendung, erhöht die Verarbeitungszeiten und kann zu widersprüchlichen Daten führen.
Folgende Kriterien für eine funktionierende Datenbank müssen erfüllt sein:
Datenkonsistenz: Jeder Datensatz muss eindeutig identifizierbar, also konsistent sein, z.B. werden Kundennummern nur ein einziges Mal vergeben. Wenn der Kunde nicht mehr existiert, wird die Nummer nicht erneut verwendet. Somit sind konsistente Datensätze eindeutig unterscheidbar.
Beispiel: Selbst bei dem unwahrscheinlichen Fall, dass zwei Kunden dieselbe Adresse haben, kann mindestens durch die einmalig vergebene Kundennummer zwischen ihnen unterschieden werden.
Redundanzfreiheit: Sämtliche Daten werden nur einmal erfasst und gespeichert (=sie sind redundanzfrei). So treten bei Änderungen keine Probleme auf, da sie zentral abgelegt sind und nur ein Mal geändert werden müssen.
Beispiel: Ändert sich bei einem Kunden die Adresse, muss diese nicht für jede seiner Bestellungen erfasst und geändert werden, sondern nur ein Mal zentral in der Kundendatenbank, da den Bestellungen die eindeutige Kundennummer zugeordnet ist. Somit dient diese Nummer als Schlüssel.
Normalformen
1. Normalform: Jedes Datenfeld einer Tabelle enthält genau einen Eintrag, diese sind spaltenweise sortiert, z.B. nach Nachname, Straße, PLZ, Ort, Produkt und Datum. In der Tabelle der 1. NF sind alle Informationen gelistet, daher ist sie nicht konsistent und nicht redundanzfrei.
Beispiel: Der Kunde Winkler hat Visitenkarten und eine Website in Auftrag gegeben. Da ja jedes Datenfeld nur einen Eintrag enthält, ist der Kunde zwei Mal in der Auftragstabelle aufgeführt, ein Mal mit dem Produkt Website mit der Auftragsnummer 1 und ein Mal mit dem Produkt Visitenkarten mit der Auftragsnummer 5. Diese Nummern verweisen auf den Kunden und auf das Produkt.
2. Normalform: Nun wird die Tabelle in mehrere Tabellen zerlegt und zwar so, dass jeder Eintrag der entstandenen Tabellen einen eigenen Schlüssel erhält. Dieser Schlüssel wird dann anstatt des Produktes in der Tabelle der 1. NF aufgeführt. So befindet sich die Auftragstabelle in der 2. NF, da sie sich zum einen in der 1. NF befindet und zum anderen alle Datenfelder von einem Schlüssel funktional abhängig sind.
Beispiel: Die Produkte werden in einer eigenen Tabelle aufgeführt und jedes Produkt erhält eine Produktnummer (Schlüssel). So wird in der Auftragstabelle nun nicht das Produkt mit Namen angegeben, sondern der Schlüssel. Somit ist der Kunde Winkler zwar immernoch zwei Mal in der Auftragstabelle aufgeführt, jedoch ein Mal mit der Produktnummer 1 für die Website und ein Mal mit der Produktnummer 2 für Visitenkarten. Die Produktnummer 2 kann in der Tabelle natürlich ebenfalls für den Kunden Mayer vorkommen, der ebenfalls Visitenkarten in Auftrag gegeben hat.
3. Normalform: In dieser letzten Stufe werden die verbliebenen Redundanzen beseitigt. Die endgültige Tabelle befindet sich dann in der 3. NF, wenn sie sich zum einen in der 2. NF befindet und zum anderen alle Datenfelder, die keine Schlüssel sind (im Bsp. das Auftragsdatum), nicht funktional abhängig sind.
Beispiel: Nun sind die Kundenangaben in der Auftragstabelle funktional abhängig, also zum Kunden Winkler gehört genau eine Straße, eine PLZ und ein Ort. Das muss nun behoben werden, da ein weiterer Kunde namens Winkler hinzukommen kann und sich dadurch die Adresse anhand des Namens nicht mehr eindeutig ermitteln ließe. Deshalb wird eine weitere Tabelle mit neuem Schlüssel erstellt. Hier befinden sich die Daten der Kunden, die spaltenweise nach Name, Straße, PLZ und Ort aufgeführt sind. Das Wichtigste ist nun, dass jeder Kunde eine Kundennummer (Schlüssel) erhält, der in der Auftragstabelle angegeben werden kann. Diese Tabelle wird kann nun in die 3. NF gebracht werden: Eine Spalte gibt die Auftragsnummer an, eine die zugehörige Produktnummer, eine Spalte führt die Nummer des zugehörigen Kunden auf und eine weitere Spalte kann nun das Datum des Auftrags enthalten.
Nun ist die Normalisierung in die 3. NF abgeschlossen, alle Daten der 3 Tabellen sind redundanzfrei und konsistent.
Weiterführende Links
http://www.tinohempel.de/info/info/datenbank/normalisierung.htm