Einführung Datenbankprojekt
Es gibt lokale und Client-Server Datenbanken. Die lokalen Datenbaken sind den
Client-Server Datenbanken in der Geschwindigkeit überlegen. Dazu ist im
Gegensatz die Client-Server Datenbank in der Datensicherheit (durch RAID-System
und RollBack) den lokalen Datenbank im Vorteil.
Als Datenbank-Software wird hier ADABAS D eingesetzt. Dadurch, dass
diese Software mächtiger ist als z.B. Microsoft Office, wird diese
Datenbankmanagementsoftware auf dem Server (DIANA) der Klasse
installiert.
Im Laufe der Ausbildung werden eine Telefondatenbank, eine Personendatenbank,
eine Inventardatenbank und eine Firmendatenbank erstellt. Des weiteren wird die
Datenbankprogrammiersprache SQL (Structure 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?
Locale Datenbanken
Dbase heute VisualDbase von der Firma Inprice (früher Borland)
Excel ist eigentlich ein Tabellenkakulationsprogramm von Microssoft
kann aber auch als Datenbank benutzt werden
Access ist eine richtige Datenbank von Microsoft welche auch SQL versteht
und sich mit anderen Datenbanken verknüpfen
Eine gute Datenbank sollte viele Schnittstellen zur Dateneingabe haben und
auch Importmöglichkeiten aus anderen Datenbanken besitzen.
Client-Server Datenbanken
ADABAS-D von Software AG
Oracle von Oracle
Informix von Informix
DB2 von IBM
PostgreSQL von ?????????? ist frei für Linux und Unix
mSQL von HUGES
MySQL von ????????? ist frei für Linux und Unix bzw. Windows NT
Was passiert mit einer Datenbank?
In einer Datenbank ist im Hintergrund immer ein Prozeß in gang, welcher überwacht,
was in der Datenbank passiert. Diesen Vorgang nennt man Datenbankmanagement.
Diese Management 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 und
ordnet dabei Dateien und Verzeichnisse (defragmentieren). Das
Datenbankmanagement räumt auch im Hintergrund die Datenbank auf (doppelte oder
sinnlose Daten).
Datenhaltung
Namen
Dadurch, das unser Datenbank Programm ADABAS-D historisch gewachsen ist, ist
hier eine Begrenzung der Namen von Dateien eine Länge von 8 Zeichen nicht überschreitet.
Tabellen
ADABAS-D führt in seinem Programm Systemtabellen mit dem Inhalt, welcher
User darf was und Verzeichnisse, in den steht welche Tabellen benutzt werden und
Tabellen, welche der User benötigt.
Das anlegen von Tabellen darf nur der Administrator der Datenbank bzw.
privilegierte User.
Bei der Exceltabelle werden die Daten nach spalten und Zeilen definiert.
Spalten
In der Datenbanktabelle hat jede Spalte einen Namen (max. 8 Zeichen ohne ü,
ä, ö). Die Anzahl der Spalten ist bei der Datenbank nicht logisch begrenzt(bei
Excel begrenzt bis Spalte iv).
Zeilen
Bei Excel sind die Zeilen begrenzt auf ein Doppelwort (16 Bit = 65532). In
Datenbanken werden Zeilen als Datensatz definiert. Des weiteren wird eine
Datensatznummer, die aber im Normalfall nicht benötigt wird, geführt. In jedem
Datensatz existieren Identifikations-nummern.
Felder
Bei Feldern in Excel kann jedes Feld direkt angesprochen werden(Spalte,
Zeile). Durch die eindeutige Zuordnung einer Zeile als Datensatz und da es sich
um eine Datensatzstruktur handelt, sind die Definitionen für alle Zeilen
gleich, da die Spalten fest vorgegeben sind.
Spalten
1. Satz
2.Satz
In Satz 0 der Datenbank ist die Spaltendefinition festgelegt.
Datentypen
Numerische Datentypen
|
|
|
|
|
|
|
Ansi
|
ADABAS-D
|
Access
|
Oracle
|
ganz kleine ganze Zahl
|
smallint
|
fixed (5)
|
byte 0-255
|
number (5)
|
|
|
|
|
|
|
kleinere ganze Zahl
|
|
fixed (5)
|
integer
|
number (5)
|
|
|
|
|
-215 bis +215
|
|
|
|
|
|
|
|
größere ganze Zahl
|
integer
|
fixec (10)
|
long integer
|
number (10)
|
|
|
|
|
-231 bis +231
|
|
|
|
|
|
|
|
Festpunkt Zahl
|
|
numeric (n,m)
|
fixed (n,m)
|
|
number (n,m)
|
n - vor
|
|
decimal (n,m)
|
n<=18
|
|
n<=38
|
m - nach
|
|
|
|
|
|
|
|
|
|
|
|
Währung
|
|
|
fixed (8,2)
|
Währung
|
number (8,2)
|
|
|
|
|
|
|
Gleitpunkt Zahlen (GZ)
|
float (n)
|
float (n)
|
|
float (n)
|
|
|
|
n<=18
|
|
|
|
|
|
|
|
|
GZ geringere Genauigkeit
|
real
|
float (15)
|
single
|
number
|
|
|
|
|
bis E + - 38
|
|
|
|
|
|
|
|
GZ höherer Genauigkeit
|
double precision
|
float (18)
|
double
|
number
|
|
|
|
|
bis E + - 308
|
|
|
|
|
|
|
|
JA / NEIN
|
|
bit (1)
|
fixed (1)
|
ja / nein
|
number (1)
|
0 und 1
|
|
|
constraint in (0;1)
|
|
constraint in (0;1)
|
logisches Feld
|
|
|
boolean
|
|
|
|
|
|
|
|
|
Zähler
|
|
|
|
|
|
wird vom DbMS auto-
|
|
syskey
|
Zähler
|
rowid
|
matisch hochgezählt
|
|
char (8) byte
|
|
|
|
|
|
|
|
|
Text Datentypen
|
|
|
|
|
|
|
|
Ansi
|
ADABAS-D
|
Access
|
Oracle
|
Text mit fester Länge
|
char (n)
|
char (n)
|
Text
|
char (n)
|
|
|
|
<=4000 Zeichen
|
<= 255 Zeichen
|
<=255 Zeichen
|
|
|
|
|
|
|
Text mit variabler Länge
|
character
|
varcharacter (n)
|
Text
|
varcharacter (n)
|
|
|
varying (n)
|
n<=4000 Zeichen
|
<=255 Zeichen
|
varcharacter2 (n)
|
|
|
varcharacter (n)
|
|
|
<=2000 Zeichen
|
|
|
|
|
|
(<=4000 Zeich.
|
|
|
|
|
|
bei Oracle 8.0)
|
|
|
|
|
|
|
Sehr langen Text
|
|
|
long
|
Memo
|
long
|
|
|
|
longvarchar
|
<=64000 Zeichen
|
(clob bei O. 8.0
|
|
|
|
bis 2 GB
|
|
<=2 GB)
|
|
|
|
|
|
|
Ja / Nein
|
|
|
char (1)
|
Ja / Nein
|
char (1)
|
J / N
|
|
|
constraint in ("J","N")
|
|
constraint in ("J","N")
|
logisches Feld
|
|
|
|
|
|
|
|
|
|
|
|
Datum Datentypen
|
|
|
|
|
|
|
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
|
|
timestamp
|
timestamp
|
|
|
Systemzeitmarke
|
|
|
|
|
|
|
|
|
|
|
|
Zeitintervall
|
|
interval
|
|
|
|
|
|
|
|
|
|
Binäre Datentypen
|
|
|
|
|
|
|
Ansi
|
ADABAS-D
|
Access
|
Oracle
|
beliebige binär Daten
|
bit (n)
|
char (n) byte
|
OLE-Objekt
|
raw (n)
|
mit fester Länge
|
|
|
<=4000 Byte
|
<=1 GB
|
<=2 KB
|
|
|
|
|
|
|
beliebige binär Daten
|
bit varying (n)
|
varchar (n) byte
|
|
|
mit variabler Länge
|
|
<=4000 Byte
|
|
|
|
|
|
|
|
|
binär Daten großen
|
|
long byte
|
OLE-Objekt
|
long raw
|
Umfangs
|
|
|
<=2 GB
|
<=1 GB
|
(BLOB in Oracle 8.0)
|
(Binary Large)
|
|
|
|
|
<= 2 GB
|
(BLOB)
|
|
|
|
|
|
|
|
|
|
|
|
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
In einer linearen Struktur mit konstanter Länge werden die Felder in einem
Header festgelegt. Bei einer festen Struktur wird viel Speicherplatz verschenkt
(z.B. bei Ortsnamen).
In einer linearen Struktur mit variabler Länge werden die Felder in der Länge
angepaßt.
In einer linearen Struktur sind die einmal festgelegten Felddefinitionen
nicht mehr veränderbar.
Die Verknüpfung mit anderen Datenbanken sollte über ANSI (erweiterter
ASCII) erfolgen um die Kompatibilität zu gewährleisten.
Um die Trennung der einzelnen Datenfelder mit variabler Länge herzustellen,
wird ein sogenannter Trenner verwendet. In den meisten Fällen wird dies mit
einem Semikolon (;) erfolgen. Es können auch andere Zeichen als Trenner
definiert werden (z.B. &, -, oder Sonderzeichen).
Relationale Struktur
In einer relationalen Datenbank spricht man von einer Normalisierung. Bei
einer Normalisierung werden doppelte und unnütze Daten eleminiert.
Beispiel für eine Normalisierung:
Eine Firma möchte Daten zu ihren Kunden und deren Mitarbeitern speichern.
Problem: (Iteration – Wiederholung)
KDNR.
|
Firmenname
|
Straße
|
Ort
|
Name1
Name2
Name3
|
Telefon1
Telefon2
Telefon3
|
Primärschlüssel in Großbuchstaben
Die Normalisierung von Daten für die Speicherung einer Datenbank besteht aus
fünf Stufen. Für die meisten Anwendungen reicht eine Normalisierung bis zur
dritten Normalform aus. Das Ziel dieser Schritte ist die Vermeidung von
doppelter Speicherung einer Information und das eindeutige Finden jeder gewünschten
Information aus der Datenbank.
Die Normalisierung der Daten vermeidet in der ersten Stufe das Auftauchen von
Wiederholungen in einem Datensatz.
Vorhandene Probleme sind, daß die Struktur immer noch nicht eindeutig
festgelegt ist. 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: (inkonsistenz – zusammenhängend)
KDNR.
|
MANR
|
FName
|
Straße
|
Ort
|
Name
|
Telefon
|
Primärschlüssel in Großbuchstaben
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 Numerierung der Mitarbeiter eingefügt.
Einige Probleme bestehen aber weiterhin: Soll die Adresse einer Firma geändert
werden, ist ein sehr großer Aufwand erforderlich. In jedem Datensatz eines
Mitarbeiters dieser Firma ist diese Änderung durchzuführen. Dabei besteht die
Gefahr, das 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, muß zunächst geprüft
werden, ob ein solcher Datensatz bereits existiert, da die Daten dann in diesen
Datensatz eingefügt werden. Diesen Fehler bezeichnet man als Dateninkosistenz.
Die Integrität (d.h. Sicherheit) der Daten, wird durch die Umwandlung der
Dateien in die zweite Normalform wiederhergestellt.
Zweite Normalform:
KDNR.
|
Firmenname
|
Straße
|
Ort
|
Telefon
|
Primärschlüssel in Großbuchstaben
KDNR.
|
MANR
|
Name
|
Durchwahl
|
Primärschlüssel in Großbuchstaben
In er 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 die Angabe zu Straße und Orte 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, die sich auf das Unternehmen
des Kunden beziehen. In der zweiten Datei sind die Informationen zu den
Mitarbeitern eines Unternehmens gespeichert.
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. Die Kunden Datei weist dann die nachstehende Struktur auf.
Problem: (transitive – fordernd, zielend)
KDNR.
|
Firmenname
|
Straße
|
Ort
|
Telefon
|
Kundenart
|
Rabatt
|
Skonti
|
Primärschlüssel in Großbuchstaben
Die Daten in den Feldern Rabatt und Skonti
hängen nur von dem Eintrag im Feld Kundenart ab.
Zu jeder Kundenart gibt es genau einen Wert für
den maximalen Rabatt und eine genaue Skonti
Regelung. Diese Abhängigkeit von einem Feld, das nicht zum Primärschlüssel
einer Datei gehört, wird als transitive Abhängigkeit bezeichnet.
Bei einer Änderung der Daten in den Sätzen der Kundendatei können auch
hier wieder Probleme auftauchen. Ändert sich bei einem Kunden das Feld Kundenart
können Fehler auftauchen bei der Aktualisierung der beiden Felder Rabatt
und Skonti. Genauso treten Probleme bei der Änderung
des maximalen Rabatts auf, den eine Kundenart
bekommt. Es muß dann die gesamte Datei nach Datensätzen, für die diese Kundenart
zutrifft, durchsucht und jede einzelne geändert werden. Einer neuer Kundentyp
kann erst dann eingefügt werden, wenn Daten zu einem Kunden eingegeben werden,
auf den dieses Merkmal zutrifft. Wenn die Daten des letzten Kunden einer Kundenart
gelöscht werden, ist keine Information über diese Kundenart
mehr vorhanden.
Diese Probleme werde genauso wie die vorherigen Abhängigkeiten durch
aufteilen der Information auf mehrere Dateien gelöst.
Dritte Normalform:
KDNR.
|
Firmenname
|
Straße
|
Ort
|
Telefon
|
KUNDENART
|
Primärschlüssel in Großbuchstaben
Primärschlüssel in Großbuchstaben
Die Daten sind jetzt in der Dritten Normalform dargestellt. Eine Abhängigkeit
von einem Feld zu einem anderen Feld besteht nicht mehr. Auf diese Daten kann
mit einer sehr hohen Datensicherheit in einem relationalen Datenbanksystem
zugegriffen werden. Die einzig redundanten Daten sind die Schlüssel, über die
diese Verbindungen hergestellt werden.
Datenbankplanung
KDNR
|
Firmenname
|
PLZ
|
Ort
|
Straße
|
Anrede
|
Telefon
|
Vorwahl
|
KnArt
|
Rabatt
|
Skonto
|
Normalisierung findet auf dem Papier und im Kopf des jenigen statt, welcher
die Datenbank entwickelt. Als erstes sollte man alle Daten zusammentragen die in
die Datenbank aufgenommen werden sollen. Dann werden die Daten herausgesucht,
die redundant (sich wiederholen) sind. Als nächster Schritt wird überprüft,
welche Daten gehören wohin. Es werden zuerst die redundanten Daten aus dem
Datenpool herausgelöst. 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, Die Ausgabe-, Bearbeitungs-, Eingabe- und Änderungsmasken erhalten
ihre Informationen über Primärschlüssel, Sekundärschlüssel und über
Indexierungen aus den normalisierten Tabellen.
Einführung in das Userkonzept von ADABAS-D
Node = Server, auf dem die Datenbank läuft
DB = Datenbank
User = Benutzer
DBA = Datanbankadministrator
Der User
Control ist der Datenbank Administrator (Zustände: warm, cold, offline)
Admin ist der Systemadministrator und für die Verteilung der Rechte zuständig
(welcher User hat welche Rechte)
DBA *****
Resource *****
User *****
MyDB
|
|
Telefon
|
Test
|
Personen
|
DB Probe
|
Firmen
|
Inventar
|
Control
|
|
|
|
|
|
|
|
Admin
|
|
|
|
|
|
|
|
Domain
|
|
|
|
|
|
|
|
DBA
|
|
|
|
PDBA
|
DDBA itseDB
|
FDBA
|
IDBA
|
Demo
|
Demo
|
??
|
Test test
|
??
|
??
|
??
|
??
|
ADABAS-D Userkonzept Vorführung am Beamer
Einrichten und Benutzen von ADABAS-D
Grundtabelle
ID = int (Integer - ganze Zahlen)
Vorname = varchar(20) (variable character – variable Zeichenlänge)
Nachname = varchar(20)
Ort = varchar(20)
ID = 4 Byte
Vorname = 20 Byte
Nachname = 20 Byte
Ort = 20 Byte
64 Byte
Normalisierung
Namenstabelle
ID = int = 4 Byte
Vorname = varchar(20) = 20 Byte
Nachname = varchar(20) = 20 Byte
OID = OrtsID = int = 4 Byte
= 48 Byte
Ortstabelle
OID = int = 4 Byte
Ort = varchar (20) = 20 Byte
= 24 Byte
= 72 Byte
Durch die Normalisierung ist zwar die Gesamtzahl der Bytes gestiegen, aber
durch die Auskopplung des Ortes wird das Gesamtaufkommen der Daten erheblich
reduziert, weil sich sonst der Ort in jedem Namensdatensatz wiederholen würde
(Redundanz).
Erstellung einer ADABAS-D Datenbank Test2 (am Beamer)
ADABAS-D Client Installation
als lokaler Administrator anmelden
Netzwerkumgebung auf dem Desktop anklicken
Diana anklicken
Username und Passwort eingeben
Ins Verzeichnis Adabas Client wechseln
Das Programm Setup.exe starten
Auf Next klicken
Verzeichnis beibehalten à Next
Den Button ODBC32 zuerst anklicken
Die Felder Remote und Update enviroment müssen angewählt
sein à Next
User Enviroment selektieren à Next
Lesen à Next
Computer wird zu einem späteren Zeitpunkt neu gestartet!!!
Anschließend wird das Programm Setup.exe erneut gestartet
Punkt 6-8 bleibt gleich
Nun wird auf den Button Clients only geklickt
Im nächsten Fenster wird das Kästchen WebDB deaktiviert à
Next
In diesem Fenster wird beides selektiert à Next
Hier wird wieder User enviroment selektiert à
Next
Lesen à Next
Lesen à Next
Installation startet
Im Welcome Fenster (TCl 8.0 Installation) auf Next
klicken
Das vorgeschlagene Verzeichnis bleibt unverändert à
Next
Es wird die Full Installation durchgeführt à
Next
Lesen à Next
Installation ist nun beendet und ADABAS-D kann gestartet werden
Als Administrator einrichten der SystemDSN und BenutzerDSN
Systemsteuerung starten
ODBC anklicken
Kartenreiter SystemDSN anklicken
Auf den Button Hinzufügen klicken
ADABAS-D auswählen und auf fertigstellen klicken
Im nächsten Fenster wird folgendes eingetragen
7. à OK
Punkte1 bis 7 müssen mit jeder bereits erstellen Datenbank wiederholt
werden, da sonst kein Zugriff auf die Datenbank erfolgen kann.
Anschliessend klicken wir auf den Karteireiter BenutzerDSN und führen
wieder die Punkte 1 bis 7, für alle bereits erstellten Datenbanken, aus.
Auch als 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:
ID
Anrede
Titel
Name
Vorname
Geburtstag
Geburtsort
Geschlecht
Kinder
Familienstand
Wohnort
Postleitzahl
Straße
Hausnummer
Etagennummer
Wohnungsnummer
Passnummer
Beruf
Telefon
Email Adresse
Fax
Bankverbindung
Pkw
Führerschein
Es kommen rein:
ID
Anrede
Titel
Name
Vorname
Postleitzahl Daraus könnten extra Wohnort Tabellen werden
Straße
Hausnummer
Etagennummer
Wohnungsnummer
Beruf
Telefon
Email Adresse
Fax
Bankverbindung
Normalisierung
Vorschlag
Leute Anschrift Telefon Bank
PLID PAID PTID PBID
Vorname PLZ Telefon Bank
Nachname Ort Fax BLZ
Titel Ortsteil E-Mail Kontonummer
Anrede Straße + Nummer URL
PAID Etage
PTID Wohnung
PBID
Vorschlag
PLID PAID POID PPFID PTID PBID
Vorname Straße + Nummer PLZ PF Vorwahl Bank
Nachname Etage Ort PLZ Tel BLZ
Titel Wohnung Orsteil PWTID Kontonr.
Anrede
PAID
POID
PPFID
PTID
PBID
WTelefon
SQL Befehle zur Datenbankerstellung /
SQL Scripte
Der Befehl zu Erstellung einer Tabelle lautet:
CREATE TABLE <Tabellenname> (Spaltendefinition
[,Spaltendefinition,.....] [<Tabelleneinschränkung>]);
Beispiel:
CREATE TABLE Test (
ID char(3) NOT NULL,
Vorname varchar(20),
Nachname varchar(20) NOT NULL,
Ort varchar(30) );
SQL Befehle zur Erstellung der Personendatenbank
CREATE TABLE Leute
(
PLID int PRIMARY KEY UNIQUE NOT NULL ,
Vorname varchar(20) ,
Nachname varchar(20) NOT NULL ,
Titel varchar(30) ,
Anrede varchar(5) NOT NULL ,
PBID int FOREIGN KEY(PBID) REFERENCES Bank ,
PTID int FOREIGN KEY(PTID) REFERENCES Telefon ,
POID int FOREIGN KEY(POID) REFERENCES Ort ,
PAID int FOREIGN KEY(PAID) REFERENCES Adresse ,
PPFID int FOREIGN KEY(PPFID) REFERENCES Postfach
)
CREATE TABLE Telefon
(
PTID char(3) PRIMARY KEY UNIQUE NOT NULL ,
Tel1 varchar(20) DEFAULT NULL ,
PWTID char(3) FOREIGN KEY(PWTID) REFERENCES WTelefon)
Vorwahl varchar(20) DEFAULT NULL )
Einfügen von Daten in eine Tabelle
Der Befehl zum Einfügen von Daten in Tabellen lautet:
INSERT INTO
Die richtige Syntax ist:
INSERT INTO <Tabelle> VALUES (*,*,*,*.....)
Einfügen von Daten einer Tabelle in eine andere Tabelle
Der Befehl zum Einfügen von Daten einer Tabelle in eine andere Tabelle
lautet:
INSERT INTO SELECT
Die richtige Syntax ist:
INSERT INTO <Tabelle> SELECT FROM <Tabelle_X>
|