Beispieldatenbank

Aus Wikibooks
Wechseln zu: Navigation, Suche

Seitentitel: Einführung in SQL: Beispieldatenbank
(Einführung in SQL: Beispieldatenbank)


Dieses Kapitel bespricht die Grundlagen der Beispieldatenbank. Alle Einzelheiten der Tabellen stehen im Anhang unter Tabellenstruktur der Beispieldatenbank.

Attention green.svg

Hinweis
Alle Beispiele, Erläuterungen und Aufgaben beziehen sich auf diese Datenstruktur. Bitte schlagen Sie (soweit erforderlich) immer dort nach.


Sachverhalt[Bearbeiten]

Die Beispieldatenbank in diesem Buch versucht, eine Versicherungsgesellschaft für Kfz-Versicherungen abzubilden. Das Beispiel ist eine starke Vereinfachung der Realität; zum Beispiel fehlen alle Teile der laufenden Abrechnung der Prämien und Schadensfälle.

Die relevanten Begriffe sind für eine bessere Übersichtlichkeit fett gekennzeichnet. Folgender Sachverhalt wird in der Datenbank abgebildet:

Die Versicherungsgesellschaft UnsereFirma verwaltet mit dieser Datenbank ihre Kundendaten und die Schadensfälle. Wegen der Schadensfälle müssen auch Daten „fremder“ Kunden und Versicherungen gespeichert werden.

Jeder Versicherungsvertrag wird mit einem Versicherungsnehmer über genau ein Fahrzeug abgeschlossen. Der Versicherungsvertrag wird durch folgende Eigenschaften gekennzeichnet; zu jeder Eigenschaft gehört eine Spalte:

  • Vertragsnummer (Pflicht, eindeutig)
  • Datum des Abschlusses, Art des Vertrages (Pflicht); dabei gibt es die Arten Haftpflicht (HP), Haftpflicht mit Teilkasko (TK), Vollkasko (VK).
  • Verweis auf den Versicherungsnehmer (Pflicht)
  • Verweis auf das Fahrzeug (Pflicht, eindeutig)
  • Verweis auf den Mitarbeiter, der den Vertrag bearbeitet (Pflicht)

Der Versicherungsnehmer ist gekennzeichnet durch diese Eigenschaften:

  • Kundennummer (Pflicht, eindeutig)
  • Name und Anschrift: PLZ, Ort, Straße, Hausnummer (Pflicht)
  • bei natürlichen Personen zusätzlich durch Vorname, Geburtsdatum, Datum des Führerscheins (optional)
  • Verweis auf eine „Fremdversicherung“, wenn ein (fremdes) Fahrzeug an einem Unfall beteiligt ist (optional)

Das Fahrzeug ist gekennzeichnet durch diese Eigenschaften:

  • polizeiliches Kennzeichen (Pflicht, eindeutig)
  • Farbe (optional)
  • Fahrzeugtyp und damit indirekt auch den Fahrzeughersteller (Pflicht)

Ein Mitarbeiter ist gekennzeichnet durch diese Eigenschaften:

  • Name, Vorname, Geburtsdatum (Pflicht)
  • Personalnummer (Pflicht, eindeutig)
  • Verweis auf Abteilung, Vermerk, ob es sich um den Leiter der Abteilung handelt (Pflicht)
  • Kontaktdaten wie Telefon, Mobiltelefon, Email, Raum (optional)

Die Abteilung ist gekennzeichnet durch diese Eigenschaften:

  • Nummer (Pflicht, eindeutig)
  • Kurzbezeichnung, Bezeichnung (Pflicht, eindeutig)
  • Ort (optional)

Zusätzlich gibt es Dienstwagen. Dabei handelt es sich um eine Tabelle mit den gleichen Eigenschaften wie bei Fahrzeug und zusätzlich:

  • Verweis auf den Mitarbeiter, zu dem ein Dienstwagen gehört (optional)
  • denn es gibt auch Firmenwagen, die keinem Mitarbeiter persönlich zugeordnet sind

Ein Schadensfall ist gekennzeichnet durch diese Eigenschaften:

  • Datum, Ort und Umstände des Unfalls (Pflicht)
  • Vermerk, ob es Verletzte gab, sowie Höhe des Gesamtschadens (optional, denn die Angaben könnten erst später bekannt werden)
  • Verweis auf den Mitarbeiter, der den Schadensfall bearbeitet (Pflicht)

An einem Schadensfall können mehrere Fahrzeuge unterschiedlicher Versicherungen beteiligt sein. (Unfälle mit Radfahrern und Fußgängern werden nicht betrachtet.) Deshalb gibt es eine weitere Tabelle Zuordnung_SF_FZ:

  • Liste aller Schadensfälle und aller beteiligten Fahrzeuge (Pflicht)
  • anteilige Schadenshöhe eines Fahrzeugs an dem betreffenden Unfall (optional)

Über die Verbindung Schadensfall → Fahrzeug → Versicherungsvertrag → Versicherungsnehmer → Versicherungsgesellschaft können alle beteiligten Gesellschaften festgestellt und in die Schadensabwicklung eingebunden werden.

Bitte beachten Sie auch die unten stehenden Hinweise über Fehlende Spalten und Einschränkungen.

Schematische Darstellung[Bearbeiten]

Die vorstehende Struktur kann in folgendem Diagramm dargestellt werden. Die Verweise, nämlich die Verknüpfungen zwischen den Tabellen sind daraus so abzulesen:

  • Von jeder Tabelle gibt es einen Verweis auf einen Eintrag in der direkt darunter stehenden Tabelle.
  • Zu jedem Vertrag gehört ein Sachbearbeiter; das wird durch den Pfeil nach links außen angedeutet, der in der Tabelle Mitarbeiter von rechts hereinkommt.
  • Zu jedem Vertrag gehört genau ein Fahrzeug; zu jedem Fahrzeug gehört ein Vertrag.
  • Jeder Eintrag in der Liste der Zuordnungen Schadensfall, Fahrzeug bezieht sich auf einen Schadensfall und ein Fahrzeug; dabei gilt:
    • Zu jedem Schadensfall gehören ein oder mehrere Fahrzeuge.
    • Nicht jedes Fahrzeug hat einen Schadensfall.
  • Ein Dienstwagen kann einem Mitarbeiter zugeordnet sein, muss es aber nicht.
Tabellen und ihre Zusammenhänge
SQL-Struktur Beispieldatenbank.png
Doppelte Pfeile zeigen eine Muss-Verknüpfung, einfache eine Kann-Verknüpfung.

Die Kürzel bei den Tabellennamen werden künftig immer wieder als „Alias“ anstelle des „Langnamens“ verwendet. In dieser Übersicht wurden sie wegen der Deutlichkeit großgeschrieben; künftig werden sie kleingeschrieben.

Tabellenstruktur und Datenbank[Bearbeiten]

Im Anhang ist die Tabellenstruktur der Beispieldatenbank beschrieben, nämlich die Liste der Tabellen und aller ihrer Spalten. Innerhalb des Buches wird die Datenbankstruktur erweitert werden; dabei werden einige der nachstehenden Anmerkungen beachtet.

Im Anhang stehen auch Wege, wie Sie die Beispieldatenbank erhalten.

  • Entweder Sie holen sich eine fertige Version der Datenbank:
    • Laden Sie die komprimierte Datei herunter.
    • Benennen Sie die Datei um, soweit erforderlich.
    • Extrahieren Sie die Daten und speichern Sie das Ergebnis an einer passenden Stelle.
  • Oder Sie erzeugen die Datenbank mit einem Hilfsprogramm des von Ihnen verwendeten DBMS:
    • Erstellen Sie zunächst eine leere Datenbank, soweit erforderlich.
    • Laden bzw. kopieren Sie das passende Skript zum Erzeugen der Datenbank-Tabellen und Daten.
    • Führen Sie das Skript mit einem Hilfsprogramm des von Ihnen verwendeten DBMS aus.

Eine kurze Beschreibung für die Installation steht bei den Hinweisen zu den Downloads. Für Details nutzen Sie bitte die Dokumentation des jeweiligen Datenbankmanagementsystems; Links dazu stehen in der Einleitung sowie unter Weblinks.

Zum Abschluss werden auch ein paar Verfahren behandelt, schnell viele Datensätze als Testdaten zu erzeugen. Für das Verständnis der Inhalte des Buchs sind diese Verfahren nicht wichtig. Sie sind aber äußerst nützlich, wenn Sie weitere Möglichkeiten der SQL-Befehle ausprobieren wollen.

Anmerkungen[Bearbeiten]

Die Beispieldatenbank wurde erstellt und eingefügt, als sich das Buch noch ziemlich am Anfang befand. Im Laufe der Zeit wurden bei der Konzeption und der Umsetzung in Beispielen Unstimmigkeiten und Mängel festgestellt. Auf diese soll hier hingewiesen werden; teilweise wurden sie beseitigt, teilweise werden wir die Datenstruktur in späteren Kapiteln ändern, teilweise belassen wir es dabei.

Namen von Tabellen und Spalten

Es ist üblicher, eine Tabelle im Singular zu bezeichnen.

  • Es ist einfacher zu sagen: Ein Versicherungsvertrag hat diese Eigenschaften… Umständlicher wäre: Ein Datensatz der Tabelle Versicherungsverträge hat diese Eigenschaften…
  • Vor allem beim Programmieren werden die Namen mit anderen Begriffen verknüpft; es käme dann etwas wie VertraegePositionenRow zustande – also die Positionen von Verträgen –, wo nur eine einzelne Zeile, nämlich eine Position eines Vertrags gemeint ist.

➤ Aus diesem Grund wurden die o. g. SQL-Skripte nochmals vollständig überarbeitet; alle Tabellennamen benutzen jetzt den Singular.

In einem Programmiererforum gab es einmal eine Diskussion über „Singular oder Plural“. Dort wurde das als uraltes Streitthema bezeichnet, das zu heftigsten Auseinandersetzungen führen kann. Im Ergebnis sollte es eher als Geschmackssache angesehen werden. Also hat der Autor in diesem Buch seinen Geschmack durchgesetzt. Wer mag, kann für sich alle Tabellennamen (im Skript für die Beispieldatenbank und in allen Beispielen und Übungen) ändern.

Die Spalten von Tabellen sollen den Inhalt klar angeben; das ist durchgehend berücksichtigt worden. Es ist nicht üblich, ein Tabellenkürzel als Teil des Spaltennamens zu verwenden; denn ein Spaltenname wird immer in Zusammenhang mit einer bestimmten Tabelle benutzt.

➤ Aus einer früheren Version der Beispieldatenbank wurden diese Kürzel entfernt.

Es ist häufig praktischer, englische Begriffe für Tabellen und Spalten zu verwenden. Programmierer müssen die Namen weiterverarbeiten; weil sowohl Datenbanken als auch Programmiersprachen mit Englisch arbeiten, entstehen ständig komplexe Namen. Dabei ist ein Begriff wie CustomerNumberChanged (also reines Englisch) immer noch besser als etwas wie KundeNummerChanged, also denglischer Mischmasch.

➤ Auf diese Änderung wird verzichtet, weil es ziemlich umständlich gewesen wäre. Außerdem spielt die Weiterverwendung durch Programmierer in diesem Buch eigentlich keine Rolle.

Aufteilung der Tabellen

Die Aufgaben der Versicherungsgesellschaft können nur eingeschränkt behandelt werden. Es fehlen Tabellen für Abrechnung und Zahlung der Prämien sowie Abrechnung der Kosten für Schadensfälle.

➤ Auf diese Aufgaben wird hier verzichtet.

Die Tarife und damit die Höhe der Basisprämie gehören in eine eigene Tabelle; ein Versicherungsvertrag müsste darauf verweisen.

➤ Auf diese Aufteilung wird wegen der Vereinfachung verzichtet.

Sowohl Mitarbeiter als auch Versicherungsnehmer sind Personen: Auch zu einem Versicherungsnehmer passen Kontaktdaten; auch bei einem Mitarbeiter ist die Privatanschrift von Bedeutung. Es wäre deshalb vernünftig, eine gemeinsame Tabelle Person einzurichten; die Tabelle Mitarbeiter würde Verweise auf diese Tabelle erhalten.

➤ Auf diese Änderung wird wegen der Vereinfachung verzichtet.

Man kann darüber streiten, ob der optionale Verweis auf eine fremde Versicherungsgesellschaft besser zum Versicherungsvertrag oder zum Versicherungsnehmer gehört.

➤ Wegen dieser Unklarheit wird auf eine Änderung verzichtet.

Die Verknüpfungen zwischen den Tabellen fehlten in der Ursprungsversion der Beispieldatenbank vollständig. Sie werden in den Kapiteln Fremdschlüssel-Beziehungen besprochen und in Änderung der Datenbankstruktur eingebaut.

Fehlende Spalten und Einschränkungen

Neben den bereits genannten Punkten sind weitere Spalten sinnvoll bzw. notwendig:

  • Tabelle Versicherungsvertrag: Basisprämie, Prämiensatz, letzte Änderung des Prämiensatzes
  • Tabelle Zuordnung_SC_FZ: Anteil am Verschulden
  • Tabellen Versicherungsnehmer und Mitarbeiter: Geschlecht m/w wegen der Anrede in Briefen

Viele Einschränkungen fehlen in der ursprünglichen Version:

  • Spalten, deren Werte eindeutig sein müssen
  • Spalten, deren Werte nur bestimmte Werte annehmen dürfen
  • Tabellen, bei denen Spaltenwerte in gewisser Beziehung stehen müssen

Diese Änderungen werden in DDL - Einzelheiten besprochen und in Änderung der Datenbankstruktur eingebaut.