Ausbildungsprojekt
Datenbank-Projekt
Lokale und Client-Server-Datenbanken, Datentypen, Normalisierung bis zur dritten Normalform und der Einstieg in ADABAS D.
Einführung Datenbankprojekt
Es gibt lokale und Client-Server-Datenbanken. Die lokalen Datenbanken sind den Client-Server-Datenbanken in der Geschwindigkeit überlegen. Dafür ist die Client-Server-Datenbank in der Datensicherheit (durch RAID-System und Rollback) im Vorteil.
Als Datenbank-Software wird hier ADABAS D eingesetzt. Da diese Software mächtiger ist als zum Beispiel Microsoft Office, wird die Datenbankmanagement-Software auf dem Server der Klasse (DIANA) installiert.
Im Laufe der Ausbildung werden eine Telefondatenbank, eine Personendatenbank, eine Inventardatenbank und eine Firmendatenbank erstellt. Des Weiteren wird die Datenbanksprache SQL (Structured Query Language) vermittelt, ohne die die Bedienung der Datenbankmanagement-Software nicht möglich ist. Alle diese Arbeiten müssen im Team geplant, ausgewertet und abgeschlossen werden.
Einführung Datenbanken
Welche Datenbanken gibt es?
Lokale Datenbanken
- dBase, heute Visual dBase (früher Borland)
- Excel ist eigentlich ein Tabellenkalkulationsprogramm von Microsoft, kann aber auch als Datenbank benutzt werden
- Access ist eine richtige Datenbank von Microsoft, die auch SQL versteht und sich mit anderen Datenbanken verknüpfen lässt
Client-Server-Datenbanken
- ADABAS D von Software AG
- Oracle von Oracle
- Informix von Informix
- DB2 von IBM
- PostgreSQL, frei für Linux und Unix
- mSQL von Hughes
- MySQL, frei für Linux, Unix bzw. Windows NT
Eine gute Datenbank sollte viele Schnittstellen zur Dateneingabe haben und auch Importmöglichkeiten aus anderen Datenbanken besitzen.
Was passiert mit einer Datenbank?
In einer Datenbank läuft im Hintergrund immer ein Prozess, der überwacht, was in der Datenbank passiert. Diesen Vorgang nennt man Datenbankmanagement. Es legt fest, wie Daten (Verzeichnisse, Dateien) systematisch angelegt werden. Eine Datenbank macht zu bestimmten Zeiten aus Sicherheitsgründen ein Systembackup und schreibt dieses wieder zurück auf die Festplatte, wobei sie Dateien und Verzeichnisse ordnet (defragmentiert). Das Datenbankmanagement räumt außerdem im Hintergrund die Datenbank auf (doppelte oder sinnlose Daten).
Datenhaltung
Namen
Da unser Datenbankprogramm ADABAS D historisch gewachsen ist, gibt es eine Begrenzung für Namen: Sie dürfen eine Länge von 8 Zeichen nicht überschreiten.
Tabellen
ADABAS D führt in seinem Programm Systemtabellen mit dem Inhalt, welcher User was darf, außerdem Verzeichnisse, in denen steht, welche Tabellen benutzt werden, und Tabellen, die der User benötigt. Tabellen anlegen darf nur der Administrator der Datenbank bzw. privilegierte User. Bei der Excel-Tabelle werden die Daten nach Spalten und Zeilen definiert.
| Begriff | Datenbank | Excel |
|---|---|---|
| Spalten | Jede Spalte hat einen Namen (max. 8 Zeichen, ohne ä, ö, ü). Die Anzahl der Spalten ist logisch nicht begrenzt. | Begrenzt bis Spalte IV |
| Zeilen | Eine Zeile ist ein Datensatz. Daneben wird eine Datensatznummer geführt, die im Normalfall nicht benötigt wird. In jedem Datensatz existieren Identifikationsnummern. | Begrenzt auf ein Wort (16 Bit = 65.532) |
| Felder | Durch die eindeutige Zuordnung einer Zeile als Datensatz sind die Definitionen für alle Zeilen gleich, da die Spalten fest vorgegeben sind. In Satz 0 der Datenbank ist die Spaltendefinition festgelegt. | Jedes Feld kann direkt angesprochen werden (Spalte, Zeile) |
Datentypen
Die Tabellen sind aus dem Original sinngemäß rekonstruiert. Leere Zellen bedeuten, dass es für das System keinen eigenen Typ gibt.
Numerische Datentypen
| Typ | ANSI | ADABAS D | Access | Oracle |
|---|---|---|---|---|
| Ganz kleine ganze Zahl | smallint | fixed (5) | byte (0 bis 255) | number (5) |
| Kleinere ganze Zahl (−215 bis +215) | smallint | fixed (5) | integer | number (5) |
| Größere ganze Zahl (−231 bis +231) | integer | fixed (10) | long integer | number (10) |
| Festpunktzahl (n Stellen vor, m nach dem Komma) | numeric (n,m) / decimal (n,m) | fixed (n,m), n ≤ 18 | number (n,m), n ≤ 38 | |
| Währung | fixed (8,2) | Währung | number (8,2) | |
| Gleitpunktzahl (GZ) | float (n) | float (n), n ≤ 18 | float (n) | |
| GZ geringere Genauigkeit (bis E ± 38) | real | float (15) | single | number |
| GZ höhere Genauigkeit (bis E ± 308) | double precision | float (18) | double | number |
| Ja / Nein (0 und 1) | bit (1) | fixed (1) bzw. boolean | ja / nein | number (1), constraint in (0;1) |
| Zähler (automatisch hochgezählt) | syskey | Zähler | rowid |
Text-Datentypen
| Typ | ANSI | ADABAS D | Access | Oracle |
|---|---|---|---|---|
| Text mit fester Länge | char (n) | char (n), ≤ 4000 Zeichen | Text, ≤ 255 Zeichen | char (n), ≤ 255 Zeichen |
| Text mit variabler Länge | character varying (n) | varchar (n), ≤ 4000 Zeichen | Text, ≤ 255 Zeichen | varchar (n) / varchar2 (n), ≤ 2000 Zeichen (≤ 4000 ab Oracle 8.0) |
| Sehr langer Text | long | long, ≤ 2 GB | Memo, ≤ 64000 Zeichen | long, ≤ 2 GB (clob ab Oracle 8.0) |
| Ja / Nein (logisches Feld) | char (1) | char (1), constraint in ("J","N") | Ja / Nein | char (1), constraint in ("J","N") |
Datums-Datentypen
| Typ | ANSI | ADABAS D | Access | Oracle |
|---|---|---|---|---|
| Datum | date | date | Datum / Zeit | date (enthält auch die Zeit) |
| Zeit | time | time | Datum / Zeit | date (enthält auch die Zeit) |
| Timestamp (Systemzeitmarke) | timestamp | timestamp | ||
| Zeitintervall | interval |
Binäre Datentypen
| Typ | ANSI | ADABAS D | Access | Oracle |
|---|---|---|---|---|
| Beliebige Binärdaten, feste Länge | bit (n) | char (n) byte, ≤ 4000 Byte | OLE-Objekt, ≤ 1 GB | raw (n), ≤ 2 KB |
| Beliebige Binärdaten, variable Länge | bit varying (n) | varchar (n) byte, ≤ 4000 Byte | OLE-Objekt | raw (n) |
| Binärdaten großen Umfangs (BLOB) | long byte, ≤ 2 GB | OLE-Objekt, ≤ 1 GB | long raw, ≤ 2 GB (BLOB ab Oracle 8.0) |
Datenstrukturen
Eine Datenbank hat immer eine tabellarische Form, in deren Kopf die Felddefinition steht und in der eine Zeile einem Datensatz zugeordnet ist. Es gibt lineare (konstante Länge) und relationale (keine Redundanz) Strukturen.
Lineare Struktur
- Bei konstanter Länge werden die Felder in einem Header festgelegt. Bei einer festen Struktur wird viel Speicherplatz verschenkt (zum Beispiel bei Ortsnamen).
- Bei variabler Länge werden die Felder in der Länge angepasst.
- Einmal festgelegte Felddefinitionen sind in einer linearen Struktur nicht mehr veränderbar.
- Die Verknüpfung mit anderen Datenbanken sollte über ANSI (erweitertes ASCII) erfolgen, um die Kompatibilität zu gewährleisten.
- Zur Trennung der einzelnen Datenfelder variabler Länge wird ein sogenannter Trenner verwendet. In den meisten Fällen ist das ein Semikolon (
;). Es können auch andere Zeichen als Trenner definiert werden (zum Beispiel&,-oder Sonderzeichen).
Relationale Struktur
In einer relationalen Datenbank spricht man von Normalisierung: Doppelte und unnütze Daten werden eliminiert.
Normalisierung an einem Beispiel
Eine Firma möchte Daten zu ihren Kunden und deren Mitarbeitern speichern. Die Normalisierung der Daten besteht aus fünf Stufen. Für die meisten Anwendungen reicht eine Normalisierung bis zur dritten Normalform. Ziel ist, doppelte Speicherung einer Information zu vermeiden und jede gewünschte Information eindeutig in der Datenbank zu finden. Primärschlüssel werden in Großbuchstaben geschrieben.
Ausgangsproblem: Wiederholungen (Iteration)
| KDNR | Firmenname | Straße | Ort | Name1 | Name2 | Name3 | Telefon1 | Telefon2 | Telefon3 |
|---|
Die Struktur ist nicht eindeutig. In welchem Feld der Name eines Mitarbeiters steht, kann nicht vorhergesagt werden. Der gesuchte Name kann in einem von drei Feldern stehen und ist nur mühsam zu finden.
Erste Normalform
| KDNR | MANR | FName | Straße | Ort | Name | Telefon |
|---|
Für jeden Mitarbeiter des Kunden wird ein einzelner Datensatz angelegt. Damit jeder Datensatz einen eindeutigen Schlüssel besitzt, wird ein neues Feld MANR (Mitarbeiternummer) für eine laufende Nummerierung eingefügt.
Einige Probleme bestehen weiterhin: Soll die Adresse einer Firma geändert werden, ist ein sehr großer Aufwand nötig, denn in jedem Datensatz eines Mitarbeiters dieser Firma muss die Änderung durchgeführt werden. Dabei besteht die Gefahr, dass einzelne Datensätze nicht oder falsch geändert werden. Eine Firma, zu der kein Mitarbeiter gespeichert ist, enthält wieder leere Felder in ihrem Datensatz. Wird ein Mitarbeiter in die Datei aufgenommen, muss zunächst geprüft werden, ob die Firma bereits existiert. Diesen Fehler bezeichnet man als Dateninkonsistenz. Die Integrität (also Sicherheit) der Daten wird durch die Umwandlung in die zweite Normalform wiederhergestellt.
Zweite Normalform
| KDNR | Firmenname | Straße | Ort | Telefon |
|---|
| KDNR | MANR | Name | Durchwahl |
|---|
In der zweiten Normalform werden die Abhängigkeiten zu den einzelnen Teilen des Primärschlüssels aufgelöst. Den Primärschlüssel der Datei bilden die Felder KDNR und MANR. Einige der Daten, wie Straße und Ort des Kunden, sind aber nur von der Kundennummer abhängig. Diese Daten werden darum in einer eigenen Datei gespeichert. Die erste Datei enthält nur Daten zum Unternehmen des Kunden, die zweite die Informationen zu den Mitarbeitern eines Unternehmens.
Dritte Normalform
Wir erweitern die Kundendatei um ein Feld für die Einstufung als guter oder weniger guter Kunde. Abhängig davon werden der Firma bestimmte Rabatte oder Skonti gewährt.
Problem: transitive Abhängigkeit
| KDNR | Firmenname | Straße | Ort | Telefon | Kundenart | Rabatt | Skonti |
|---|
Die Daten in den Feldern Rabatt und Skonti hängen nur vom Eintrag im Feld Kundenart ab. Zu jeder Kundenart gibt es genau einen Wert für den maximalen Rabatt und eine genaue Skonti-Regelung. Eine solche Abhängigkeit von einem Feld, das nicht zum Primärschlüssel gehört, heißt transitive Abhängigkeit.
Bei Änderungen können wieder Probleme auftauchen: Ändert sich bei einem Kunden das Feld Kundenart, können Fehler bei der Aktualisierung von Rabatt und Skonti entstehen. Ändert sich der maximale Rabatt einer Kundenart, muss die gesamte Datei nach passenden Datensätzen durchsucht und jeder einzelne geändert werden. Ein neuer Kundentyp kann erst eingefügt werden, wenn Daten zu einem Kunden dieser Art eingegeben werden. Und wenn der letzte Kunde einer Kundenart gelöscht wird, ist keine Information über diese Kundenart mehr vorhanden. Gelöst wird das, wie zuvor, durch Aufteilen der Information auf mehrere Dateien.
Dritte Normalform
| KDNR | Firmenname | Straße | Ort | Telefon | KUNDENART |
|---|
| KUNDENART | Rabatt | Skonto |
|---|
Jetzt besteht keine Abhängigkeit mehr von einem Feld zu einem anderen Feld. Auf diese Daten kann mit sehr hoher Datensicherheit in einem relationalen Datenbanksystem zugegriffen werden. Die einzig redundanten Daten sind die Schlüssel, über die die Verbindungen hergestellt werden.
Datenbankplanung
Alle Felder zusammengetragen:
| KDNR | Firmenname | PLZ | Ort | Straße | Anrede | Telefon | Vorwahl | KnArt | Rabatt | Skonto |
|---|
Daraus lösen sich zum Beispiel diese Tabellen heraus (Postleitzahl und Ort getrennt):
| KDNR | Firmenname | PLZ | Straße |
|---|
| PLZ | Ort |
|---|
Normalisierung findet auf dem Papier und im Kopf desjenigen statt, der die Datenbank entwickelt. Zuerst werden alle Daten zusammengetragen, die in die Datenbank aufgenommen werden sollen. Dann werden die Daten herausgesucht, die redundant sind (sich wiederholen), und geprüft, welche Daten wohin gehören. Normalisierte Tabellen sollen möglichst wenige Spalten enthalten, um ein einfaches und schnelles Finden zu ermöglichen. Die Gesamtmenge der normalisierten Tabellen muss alle erforderlichen Informationen enthalten. Ausgabe-, Bearbeitungs-, Eingabe- und Änderungsmasken erhalten ihre Informationen über Primärschlüssel, Sekundärschlüssel und Indexierungen aus den normalisierten Tabellen.
ADABAS D einrichten und benutzen
Das Userkonzept
- Node = Server, auf dem die Datenbank läuft
- DB = Datenbank
- User = Benutzer
- DBA = Datenbankadministrator
- Control ist der Datenbank-Administrator (Zustände: warm, cold, offline).
- Admin ist der Systemadministrator und für die Verteilung der Rechte zuständig, also welcher User welche Rechte hat.
Die Vorführung am Beamer arbeitete mit den Beispieldatenbanken MyDB, Telefon, Personen, Firmen, Inventar, Test und Demo, jeweils mit eigenem DBA (zum Beispiel PDBA, FDBA, IDBA).
Grundtabelle und Normalisierung im Speicherbedarf
Grundtabelle
ID = int (4 Byte)
Vorname = varchar(20) (20 Byte)
Nachname = varchar(20) (20 Byte)
Ort = varchar(20) (20 Byte)
Summe: 64 Byte
Normalisiert
Namenstabelle: ID (4), Vorname (20), Nachname (20), OID = Orts-ID (4) = 48 Byte
Ortstabelle: OID (4), Ort (20) = 24 Byte
Summe: 72 Byte
Durch die Normalisierung ist zwar die Gesamtzahl der Bytes gestiegen. Durch die Auskopplung des Ortes wird das Gesamtaufkommen der Daten aber erheblich reduziert, weil sich sonst der Ort in jedem Namensdatensatz wiederholen würde (Redundanz).
ADABAS-D-Client installieren
- Als lokaler Administrator anmelden.
- Netzwerkumgebung auf dem Desktop anklicken, den Server Diana anklicken.
- Username und Passwort eingeben.
- Ins Verzeichnis Adabas Client wechseln und
Setup.exestarten. - Auf Next klicken, das Verzeichnis beibehalten, Next.
- Den Button ODBC32 zuerst anklicken. Die Felder Remote und Update environment müssen angewählt sein, Next.
- User Environment selektieren, Next. Lesen, Next. Der Computer wird zu einem späteren Zeitpunkt neu gestartet.
- Anschließend
Setup.exeerneut starten, die Schritte 5 bis 7 bleiben gleich. - Nun auf Clients only klicken. Im nächsten Fenster das Kästchen WebDB deaktivieren, Next. Im folgenden Fenster beides selektieren, Next.
- Wieder User Environment selektieren, Next. Zweimal lesen, jeweils Next. Die Installation startet.
- Im Welcome-Fenster (TCL 8.0 Installation) auf Next klicken, das vorgeschlagene Verzeichnis unverändert lassen, Next. Die Full Installation durchführen, Next. Lesen, Next.
- Die Installation ist beendet, und ADABAS D kann gestartet werden.
System-DSN und Benutzer-DSN einrichten (als Administrator)
- Systemsteuerung starten, ODBC anklicken.
- Karteireiter SystemDSN anklicken und auf Hinzufügen klicken.
- ADABAS D auswählen und Fertigstellen klicken.
- Im nächsten Fenster eintragen und mit OK bestätigen:
Data Source : /DB/adabas/wrk/MYDB/MYDB
Description : DemoDB
Server db : MYDB
Servernode : zeus
Diese Schritte müssen für jede bereits erstellte Datenbank wiederholt werden, da sonst kein Zugriff auf die Datenbank erfolgt. Anschließend wechselt man auf den Karteireiter BenutzerDSN und führt dieselben Schritte für alle bereits erstellten Datenbanken aus. Auch als normaler User muss man diese Schritte wiederholen.
Beginn der Personendatenbank
Welche Informationen gehören in eine Personendatenbank? Das Zusammentragen dieser Informationen heißt Basisrelation. Es sollten rein: