- Modellierung
- Grundlagen und Begriffe
- Verwendung und Probleme von Modellen
- Modellieren in der Informatik
- Prozesse und Teilprozesse
- Funktionen als verarbeitende Prozesse
- Daten
- Funktion
- Tabellenkalkulation
- Rechnen mit Rechenblättern
- Arbeiten mit Formel
- Datentypen
- Funktionen
- Funktionen mit mehreren Eingabewerten
- Verkettung von Funktionen – Datenflussdiagramme
- Bedingte Funktionen – Wenn-dann-Funktionen
- Datenbanksysteme: Einleitung
- Grundbegriffe
- Datenbanksystem, Datenbank und Datenbankmanagementsystem
- Relationale Datenbanken
- Grundlagen
- Informationssysteme
- Datenspeicherung in einem Datensystem
- Einführung
- Beispiel: Organisation der Schulverwaltung mittels Daten auf dem Server des Verwaltungsnetzes
- Einführung in die Datenbank
- Das Klassendiagramm
- Klassen
- Beziehung
- Fremdschlüssel
- Erste Schritte zur Datenmodellierung
- Primärschlüssel
- Datenbanksysteme: Beziehungen
- Kardinalität von Beziehungen
- 1:1 - Beziehungen
- 1:n - Beziehung
- n:m - Beziehung
- Darstellen von Beziehungen in einem Datenbankschema
- Regel 1
- Beispiel
- Regel 2
- Beispiel
- Regel 3
- Beispiel
- Datenbanksysteme: SQL
- Erste grundlegende Abfragebefehle
- SELECT, FROM
- AS
- DISTINCT
- ORDER BY
- WHERE
- Weitere SQL-Abfragen
- Auswertung von Tabellen mit Aggregatfunktionen
- Auwertung von Tabellen mit Aggregatfunktionen und Gruppenbildung (GROUP BY)
- Auswertung von Tabellen mit Aggregatfunktion und Gruppenbildung unter Verwendung von Bedingungen (HAVING)
- Datenbanksysteme: Redundanz, Anomalie, Inkonsistenz
- Redundanzen
- Anomalien
- Änderungs-Anomalie (Update-Anomalie)
- Lösch-Anomalie (Delete-Anomalie)
- Einfüge-Anomalie (Insert-Anomalie)
- Inkonsistenzen
- Datenbanksysteme: Normalformen
- 1. Normalform (1 NF)
- Beispiel
- 2. Normalform (2 NF)
- 3. Normalform (3 NF)
Modellierung
Grundlagen und Begriffe
Eine Simulation ist die Nachbildung eines realen Vorgangs oder Ablaufs mit Hilfe des Computers. Ein System ist die Gesamtheit von Gegenständen, die in einer Beziehung zueinander stehen, z.B. Geldautomat und Zahlensystem. Ein Modell beschreibt vereinfacht ein reales oder geplantes Systems und beinhaltet nur Teile des Originals.
Verwendung und Probleme von Modellen
Modelle verwendet man, wenn
- das Original
- nicht beobachtbar (Sonnensystem),
- zu groß oder zu klein (Atommodell),
- noch nicht existent (Hausmodell),
- zu komplex (Modell einer Volkswirtschaft)
- oder die Arbeit am Original
- zu gefährlich (Landeverhalten von Flugzeugen),
- zu teuer (Lebensmöglichkeiten auf dem Mars)
- nicht möglich (Auswirkungen des Treibhauseffekts) sind.
Bei der Modellbildung treten jedoch folgende Probleme auf:
- Vereinfachungsfehler, d.h. wesentliche Einflussfaktoren werden vernachlässigt (Fahrbahnbeschaffenheit bei Reifenwahl)
- Verfahrensfehler (Mars, PolarLander, Mars Climatic Orbiter)
- Rechenfehler (z.B. Rundungsproblematik bei Patriot Abwehrraketen, Ariane 5)
- Interpretationsfehler
Modellieren in der Informatik
Möchte man ein reales System zu einem Modell vereinfachen, so muss man eine Modellierung und Implementierung durchführen, d.h. man muss abgrenzen, abstrahieren, idealisieren, aggregieren. Mithilfe dieses Modells, z.B. eines Diagramms oder Programms, kann man mit Simulationen und Interpretationen Rückschlüsse auf das reale System ziehen.
Prozesse und Teilprozesse
Ein Prozess erstellt aus Eingangsmaterialien nach einer fest vorgeschriebenen Verarbeitungsvorschrift einen Ausgabegegenstand. Ein Verarbeitungsprozess lässt sich in Teilprozesse zerlegen. Das Ausgabematerial eines Teilprozesses „fließt“ als Eingangsmaterial in einen anderen Teilprozess.
Funktionen als verarbeitende Prozesse
Daten
Daten (Singular: Datum) in der Informatik umfassen neben der Darstellungsform einer Information auch deren Bedeutung.
Funktion
Eine Funktion ermittelt aus Eingangsdaten nach einer festgelegten und eindeutigen Verarbeitungsvorschrift (Zuordnungsvorschrift) Ausgabedaten.
Tabellenkalkulation
Anmerkung: Die Befehle beziehen sich hier vor allem auf „OpenOffice“ (bzw. LibreOffice). Bei anderen Programmen können die Funktionen anders lauten.
Rechnen mit Rechenblättern
Ein Rechenblatt besteht aus Zellen, die in Zeilen und Spalten angeordnet sind. Die Zeilen werden mit Zahlen bezeichnet (1 ... 65536), die Spalten mit Buchstaben (A ... IV) und die Zellen mit der Kombination aus Spalte und Zelle (z.B. A3 oder HH45).
Eine Zelle enthält ein Datum (eine Zahl, einen Text o.ä.) oder eine Formel. Sie beginnt mit einem „=“, damit das Programm den Eintrag als Formel erkennt.
Arbeiten mit Formel
Beim Kopieren von Formeln wird der sogenannte „relative Zellbezug“ verwendet, d.h. die Position der verwendeten Zellen in Relation zur aktuellen Zelle, z.B. 2 links, 4 hoch. Das bedeutet, dass die Formel bezogen auf die neue Position umgestaltet wird (taucht in C2 die Zelle A1 auf, so wird beim Kopieren in C3 A2 verwendet).
Soll eine bestimmte Zelle angesprochen werden, so geschieht dies durch ein „$“-Zeichen vor dem Spalten- bzw. Zeilennamen (also A$1 oder $A1 oder $A$1). Dies nennt man absoluten Zellbezug.
Datentypen
Für ein Rechenblatt gibt es nur zwei Sorten von Daten: Texte und Zahlen. Zahlen können in ihrer Ausgabe unterschiedlich formartiert werden, z.B. mit unterschiedlich vielen Nachkommastellen, als Brüche oder als Währung, als Datum oder als Zeitangabe.
Intern wird aber immer mit der zu Grunde liegenden Zahl gerechnet. So entspricht das Datum 11.04.2013 der Zahl 41375 und der Wert 1 beschreibt den 31.12.1899.
Funktionen
Anmerkung: Eine Aufstellung aller Funktionen erhält man über „Einfügen - Funktionsliste“.
Funktionen mit mehreren Eingabewerten
Wenn eine Funktion mehr als einen Eingabewert erfordert, so spricht man von einer mehrstelligen Funktion. Die Eingabewerte können Zahlen oder Zellverweise sein. In den Rechenblättern wird die „PRÄFIX“-Schreibweise verwendet, d.h. erst kommt der Funktionsname, dann in Klammern die Eingabewerte, z.B. „=Summe(7;8)“.
Die Reihenfolge der Eingabewerte darf in der Regel nicht vertauscht werden, d.h. die meisten Funktionen sind nicht kommutativ (Potenz(3;4) = 81; Potenz(4;3) = 64).
Verkettung von Funktionen – Datenflussdiagramme
Funktionen können verkettet werden, indem man den Ausgabewert einer Funktion als einen Eingabewert einer anderen Funktion übernimmt. Zur Darstellung solcher Verkettungen benutzt man ein Datenflussdiagramm. Dabei dienen Rechtecke als Ein- und Ausgabewerte, Ovale als Funktionen, Pfeile als Datenfluss.
Bedingte Funktionen – Wenn-dann-Funktionen
Eine Bedingung kann mit Hilfe der Wenn-Formel eingebaut werden. Als Erstes steht in der Klammer eine Bedingung. Als Zweites steht die Formel, die verwendet werden soll, wenn die Bedingung erfüllt ist. Als Drittes steht die zu verwendende Formel, falls die Bedingung nicht erfüllt ist. Es ist möglich mehrere Bedingungen ineinander zu verschachteln.
Datenbanksysteme: Einleitung
Grundbegriffe
Datenbanksystem, Datenbank und Datenbankmanagementsystem
Ein Datenbanksystem (DBS) ist ein System zur Beschreibung, Verwaltung, Speicherung und Wiedergewinnung großer Datenmengen, das von mehreren Anwendungsprogrammen bzw. Datenbanknutzern gleichzeitig und unabhängig genutzt werden kann.
Es besteht aus
- der Datenbank (DB), der Menge der gespeicherten Daten, und
- dem Datenbankmanagementsystem (DBMS), der Gesamtheit aller Programme für den Umgang mit diesen Daten.
Ein grundlegendes Prinzip bei Datenbanksystemen ist die strikte Trennung von Daten und Datenbearbeitung. Das DBMS ist dabei verantwortlich für
- die sichere und einheitliche Verwaltung der Daten,
- den Datenaustausch zwischen Datenbank und Anwendungsprogramm,
- die Verhinderung von unkontrollierten Zugriffen auf den Datenbestand,
- die effiziente Zugriffsmöglichkeit auf die meist sehr großen Datenbestände sowie
- die Aufrechterhaltung und Wiederherstellung eines konsistenten Datenzustanddes.
Relationale Datenbanken
Eine relationale Datenbank besteht nur aus Tabellen. Jede Tabelle enthält Informationen. Die Kunst besteht darin, die Tabellen so zu erstellen, dass die benötigten Informationen abgerufen werden können.
Als Beispiel soll eine Schule betrachtet werden. In ihr werden ständig vielfältige Informationen über Schüler, Fächer und Lehrer benötigt:
- Der Schulleiter braucht eine Liste aller Lehrer, die Informatik unterrichten können/dürfen.
- Der Klassenleiter möchte die Namen aller seiner Schüler in alphabetischer Reihenfolge.
- Die Verwaltung der Stadt möchte von der Schule wissen, wie viele SchülerInnen aus der Stadt kommen.
Die folgenden Tabellen geben einen ersten Einblick vom möglichen Aufbau einer solchen Datenbank:
Schüler | Name | Klasse | Wohnort |
Maier | 5a | Schweinfurt | |
Mayer | 5b | Schwebheim | |
Meier | 5c | Sennfeld |
Lehrer | Name | Fach |
Schmitt | M, Ph | |
Kinderfrau | M, WRe, Inf | |
Kinderfrau | D, F |
Liest man die Tabellen richtig aus, so erhält man mit Hilfe einer eigenen Sprache die gewünschten Informationen.
Grundlagen
Informationssysteme
Wir leben heute in einer Informationsgesellschaft. Zugriff auf Verarbeitung, Ablage und Weitergabe von Informationen spielen eine immer größere Rolle. Durch das rasante Anwachsen der angebotenen Informationsmenge greift man verstärkt auf Informationssysteme zurück.
Merkmale aller Informationssysteme, wie bei Urlaubsplanungen, in Bibliotheken oder in Banken, ist, dass sie auf Daten, d. h. auf elektronisch gespeicherte Informationen, zurückgreifen.
Datenspeicherung in einem Datensystem
Einführung
Die Daten werden in mehreren Dateien abgespeichert. Diese Form der Datenspeicherung wurde lange Zeit auch für größere Datenmengen eingesetzt und wird heute noch für individuelle Anwendungen genutzt.
Was scheinbar einfacher ist, birgt aber auch eine Vielzahl von Problemen, die erst durch den planvollen Einsatz von Datenbanksystemen behoben werden können.
Beispiel: Organisation der Schulverwaltung mittels Daten auf dem Server des Verwaltungsnetzes
Problem | Bedeutung | Beispiel |
Redundanz | Dieselbe Information muss mehrfach abgespeichert werden. | Die Daten (Name, Adresse, Telefon, Fächerverbindung) eines neu an die Schule gekommenen Lehrers müssen gespeichert werden. Es wird eine neue Lehrerdatei mit den entsprechenden Daten angelegt. Der Name muss zusätzlich in die Lehrerliste eingetragen werden. Die Telefonliste muss entsprechend ergänzt werden. |
Inkonsistenz | Gespeicherte Daten sollen in sich stimmig sein | Eine Lehrerin heiratet und ändert ihren Namen. Man ändert den Namen in der entsprechenden Lehrerdatei und korrigiert den Namen in der Lehrerkiste. Dabei passiert ein Schreibfehler. Die Aktualisierung der Telefonliste wird vergessen. Damit existiert der Name der Lehrerin in drei verschiedenen Versionen. |
Beschränkte Zugriffsmöglich- keiten | Es ist schwierig, in isolierte Dateien abgelegte Daten miteinander zu verknüpfen | Von der Klasse 5 wird eine Liest der kath. SchülerInnen benötigt. Es gibt keine Möglichkeit, diese Informationen durch Verknüpfen der einzelnen Schülerdaten automatisch zu erhalten. Die gewünschte Information kann nur durch Überprüfung jede Schülerdatei gewonnen werden. Dann wird eine neue Datei „Kath. Schüler der Klasse 5“ erstellt. |
Mehrbenutzer- betrieb | Schlechte Möglichkeiten eines kontrollierten Mehrbenutzerbetriebs | Die Datei mit der Lehrerliste wird gleichzeitig geöffnet. Beim Ersten wird ein Name ergänzt und abgespeichert. Beim Zweiten wird nur etwas korrigiert und danach ebenfalls gespeichert. Dies hat zur Folge, dass die Ergänzungen des Schulleiters wieder überschrieben werden. |
Verlust von Daten | Bei der Bearbeitung der Dateien kann ein Fehlerfall den Verlust von Daten bedeuten (Unvollständigkeit und Inkonsistenz) | Ein Schüler tritt während des Schuljahres von der 7. in die 6. Klasse zurück. Dessen Schülerdatei wird aus dem Ordner der 7. Klasse genommen. Unmittelbar vor dem Einfügen in den Ordner der 6. Klasse stürzt der Rechner ab. Dadurch gehen die Schülerinformationen verloren. |
Integritätsver- letzung | Einhalten von bestimmten Bedingungen, die an Daten gestellt werden | Bei der Stundenplanerstellung muss vermieden werden, dass eine Lehrkraft zeitgleich in verschiedenen Klassen eingesetzt wird. Isolierte Stundenpläne bieten keine Möglichkeit, solche Fehler aufzudecken. |
Einführung in die Datenbank
Das Klassendiagramm
Anmerkung: Die Namen (Klassen, Beziehungen etc.) beziehen sich auf ein spezielles Beispiel. Dieses wird später evtl. hinzugefügt.
Klassen
FLUG |
Flugnr : Text Fluglinie : Text von : Text nach : Text ab : Datum an : Datum Groesse : Integer |
KUNDE |
Kundennr Name Vorname Alter |
Beziehung
BUCHUNG |
Buchungsnr Kundennr Flugnr Sitz |
Primärschlüssel werden unterschrichen, die Datentypen können auch weggelassen werden. Die Darstellung der Beziehung zwischen den beiden Klassen FLUG und KUNDE sieht wie folgt aus:
Fremdschlüssel
In der Tabelle BUCHUNG verweisen die beiden Attribute „Flugnr“ und „Kundennr“ auf den jeweiligen Primärschlüssel einer anderen Tabelle, nämlich „FLUG“ und „KUNDE“. So erspart man der Datenbank in der Tabelle BUCHUNG viele redundante Einträge, da etwa die weiteren Flugdaten nicht noch einmal eingegeben werden müssen, sondern aus der Tabelle Flug entnommen werden können.
Der Fremdschlüssel muss ein Primärschlüssel der Bezugstabelle sein, da sonst keine eindeutige Zuweisung möglich wäre. Allerdings muss die Datenbank „wissen“, dass eine solche Beziehung besteht, da sonst etliche Probleme auftreten könnten.
Primärschlüssel
Ein Primärschlüssel kennzeichnet Datensätze einer Tabelle eindeutig. Er besteht aus einem Attribut (z.B. Flugnr für Datensätze der Tabelle FLUG) oder aus einer Kombination von Attributen (z.B. die Attribute Kundennr und Flugnr in der Tabelle BUCHUNG).
Es werden zwei Arten von Primärschlüsseln unterschieden:
- Natürlicher Primärschlüssel: Vorhandenes Attribut oder Kombination von vorhandenen Attributen
- Künstlicher Primärschlüssel: Zu diesem Zweck zusätzlich eingeführtes Attribut (meistens Durchnummerierung der Datensätze)
Datenbanksysteme: Beziehungen
Kardinalität von Beziehungen
1:1 - Beziehungen
Falls jedes Objekt (Datensatz, Zeile der Tabelle) der Klasse 1 (Tabelle) mit höchstens einem Objekt der Klasse 2 in Beziehung steht und umgekehrt, spricht man von einer 1:1 - Beziehung. Dabei kann es durchaus sein, dass es Objekte in Klasse 1 oder Klasse 2 gibt, denen kein „Partner“ aus der anderen Klasse zugeordnet ist.
Ein Beispiel ist die Beziehung verheiratet zwischen den Klassen Männer und Frauen, zumindest nach europäischem Recht.
1:n - Beziehung
Falls jedes Objekt der Klasse 1 mit beliebig vielen Objekten der Klasse 2 in Beziehung stehen kann, aber jedes Objekt der Klasse 2 mit höchstens einem Objekt der Klasse 1, sprich man von einer 1:n - Beziehung.
Ein Beispiel ist die Beziehung beschäftigt sein zwischen den Klassen Arbeitnehmer und Unternehmen, wobei man davon ausgeht, dass ein Arbeitnehmer nur bei einem Unternehmen beschäftigt ist, ein Unternehmen aber mehr als einen Beschäftigten haben kann.
n:m - Beziehung
Falls jedes Objekt der Klasse 1 mit beliebig vielen Objekten der Klasse 2 in Beziehung stehen kann und umgekehrt, spricht man von einer n:m - Beziehung. Ein Beispiel ist die Beziehung unterrichten zwischen den Klassen Schüler und Lehrer; jeder Lehrer unterrichtet mehrere Schüler und jeder Schüler hat mehrere Lehrer.
Darstellen von Beziehungen in einem Datenbankschema
Regel 1
Jede Beziehung kann als eigenständige Tabelle definiert werden, wobei die Primärschlüssel der zugehörigen Klassen als Fremdschlüssel auftreten müssen.
Beispiel
Beziehung unterrichtet (siehe „Kardinalität von Beziehungen, n:m - Beziehung). Die Klassen sehen wie folgt aus:
- SCHUELER { Schueler-Id, Name, Vorname, Geburtsdatum, Konfession, ... }
- LEHRER { Lehrer-Id, Name, Vorname, Geburtsdatum, Fach1, Fach2, ... }
- UNTERRICHTET { Lehrer-Id, Schueler-Id, Fach, ... }
Regel 2
Jede n:m - Beziehung muss durch eine eigenständige Tabelle definiert werden. Der Primärschlüssel kann dabei auf zwei verschiedene Arten festgelegt werden:
- Kombination der Fremdschlüssel (Verweis auf Primärschlüssel der Klassen)
- Eigener künstlicher Primärschlüssel
Beispiel
Bücher werden beliebig oft ausgeliehen und die Ausleihe gespeichert.
- BUCH { Buch-Nr, Verfasser, Titel, Verlag, ... }
- NUTZER { Nutzer-Id, Name, Vorname, Geburtsdatum, PLZ, Wohnort, ... }
- AUSLEIHE { Ausleih-Nr, Buch-Nr, Nutzer-Id, ausgeliehen am, zurückgegeben am, ... }
Regel 3
Jede 1:n - Beziehung sowie jede 1:1 - Beziehung kann ohne eigenständige Beziehungstabelle unmittelbar in die zugeordneten Klassen integriert werden.
Beispiel
Der aktuelle Ausleihstatus wird bei der Bibliothek registriert, d.h. ein Buch kann auch nur einmal ausgeliehen werden.
- BUCH { Buch-Nr, Verfasser, Titel, Verlag, ... , Nutzer-Id, Ausleihe_am, Ausleihe_bis }
- NUTZER { Nutzer-Id, Name, Vorname, Geburtsdatum, PLZ, Wohnort, ... }
Der Schlüssel Nutzer-Id in der Klasse BUCH ist ein Fremdschlüssel auf den Primärschlüssel der Klasse NUTZER. Dabei ist zu beachten, dass nur die 1-er-Klasse in die andere Klasse integriert werden kann, d.h. hier wird die Buch-Nr nicht in die Klasse NUTZER eingetragen.
Datenbanksysteme: SQL
Die Datenbanksprache SQL (Structured Query Language) erlaubt neben dem Aufbau und der Veränderung von Datenbanken vor allem, Daten aus diesen Tabellen nach bestimmten Gesichtspunkten abzufragen. Im Folgenden nutzen wir SQL ausschließlich als Instrument zur Abfrage.
Erste grundlegende Abfragebefehle
SELECT, FROM
Die einfachste Form der SQL-Abfrage besteht aus der SELECT-Klausel und der FROM-Klausel. Als Ergebnis wird eine Tabelle angezeigt, die alle in der SELECT-Klausel angegebenen Spalten der Tabelle enthält, die in der FROM-Klausel angegeben sind. Die Reihenfolge der Spaltennamen in der SELECT-Klausel legt dabei die Anordnung der Ergebnisspalten fest.
Beispiel: Alle Start- und Zielflughäfen der Tabelle FLUG sollen ausgegeben werden
SELECT "von", "nach"
FROM FLUG;
Sollen alle Spalten einer Tabelle ausgegeben werden, so verwendet man hinter dem Schlüsselwort SELECT einen Stern "*".
Beispiel:
SELECT *
FROM FLUG;
AS
Möchte man die Spaltenüberschriften ändern, wird hinter den jeweiligen Spaltennamen mit dem Schlüsselwort AS die gewünschte Spaltenüberschrift gesetzt.
Beispiel:
SELECT "von" AS Startflughafen, "nach" AS Zielflughafen
FROM FLUG;
DISTINCT
Sollen eventuelle Duplikate vermieden werden, so wird hinter das Schlüsselwort SELECT noch das Schlüsselwort DISTINCT angehängt.
Beispiele: Alle Flüge, für die eine Buchung existiert, sollen angezeigt werden.
SELECT "Flugnr"
FROM BUCHUNG;
bzw.
SELECT DISTINCT "Flugnr"
FROM BUCHUNG;
ORDER BY
Um sortierte Ergebnisse zu erhalten, verwendet man das Schlüsselwort ORDER BY. Die ORDER BY-Klausel enthält die Spalte nach der sortiert wird. Der Befehl DESC hinter dem Spaltennamen gibt an, das die Inhalte absteigend sortiert werden.
SELECT "Flugnr", "ab"
FROM FLUG
ORDER BY "ab";
WHERE
Sollen alle nicht aussagekräftigen Kombinationen ausgeschlossen werden, so muss mit Hilfe der WHERE-Klausel eine Gleichheitsbedingung angegeben werden. Damit kann man auch Einschränkungen der Datensätze vorgenommen werden.
Beispiel: Alle Kunden über 30 sollen mit Name, Vorname und Alter angezeigt werden, sortiert nach Alter
SELECT "Name", "Vorname", "Alter"
FROM KUNDE
WHERE "Alter" > 30
ORDER BY "Alter" DESC;
Weitere SQL-Abfragen
Auswertung von Tabellen mit Aggregatfunktionen
Folgende Aggregatfunktionen können verwendet werden:
- COUNT (Ausdruck): Anzahl der Datensätze von (Ausdruck)
- SUM (Ausdruck): Summe der Werte von (Ausdruck)
- AVG (Ausdruck): Durchschnittswert der Datensätze von (Ausdruck)
- MIN (Ausdruck): Minimum aller Werte von (Ausdruck)
- MAX (Ausdruck): Maximum aller Werte von (Ausdruck)
Auwertung von Tabellen mit Aggregatfunktionen und Gruppenbildung (GROUP BY)
Durch das Schlüsselwort GROUP BY Spaltenname wird die gesamte Tabelle in Teiltabellen zerlegt, die in der angegebenen Spalte den gleichen Wert haben. Für jede dieser Teiltabellen kann nun ein bestimmter Wert errechnet werden.
Auswertung von Tabellen mit Aggregatfunktion und Gruppenbildung unter Verwendung von Bedingungen (HAVING)
Die HAVING-Klausel wählt aus den gegebenen Bedingungen diejenigen aus, die eine vorgegebene Bedingung erfüllen.
Datenbanksysteme: Redundanz, Anomalie, Inkonsistenz
AUm die Begriffe der „Redundanz“, „Anomalie“ und „Inkonsistenz“ besser verstehen zu können, wird als Beispiel die Datenbank eines Unternehmens betrachtet, in der die Werksautos und die Fahrer, die diese Wagen bewegen, abgespeichert sind. Sie kann etwa folgendermaßen aussehen:
KENNZEICHEN | HERSTELLER | MODELL | FARBE | FAHRER-ID | NAME | VORNAME |
F-KJ 321 | VW | Touran | Blau | 318 | Schmidt | Peter |
F-CH 333 | Opel | Vectra | Rot | 37 | Schneider | Fritz |
F-MD 456 | BMW | 750i | Silber | 93 | Maier | Franz |
F-HK 987 | Mercedes | C 220 | Schwarz | 274 | Müller | Thomas |
F-CH 333 | Opel | Vectra | Rot | 274 | Müller | Thomas |
F-MD 456 | BMW | 750i | Silber | 37 | Schneider | Fritz |
Redundanzen
Bei einer Redundanz werden verschiedene Informationen über die einzelnen Autos und über die einzelnen Fahrer mehrfach abgespeichert. In einem solchen Fall werden somit Daten unnötig mehrfach abgespeichert.
Anomalien
Redundant gespeicherte Daten kosten nicht nur Speicherplatz, sondern können auch zu Fehlern in der Datenbank führen. Man spricht von Anomalien.
Änderungs-Anomalie (Update-Anomalie)
Wenn etwa der Opel Vectra von rot auf orange umgespritzt wird, so muss die Änderung an mehreren Stellen (hier: mindestens 2) erfolgen. Wird eine Änderung vergessen, so taucht derselbe Wagen mit zwei verschiedenen Farben auf.
Lösch-Anomalie (Delete-Anomalie)
Wenn der BMW „geschrottet“ und danach aus der Datenbank gelöscht wird, so gehen damit auch die Informationen über den Fahrer Maier verloren, sofern er nicht noch bei einem zweiten Wagen als Fahrer vorgesehen ist.
Einfüge-Anomalie (Insert-Anomalie)
Ein neuer Wagen kann nur eingefügt werden, wenn ihm auch ein Fahrer zugeteilt wurde, weil sonst ein Teil des Primärschlüssels keine Daten zur Verfügung stehen würden.
Inkonsistenzen
Eine Datenbank heißt inkonsistent, wenn sie nicht in sich stimmig ist, sondern Widersprüche aufweist. Solche Inkonsistenzen können etwa durch eine Änderungsanomalie entstehen.
Datenbanksysteme: Normalformen
Das Ziel der Verwendung von Normalformen ist es, Redundanzen zu eliminieren und Anomalien zu vermeiden.
1. Normalform (1 NF)
Beispiel
Tabelle PERSONAL-PROJEKT, in der alle Mitarbeiter aufgeführt sind, die an einem Projekt beteiligt sind oder waren. Die Mitarbeiter können an mehreren Projekten beteiligt sein; es wird jeweils notiert, wie viele Stunden sie in einem Projekt geleistet haben.
Pers-Nr | Pers-Name | Abt-Nr | Abt-Name | Pj-Nr | Pj-Name | Pj-Std. |
101 | Müller | 1 | Motoren | 11, 12 | A, B | 60, 50 |
102 | Meier | 2 | Karosserie | 13 | C | 120 |
103 | Krause | 2 | Karosserie | 12, 12, 13 | A, B, C | 20, 50, 30 |
104 | Schmitt | 1 | Motoren | 11, 13 | A, C | 70, 20 |
Eine Tabelle liegt in der ersten Normalform vor, wenn jeder Attributwert eine atomare, d.h. nicht weiter zerlegbare Dateneinheit ist. Es dürfen also nicht mehrere Attributwerte in einer Zelle auftreten, wie etwa hier in der Spalte Pj-Nr.
Denn nur dann können über Abfragen wichtige Informationen aus der Tabelle herausgefiltert werden (z.B. „Welche Mitarbeiter waren an Projekt 11 beteiligt?“).
Um dies zu erreichen, lagert man die nicht atomaren Attribute in verschiedene Zeilen oder mehree Spalten (z.B. Adresse in PLZ, Ort, Straße) aus. Dabei muss ggf. der Primärschlüssel um ein oder mehrere Attribute erweitert werden. Es können dennoch noch alle besprochenen Anomalien auftreten.
Pers-Nr | Pers-Name | Abt-Nr | Abt-Name | Pj-Nr | Pj-Name | Pj-Std |
101 | Müller | 1 | Motoren | 11 | A | 60 |
101 | Müller | 1 | Motoren | 12 | B | 50 |
102 | Meier | 2 | Karosserien | 13 | C | 120 |
. . . |
2. Normalform (2 NF)
Eine Tabelle liegt in der zweiten Normalform vor, wenn jedes Attribut, das kein Teil des Primärschlüssels ist, vom gesamten Primärschlüssel funktional abhängig ist.
Dies ist der Fall, wenn z.B. das Attribut „Pers-Name“ ausschließlich vom Primärschlüssel-Teil „Pers-Nr“ abhängt, in keiner Weise jedoch vom Primärschlüssel-Teil „Pj-Nr“.
Im Beispiel sind die Attribute Pers-Name, Abt-Nr und Abt-Name vom Attribut Pers-Nr funktional abhängig, werden also allein durch dieses Attribut bereits bestimmt und benötigen das Attribut Pj-Nr nicht. Das Attribut Pj-Name dagegen ist funktional abhängig vom Attribut Pj-Nr.
Das Attribut Pj-Std wiederum ist funktional abhängig vom gesamten Primärschlüssel, der aus beiden Attributen Pers-Nr und Pj-Nr besteht. Also muss die vorgegebene Tabelle in drei eigenständige Tabellen zerlegt werden.
PERSONAL
Pers-Nr | Pers-Name | Abt-Nr | Abt-Name |
101 | Müller | 1 | Motoren |
102 | Meier | 2 | Karosserie |
103 | Krause | 2 | Karosserie |
104 | Schmitt | 1 | Motoren |
PROJEKT
Pj-nr | Pj-Name |
11 | A |
12 | B |
13 | C |
PERSONAL_PROJEKT
Pers-Nr | Pj-Nr | Pj-Std |
101 | 11 | 60 |
101 | 12 | 50 |
102 | 13 | 120 |
In jeder der drei Tabellen gilbt nun, dass jedes Attribut, das nicht selbst Primärschlüssel ist, vom Primärschlüssel voll funktional abhängig ist.
3. Normalform (3 NF)
Betrachtet man die Tabelle PERSONAL näher, so sieht man, dass das Attribut Abt-Name funktional abhängig vom Primärschlüssel Pers-Nr ist, aber andererseits bereits von dem Attribut Abt-Nr festgelegt ist. Man sagt, Abt-Name ist transitiv abhängig vom Primärschlüssel Pers-Nr, und zwar über das Nicht-Primärschlüssel-Attribut Abt-Nr. Das führt zu Redundanzen, wie sofort erkennbar ist.
Eine Tabelle liegt in der dritten Normalform vor, wenn jedes Attribut, das kein Teil des Primärschlüssels ist, nicht transitiv abhängig vom Primärschlüssel ist, also nicht bereits durch ein Nicht-Primärschlüssel-Attribut festgelegt ist. Dies kann man beheben, indem man die transitiv abhängigen Attribute in eigene Tabellen auslagert.
PERSONAL
Pers-Nr | Pers-Name | Abt-Nr |
101 | Müller | 1 |
102 | Meier | 2 |
103 | Krause | 2 |
104 | Schmitt | 1 |
PROJEKT
Pj-nr | Pj-Name |
11 | A |
12 | B |
13 | C |
PERSONAL_PROJEKT
Pers-Nr | Pj-Nr | Pj-Std |
101 | 11 | 60 |
101 | 12 | 50 |
102 | 13 | 120 |
ABTEILUNG
Abt-Nr | Abt-Name |
1 | Motoren |
2 | Karosserie |
Wie man sieht, sind nun sämtliche Redundanzen beseitigt. Ändert sich etwa ein Abteilungsname (von Motoren zu Maschinen), so muss diese Änderung auch nur einmal, nämlich in der Tabelle ABTEILUNG, vorgenommen werden.
So kann es auch nicht zu den unerwünschten Änderungs-Anomalien kommen. Auch die Lösch- und Einfüge-Anomalien werden auf diese Weise vermieden. Man bezeichnet einen solchen Datenbank-Entwurf in der dritten Normalform deshalb als einen „guten“ Datenbankentwurf.
Der Nachteil an dieser Form ist, dass bestimmte Informationen, z.B. „An welchen Projekten hat Herr Müller mitgearbeitet?“, nicht mehr unmittelbar aus den Tabellen abgelesen werden können, sondern müssen in SQL mit Joins über mehrere Tabellen abgefragt werden.