Wirtschaftsinformatik Skript zur Lehrveranstaltung Hartmut Fritzsche Hochschule für Technik und Wirtschaft Dresden Fachbereich Informatik/Mathematik 18. Juni 2003 2 INHALTSVERZEICHNIS Inhaltsverzeichnis 1 Grundlagen der Datenorganisation 3 1.1 Motivation: Speichern und Wiederfinden . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Datenbanksysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Einführung in das relationale Datenmodell 4 2.1 Strukturteil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 Operationsteil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3 Speicherungs- und Zugriffsmechanismen in dBASE 6 3.1 Visual dBASE 5.5 – Benutzeroberfläche . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2 Datendefinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.3 Auswerten, Modifizieren und Löschen von Tabellen . . . . . . . . . . . . . . . . . . 8 3.4 Sortieren und Indizieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4 Programmentwicklung mit dBASE 14 4.1 Gestaltung von Anwendungsoberflächen . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2 Arbeit mit Generatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.3 Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 5 Datenmodellierung (logischer Datenbankentwurf ) 21 5.1 Das Entity-Relationship-Modell (ERM) . . . . . . . . . . . . . . . . . . . . . . . . 22 5.2 Schlüsselarten / Anforderungen an den Schlüsselaufbau . . . . . . . . . . . . . . . 22 5.3 Entwurf von Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 6 Datenbankorganisation 27 6.1 Architektur von Datenbanksystemen . . . . . . . . . . . . . . . . . . . . . . . . . . 27 6.2 Überblick zu Datenbankmanagementsystemen . . . . . . . . . . . . . . . . . . . . . 28 6.3 Konsistenz und Transaktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 7 Datensicherheit und Datenschutz 28 7.1 Datensicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 7.2 Datenschutz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 8 Kommunikationssysteme 29 8.1 Technisch-technologische Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . 29 8.2 Kommunikationsdienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Glossar 31 Literatur 32 3 1 Grundlagen der Datenorganisation 1.1 Motivation: Speichern und Wiederfinden Die Datenverwaltung in Anwendungssystemen erfolgt grundlegend nach folgenden Gesichtspunkten: • statisch vs. dynamisch Ist der für Datenobjekte benötigte Speicherplatz zur Programmierzeit bekannt, spricht man von statischen Datenstrukturen. Für statisch zu verwaltende Daten stellt der Compiler zur Übersetzungszeit Speicherplatz bereit. Ist die Kardinalität der Datenobjekte zur Programmierzeit nicht bekannt, muß Speicherplatz zur Laufzeit bereitgestellt werden. In diesem Fall spricht man von dynamischen Datenstrukturen. • extern vs. intern Die Bezeichnung intern“ bezieht sich auf Hauptspeicher und Register, mit ex” ” terner“ Speicherung ist die Verwaltung der Daten auf Festplatte, CD-ROM, DVD usw. gemeint. • Einzelnutzer vs. Mehrnutzer Dynamisch verwaltete, nicht-elementare Datenbestände können auf unterschiedliche Art und Weise organisiert sein. Beispiele sind: Ungeordnete Folge, geordnete Folge, (binärer) Baum, gerichteter/ungerichteter Graph, Hash-Tabelle. B*-Bäume sind spezielle Bäume, bei denen die Informationen ausschließlich in Blattknoten liegen. Entsprechend der Organisationsform gibt es unterschiedliche Verfahren der Verarbeitung (sequentiell, binär, direktes u. indirektes Hash-Verfahren), die auf grundlegenden Zugriffsarten (sequentiell, wahlfrei, indexsequentiell, assoziativ) basieren. Die Reihenfolge der Verarbeitung kann vorbestimmt (z.B. sequentiell) oder frei wählbar sein. Basisoperationen für die Verarbeitung sind • das Einfügen eines Elementes in die Datenbasis • das Suchen eines bestimmten Elementes in der Datenbasis • das Entfernen eines Elementes aus der Datenbasis 1.2 Datenbanksysteme Ein Datenbanksystem (DBS) umfaßt eine oder mehrere Datenbasen bzw. Datenbanken (DB) und ein Datenbankmanagementsystem (Data Base Management System, DBMS): DBS = DB + DBMS Datenbankmanagementsysteme (DBMS) werden auch als Datenbankbetriebssysteme bezeichnet. Datenbanksysteme sind eine spezielle Art von Informationssystemen, die Daten speichern und zentral verwalten. Ziel ist die Gewährleistung einer weitgehenden Unabhängigkeit der Daten von den mit ihnen arbeitenden Programmen bzw. Benutzern. Es wird zwischen einer physischen und einer logischen Datenunabhängigkeit unterschieden. Unter logischer Datenunabhängigkeit versteht man, daß die anwendungsbezogene Sicht auf die DB losgelöst von der logischen Gesamtstruktur existiert. Die globale Struktur soll änderbar sein, ohne lokale Anwendungen ändern zu müssen. Fritzsche, Wirtschaftsinformatik 4 2 EINFÜHRUNG IN DAS RELATIONALE DATENMODELL Wesentliche Arten von DBS sind hierarchische DBS (HDBS), Netzwerk–DBS, relationale DBS (RDBS) und objektorientierte DBS (OODBS). In der Paraxis dominieren derzeit RDBS. OODBS sind gegenwärtig noch Forschungsgegenstand, gewinnen aber zunehmend auch Bedeutung für die Praxis. Beispiele für • hierarchische DBS: IMS (IBM), DB2 • Netzwerk–DBS: IDMS • relationale DBS: INGRES, ORACLE, ACCESS, dBASE, SYBASE • objektorientierte DBS: O2, ORION/ITASCA, POET, UniSQL In der Lehrveranstaltung werden relationale Datenbanksysteme am Beispiel von Visual dBASE 5.5 behandelt. 2 Einführung in das relationale Datenmodell Die mathematische Grundlage für RDBS bildet das Relationenmodell von E.F. Codd (1970). Das Relationenmodell umfaßt einen Strukturteil und einen Operationsteil. Der Strukturteil enthält Beschreibungen von Objekttypen auf der Basis von Relationenschemata. Der Operationsteil beschreibt einen Satz von Operationen für Anfragen und Modifikationen. Es werden zwei Beschreibungsmittel unterschieden: - die Relationenalgebra - die Normsprache SQL 2.1 Strukturteil Bei der Beschreibung von wirklichen oder gedachten Gegenständen wird eine objektzentrierte Sicht verfolgt (im Unterschied z.B. zu einer prädikatzentrierten Sicht, die bei der logikorientierten Programmierung zugrundegelegt wird): Ein Objekt ist etwas, über das etwas ausgesagt werden kann. Objekte besitzen Ausprägungen für Attribute (d.h. Merkmale). Die Struktur eines Objektes ergibt sich, indem man dem Objekt eine Reihe von Attribut – Wert – Paaren zuordnet. Mögliche Ausprägungen (Merkmalswerte oder kurz Werte) eines Attributs sind jeweils aus einem Wertebereich entnommen. Beispiel: Sei Objekt1 das Buch Objektorientierte Datenbanken ... “ von Andreas Heuer. ” Objekt Attribut Wert ———————————————————Objekt1 + ISBN – 3-83319-315-4 + Autor – Andreas Heuer + Titel – Objektorientierte Datenbanken + Verlag – Addison-Wesley Ein Objekttyp ist durch eine Menge von Attributen mit entsprechenden Wertebereichen charakterisiert. Ein Relationenschema R umfaßt die Objekttypbezeichnung sowie die Attribute und deren Wertebereiche. 2.2 Operationsteil 5 Eine Relation r(R) ist – mathematisch definiert – eine Teilmenge des kartesischen Produktes über den Wertebereichen von R. Ein Element einer Relation heißt Tupel. Eigenschaften einer Relation: • keine mehrfachen Tupel • keine festgelegte Reihenfolge der Tupel • Attributwerte sind atomar (sog. 1. Normalform) Attributwerte sind atomar“, wenn sie einem Objekttyp angehören, der nicht wieder in Form eines ” Relationenschemas beschrieben wird, also in diesem Sinne der Objektbeschreibung nicht weiter zerlegbar ist. Eine Basisrelation ist die in der Datenbank aktuell vorhandene Relation zu einem Relationenschema. Die Datenbank ist die Menge aller Basisrelationen. Das Datenbankschema ist die Menge aller Relationenschemata einer Datenbank. Relationen werden im Zusammenhang mit RDBS in Form von Tabellen dargestellt. In der Datenbankterminologie gelten in diesem Sinne folgende Entsprechungen: Relation – Tabelle Attribut – Spalte Tupel – Datensatz bzw. Zeile Wertebereich – Domäne Als Grad wird die Anzahl der Attribute einer Tabelle bezeichnet. Mit dem Begriff Kardinalität wird die Anzahl der Datensätze, d.h. der Zeilen bezeichnet. 2.2 Operationsteil Verbreitete Beschreibungsmittel für Operationen sind die Relationenalgebra und die Normsprache SQL (Standard Query Language). Relationenalgebra Es wird ein Satz von Grundoperationen definiert: - Selektion: σ - Projektion : π - (natürlicher) Verbund: ./ - Mengenoperationen: ∪, ∩, \ - Umbenennung: β Ergebnisse von Operationen sind jeweils wieder Relationen. Die Operatoren definieren eine relationale Algebra zur Bearbeitung von Objekten. Selektion (auch: Restriction) Wählt Tupel (Zeilen) aus einer Relation (Tabelle) entsprechend einer Selektionsbedingung aus. Selektionsbedingung kann sein: Fritzsche, Wirtschaftsinformatik 6 3 SPEICHERUNGS- UND ZUGRIFFSMECHANISMEN IN DBASE • Attribut – Konstanten – Vergleich • Attribut – Attribut – Vergleich • Verknüpfung von Selektionsbedingungen durch Operatoren ∧, ∨, ¬ Projektion Wählt Attribute (Spalten) aus einer Relation (Tabelle) entsprechend einer Projektionsbedingung aus. Achtung: Durch Projektion können Tupel entstehen, die sich nicht mehr unterscheiden. Duplikate werden in der Ergebnisrelation eliminiert! (natürlicher) Verbund (auch: Join) Der natürliche Verbund verknüpft Relationen über allen gemeinsamen Attributen. Nur Tupel mit gemeinsamen gleichen Attributwerten werden zu neuen Tupeln verbunden. Mengenoperationen lassen sich auf Relationen anwenden, die das gleiche Relationenschema besitzen. Durch Umbenennen können Relationenschemata für eine (spätere) Verknüpfung kompatibel gemacht werden. Beispiel: Umbenennen der Attributbezeichnung Wohnort in Ort. SQL Die Normsprache SQL (Standard Query Language) unterstützt unterschiedliche Arten von Operationen: • Definition von Relationenschemata • Erzeugung von Zugriffspfaden • Anfragen • Datenmanipulationen Hier wird nur der Anfrage-Teil besprochen. Eine SQL-Anfrage besteht aus einem sog. SFW-Block: SELECT . . . FROM . . . WHERE . . . Semantik: 1. Kart. Produkt der Relationen hinter FROM mit dem Relationsnamen als Präfix 2. Anwendung der Bedingungen der WHERE-Klausel auf das Ergebnis der FROM-Klausel 3. Projektion auf die Attribute der SELECT-Klausel 3 3.1 Speicherungs- und Zugriffsmechanismen in dBASE Visual dBASE 5.5 – Benutzeroberfläche Die Benutzeroberfläche des Systems dBASE 5.5 enthält die für Microsoft Windows typischen Elemente. Die Anwendung präsentiert sich nach dem Starten in einem Fenster mit Titelleiste ( Vi” sual dBASE“), Menüleiste, Symbolleiste, Arbeitsfläche und Statuszeile. Die Arbeitsfläche enthält 3.2 Datendefinition 7 nach dem Starten von dBASE zwei Fenster: Das Regiezentrum und das zweigeteilte Befehlsfenster. Regiezentrum Der obere Bereich dient der permanent möglichen Einstellung des aktuellen Arbeitsverzeichnisses. Links unten kann die Auswahl des gewünschten Dateityps erfolgen (hier: Tabellen). Der rechte untere Teil ist für die Anzeige und die Auswahl der zum Datentyp gehörenden Dateien vorgesehen. Visual dBASE unterscheidet bei der Arbeit mit Dateien zwei Modi: Entwurfsmodus und Ausführmodus. Im Entwurfsmodus werden Voraussetzungen für die Dateinutzung geschaffen, z.B. durch die Strukturdefinition von Tabellen. Im Ausführmodus erfolgen Anwendungen, z.B. die Eingabe/Änderung von Datensätzen in Tabellen. Visual dBASE verfügt über eine Befehlssprache. Befehle können über den Eingabebereich – d.h. den oberen Teil – des Befehlsfensters eingegeben werden. Ausgaben werden im unteren Teil des Befehlsfensters präsentiert. Obwohl viele Befehle auch über das Regiezentrum selektiert werden können, hat die explizite Nutzung von Befehlen auch Vorteile. 3.2 Datendefinition Die Definition von Tabellen erfolgt in Visual dBASE entweder über das Regiezentrum mittels des Designers“ im Entwurfsmodus oder mit Hilfe des Befehls CREATE über den Eingabebereich des ” Befehlsfensters. CREATE dateiname Semantik: Eine das Relationenschema repräsentierende Datei wird im aktuellen Verzeichnis angelegt. Die Extension dbf wird vom DBMS automatisch dem Dateinamen zugefügt. Über eine bei Ausführung des Befehls erzeugte Eingabemaske kann die Struktur definiert werden. Der Dateiname bezeichnet den Objekttyp. Bevor eine Tabelle gefüllt“ werden kann, sind die Attribute mit ihren jeweiligen Wertarten und ” Wertebereichen festzulegen. Die Attribute einer Relation entsprechen Feldern einer Tabelle. Diese werden mit Feldnamen benannt. Feldnamen müssen innerhalb einer Datei eindeutig sein und können maximal 10 Zeichen lang sein. Als Zeichen sind erlaubt: Buchstaben, Ziffern und das Zeichen _. Die Wertarten und Wertebereiche werden durch Datentypen definiert. Die wichtigsten Datentypen (Feldtypen) sind: • Zeichenketten (können Buchstaben, Ziffern und Sonderzeichen enthalten, maximal 254 Zeichen) Es wird zwischen Groß- und Kleinbuchstaben unterschieden (d.h., die Erfassung ist Case” sensitiv“)! • Festkommazahlen (maximal 20 Zeichen inclusive Vorzeichen, Dezimalpunkt und Nachkommastellen) • Gleitkommazahlen (werden intern auf Festkomma zurückgeführt) • Datum (in der Form tt.mm.jj) • Logisch (1 Zeichen, T oder Y für wahr und F oder N für falsch) Fritzsche, Wirtschaftsinformatik 8 3 SPEICHERUNGS- UND ZUGRIFFSMECHANISMEN IN DBASE 3.3 Auswerten, Modifizieren und Löschen von Tabellen Jede Arbeit mit einer erzeugten Tabelle setzt voraus, daß die Tabelle zunächst aktiviert, d.h. geöffnet wird. Das Öffnen erfolgt bei Ausführung des Befehls USE. USE dateiname Die Tabelle steht danach solange für die Arbeit zur Verfügung, bis eine andere Tabelle aktiviert oder die Dateiarbeit durch den Befehl USE (ohne Parameter) beendet wird bzw. bis die Nutzung von Visual dBASE beendet wird. Zum Anzeigen von Datensätzen im Ausgabebereich des Befehlsfensters können die Befehle LIST oder DISPLAY mit verschiedenen Parametern genutzt werden. DISPLAY ALL DISPLAY ALL feldname DISPLAY ALL feldnamenliste DISPLAY ALL FOR bedingung DISPLAY DISPLAY RECORD n Anzeigen der Feldwerte aller Datensätze und aller Datenfelder der aktivierten Relation Anzeigen der Feldwerte aller Datensätze für ein Datenfeld (Attribut) der aktuellen (d.h. aktivierten Relation Anzeigen der Feldwerte aller Datensätze für die in feldnamenliste aufgeführten Datenfelder Anzeigen der Feldwerte aller Datenfelder für die Datensätze, für die die Bedingung den Wert true annimmt. Bei FOR wird immmer am Tabellenanfang begonnen, auch wenn die Angabe ALL fehlt. Anzeigen aller Feldwerte des n-ten Datensatzes (ohne Parameter) Anzeigen aller Feldwerte des aktuellen Datensatzes“ ” feldnamenliste ist eine durch Kommata getrennte Aufzählung von Feldnamen: feldnamenliste → feldname { , feldname } Jeweils ein Datensatz (ein Tupel) der aktiven Relation ist zu einem bestimmten Zeitpunkt der aktuelle Datensatz“. Unmittelbar nach dem Aktivieren einer Relation ist der 1. Datensatz der ” aktuelle Datensatz. Die Struktur einer Tabelle kann mittels DISPLAY STRUCTURE angezeigt werden. Die Wirkung mancher Befehle hängt vom globalen dBASE–Systemstatus ab, der u.a. durch die Stellungen bestimmter Schalter bestimmt wird. Ein Schalter ist eine Variable vom Typ boolean. Mit Hilfe des SET–Befehles können Schalterzustände geändert werden. Auf diese Weise kann die globale Arbeitsumgebung des DBMS den Nutzerwünschen angepaßt werden. DISPLAY STATUS SET schalter ON|OFF Anzeigen der Systemumgebung Schalter ON/OFF setzen Beispiel: SET EXACT ON SET EXACT OFF Auswertung der Schalterstellung in Vergleichsoperationen 3.3 Auswerten, Modifizieren und Löschen von Tabellen 9 Die Stellungen des Systemschalters EXACT bedeuten: OFF: Vergleichsoperationen mit Zeichenketten erfolgen zeichenweise in der Länge des rechten Operanden von links nach rechts bis der Wert des logischen Ausdrucks eindeutig bestimmt ist. ON : Es erfolgt ein exakter Vergleich. Ein Vergleich hat in diesem Fall dann den Wert true, wenn die Zeichenketten gleich lang sind und die Zeichen an allen sich entsprechenden Positionen gleich sind. Die Aufbereitung von Ergebnissen im Ausgabebereich des Befehlsfensters sollte von einem leeren Ausgabebereich ausgehen. CLEAR Löschen des Ausgabebereiches vom Befehlsfenster Der Datensatzzeiger (Tupelpointer) verweist bei einer aktiven Relation auf genau einen Datensatz (den aktuellen Datensatz“) oder auf die Position nach dem letzten Datensatz (diese Position ” wird als EOF - End Of File - bezeichnet). Der Datensatzzeiger kann mittels LOCATE bedingungsabhängig positioniert werden. LOCATE FOR bedingung sucht in einer Tabelle den ersten Datensatz, für den die bedingung erfüllt ist (d.h. den Wert wahr liefert) und zeigt dessen Satznummer an. Der Datensatzzeiger wird auf diesen Datensatz positioniert. Wurde kein Datensatz gefunden, für den die bedingung wahr ist, erfolgt eine Meldung Ende des LOCATE-Bereichs im Ausgabebereich des Befehlsfensters. Wurde ein Datensatz gefunden, kann dieser mittels DISPLAY angezeigt werden (bei Ausführung von DISPLAY wird nichts angezeigt, wenn zuvor das Ende des LOCATE-Bereichs erreicht wurde). Die Suche beginnt bei Angabe von FOR . . . am Tabellenanfang. CONTINUE Fortsetzung der Suche nach einem weiteren Datensatz entsprechend der im letzten LOCATE festgesetzten Bedingung und entsprechende Positionierung des Datensatzzeigers. Die Suche kann mit weiteren CONTINUE – Befehlen fortgesetzt werden, bis keine Datensätze mehr in der Tabelle gefunden werden, die der Bedingung genügen. Der CONTINUE – Befehl kann nur in Zusammenhang mit einem vorhergehenden LOCATE – Befehl verwendet werden. Der Datensatzzeiger kann mittels GO unbedingt positioniert werden. GO satznummer GO TOP GO BOTTOM Bei Angabe des Parameters satznummer erfolgt die Positionierung auf den angegebenen Datensatz. Mittels TOP wird auf den ersten und mittels BOTTOM auf den letzten Datensatz einer Tabelle positioniert. Fritzsche, Wirtschaftsinformatik 10 3 SPEICHERUNGS- UND ZUGRIFFSMECHANISMEN IN DBASE SKIP Mit SKIP erfolgt ein Übergang vom aktuell positionierten zum nächsten Datensatz. EOF (end of file) in der Statuszeile zeigt an, daß der Datensatzzeiger hinter den letzten Datensatz positioniert worden ist. Zur Anzeige von beliebigen Daten einer aktivierten Relation kann der Befehl ? verwendet werden. ? [ ausdrucksliste ] ausdrucksliste → ausdruck { , ausdruck } * Jeder ausdruck der ausdrucksliste wird ausgewertet“ (d.h. es wird ein Wert berechnet) ” und das Ergebnis wird im Ausgabefenster präsentiert. Die Ergebnisse der Ausdrucksauswertungen werden fortlaufend in einer Zeile dargestellt. Nach der Ausgabe erfolgt ein Zeilenvorschub. Ist die ausdrucksliste leer, wird eine Leerzeile ausgegeben. Innerhalb von Ausdrücken können • Konstanten auftreten (Zeichenketten-, Zahl-, Datumskonstanten und logische Werte) • Bezugnahmen auf Attribute erfolgen • Taschenrechnerfunktionen (+, -, *, ... ) ausgeführt werden • Funktionen verwendet werden • Teilausdrücke geklammert werden Für Funktionen ist festgelegt, ob Parameter zu übergeben sind, und wenn ja, wieviele Parameter und von welchem Typ diese sind. Funktionen liefern immer einen Wert. Beispiele für Funktionen: EOF() LEN( string) DATE() DAY(datum) liefert wahr, falls der Datensatzzeiger auf das Ende der Tabelle zeigt (nicht auf den letzten Satz), und sonst falsch . liefert die Länge von string als numerischen Wert. liefert das aktuelle Datum. liefert die Tageszahl im datum als numerischen Wert. Anwendungen: DAY(DATE()) liefert die Tageszahl im aktuellen Datum. Modifizieren von Tabellen Das Modifizieren der Struktur einer aktiven Relation erfolgt mittels MODIFY STRUCTURE. Die Tabelle muß zu diesem Zweck exklusiv geöffnet worden sein. Der Editor für die Strukturdaten wird bei der Ausführung des Befehls geöffnet. Es können Spalten (Attribute) gelöscht, umbenannt oder hinzugefügt werden. Außerdem können die Typen für Attribute geändert werden. Das Ändern von Typen ist mit Datenverlust verbunden, wenn eine Typanpassung nicht problemlos durchgeführt werden kann. Die Änderung von Feldwerten einer aktiven Relation kann mittels REPLACE vorgenommen werden. REPLACE feldname WITH feldwert FOR bedingung REPLACE feldname WITH feldwert ALL 3.3 Auswerten, Modifizieren und Löschen von Tabellen 11 feldwert steht für einen Ausdruck, in dem auch Bezugnahmen auf vorhandene Feldwerte erfolgen können. Der neue Feldwert ist das Ergebnis der Auswertung dieses Ausdrucks und muß syntaktisch der Felddefinition genügen. Längere Zeichenketten werden rechts abgeschnitten. Bei zu langen Zahlen werden Fehlerkennzeichen (Zeichen *) in das Feld eingetragen. Das Ersetzen erfolgt im aktuellen Datensatz, wenn keine FOR-Klausel angegeben ist. Bei Angabe einer FOR–Klausel wird die REPLACE–Anweisung für alle Datensätze ausgeführt, für die die bedingung wahr liefert. Beispiele: REPLACE umsatz WITH umsatz + 125 Der neue Feldwert wird in diesem Fall unter Bezugnahme auf den alten Feldwert berechnet. REPLACE letztrech WITH DATE() Zur Änderung von Datensätzen kann altenativ auch der Editor verwendet werden: Die Darstellung erfolgt bei Ausführung des EDIT–Befehles entsprechend der Einstellung im Tabellenlayout, Formularlayout oder Maskenlayout. EDIT [ satznummer ] Die zeilenweise Erweiterung einer Tabelle um weitere Datensätze kann bei einer bereits aktivierten Tabelle mittels APPEND erfolgen. APPEND öffnet wie EDIT den Editor. APPEND [ BLANK ] Anfügen von Datensätzen am Ende einer Tabelle Bei Angabe von BLANK wird eine Leerzeile hinzugefügt. Löschen von Datensätzen und Relationen Das Löschen von Tupeln läuft in zwei Schritten ab: - Tupel werden mittels DELETE mit einer Löschmarkierung versehen - physisches Löschen aller markierten Tupel mittels PACK DELETE DELETE DELETE DELETE RECORD n NEXT n ALL FOR bedingung Löschen des n-ten Datensatzes Löschen Tupel ab Datensatzzeiger Löschen aller Datensätze Bei einer Anzeige (Befehl DISP) werden die markierten Datensätze mit * gekennzeichnet. Löschmarkierungen können mittels RECALL wieder entfernt werden. Voraussetzung für einen Rückruf ist, daß der Schalter DELETED auf OFF gesetzt ist. Voraussetzung für das physische Löschen ist, daß der Schalter EXCLUSIVE auf ON gesetzt ist. Der DELETE – Befehl kann auch zum Löschen von Relationen (Tabellen) genutzt werden. DELETE FILE filename Als filename ist in diesem Fall der vollständige Dateiname anzugeben. In der Statuszeile wird angezeigt, daß die Datei filename gelöscht wurde. Fritzsche, Wirtschaftsinformatik 12 3 SPEICHERUNGS- UND ZUGRIFFSMECHANISMEN IN DBASE Kopieren von Relationen Alternativ zum Anzeigen eines Projektions- oder Selektionsergebnisses am Bildschirm kann dieses auch einer zweiten Relation zugewiesen werden. Falls die Relation vor der Zuweisung bereits existiert, wird der Inhalt überschrieben. COPY TO tabellenname [FIELD attributnamenliste ] [FOR bedingung ] COPY FILE dateiname1 TO dateiname2 Defaultwerte ist alle Attribute“ für den FIELD – Parameter und ALL für den FOR – Parameter. ” In den Dateinamen dateiname1 und dateiname2 ist auch die Extension .dbf mit anzugeben. Im Falle von COPY FILE darf die zu kopierende Datei nicht geöffnet sein. COPY STRUCTURE TO tabellenname [FIELD feldnamenliste ] In dieser Form kopiert der Befehl nur die Struktur einer (geöffneten) Tabelle, d.h. keine Datensätze. Soll dann z.B. die Struktur der Kopie angezeigt werden, muß die Tabelle mit der Kopie zuvor geöffnet werden. 3.4 Sortieren und Indizieren Bisher ist eine Relation als sequentielle Folge von Tupeln verwendet worden, wobei die Reihenfolge der Tupel beim Einfügen bestimmt wurde. Bei der Auswertung von Tabellen ist es in der Regel wünschenswert, von einer Ordnung der Datensätze bzgl. eines oder mehrerer Datenfelder (Attribute) auszugehen. Eine solche Ordnung kann erreicht werden, indem eine sortierte Kopie der Tabelle erstellt wird. SORT ON feldname TO zieldateiname [ DESCENDING ] Das durch feldname ausgewählte Feld wird als Schlüsselfeld bezeichnet. Über dem Wertevorrat des Schlüsselfeldes muß eine Ordnungsrelation erklärt sein. Sortierläufe umfangreicher Dateien können sehr lange (mehrere Minuten) dauern. Eine mittels SORT ON sortierte Tabelle benötigt zusätzlich ebensoviel Platz auf dem externen Speicher wie die unsortierte Tabelle. Zeit- und platzgünstiger läßt sich eine Tabellenordnung durch Indizieren herstellen. Dabei wird eine Indexdatei angelegt. Eine Indexdatei ist eine Teilkopie der zu ordnenden Datei. Sie enthält Sätze mit nur einem Datenfeld und Verweisen (Zeigern) auf ein Tupel der Relation. Das Indizieren bietet platzsparende Möglichkeiten zur Verwaltung mehrerer Dateiordnungen. Zum Anlegen einer einfachen Indexdatei wird der INDEX-Befehl verwendet. INDEX ON feldname TO indexdateiname Der Befehl bewirkt das Anlegen einer Indexdatei für die aktuelle Arbeitsdatei. Indexdateien können nur in Verbindung mit der Ausgangsdatei genutzt werden. Beispiele: INDEX ON ort TO iokunden INDEX ON umsatz TO iukunden 3.4 Sortieren und Indizieren 13 Nach Ausführung eines INDEX ON–Befehles kann die Tabelle mit der gewählten Ordnung benutzt werden, die alten Satznummern bleiben jedoch erhalten. Als Index kann auch ein Ausdruck fungieren, in dem Felder verknüpft sind. INDEX ON feldname {+feldname} TO indexdateiname Beispiel: INDEX ON STR(sumoffen)+DTOS(letztrech) TO indsumle Die Funktion DOTS konvertiert ein Datum in einen String: {tt.mm.jjjj} −− > jjjjmmtt Das Umschalten zwischen Ordnungen erfolgt mittels SET INDEX TO indexdateiname {, indexdateiname } SET INDEX TO deaktiviert alle Indexe Jeder Index auf einer Relation wird bei Änderungen vom DBMS nur dann automatisch angepaßt, wenn er aktiviert ist. Einfachindexdateien besitzen die Extension .ndx. Mehrfachindexdateien werden im Zusammenhang mit der Erzeugung der Struktur einer relation angelegt: Es kann steigend“ oder fallend“ ” ” spezifiziert werden. Mehrfachindexdateien besitzen die Extension .MDX. Suchen in indizierten Dateien Ein Sortierschlüssel kann auch als Suchschlüssel verwendet werden. SEEK suchausdruck SEEK stellt den Datensatzzeiger auf den ersten Datensatz ein, dessen Schlüssel mit dem suchausdruck übereinstimmt. Ist ein gesuchter Datensatz nicht vorhanden, wird ein Hinweis Schlüssel nicht vorhanden“ angezeigt. ” Verwendung von Speichervariablen Unter einer Variablen versteht man einen Speicherplatz, der in einem Quellprogramm über einen Namen angesprochen werden kann, der beim Compilieren des Quellprogramms im erzeugten Objektprogamm bereitgestellt wird, und der während der Abarbeitung des (übersetzten) Programms – also im Verlaufe der Abarbeitung – nacheinander unterschiedliche Datenobjekte aufnehmen kann. Das Eintragen eines Datenobjektes in den Speicherplatz nennt man eine Wertzuweisung. Wertzuweisungen können - durch Zuweisungsoperationen erfolgen, wobei der Wert aus anderen, im Programm bekannten Werten errechnet wird oder - durch Eingaben des Nutzers erfolgen. Zuweisungsoperationen an Variablen können syntaktisch auf zwei unterschiedliche – in der Wirkung völlig gleiche – Arten ausgedrückt werden: STORE ausdruck TO speichervariable speichervariable = ausdruck Fritzsche, Wirtschaftsinformatik 14 4 PROGRAMMENTWICKLUNG MIT DBASE Der Wert von ausdruck wird berechnet und der Variablen speichervariable als Wert zugewiesen. Ein evtl. vorhandener alter Wert wird dabei überschrieben. Die Wertzuweisung wirkt global. Variablen sind in dBASE nicht an einen bestimmten Datentyp gebunden, man sagt, sie sind dynamisch getypt“. ” Der enthält“–Operator ” Der enthält“–Operator $ wird verwendet, um zu ermitteln, ob eine Zeichenfolge in einer Zei” chenkette enthalten ist. Dabei spielt die Position, ab der die Zeichenfolge ggf. vorkommt, keine Rolle. zeichenfolge $ zeichenkette Der Ausdruck liefert true, wenn die zeichenfolge in der zeichenkette vorkommt, und sonst false. Beispiel: DISP ALL FOR "AG"$Name zeigt alle Datensätze einer Relation an, die im Feld Name die Zeichenfolge AG enthalten. 4 Programmentwicklung mit dBASE 4.1 Gestaltung von Anwendungsoberflächen Abfragen können mit Hilfe des Werkzeuges Abfrage-Designer“ konstruiert werden. ” Zur Auswertung mehrerer Tabellen sind zwei Schritte notwendig: • Tabellen verknüpfen • verknüpfte Tabellen auswerten Bei der Verknüpfung von Tabellen werden mehrere Tabellen gleichzeitig geöffnet und dabei unterschiedlichen Arbeitsbereichen zugeordnet. Arbeit mit Formularen Formulare sind gestaltbare Anwendungsoberflächen. 4.2 Arbeit mit Generatoren Generatoren sind Werkzeuge, die die Programmentwicklung unterstützen. Für häufig zu wiederholende Aufgaben sind Programmelemente vorgefertigt, die der Nutzer durch eigene Anweisungen zu einem Programm verknüpfen und aktivieren kann. In dBASE stehen Generatoren für Berichte, Etiketten, Menüs und Eingabemasken zur Verfügung. 4.3 Programmierung 4.3 15 Programmierung Ein dBASE-Programm ist eine Zusammenstellung von dBASE-Befehlen. Programme, die unter dBASE abgearbeitet werden sollen, können mit einem Texteditor erstellt und in einer Befehlsdatei abgespeichert werden. Befehlsdateien in dieser Form – man spricht von Quelltextdateien – besitzen die Dateiextension PRG. Vor einer Abarbeitung muß eine Befehlsdatei mit dem Compiler übersetzt werden. Bei der Übersetzung entsteht eine Datei, die von dBASE ausführbar ist. Eine ausführbare Datei besitzt die Extension PRO. Angenommen eine Quelltextdatei ist bereits compiliert worden, es existiert also eine gleichnamige Datei mit der Extension PRO. Wird die Quelltextdatei anschließend geändert, wäre das übersetzte Programm zwar noch ausführbar, aber nicht mehr auf dem aktuellen Stand. dBASE speichert das alte Quellprogramm in einer Datei mit dem Programmnamen und der Extension PRK. Die Datei mit dem ausführbaren Programm wird gelöscht. Eine erneute Compilation der geänderten Quelltextdatei (mit der Extension PRG) erzeugt eine neue Datei mit der Extension PRO. Übersetzen und Ausführen eines Programmes COMPILE programmname Übersetzen des Programmes programmname Beim Übersetzen eines Programmes wird der Quelltext in einem ersten Schritt analysiert. Werden dabei keine Syntaxfehler festgestellt, schließt sich ein zweiter Schritt an, in dem der Quelltext in ausführbaren Code transformiert wird. DO programmname Übersetzen und Ausführen des Programmes programmname Bei der Ausführung eines syntaktisch korrekten Programmes kann es zu sog. Laufzeitfehlern kommen. In diesem Fall wird die Abarbeitung des Programmes unterbrochen. Ein typischer Laufzeitfehler liegt vor, wenn auf eine Variable zugegriffen wird, die noch keinen Wert zugewiesen bekommen hat. Existiert zum Zeitpunkt der Ausführung des Befehles DO nur eine Datei mit dem Namen programmname und der Extension PRG, also noch keine Datei gleichen Namens mit der Extension PRO, wird vor Ausführung des Programmes zusätzlich eine Compilation durchgeführt. Dateneingabe über Tastatur ACCEPT zeichenkette TO speichervariable Die zeichenkette wird bei Abarbeitung des Befehls in der nächsten Bildschirmzeile angezeigt. Es wird dann eine Eingabe von der Konsole erwartet, die mit RETURN abzuschließen ist (d.h. Drücken der Enter-Taste). Wert der Speichervariablen ist anschließend eine Zeichenkette, die die eingegebene Zeichenfolge repräsentiert. Wurde kein Zeichen eingegeben und lediglich die EnterTaste gedrückt, wird der Variablen die leere Zeichenkette als Wert zugewiesen. Iteration Als Iteration bezeichnet man eine Programmkonstruktion, die die wiederholte Abarbeitung einer Folge von Anweisungen (nachfolgend als befehlsfolge bezeichnet) bewirkt. Fritzsche, Wirtschaftsinformatik 16 4 PROGRAMMENTWICKLUNG MIT DBASE DO WHILE bedingung befehlsfolge ENDDO Semantik Die befehlsfolge wird ausgeführt, wenn die Auswertung des als bedingung programmierten Ausdruckes den Wert true ergibt. Anschließend wird die bedingung erneut ausgewertet usw. Es wird keine weitere Aktion ausgeführt, wenn die Auswertung der bedingung erstmalig den Wert false liefert. Die Abarbeitung des Programms wird in diesem Fall mit der auf die DO WHILE-Anweisung logisch folgenden Anweisung fortgesetzt. Schleifenkonstruktionen bergen die Gefahr von Endlosschleifen. Die Iteration endet nie, wenn die bedingung so programmiert ist, daß sie niemals den Wert false annimmt. Die Abarbeitung des Programmes kann vom Benutzer durch Drücken der ESCAPE-Taste abgebrochen werden. Alternative Als Alternative wird eine Programmkonstruktion bezeichnet, die es erlaubt, • eine Befehlsfolge in Abhängigkeit vom Ergebnis der Auswertung einer Bedingung auszuführen oder nicht auszuführen oder • zwei unterschiedliche Befehlsfolgen je nach Ergebnis – true oder false – der Auswertung einer Bedingung auszuführen. bedingung befehlsfolge IF ENDIF Semantik Die befehlsfolge wird ausgeführt, wenn die Auswertung des als bedingung programmierten Ausdruckes den Wert true ergibt. Andernfalls wird keine Anweisung ausgeführt. IF bedingung befehlsfolge1 ELSE befehlsfolge2 ENDIF Semantik Die befehlsfolge1 wird ausgeführt, wenn die Auswertung des als bedingung programmierten Ausdruckes den Wert true ergibt. Andernfalls wird die befehlsfolge2 ausgeführt. Beispiele: In demopro4 wird die Kundentabelle kunden nach dem Namen indexiert. Ein als Zeichenkette eingegebener und der Variablen eingname zugewiesener Name wird in der nun nach Namen geordneten Tabelle gesucht. Wird ein Datensatz mit diesem Namen gefunden (und es wird unterstellt, daß ein solcher existiert), werden für diesen die Kundennummer, der Name, der Umsatz und das Datum der letzten Rechnung ausgegeben. Anschließend ist wieder ein Name einzugeben usw. Erst nach Eingabe von ende“ wird ” die Schleife verlassen. 4.3 Programmierung * Testprogramm demopro4 USE kunden INDEX iname STORE "x" TO eingname DO WHILE eingname <> "ende" ACCEPT "Name, fuer den Werte anzuzeigen sind:" TO eingname IF eingname <> "ende" SEEK eingname DISPLAY knr,name,umsatz,letztrech ENDIF ENDDO USE Im nachfolgenden Programm demopro5 wird die Arbeit mit mehreren Tabellen demonstriert. Die Tabelle der Bestellungen wird mittels SELECT im Arbeitsbereich 2 geöffnet, die Kundentabelle im Arbeitsbereich 1. Für einen betimmten Kunden wird zunächst die Kundennummer ermittelt, diese wird in der globalen Variablen suchwert gespeichert. Anschließend wird in die Tabelle der Bestellungen gewechselt. Für den Kunden mit der gespeicherten Kundennummer wird jetzt ein Eintrag gesucht und der erste gefundene Datensatz angezeigt. * Testprogramm demopro5 SELECT 2 USE bestellg INDEX ON knr TO iknr SELECT 1 USE kunden INDEX iname STORE "x" TO eingname DO WHILE eingname <> "ende" ACCEPT "Name, fuer den Werte anzuzeigen sind:" TO eingname IF eingname <> "ende" SEEK eingname IF eof() ? "kein Kunde mit diesem Namen!?" ELSE DISPLAY knr,name,umsatz,letztrech STORE knr TO suchwert SELECT 2 SEEK suchwert DISPLAY SELECT 1 ENDIF ENDIF ENDDO CLOSE DATABASES Kritik an demopro5: Die Daten der Bestellung können nur angezeigt werden, wenn ein Kunde mit der Kundennummer auch existiert. Für einen Kunden könnten jedoch keine Bestellungen oder auch mehrere Bestellungen existieren. Im nachfolgenden Programm demopro6 ist deshalb eine Schleife zum Suchen aller Bestellungen eingefügt. Zwei zusätzliche Ausgaben gestatten es dem Nutzer außerdem, während der Programmanwendung zwischen Kundendatei und Bestellungsdatei zu unterscheiden. * Testprogramm demopro6 Fritzsche, Wirtschaftsinformatik 17 18 4 PROGRAMMENTWICKLUNG MIT DBASE SELECT 2 USE bestellg INDEX iknr SELECT 1 USE kunden INDEX iname STORE "x" TO eingname DO WHILE eingname <> "ende" ACCEPT "Name, fuer den Werte anzuzeigen sind:" TO eingname IF eingname <> "ende" SEEK eingname IF eof() ? "kein Kunde mit diesem Namen!?" ELSE ? "Kundendatei:" DISPLAY knr,name,umsatz,letztrech STORE knr TO suchwert SELECT 2 SEEK suchwert ? "Bestelldatei:" DO WHILE knr=suchwert.AND..NOT.eof() DISPLAY SKIP ENDDO SELECT 1 ENDIF ENDIF ENDDO CLOSE DATABASES Im nachfolgenden Beispiel demopro8 wird demonstriert, wie eingelesene Zeichenketten mit Hilfe der Funktion UPPER transformiert werden. Die Funktion UPPER erhält als Parameter eine Zeichenkette, in dieser werden alle vorkommenden Kleinbuchstaben durch Großbuchstaben ersetzt. Alle anderen Zeichen werden unverändert übernommen. * Testprogramm demopro8 * Suche nach Kunden fuer vorzugebende Rechtsform SET TALK OFF USE kunden DO WHILE .t. && Schleife wird ueber return verlassen ACCEPT "Rechtsform oder Ende:" TO rform IF UPPER(rform)="ENDE" USE SET TALK OFF RETURN ENDIF GO TOP && erneute Auswertung der Kundentabelle DO WHILE .NOT. EOF() IF UPPER(rform)$UPPER(name+vorname) DISPLAY WAIT "weiter: beliebige Taste!" ENDIF SKIP && Uebergang zum naechsten Datensatz ENDDO && Tabellenauswertung beendet ENDDO 4.3 Programmierung 19 Der in demopro8 verwendete Befehl WAIT verhindert das Durchlaufen“ des Ausgabebereiches des ” Befehlsfensters. WAIT zeichenkette Semantik Die Zeichenkette wird ausgegeben. Die Programmabarbeitung wird erst nach Drücken einer beliebigen Taste mit der Ausführung der auf WAIT logisch folgenden Anweisung fortgesetzt. Beispiel: WAIT "Bitte beliebige Taste Drücken!" Für Verzweigungen bei mehreren Entscheidungsmöglichkeiten kann der Befehl DO-CASE eingesetzt werden. DO CASE CASE bedingung1 CASE bedingung2 ··· ··· [ OTHERWISE ENDCASE Semantik befehlsfolge1 befehlsfolge2 befehlsfolge ] Die Bedingungen werden sukzessive ausgewertet. Bei der ersten gefundenen erfüllten Bedingung wird die zugeordnete Befehlsfolge abgearbeitet. Danach ist die Abarbeitung der Anweisung beendet. Falls keine der ausgewerteten Bedingungen true liefert, wird die Befehlsfolge nach OTHERWISE abgearbeitet (falls eine solche Befehlsfolge vorhanden ist). Im Programm demopro9 wird der DO-CASE– Befehl für die Gestaltung von Menüs eingesetzt. * Testprogramm demopro9 * Auswertung von Bestellungen - mit Aufruf von Unterprogrammen SET TALK OFF SELECT 1 USE kunden SELECT 2 USE artikel SELECT 3 USE bestellg DO WHILE .t. && Schleife wird ueber return verlassen ? "Auswertung von Bestellungen - Programmwahl" ? "------------------------------------------" ? "b - Bestellungen eingeben" ? "m - Mahnwesen" ? "a - Artikelauswertungen" ? "k - Kundenauswertungen" ? "e - Ende" ? ACCEPT "Programmwahl: " TO wahl DO CASE CASE UPPER(wahl)="B" DO bestell && Aktualisierung von Fritzsche, Wirtschaftsinformatik 20 4 PROGRAMMENTWICKLUNG MIT DBASE && Kunden- u. Artikeltabelle; && Erweiterung der Bestelltabelle && hier nicht realisiert CASE UPPER(wahl)="M" DO mahnwes && Auswertung der && Kunden- u. Bestelltabelle && hier nicht realisiert CASE UPPER(wahl)="A" DO artausw && Auswertung der Artikeltabelle && hier nicht realisiert CASE UPPER(wahl)="K" DO kunausw && Auswertung der Kundentabelle CASE UPPER(wahl)="E" CLOSE DATABASES SET TALK ON RETURN && Zyklus wird verlassen OTHERWISE ? "Auswahlmoeglichkeiten beachten!" ENDCASE ENDDO Die in demopro9 aufgerufenen Programme bestell, mahnwes und artausw werden hier nicht gezeigt. Das Programm kunausw zur Auswertung von Kundentabellen sieht eine Umsatzsummierung für Kunden vor, für die die Summe der Beträge offener Rechnungen einen bestimmten Betrag übersteigt. Außerdem kann die Summe der Umsätze in einem Ort bzw. Ortsgebiet berechnet werden. Als Kriterium werden dabei die PLZ bzw. die führenden Ziffern der PLZ herangezogen. * kunausw * (Unter-) Programm zur Auswertung der Kundentabelle SET EXACT OFF SELECT 1 && Arbeitsbereich der Kundentabelle DO WHILE .t. GO TOP && wegen zyklischer Abarbeitung summe = 0 ? "s - Umsatzsummierung fuer sumoffen >= ugrenze" ? "p - Umsatzsummierung fuer PLZ-(Orts-) Bereich" ? "e - Ende der Auswertung" ? ACCEPT "Auswertungsart: " TO art DO CASE CASE UPPER(art)="S" ACCEPT "untere Grenze sumoffen: " TO ugrenze ? "untere Grenze: ", VAL(ugrenze) DO WHILE .NOT. EOF() IF sumoffen >= VAL(ugrenze) Summe = summe + umsatz ENDIF SKIP ENDDO ? "Umsatzsumme:", summe CASE UPPER(art)="P" ACCEPT "PLZ (-bereich): " TO splz DO WHILE .NOT. EOF() IF plz = splz && besondere Pruefung der Gleichheit! 21 Summe = summe + umsatz ENDIF SKIP ENDDO ? "Umsatzsumme:", summe CASE UPPER(art)="E" RETURN && rueckkehr OTHERWISE ? "Auswahlmoeglichkeiten beachten!" ENDCASE ENDDO Da über Tastatur nur Zeichenfolgen eingegeben werden können (also keine Zahlen!), ist ggfs. – z.B. im Falle des benötigten Wertes für eine untere Grenze – eine Konvertierung einer solchen Zeichenkette in eine Zahl erforderlich. Die konvertierte Zahl kann dann rechnerintern mit dem Zahlenwert von sumoffen verglichen werden. Die Konvertierung kann mit der Funktion VAL vorgenommen werden. VAL: zeichenkette --> num Semantik: Eine Ziffernfolge am Beginn der zeichenkette wird in eine ganze Zahl num konvertiert. Ist das erste Zeichen keine Ziffer, liefert die Konvertierung die Zahl 0. Die erzeugte Zahl wird zehnstellig als ganze Zahl dargestellt, falls nicht auf Grund ihrer Größe mehr Zeichen zur Darstellung erforderlich sind. In diesem Fall erfolgt die Darstellung als Gleitkommazahl. 5 Datenmodellierung (logischer Datenbankentwurf ) Der Datenbankentwurf beschäftigt sich mit der Organisation der Daten in physisch getrennten Relationen. Dabei wird unterteilt in: • Logischer Datenbankentwurf Definieren der konzeptionellen und externen Ebene. Die Korrektheit der Datenbankoperationen ist zu sichern. • Physischer Datenbankentwurf Definieren der internen Ebene (Auswahl des Datenbanksystems usw.). Hauptziele sind die Performanz und der Schutz vor Datenverlust. Die hier beschriebene Entwurfsmethode nach B. Thurnherr u. C. A. Zehnder umfaßt folgende Hauptkomponenten [9]: • Entity-Relationship-Modell (Darstellungsmittel: Entitätenblockdiagramme) • Relationenmodell (Darstellungsmittel: Tabellen) • Kombination von Entity-Relationship-Modellen und Relationenmodellen zu einem globalen Konzept • konkrete Schritte einer Entwurfsmethode • Beachtung von Strukturregeln zur Erzeugung eines global normalisierten Datenschemas Fritzsche, Wirtschaftsinformatik 22 5 DATENMODELLIERUNG (LOGISCHER DATENBANKENTWURF) 5.1 Das Entity-Relationship-Modell (ERM) Beim Entwurf eines konzeptionellen Datenschemas geht es zunächst um die Beschreibung eines Ausschnittes aus der realen Welt. Dieser Vorgang heißt Modellbildung. Eine Entitätsmenge entspricht einer Klasse von Objekten mit gleichen Merkmalen, aber von Objekt zu Objekt unterschiedlichen Merkmalsausprägungen. Wir bezeichnen eine Entitätsmenge auch als Objekttyp (OT). Eine binäre Assoziation (OT1, OT2) legt fest, wie viele Entitäten aus OT2 einem Objekt aus OT1 zugeordnet sein können. Wir unterscheiden folgende Assoziationstypen: 1: einfache Assoziation c: konditionelle Assoziation m: multiple Assoziation mc: multipel-konditionelle Assoziation Kombiniert man eine Assoziation (OT1,OT2) mit ihrer Gegenassoziation, so ergibt dies die Beziehung (relationship) zwischen den beiden betrachteten Entitätsmengen. Beispiele von Beziehungen: Objekttyp1 Objekttyp2 Beziehungstyp Beziehung ————————————————————————– linke Schuhe rechte Schuhe 1 : 1 Paar Abteilungen Angestellte c:1 Abteilungsleiter Angestellte Abteilungen m:1 Abteilungszugehörigkeit Kinder Ehepaare mc : 1 Familienzugehörigkeit Frauen Männer c:c Ehe Personen Parteien m:c Parteizugehörigkeit Projekte Projekte mc : c ist Unterprojekt Standorte Standorte m:m Distanz Vorlesungen Studenten mc : m Einschreibung Personen Personen mc : mc Freundschaft 5.2 Schlüsselarten / Anforderungen an den Schlüsselaufbau Ein Schlüssel ist ein Merkmal oder eine Kombination von Merkmalen, womit Datensätze (Entitäten) in einer Menge von Datensätzen ausgezeichnet werden können. Schlüsselarten: • Suchschlüssel (search key) Schlüssel, dessen Wert mit den entsprechenden Merkmalswerten genau der Entitäten übereinstimmt, die bei einer Abfrage gesucht werden. Mit einem Suchschlüsselwert können ggfs. auch mehrere Entitäten einer Entitätsmenge angesprochen werden (z.B. SEEK). • Sortierschlüssel (sort key) 5.3 Entwurf von Relationen 23 Bestimmt bei einer gegebenen Ordnung der Schüsselwerte die physische Reihenfolge der Datensätze in der Datei. • Primärschlüssel (primary key) Positioniert die Datensätze in einer Speicherorganisation bei mehreren möglichen Sortierschlüsseln. Eine Entität wird durch den Wert ihres Identifikationsschlüssels eindeutig und dauerhaft bezeichnet. Def.: Ein Identifikationsschlüssel ist ein Attribut oder eine minimale Attributkombination, anhand dessen bzw. deren jedes Tupel der Relation identifiziert werden kann und dessen bzw. deren Wert zeitinvariant ist, d.h. sich während der Existenz des Tupels nicht ändert. Der Ausdruck minimale Attributkombination“ bedeutet, daß ohne Verlust der eindeutigen ” Identifizierbarkeit kein Attribut der Attributkombination weggelassen werden darf. Sind mehrere minimale Attributkombinationen vorhanden, spricht man von Schlüsselkandidaten (candidate key). In diesem Fall wird ein Schlüssel als Primärschlüssel ausgezeichnet. Die anderen Kandidaten heißen Sekundärschlüssel. Forderungen an künstliche Identifikationsschlüssel sind: a) Eindeutigkeit b) laufende Zuteilbarkeit c) Kürze und Schreibbarkeit d) sprechende“ Schlüssel ” 5.3 Entwurf von Relationen Strukturregel SR1: Bei der Darstellung von Entitätsmengen durch Relationen muß für jede Relation ein Identifikationsschlüssel festgelegt werden. Attributabhängigkeiten Es gibt unterschiedliche Arten von Attributabhängigkeiten: 1. funktionale Abhängigkeit Def.: In R(A,B) ist das Attribut B vom Attribut A funktional abhängig, wenn zu jedem Wert von A genau ein Wert von B gehört. Beispiel: Gewicht und Farbe eines Teiles sind von der Teilenummer funktional abhängig; zu unterschiedlichen Gewichten gehören immer unterschiedliche Teile, zu unterschiedlichen Teilenummern aber nicht unbedingt unterschiedliche Gewichte. 2. volle funktionale Abhängigkeit Fritzsche, Wirtschaftsinformatik 24 5 DATENMODELLIERUNG (LOGISCHER DATENBANKENTWURF) Def.: In R(S1,S2,A) ist das Attribut A von (den Schlüsseln) S1, S2 voll funktional abhängig, wenn A von dem zusammengesetzten Attribut (S1,S2) funktional abhängig ist, nicht aber von einem einzelnen Attribut S1 oder S2. 3. transitive Abhängigkeit Def.: In R(S,A,B) ist das Attribut B vom Schlüssel S (der auch ein zusammengesetzter Schlüssel sein kann) transitiv abhängig, wenn A von S funktional abhängig ist, S jedoch nicht von A, und wenn B von A funktional abhängig ist. Normalformen 1. Normalform (1NF) Def.: Eine Relation ist in der 1NF, wenn alle Attribute nur atomare Werte besitzen. Beispiel: Die nachfolgende Relation PERSONEN mit PRES# als Identifikationsschlüssel ist nicht in der 1NF, da sie für PROJ#, PROJNAME und %ARBZEIT Mehrfacheinträge aufweist. PERSONEN PERS# PERSNAME 101 Meyer 102 Krause ABT# 1 2 ABTNAME Planung Projektierung PROJ# 11,12 13 PROJNAME A,B C %ARBZEIT 60,40 100 Lösung: Die Inhalte der Tupel mit Mehrfacheinträgen müssen auf mehrere Tupel aufgeteilt werden, so daß für unterschiedliche Projektnummern, Projektnamen und prozentuale Anteile der Arbeitszeit unterschiedliche Tupel entstehen. Der Informationsgehalt der Relation bleibt dadurch ungeändert, aber es entstehen Redundanzen. PERS# allein genügt als Identifikationsschlüssel nicht mehr. Es wird eine Kombination (PERS#,PROJ#) als Identifikationsschlüssel verwendet. 2. Normalform (2NF) Def.: Eine Relation ist in der 2NF, wenn sie sich in der 1NF befindet und wenn jedes nichtSchlüssel-Attribut funktional abhängig ist vom Gesamtschlüssel, nicht aber von den einzelnen Schlüsselteilen (d.h. jedes nicht-Schlüssel-Attribut ist voll funktional abhängig vom Gesamtschlüssel). Beispiel: Die modifizierte Relation PERSONEN mit dem Identifikationsschlüssel (PERS#,PROJ#) befindet sich in der 1NF, aber nicht in der 2NF. PERS-PROJ-TAETIGK PERS# PERSNAME 101 Meyer 101 Meyer 102 Krause ABT# 1 1 2 ABTNAME Planung Planung Projektierung PROJ# 11 12 13 PROJNAME A B C %ARBZEIT 60 40 100 PROJNAME ist von PROJ# allein funktional abhängig. Auch ABT# ist von PERS# allein funktional abhängig. 5.3 Entwurf von Relationen 25 Lösung: Aufspalten der Relation PERS-PROJ-TAETIGK in 3 Relationen PERSONEN, PROJEKTE, PERS-PROGJ-TAETIGK. PERSONEN PERS# PERSNAME ABT# ABTNAME 101 Meyer 1 Planung 102 Krause 2 Projektierung PROJEKTE PROJ# 11 12 13 PROJNAME A B C PERS-PROJ-TAETIGK PERS# PROJ# %ARBZEIT 101 11 60 101 12 40 102 13 100 Auch jetzt steckt in der Relation PERSONEN noch Redundanz. Für jede Person ist der Abteilungsname gespeichert, obwohl dieser mit der Abteilungsnummer funktional gekoppelt ist. 3. Normalform (3NF) Def.: Eine Relation ist in der 3NF, wenn sie sich in der 2NF befindet und keine funktionalen Abhängigkeiten zwischen Attributen existieren, die nicht als Schlüssel definiert sind (d.h. keine transitiven Abhängigkeiten definiert sind). Beispiel: Die Relation PERSONEN(PERS#,PERSNAME,ABT#,ABTNAME) befindet sich nicht in der 3NF, weil ABTNAME über ABT# transitiv von PERS# abhängt. Lösung: Aufspalten der Relation in zwei Relationen: PERSONEN(PERS#,PERSNAME,ABT#) ABTEILUNGEN(ABT#,ABTNAME) Beziehungen zwischen Relationen: Globale Normalisierung Die globale Normalisierung verbindet die existierenden Beziehungen zwischen Entitätsmengen mit der Normalisierung des Relationenmodells. Def.: Ein Attribut heißt global, wenn es mindestens in einer Relation im Identifikationsschlüssel vorkommt. Def.: Ein Attribut heißt lokal, wenn es nur in einer einzigen Relation und dort nicht im Identifikationsschlüssel vorkommt. Es kann nach diesen Definitionen Attribute geben, die weder global noch lokal sind. Solche Attribute treten bei sich überlappenden“ Entitätsmengen auf. ” Beispiel: Fritzsche, Wirtschaftsinformatik 26 5 DATENMODELLIERUNG (LOGISCHER DATENBANKENTWURF) Angestellte und Studierende sind Hochschulangehörige. Doktoranden sind sowohl Angestellte als auch Studierende. Angenommen, die Attribute NAME und ADRESSE werden sowohl in einer Relation ANGESTELLTE als auch in einer Relation STUDIERENDE verwaltet: ANGESTELLTE(A#,NAME,ADRESSE,LOHNGRUPPE) STUDIERENDE(S#,NAME,ADRESSE,STUDIENGANG) In diesem Fall sind die Attribute NAME und ADRESSE weder lokal noch global. Attribute, die weder global noch lokal sind, sind Quelle von Redundanz und deshalb zu eliminieren. Sie sind einer neuen, übergeordneten Relation zuzuordnen (Generalisierung). Beispiel: HOCHSCHULANGEHOERIGE(PERS#,NAME,ADRESSE) ANGESTELLTE(PERS#,A#,LOHNGRUPPE) STUDIERENDE(PERS#,S#,STUDIENGANG) Die gewonnenen Erkenntnisse können nun in einer zweiten Strukturregel zusammengefaßt werden: Strukturregel SR2: Die Datenbasis muß aus Relationen in der 3NF bestehen, die nur globale und lokale Attribute enthalten. Verbindungen zwischen Relationen werden nunmehr ausschließlich über Globalattribute hergestellt. Trotz der Einhaltung der Normalformen und der Vermeidung von Attributen, die weder global noch lokal sind, können – zunehmend bei großen Datenmengen – Konsistenzverletzungen auftreten. Mit dem Begriff des Fremdschlüssels wird die Möglichkeit geschaffen, auszudrücken, daß Wertebereiche für Attribute einer Relation von den aktuell in einer anderen Relation vorhandenen Datensätzen bestimmt werden. Def.: Ein Fremdschlüssel (foreign key) in einer Relation R2 ist ein Attribut (oder eine Attributkombination), welches dem Identifikationsschlüssel in einer anderen Relation R1 entspricht, und dessen zugehöriger Wertebereich die Menge genau jener Werte umfaßt, welche die aktuell in R1 enthaltenen Tupel identifizieren. R1 heißt Basisrelation des Fremdschlüssels. Beispiel: Sei R1 PERSONEN(PERS#,PERSNAME,ABT#) und R2 PERS-PROJ-TAETIGK(PERS#,PROJ#,%ARBZEIT) PERS# ist Fremdschlüssel in PERS-PROJ-TAETIGK und Identifikationsschlüssel in PERSONEN. PERSONEN ist Basisrelation. Def.: Die referentielle Integrität ist eine Konsistenzbedingung, welche verlangt, daß Fremdschlüssel in R2 nur Tupel in R1 referenzieren, die z.Z. tatsächlich existieren. 27 Def.: Ein statischer Wertebereich ist eine Menge von Werten, welche bei der Definition der Datenbasis festgelegt wird, und die sich im Verlaufe der Zeit nicht ändert. Def.: Ein dynamischer Wertebereich ist eine Menge von Identifikationsschlüsselwerten oder wertkombinationen einer Basisrelation, die für Fremdschlüssel zur Verfügung stehen. Strukturregel SR3: Lokale Attribute müssen statische Wertebereiche verwenden. Jedes Global–Attribut darf nur in einer einzigen Relation auf einem statischen Wertebereich basieren und muß in dieser Relation Identifikationsschlüssel sein. In allen anderen Relationen muß es auf einem dynamischen Wertebereich basieren, d.h. als Fremdschlüssel aus einer anderen Relation eingebracht werden. Normalisierungen können auch anhand von Entitätendiagrammen vorgenommen werden. Hierarchische Beziehungen lassen sich direkt mit Fremdschlüsseln und dynamischen Wertebereichen darstellen. Zur Modellierung konditioneller und netzwerkartiger Beziehungen sind zusätzliche Relationen erforderlich. Rekursive Beziehungen müssen unter Bildung von Beziehungsrelationen aufgelöst werden. 6 Datenbankorganisation 6.1 Architektur von Datenbanksystemen Grundlage für die Architektur von DBS bildet das 3-Ebenen-Modell. Anwender benutzen Anwendungsprogramme über deren Benutzeroberfläche. Anwendungsprogramme greifen über das DBMS auf die Datenbasis zu. Anwendungsprogramme lösen über Befehle der verwendeten Datenmanipulationssprache (DML) Transaktionen an das DBMS aus. Das DBMS formt Transaktionen in Anweisungen an das Betriebssystem um. Das Betriebssystem verwaltet die Speicher und löst Operationen für Speicherzugriffe aus. Das DBBMS hat wichtige Aufgaben. Es - stellt Abfrage- und Modifikationsoperationen bereit, - sichert die Datenintegrität (sorgt insbesondere für die Einhaltung der Konsistenzbedingungen und die korrekte Ausführung parallel auszuführender Transaktionen), - verwaltet Datenbeschreibungen (Schemaverwaltung). Funktionsschichten des DBMS sind • Relationenverwalter: Abbildung der Mengenoperationen auf Tupeloperationen, • Tupelverwalter: Umsetzen der Tupelorganisation in Speicherblockorganisation • Speicherverwalter: Organisation der Speicherblöcke Man spricht von einer Hierarchie abstrakter Maschinen“. ” Zum Aufbau einer Datenbankanwendung ist neben dem DBMS ein Entwicklungswerkzeug – das Datenbankentwicklungssystem (DB-ES)– erforderlich. Systembestandteile werden von unterschiedlichen Partnern bereitgestellt (d.h. Partnern in unterschiedlichen Rollen): Fritzsche, Wirtschaftsinformatik 28 7 DATENSICHERHEIT UND DATENSCHUTZ • DB-ES + DBMS: globaler Anbieter (Datenbankhaus) • Datenschema + Anwenderprogramm: Anwendungsentwickler, Datenbankingenieur • Inhalt der Datenbasis: Anwender 6.2 Überblick zu Datenbankmanagementsystemen Datensysteme auf mehreren Rechnern Ist Dezentralisierung sinnvoll? Bei verteilten Datenbanken wird die Datenbasis auf mehrere Rechner verteilt. Die Aufteilung erfolgt nach zentralen Regeln. 6.3 Konsistenz und Transaktionen Daten sind konsistent, wenn sie vordefinierte Konsistenzbedingungen einer Datenbank erfüllen. Man unterscheidet Konsistenzbedingungen, die • dauernd erfüllt sein müssen, • temporär Inkonsistenzen erlauben. Bei Anwendung eines sog. Sperrprotokolls können parallele Transaktionen konsistent ausgeführt werden. Eine Transaktion T erfüllt die Konsistenzbedingungen, falls gilt a) T sperrt alle Datenbereiche exklusiv, die sie ändert. b) T sperrt alle Datenbereiche mit Teilsperren, die sie liest. c) T gibt erst Sperren frei, nachdem alle notwendigen Sperren gesetzt sind. 7 7.1 Datensicherheit und Datenschutz Datensicherheit Datensicherheit (data security) umfaßt alle organisatorischen und technischen Maßnahmen für die Sicherstellung der notwendigen Verfügbarkeit und Abschirmung der Daten. Verfügbarkeit bedeutet, auf bestimmte Daten zugreifen zu können. Abschirmung bedeutet, den Zugriff auf Daten für Unbefugte verhindern zu können. 7.2 Datenschutz Datenschutz (data protection) ist der Schutz der durch die Daten dargestellten Sachverhalte des realen Lebens vor jeder Art von Mißbrauch. Zum Datenschutz gehört die Abschirmung gegen Unberechtigte, aber auch deren Verfügbarkeit für Berechtigte. Der Datenschutz schließt rechtliche und ethische Problemstellungen ein. Zielkonflikte: 29 • Datenverfügbarkeit verlangt Duplikate, Datenabschirmung will Duplikate vermeiden. • Mehrbenutzersysteme erschweren die Datensicherheit • Datenkonsistenz kann sehr leistungsbehindernd sein • Datenschutzmaßnahmen können neue Datenschutzprobleme schaffen. 8 Kommunikationssysteme 8.1 Technisch-technologische Grundlagen Prozess Ein Prozess ist ein sich auf einem Rechner in Abarbeitung befindliches Programm. Ein Programm kann mit dem Benutzer auf unterschiedliche Art kommunizieren • gar nicht (Dämon-Prozess) • über die Kommandozeile • über eine grafische Oberfläche (GUI = Graphical User Interface) Prozess-Kommunikation Prozesse können untereinander auf unterschiedliche Art kommunizieren. Sockets sind Kommunikationsendpunkte für die Kommunikation von Prozessen, die auf unterschiedlichen Rechnern laufen können. Ein Socket ist durch IP-Adresse und Port-Nummer eindeutig identifiziert. Client-Server–Prinzip Prozesse realisieren Dienste“, indem sie in einer gewissen Weise zu” sammenarbeiten. Zu einem Dienst gehören ein Dienstanbieter (Server) und Dienstnutzer (Clients). Client-Server–Architektur Alle in einem Netzwerk zusammengeschlossenen Rechner können sich gegenseitig Dienste anbieten. Client und Server eines bestimmten Dienstes können also auch durch Prozesse auf demselben Rechner gebildet werden! 8.2 Kommunikationsdienste World Wide Web Das World Wide Web (WWW) ist nicht das Internet, sondern ein Dienst, der im Internet angeboten wird. Grundlage der Kommunikation ist das Hypertext Transfer Protocol (HTTP), ein Protokoll, das in der Anwendungsschicht liegt. Über das HTTP sollen vom Server (dem Web-Server) bereitgestellte Dokumente zum Client übertragen und vom Client (einem Browser) visualisiert werden. Dokumente in Netzwerken Netzwerke haben unser Verständnis vom Umgang mit (elektronischen) Dokumenten verändert. Man kann bei der Vielzahl existierender unterschiedlicher Systeme zur Dokumentenerstellung und -visualisierung (z.B. MS Word, Wordstar, ...) als Anbieter nicht erwarten, das jeder Client über ein System verfügt, das zu dem bei der Dokumenterstellung verwendeten System kompatibel ist. Fritzsche, Wirtschaftsinformatik 30 8 KOMMUNIKATIONSSYSTEME Dokumentenbeschreibungssprachen lichen Aspekte von Dokumenten ermöglichen die explizite Beschreibung der drei wesent- • Daten • Struktur • Format Damit unterscheidet sich die Darstellung von Dokumenten mittels Dokumentenbeschreibungssprachen wesentlich von der mit Hilfe von WYSIWYG-Systemen (WYSIWYG = What You See Is What You Get. Beispiel: MS Word). Jedes Dokument muß nach Inhalt und Struktur erschlossen werden. Die Formatierung wird weitgehend dem Client überlassen und ist von dessen Möglichkeiten abhängig. Eine Standardisierung von Formaten wird mittels Stylesheets angestrebt. SGML ist eine Meta-Sprache zur Definition von Sprachen zur Beschreibung von Dokumenttypen (z.B. Dokumenttyp Geschäftsbrief“). HTML ist eine von SGML erzeugte Sprache zur Beschrei” bung von Dokumenten des Typs Web-Dokument“. ” Unabhängigkeit von der Codierung Für die Notation der SGML-Deklaration selbst ist immer der ASCII-Zeichensatz zu verwenden. Andere zu verwendende Basis-Zeichensätze können (unter Verwendung von ASCII) bekannt gemacht werden. Unabhängigkeit vom Alphabet Praktisch muß eine unbegrenzte Menge von Zeichen darstellbar sein. Zur Definition von Zeichen werden sog. Entitäten eingeführt. Es gibt standardisierte Alphabeterweiterungen. Der telnet-Dienst Das Kommando telnet (Client) ermöglicht ein Login auf einem entfernten Rechner. Der Server lauscht“ auf dem entfernten Rechner am Port 23. Vorsicht vor der Benutzung dieses Dienstes: ” Daten und auch Passwörter werden unverschlüsselt über das Netz übertragen! (Abhilfe: ssh) Der finger-Dienst Mit dem Kommando finger (Client) können Informationen über einen Benutzer auf einem angegebenen System angezeigt werden, das den finger-Dienst anbietet (Server). Der Dienst (Server) lauscht“ am Port 79. ” 8.2 Kommunikationsdienste 31 Glossar Data Dictionary In DBS werden Datenbeschreibungen (Datentypen und Zusammenhänge) an einer zentralen Stelle, im Data Dictionary, verwaltet. Integrität einer DB In der DB gespeicherte Daten sind nicht widersprüchlich. Relation Teilmenge des kartesischen Produktes über den Wertebereichen von R. Ein Element einer Relation heißt Tupel. Performance Arbeitsgeschwindigkeit eines Informationsverarbeitungssystems. Fritzsche, Wirtschaftsinformatik 32 LITERATUR Literatur [1] A. Hald and W. Nevermann. Datenbank-Engineering für Wirtschaftsinformatiker. Vieweg, 1995. [2] H. R. Hansen. Wirtschaftsinformatik I. Gustav-Fischer-Verlag Stuttgart, 6. Auflage, 1992. [3] A. Heuer. Objektorientierte Datenbanken – Konzepte, Modelle, Systeme. Addison-Wesley, 1992. [4] A. Kehl. Visual dBASE 5.5 – Kompendium. Markt & Technik, 1995. [5] A. Meier. Relationale Datenbanken – Eine Einführung in die Praxis. Springer, 1992. [6] Mertens, Bodendorf, König, Picot, and Schumann. Wirtschaftsinformatik. Springer, 2. Auflage, 1992. [7] H. Sauer. Relationale Datenbanken – Theorie und Praxis inclusive SQL. Addison-Wesley, 2. Auflage, 1992. [8] P. Stallknecht. Einfhrung in die Wirtschaftsinformatik. Springer, 7. Auflage, 1995. [9] B. Thurnherr and C. A. Zehnder. Global Database Aspects, Consequences for the Relation Model and a Conceptual Schema Language. ETH Zürich, Institut für Informatik, Bericht No. 30, 1979. [10] G. Vossen. Datenmodelle, Datenbanksprachen und Datenbank-Management-Systeme. Addison-Wesley, 1987. [11] G. Vossen. Datenbankmodelle, Datenbanksprachen und Datenbank-Management-Systeme. R.Oldenbourg, 1999. [12] C. A. Zehnder. Informationssysteme und Datenbanken. vdf Hochschulverlag an der ETH Zürich, 1998.