INGRES/Forms, JoinDefs und INGRES/QBF.................................................................................... 1
4.1 Einfache
Masken................................................................................................................... 1
4.2 JoinDefs................................................................................................................................ 2
4.3 Komplexe Masken................................................................................................................ 2
Dieses Kapitel beschreibt
die Erstellung und
den Ablauf
von
Masken. Zuerst wird
die Generierung einfacher
Maskenspezifikationen mit Hilfe
von INGRES/Forms erläutert.
Nach
der Erklärung des
Begriffs JoinDefinition und
der
Erstellung mehrerer JoinDefs wird
die Generierung komplexer
Maskenspezifikationen
beschrieben. Sowohl für die einfachen
als auch für die komplexen
Maskenspezifikationen werden die
Operationen wie das Suchen, Ändern, Einfügen und Löschen von
Daten mit Hilfe von INGRES/QBF
gezeigt.
Masken bieten dem Benutzer
die Möglichkeit, auf
einfache
Weise das Suchen, Ändern und Löschen
existierender Datenwerte
in
einer Datenbank durchzuführen.
Zusätzlich dazu ist
es
möglich, mit Hilfe von Masken
Datenwerte in eine Datenbank zu
laden.
Die
Maskenspezifikation
bei INGRES wird
mit der INGRES-Komponente VIFRED durchgeführt. Um
eine
die Funktion Forms aufgerufen
werden. Mit diesem
Aufruf
wird die Komponente VIFRED
("Visual-Forms-Editor") aktiviert.
VIFRED ist ein visuelles
Dienstprogramm, das der Erstellung
und Modifizierung von Maskenspezifikationen dient. Nach der
Auswahl der Funktion Forms erscheint das in
Abbildung 4-1
gezeigte frame.
VIFRED - Frames Catalog
Name |
Owner |
Short Remark |
|
|
|
Place cursor on row and select derived
operation from menu
Create Destroy Edit Rename
MoreInfo Utilities Go
Abb. 4-1 VIFRED-frame
Das
Funktionsmenü der Abbildung
4-1 enthält folgende
Funktionen:
Funktion |
Bedeutung |
Create |
erstellt eine neue Maskenspezifikation. |
Delete |
löscht eine existierende Maskenspezifikation. |
Edit |
editiert eine existierende
Maskenspezifikation. Der Benutzer hat dann die Möglichkeit, diese
Spezifikation zu ändern. |
Rename |
Benennt eine existierende
Maskenspezifikation um. |
MoreInfo |
gibt zusätzliche Information
(Erstellungsdatum, Kommentar usw.) über eine existierende Maskenspezifikation
aus. |
gibt das Menü mit den Operationen
Übersetzen, Drucken usw. für die Maskenspezifikation aus. |
|
startet den Ablauf der durch die
Schreibmarke gekennzeichneten Maskenspezifikation. |
Wir werden an einem Beispiel
zeigen, wie eine einfache
Maske für eine Tabelle
erstellt werden kann.
Zuerst muß die Funktion Create ausgewählt werden und danach
erscheint das gleiche frame
wie in Abb. 4-1 mit den neuen
Menüfunktionen:
- TableDefault;
- Blankform und
- JoinDefDefault .
Menüunktion |
Bedeutung |
TableDefault |
erstellt eine Standard-Maskenspezifikation
für eine Benutzertabelle aufgrund der Einträge in den INGRES-Systemtabellen. |
Blankform |
gibt eine leere Maske aus. |
JoinDefDefault |
erstellt eine Standard-Maskenspezifikation
für ein schon definiertes JoinDef aufgrund der Einträge in den
INGRES-Systemtabellen. |
Um
die Maskenspezifikation für
die Tabelle arbeiten
zu
erstellen, muß zuerst
die Funktion TableDefault
ausgewählt und danach der Tabellenname (arbeiten) angegeben
werden. Der Benutzer hat jetzt die Möglichkeit, zwischen
zwei unterschiedlichen
Ausgabeformen - Simplefields und
TableField - zu wählen.
SimpleFields gibt immer
je
eine Reihe aus, während
TableField mehrere Reihen
im
Tabellenformat auf einmal ausgibt.
Nach der Auswahl von SimpleFields
erscheint die in Abbildung
4-2 dargestellte
Maskenspezifikation:
ARBEITEN
Table
M_nr: f_____________
Pr_nr: c___
Aufgabe: c____________ Einst_dat: c________________
--------------------------End-of-Form------------------------
Abb. 4-2
Maskenspezifikation für die Tabelle arbeiten
Die in Abbildung 4-2
gezeigte
Maskenspezifikation für
die Tabelle arbeiten
kann nachträglich, falls
gewünscht,
geändert werden. Diese Änderungen
werden mit der Funktion
Edit angeleitet und können sowohl an
den Überschriften
als
auch an den
Darstellungsformaten
einzelner Spalten
durchgeführt werden.
Mit der Funktion
Save wird
eine
erstellte Maskenspezifikation
gesichert.
Nachdem eine
Maskenspezifikation
erstellt und gesichert
wurde, kann sie zum Suchen, Ändern, Löschen und Einfügen
von
Daten verwendet werden.
Das INGRES-Subsystem QBF
("Query-By-Forms") unterstützt den Benutzer bei
der
Durchführung dieser Operationen. Um
QBF aufzurufen, muß
im
INGRES/MENU zuerst die
Funktion Queries und danach
QBF ausgewählt
werden. (INGRES/QBF kann
auch mit dem
Betriebssystemkommando qbf
aufgerufen werden. Dieses
Kommando ist in Kapitel 15
beschrieben.)
QBF arbeitet in zwei
Phasen: In der ersten Phase
werden
Daten, die gesucht, geändert oder
eingefügt werden sollen,
festgelegt. Die
Festlegung von Daten
kann über drei
QBF-Funktionen:
- Tables,
- JoinDefs und
- QBF-Names
durchgeführt werden.
Funktion |
Bedeutung |
Tables |
definiert
eine Tabelle bzw. ein View, das für die Festlegung der
Datenmenge verwendet wird. |
JoinDefs |
definiert zwei oder mehrere
Tabellen, die miteinander
verknüpft sind und die für die Festlegung der Datenmenge
verwendet werden. |
QBFNames |
definiert eine existierende
Maskenspezifikation, die mit VIFRED erstellt und entweder mit einer Tabelle oder einem JoinDef in Verbindung steht. |
Nach der Auswahl einer
der drei Funktionen
wird die
zweite QBF-Phase
gestartet, in der
die Daten dann
ausgewählt, geändert
oder eingefügt werden.
Um die in
Abbildung 4-2 gezeigte Maske
aufzurufen, muß der Name der
Maskenspezifikation (arbeiten) markiert und die Funktion Go
ausgewählt werden.
Das
in Abbildung 4-3
gezeigte frame entspricht
der
in
Abbildung 4-2 definierten Maskenspezifikation. Das
gewünschte Einfügen, Suchen und
Ändern von Daten wird mit
den drei, in der Menüleiste
existierenden Funktionen Append,
Retrieve,
und Update respektive durchgeführt.
ARBEITEN
Table
M_nr:
Pr_nr:
Aufgabe: Einst_dat:
Append Help End
Abb. 4-3 Die Maske für die Tabelle arbeiten
Durch die Auswahl der Funktion Append kann der Anwender neue
Reihen der Tabelle arbeiten einfügen.
Wie
wir schon erwähnt haben, existieren zwei Möglichkeiten,
die
Ausgabe der Tabellenreihen
zu formen. Die Ausgabe mit
Hilfe der Funktion SimpleFields, die je eine Reihe ausgibt
ist in Abbildung 4-2 dargestellt.
Die Verwendung der anderen
Funktion TableField, die mehrere
Reihen im Tabellenformat
gleichzeitig ausgibt, empfiehlt sich besonders, wenn eine
Tabelle viele Reihen hat.
Die Abbildung 4-4 zeigt
das Retrieve-frame für die Tabelle
arbeiten,
das durch die Auswahl der Funktion TableField und
anschließend analog dem in
Abbildung 4-3 gezeigten frame
entstanden ist.
ARBEITEN TABLE(S)
M_nr |
Pr_nr |
Aufgabe |
Einst_dat |
>=10000 |
|
*leiter |
|
|
?3 |
|
|
|
|
|
|
|
|
|
|
Go
Blank LastQuery Order
Help End
Abb. 4-4 Suchkriterium für die Tabelle
arbeiten
Die
Funktion Retrieve ermöglicht die Suche nach bestimmten
Reihen einer Tabelle, die
eine Vorgabe des
Benutzers
erfüllen. Dies geschieht durch die Angabe eines Datenwertes
oder durch die Verwendung der
Suchoperatoren. Die Angabe des
Datenwertes 28559 in der Spalte M_nr würde z.B. die Ausgabe
folgender zwei Reihen
28559|p1| |01-aug-1988
und
28559|p2|Sachbearbeiter|01-feb-1989
bedeuten.
Die
komplexeren Formen der
Suche sind in Abbildung 4-5
gezeigt. Die Angabe des
Wertepaares ">=1000" und "*leiter"
in einer bzw. des Wertes "?3" in der anderen Reihe bedeutet
eine ODER-Verknüpfung, die
wahr ist, falls entweder
die
Bedingung der einen oder die Bedingung der anderen Reihe
oder beide erfüllt sind.
Das
Zeichen ">="
definiert den grösser-gleich Operator,
der, genauso wie die
anderen
Vergleichsoperatoren beim
Vergleich numerischer Werte benutzt
werden kann. Das Zeichen
"*" kennzeichnet eine beliebige Zeichenfolge von n Zeichen
(n>=0), während "?" genau ein beliebiges Zeichen darstellt.
Die
Kombination zweier (oder mehrerer)
Suchkriterien in
einer Zeile (">=10000" und
"*leiter")
definiert eine
UND-Verknüpfung, die
wahr ist, falls
beide Bedingungen
erfüllt sind.
Die Abbildung 4-5 zeigt
die Treffermenge der
Reihen, die
mit
den in Abbildung 4-4 definierten Suchbedingungen in der
Tabelle arbeiten gefunden wurde.
ARBEITEN TABLE(S)
M_nr |
Pr_nr |
Aufgabe |
Einst_dat |
10102 |
p1 |
Projektleiter |
01-oct-1988 |
10102 |
p3 |
Gruppenleiter |
01-jan-1989 |
9031 |
p3 |
Sachbearbeiter |
15-nov-1988 |
2581 |
p3 |
Projektleiter |
15-oct-1989 |
|
|
|
|
|
|
|
|
Abb. 4-5 Gefundene Treffermenge in der
Tabelle arbeiten
Die elementaren
Funktionen, die das
INGRES-Subsystem
QBF unterstützt, sind das Suchen,
Ändern und Löschen
existierender Datenwerte einer Tabelle sowie das
Einfügen
neuer Reihen einer Tabelle.
Diese QBF-Operationen, die
sich auf einzelne Tabellen
beziehen, werden oft
in der
Praxis benutzt; sie decken
aber nur einen
kleinen Teil
der
Anforderungen an QBF ab.
Mit solchen elementaren
QBF-Operationen ist
es z.B. nicht
möglich, aus der
Beispieldatenbank gleichzeitig den Namen und
das
Einstellungsdatum eines Mitarbeiters zu erfragen. Für diese
und ähnliche Aufgaben ist es notwendig, solche Operationen
zu benutzen, die mehrere Tabellen
miteinander verknüpfen.
Die Voraussetzung,
QBF-Programme zu erstellen, die
gleichzeitig die Information aus mehreren Tabellen
liefern,
ist die Verwendung des
INGRES-Subsystems JoinDef.
JoinDef
ermöglicht sowohl die Beschreibung
von Tabellenverknüpfungen
einer Datenbank als auch die Beschreibung von Eigenschaften
dieser Verknüpfungen.
Bevor das
INGRES-Subsystem JoinDef mit
allen seinen
Funktionen beschrieben wird, werden
die möglichen
Tabellenverknüpfungen der Beispieldatenbank erörtert. Die
ersten beiden
Tabellen, die miteinander verknüpft
werden
können, sind abteilung
und mitarbeiter. Die beiden Tabellen
können mit Hilfe der Spalte abt_nr, die die Abteilungsnummer
der
Firma enthält, miteinander
verknüpft werden. Diese
Spalte ist in beiden
Tabellen gleichnamig, was
nicht
abteilung. abt_nr und
mitarbeiter.abt.nr
als
Verknüpfungsspalten der Tabellen
abteilung und
mitarbeiter.
Wie aus der Definition der
Beispieldatenbank ersichtlich,
gehören jeder Abteilung mehrere
Mitarbeiter an.
Diese Beziehungsart, wo jeder
Reihe einer Tabelle
mehrere Reihen einer anderen
Tabelle entsprechen, wird
Master/Detail-Beziehung genannt.
Im Falle der
Tabellen
abteilung und mitarbeiter ist damit
abteilung die Master-
und mitarbeiter die Detail-Tabelle.
In der
Beispieldatenbank können zwei
weitere
Tabellenverknüpfungen definiert werden. Die Tabelle projekt
kann mit der Tabelle arbeiten verknüpft werden, wobei
arbeiten.pr_nr
die
Verknüpfungsspalten sind. Aus
der Definition der
Beispieldatenbank geht hervor, daß in jedem Projekt mehrere
Mitarbeiter arbeiten.
Damit ist projekt die Master-
und
arbeiten die Detail-Tabelle.
Schließlich können
auch die Tabellen
mitarbeiter und
arbeiten
mit Hilfe der Spalten
mitarbeiter.m_nr und
arbeiten.m_nr
verknüpft werden. Weil jede Mitarbeiternummer einmal in der
Tabelle mitarbeiter und mehrmals in
der Tabelle arbeiten
vorkommt, ist mitarbeiter die
Master- und arbeiten die
Detail-Tabelle.
Um diese Tabellenverknüpfungen dem INGRES-System bekannt zu
machen, muß die Funktion JoinDefs des INGRES/MENU (Abb. 4-6)
aufgerufen werden.
QBF JoinDefs Catalog
Name |
Owner |
Short Remark |
|
|
|
|
|
|
|
|
|
Place cursor on row and select desired operation from menu
Create Destroy Edit
Rename MoreInfo Go
Abb. 4-6 JoinDefs Catalog-frame
Die Menüfunktionen des
JoinDefs-Katalogs haben folgende
Bedeutung:
Funktion |
Bedeutung |
Create |
Mit dieser Funktion kann eine
Tabellenverknüpfung definiert werden. |
Destroy |
löscht eine schon existierende
Tabellenverknüpfung. |
Edit |
Mit Edit kann die Information über eine
schon mit JoinDefs definierte Tabellenverknüpfung ausgegeben werden. |
Ändert den Namen einer mit JoinDefs definierten Tabellenverknüpfung. |
|
Mit dieser Funktion können sowohl
stichwortartige als auch lange Kommentare zu einer mit JoinDefs definierten Tabellenverknüpfung
erstellt werden. (Der stichwortartige Kommentar erscheint in
der Spalte Short Remarks der Abbildung 4-6.) |
|
führt ein JoinDef aus. |
Um
eine Tabellenverknüpfung zu
erstellen, muß die Funktion
Create aufgerufen werden. Nach dem Aufruf dieser
Funktion
erscheint das in Abbildung 4-7
gezeigte frame.
QBF - JoinDef Definition Form
For each table in the JoinDef, enter table name (with optional
abbreviation for table name) below.
For Master/Detail JoinDefs enter Master or detail under Role
(Default is Master if blank).
Role |
Table Name |
Abbreviation |
MASTER |
abteilung |
|
detail |
mitarbeiter |
|
|
|
|
Table Field Format? (y/n): YES
Select the "Go" to run the Join Definition
Go Blank ChangeDisplay Joins Rules
Abb. 4-7 JoinDef Definition Form-frame
In Abbildung 4-7
sind die Angaben
für die Verknüpfung
der
Tabellen abteilung und mitarbeiter gemacht
worden.
In der Role-Spalte haben
wir die Master/Detail-Beziehung
zwischen diesen beiden Tabellen
definiert, während in der
Abbreviation-Spalte ein Kürzel für jede Tabelle eingetragen
werden kann.
Nachdem die Namen der
zu verknüpfenden Tabellen
und ihre
Master/Detail-Beziehung definiert
sind, müssen noch
die
Verknüpfungsspalten der beiden
Tabellen spezifiziert werden.
Diese Spezifikation erfolgt
durch die Auswahl der Funktion
Joins, wonach
das in der Abbildung 4-8 gezeigtes
frame
erscheint.
QBF - JoinDef Join
Specification
Column |
Join |
Column |
abteilung.abt_nr |
MD |
mitarbeiter.m_nr |
|
|
|
|
|
|
To get help on a table enter the
table name or identifier
below and select the "GetTableDef" menu item.
Column |
Data Type |
m_nr |
i4 |
m_name |
char(20) |
m_vorname |
char(20) |
abt_nr |
char(4) |
Rules GetTableDef Forget Help End
Abb. 4-8 JoinDef Specification-frame
sowie die mit MD gekennzeichnete
Master/Detail-Beziehung
der Tabellen abteilung und mitarbeiter.
Im unteren
Teil der Maske kann der Benutzer durch die Eintragung eines
Tabellennamens und den Aufruf der
Funktion GetTableDef, alle
Spalten einer Tabelle am Bildschirm
angezeigt bekommen.
Damit hat er die Möglichkeit, das logische Schema
der
Tabelle anzuschauen, um sich z.B.
ins Gedächtnis zu rufen,
welche Spalte die Verknüpfungsspalte
ist.
Hinweis.
INGRES unterscheidet
zwischen Master/Detail- und
Master/Master-Beziehung. Die
Master/Master-Beziehung
kennzeichnet die Beziehungsart, wo
jeder Reihe einer Tabelle
genau eine Reihe einer anderen Tabelle
entspricht. Eine
solche Beziehungsart wird in
der Role-Spalte (Abb.
4-7)
durch die entsprechende Angabe
definiert.
Die zweite wichtige Funktion des JoinDef Definition-frame
ist
Rules. Mit
dieser Funktion können
Regeln für das
Ändern bzw. Löschen der
Reihen der beiden
in einer
Master/Detail-Beziehung stehenden
Tabellen definiert werden.
Die
Abbildung 4-9 zeigt
das JoindDef Update &
Delete
Rules-frame.
QBF - JoinDef Update &
Delete Rules
Update Information: To enable modification of join fields in
Update mode, enter "Yes" under UPDATE? Column
Column |
Update? |
abteilung.abt_nr |
no |
mitarbeiter.abt_nr |
no |
Delete Information:To disable deletion of rows in a table during
Update mode, enter "No" under Delete? column
Column |
Delete? |
abteilung.abt_nr |
yes |
mitarbeiter.abt_nr |
yes |
Joins Forget Help
End
Abb. 4-9 JoinDef Update & Delete Rules-frame
Das JoinDef Update
& Delete Rules-frame beschreibt
die Regeln, die beim
Ändern einer Verknüpfungsspalte,
bzw. Löschen einer Reihe
der beiden verknüpften
Tabellen gelten. Die Änderungsregeln beziehen sich auf
die
Frage, was passiert,
wenn die Werte
einer der
beiden
Verknüpfungsspalten
geändert werden. Sollten
die
entsprechenden Werte
der Tabelle mitarbeiter geändert
werden, wenn z.B. der
Datenwert a1 der Spalte abt_nr der
Tabelle abteilung in a4
geändert wird? Falls ja, muß die
Angabe in der Update?-Spalte
in der zweiten Zeile
"yes"
enthalten. Dieselbe Frage kann
auch gestellt werden, wenn
Datenwerte der Spalte abt_nr der
Tabelle mitarbeiter
geändert werden. Falls die
entsprechende Änderung auch in
der Tabelle abteilung durchgeführt werden sollte, muß in der
Update?-Spalte in der ersten Zeile
"yes" eingetragen werden.
Die Regeln zum Löschen entsprechen
bis auf einen Punkt genau
den Änderungsregeln. Der einzige
Unterschied ist, daß die
Änderungsregeln sich auf Spalten und die Regeln zum Löschen
auf
Reihen beziehen. Falls z.B. die
Reihen der Tabelle
mitarbeiter,
die den Datenwert a3 enthalten, nicht gelöscht
sein sollten, nachdem die
Reihe der Tabelle abteilung mit
demselben Datenwert gelöscht wurde,
muß die Angabe in der
Delete?-Spalte in der zweiten Zeile
"no" lauten.
Im Unterschied zu einfachen Masken basieren komplexe Masken
gewöhnlich auf einer Verknüpfung
zweier oder mehrerer
Tabellen. In dem vorherigen
Abschnitt haben wir gezeigt,
wie
die Verknüpfung von
Tabellen mit Hilfe von JoinDef
spezifiziert werden kann. In diesem Abschnitt werden die so
erzeugten Verknüpfungen für die
Erstellung und Ausführung
von Maskenspezifikationen verwendet.
Um dies zu
zeigen,
werden wir das existierende JoinDef, das die
Tabellen
abteilung
und mitarbeiter verknüpft, benutzen.
Die Erstellung und die
Ausführung einer mit
Hilfe
von JoinDef erzeugten Maskenspezifikation erfolgt
analog der Erstellung und
Ausführung einer einfachen
Maskenspezifikation. Zuerst
wird die Funktion
Forms im
INGRES-Hauptmenü und danach die Funktion Create aufgerufen.
Um
eine Maskenspezifikation mit
Hilfe von JoinDef
zu
erstellen, muß jetzt die
Menüfunktion JoinDefDefaults
ausgewählt und der JoinDef-Name (abt_mit) angegeben werden
(Abb. 4-10).
ABTEILUNG
TABLE
Abt_nr:c___ Abt_name: c______________
Stadt:c______________
MITARBEITER TABLE(S)
M_nr |
M_name |
M_vorname |
f_____ |
c______________ |
c______________ |
|
|
|
Create Delete Edit
Move Undo Order
Save FormAttr Location
Help
Abb. 4-10
Maskenspezifikation für die Tabellen abteilung und mitarbeiter
Die
in Abbildung 4-10 gezeigte Maske kann
anschließend -
wie bei den einfachen Masken
schon beschrieben - mit der
Funktion Edit geändert und mit Save
gesichert werden.
Die
Operationen an Daten erfolgen
mit Hilfe von QBF analog
zu den schon beschriebenen
Operationen bei einfachen Masken.
Abbildung 4-11 zeigt die
Ausführung der Funktion Retrieve
nach der Eingabe des Wertes a1 für die Spalte abt_nr.
ABTEILUNG
TABLE
Abt_nr: a1 Abt_name: Beratung
Stadt: Muenchen
MITARBEITER TABLE(S)
M_nr |
M_name |
M_vorname |
18316 |
Mueller |
Gabriele |
28559 |
Mozer |
Sibille |
|
|
|
Abb. 4-11 Die Ausführung
der Funktion Retrieve
A.4.1 Mit Hilfe des INGRES-Subsystems JoinDef
erstellen Sie eine
Tabellenverknüpfung für die
Tabellen projekt und arbeiten.
Die Datenwerte der Spalte pr_nr der Tabelle projekt sollen
nicht geändert werden, falls die entsprechenden Werte der
Spalte pr_nr der Tabelle arbeiten modifiziert werden und
umgekehrt. Die Reihen
der Tabelle arbeiten sollen nicht
gelöscht werden, falls die
entsprechende Reihe der Tabelle
projekt gelöscht wird und umgekehrt.