Grundlagen Datenbanken

1 Relationale Datenbanken

1.1 Was ist das? Wozu?

Beispiel einer Tabellenbeziehung
er

Im Bereich der relationalen Datenbanken wird die referentielle Integrität dazu verwendet die Konsistenz und die Integrität der Daten sicherzustellen. Dazu werden Regeln aufgestellt, wie und unter welchen Bedingungen ein Datensatz in die Datenbank eingetragen wird.

1.2 Warum nicht in eine Datei speichern?

Daten in flachen Dateien zu speichern, birgt folgende Risiken:

Was ist eine flache Datei? Unterschied zur Tabelle einer Datenbank

1.3 Was sind denn nun die Vorteile einer Datenbank?

Die relationalen Datenbanksysteme wurden entwickelt, um die Probleme der getrennten Dateihaltung zu vermeiden:

1.4 Was sind denn nun Daten?

Was ist eine Dateninsel?
Wenn in mehreren Abteilungen mit der gleichen Datei gearbeitet wird und diese nur in einer Abteilung Änderungen erfährt, kommt es zu Inkonsistenzen zu den anderen Dateien. Dann spricht man von einer Dateninsel.
Wann spricht man von Dateninkonsistenz?
Wenn man an mehreren Orten eine Adresse speichert, und ändert nur einer Stelle beispielsweise die Postleitzahl, führt dies zwangsläufig zur Inkonsistenz der Daten.

Aus diesen Gründen muss man bei der Datenbankmodellierung dafür Sorge tragen, Redundanzen und somit Inkonsistenzen zu vermeiden. Dies ist eine tolle Überleitung zum ER Modell ;o)

1.5 ER-Modell/Entity Relation Modell

Hilft beim Entwurf und der Dokumentation einer relationalen DB.

Ein Modell ist: Es beschreibt:

Es stehen vier verschiedene Datenmodelle zur Verfügung:

  1. Konzeptionelles Modell
    • 1..n abstrakt - Hubschrauberperspektive
  2. Internes Modell
    • Auflösung der m..n aus dem konzeptionellen Modell
  3. Externes Modell
    • nur der "Ausschnitt" der Sie betrifft wird dargstellt
  4. Physikalisches Modell
    • Zugriffswege, Speicherort

Die Modelle unterscheiden sich im Abstraktionsgrad!

1.5.1 Grafische Darstellung nach Chen

ergrund

1.5.2 E-R-Diagramm

erdiagramm

1.6 Kardinalität

Kardinalität bezeichnet die Art der Beziehung zwischen Objekten. Die Komplexität einer Beziehung wird durch Angabe von Kardinalitäten bestimmt.

Folgende Beziehungstypen gibt es:
  • 1 : 1
    • (sprich: eins zu eins)
    • Ein Objekt steht mit höchstens einem Objekt in Beziehung(und umgekehrt)
  • 1 : n bzw. n : 1
    • (sprich: eins zu viele bzw. viele zu eins)
    • Ein Objekt kann mit einer beliebigen Menge von Objekten in Beziehung stehen
  • m : n
    • (sprich: viele zu vielen)
    • Ein Objekt kann mit mehreren Objekten in Beziehung stehen und umgekehrt

Diese Notation trifft noch keine Aussage darüber ob ein Objekt an einer Beziehung beteiligt sein muss. Dafür gibt es folgende Notationstypen:

2 Abfragesprache SQL

3 Anomalien

4 Normalisierung

Wie im vorherigen Kapitel "Anomalien" festgestellt wurde, sind redundante Informationen die Hauptursache für Anomalien! Hier kommt die Normalisierung zum Einsatz.

Die Normalisierung wird genutzt um Anomalien und Redundanzen zu vermeiden. Hierzu gibt es einige aufeinander aufbauende Normalformen.

4.1 Erste Normalform (1NF)

Die erste Normalform ist erreicht:
wenn Informationen nicht weiter in kleinere logische Einheiten zerlegt werden können und sie somit atomar vorliegen!
Vorher: (ohne Atomisierung)
Name Adresse
Maria Musterfrau In der Musterallee 12, Musterdorf, 12345
Nachher: (atomisiert)
Vorname Nachname Straße Hsnr Ort PLZ
Maria Musterfrau In der Musterallee 12 Musterdorf 12345

4.2 Zweite Normalform (2NF)

Die zweite Normalform wird erreicht wenn:
  • die erste Normalform erreicht wurde und
  • jeder Datensatz nur Informationen enthält, die sich auf das Objekt (Tabelle) beziehen welches durch den Primärschlüssel symbolisiert wird
Vorher:
Vorname Nachname Straße Hsnr Ort PLZ Artikel 1 Artikel 2 Artikel 3
Maria Musterfrau In der Musterallee 12 Musterdorf 12345 10 Eier 1 Brot 500g Mehl

Würde der Kunde nun wünschen gelöscht zu werden, dann wird seine Bestellung ebenso gelöscht und somit wären zukünftige Auswertungen (Bilanz etc.) falsch.

Nachher:
tbl_Kunde
Kd_ID Vorname Nachname Straße Hsnr Ort PLZ
1 Maria Musterfrau In der Musterallee 12 Musterdorf 12345
tbl_Position
Pos_ID ArtikelID KundeID Menge
1 1 1 1
2 2 1 1
3 3 1 1
tbl_Artikel
Artikel_ID Name Einzelpreis Gebindemenge
1 Eier 1,50 10
2 Brot 1,89 1000g
3 Mehl 0,56 500g

Nun könnte man dem Kundenwunsch befolgen und eine Löschung des Kundendatensatzes vornehmen ohne die Bestellung zu löschen!

4.3 Dritte Normalform (3NF)

Die dritte Normalform wird erreicht wenn:
  • die zweite Normalform erreicht ist und
  • kein Nichtschlüsselattribut von einem anderen Nichtschlüsselattribut funktional abhängig ist

zu Deutsch: Das "Attribut" Alter wäre abhängig vom Attribut "Geburtsdatum" und somit ist "Alter" überflüssig
oder: Das Attribut "Gründungsjahr" ist vom Attribut "Interpret" abhängig. Diese Information würde in eine weitere Tabelle ausgelagert werden.

5 Begriffe, kurz erklärt

6 Einstieg in SQL

6.1 Abfragen mit SELECT

Am Anfang einer jeden Abfrage steht IMMER das Schlüsselwort SELECT gefolgt von einem Leerzeichen und der Angabe von Spaltenname einer oder mehrerer Tabellen.

SELECT Spaltenname1, Spaltenname2, Spaltenname3, usw.

Anschließend folgt IMMER das Schlüsselwort FROM gefolgt von einem Leerzeichen und der Angabe von einer oder mehr Tabellen.

FROM Tabellenname1, Tabellenname2, Tabellenname3

Wie man erkennen kann folgt nach jedem Namen ein KOMMA und ein Leerzeichen. Das Leerzeichen dient der besseren Lesbarkeit, kann aber weg gelassen werden (nicht empfohlen)

Zusammengesetzt würde das wie folgt aussehen und schon funktionieren:

SELECT Spaltenname1, Spaltenname2, Spaltenname3, usw.
FROM Tabellenname1, Tabellenname2, Tabellenname3;

Das Semikolon am Ende der Anweisung dient dazu dem DBMS mitzuteilen, dass das Anweisungsende erreicht ist und sollte immer eingesetzt werden.

Die Ausgabe wäre ein kartesisches Produkt. Dies bedeutet, dass jeder Wert mit jedem anderen Wert kombiniert wird:

Beispiel: Kartesisches Produkt
a b
1 a1 b1
2 2a 2b

Wie ist das nun mit den Beziehungen zwischen Tabellen? Muss man das nicht in der Anweisung irgendwie angeben?

Es gibt nun 2 Möglichkeiten die Beziehung zwischen den Tabellen in der Anweisung zu deklarieren:

  1. In einer zusätzlichen WHERE Anweisung
    SELECT Spalte1, Spalte2, Spalte3
    FROM Tabelle1, Tabelle2
    WHERE Tabelle1.key = Tabelle2.key;
  2. Im FROM Teil über die JOIN-Anweisung
    SELECT Spalte1, Spalte2, Spalte3
    FROM Tabelle1 JOIN Tabelle2
    ON Tabelle1.key = Tabelle2.key;

Wie man bereits jetzt erkennen kann ist die zweite Anweisungsart mit JOIN besser zu lesen. Ein weiterer Vorteil ist, dass die WHERE Anweisung nur noch für die Einschränkung der Ergebnismenge zuständig ist und somit auch dort die Lesbarkeit erhöht und die Fehleranfälligkeit verringert wird.

Wenn man eine Ergebnismenge einschränken möchte erfolgt dies mit der WHERE-Anweisung

WHERE Bedingung