Freigeben über


Entwerfen der Datenbank "Tastrade"

Beim Entwurf der Datenbank waren folgende entscheidenden Aufgaben zu bewältigen:

  • Erstellen der Tabellenstrukturen und Beziehungen.
  • Implementieren von Maßnahmen zur Datensicherheit.
  • Verwalten der Datenintegrität.

Erstellen der Tabellenstrukturen und Beziehungen

Das Erstellen von Tabellenstrukturen und Beziehungen in Tastrade wird unter Entwerfen von Datenbanken behandelt. Sie können die Tabellen und Beziehungen in der Datenbank Tastrade anzeigen, indem Sie den Datenbank-Designer öffnen.

Da der Auftrag das zentrale Element innerhalb dieser Anwendung darstellt, ist die in die meisten Beziehungen einbezogene Tabelle die Auftragstabelle (Orders-Tabelle). Andere Elemente dienen direkt oder indirekt zur Unterstützung eines Auftrags:

  • Eine Kundin oder ein Kunde erteilt einen Auftrag.
  • Eine Mitarbeiterin oder ein Mitarbeiter erstellt oder "übernimmt" einen Auftrag.
  • Ein Spediteur liefert den Auftrag aus.
  • Aufträge enthalten Positionen, die wiederum Produkte enthalten.

Die beiden Tabellen Supplier (Lieferant) und Category (Kategorie) unterstützen die Tabelle Products (Artikel), obwohl sie keine direkten Informationen zu einem Auftrag beisteuern. Lieferanten stellen die Bezugsquelle für die Produkte dar, während die Category-Tabelle Informationen enthält, die zur Produktverwaltung verwendet werden. Im Beispiel Tasmanische Handelsgesellschaft spielen diese Tabellen keine zentrale Rolle. In anderen Anwendungen, z. B. in einer Anwendung zur Lagerbestandsverwaltung, wären sie jedoch wichtig.

Außer dem logischen Aufbau stellen beim Entwurf der Datenbank auch die Sicherheit und Datenintegrität wichtige Faktoren dar.

Implementierung von Maßnahmen zur Datensicherheit

Datenbanksicherheit bedeutet unter anderem, den Zugriff auf Daten einzuschränken. Nichtautorisierte Benutzer sollen keinerlei Zugriff auf Daten erhalten, während andere Benutzer keinen vollen Zugriff auf bestimmte Daten erhalten sollen. Beispielsweise möchten Sie vielleicht verhindern, dass Mitarbeiter, die für die Auftragseingabe zuständig sind, Personaldaten von Firmenangehörigen oder Kreditrahmen von Kunden ändern können.

Um solche Sicherheitsfunktionen zu implementieren, wurden zu der Employee-Tabelle zwei Felder hinzugefügt: Group_ID und Password. Um Zugriff auf die Informationen in der Datenbank zu erhalten, müssen Benutzer ein Anmeldeformular ausfüllen und das entsprechende Kennwort eingeben. Wenn sich Benutzer anmelden, bestimmt Tasmanische Handelsgesellschaft die Zugriffsberechtigungsebene dieser Person anhand des Wertes im Feld Group_ID.

Da das Anmeldeformular ein gemeinsames Element vieler Anwendungen ist, wurde dafür eine Klasse erstellt: Login in Login.vcx. Dieses Formular enthält Textfelder, in die Benutzer einen Benutzernamen und ein Kennwort eingeben können. Die Eigenschaften der Klasse dienen dazu, die Tabelle und das Feld für das Kennwort anzugeben. Im Click-Ereignis der Befehlsschaltfläche OK wird allgemeiner Code aufgerufen, der zur Überprüfung des von Benutzern eingegebenen Kennwortes dient. Wenn Benutzer das richtige Kennwort eingegeben haben, wird eine Eigenschaft des Formulars (uRetVal) entsprechend festgelegt.

Für diese Anwendung wurde für die Login-Klasse eine LoginPicture-Unterklasse erstellt. LoginPicture enthält die gesamte Funktionalität der Login-Klasse sowie zusätzlich ein Foto des Benutzers, Text, in dem die Person beschrieben wird, und einen Hinweis auf das Kennwort. Keines dieser Objekte wäre in einem Anmeldeformular außerhalb des Kontextes von Tasmanische Handelsgesellschaft wünschenswert.

Ein Anmeldeformular gewährleistet ein gewisses Maß an Sicherheit in einer Einzelplatzanwendung: Da jedoch alle Benutzer mit Hilfe einer Kopie von Visual FoxPro die Datenbank öffnen und Daten außerhalb der Anwendung lesen oder bearbeiten können, sind die Daten nicht wirklich sicher. Unter realistischen Anwendungsbedingungen würden Netzwerk-Sicherheitsmaßnahmen und/oder Datenverschlüsselungsmethoden angewendet werden, um die Sicherheit zu erhöhen. Bei dieser Beispielanwendung sollten jedoch alle Visual FoxPro-Benutzer sowohl von innerhalb als auch von außerhalb der Anwendung Zugriff auf die Daten besitzen. Daher müssen die Anmeldebenutzernamen und Kennwörter für jede Person erkennbar sein, die sich bei der Anwendung anmeldet, und die Daten werden von der Anwendung nicht verschlüsselt.

Gewährleisten der Datenintegrität

Der Schutz der Datenintegrität erfordert es, sicherzustellen, dass autorisierte Benutzer keine Daten hinzufügen, ändern oder löschen, die Teile der Datenbank unbrauchbar machen oder verfälschen würden.

Datenintegritätsverwaltung auf Datenbankebene gibt an, ob Benutzer Werte über die Formulare innerhalb der Anwendung oder direkt in einem Datenblattfenster verändern. Daher wird Datenintegrität in Form von referenzieller Integrität und dem Umsetzen von Geschäftsregeln innerhalb der Datenbank realisiert.

Referenzielle Integrität

Referenzielle Integrität wurde auf der Datenbankebene mit Hilfe des Assistenten für Referenzielle Integrität implementiert. Für alle Master-Tabellen (übergeordnete Tabellen) in der Datenbank gilt, dass jede Änderung, die in ihnen an einem Schlüsselwert vorgenommen wird, ebenso in den Detailtabellen durchgeführt wird (Aktualisierungsweitergabe). Wenn Benutzer einen Datensatz in einer Master-Tabelle löschen, werden die zugeordneten Datensätze in den Detailtabellen ebenfalls gelöscht (Löschweitergabe). Benutzer können keine Datensätze in anderen Master-Tabellen löschen, wenn in einer Detailtabelle zugeordnete Datensätze vorhanden sind (Löscheinschränkung). Benutzer können keine Datensätze in Detailtabellen einfügen, die nicht mit Datensätzen in der Master-Tabelle übereinstimmen (Einfügungseinschränkung).

Jede der Tabellen in Tastrade (außer Order_Line_Items) besitzt ein Primärschlüsselfeld. Da Visual FoxPro einen Wert ungleich NULL und ungleich Leer für dieses Feld verlangt und automatisch verhindert, dass ein Duplikat eines Wertes in dieses Feld eingegeben werden kann, ist es nicht erforderlich, Code zu schreiben, der Duplikate von Primärschlüsseln verhindert. Um es den Benutzern jedoch noch leichter zu machen, erzeugt die gespeicherte NewID( )-Prozedur einen neuen Wert für die Primärschlüssel der meisten Tabellen. Der nächste Primärschlüsselwert für jede entsprechende Tabelle ist in der Setup-Tabelle gespeichert. NewID gibt diesen Wert zurück und berechnet einen neuen Wert für den nächsten verfügbaren Schlüssel. NewID( ) ist der (im Tabellen-Designer festgelegte) Standardwert von Orders.Order_id, Products.Product_id und anderen Primärschlüsselfeldern der Datenbank.

Bei der Customer-Tabelle würde sich der Zeit- und Arbeitsaufwand zum Erzeugen neuer Werte für die Kunden-IDs (Kundennummern) für die Benutzer jedoch nicht lohnen. Den Primärschlüsselwert für einen neuen Datensatz, der in das Formular Kund/innen (Customer) oder Kunden/in hinzufügen eingegeben wird, müssen die Benutzer eintragen. Der Primärschlüssel für die Customer-Tabelle ist Customer_id. Das Schema der Namensvergabe zur Kundenidentifikation wird vom Namen des jeweiligen Unternehmens abgeleitet. Die Kunden-ID für die Firma "B's Beverages" lautet z. B. BSBEV.

Geschäftsregeln

Bei der Datenbank Tastrade war es erforderlich, sicherzustellen, dass Aufträge nicht gespeichert werden können, ohne dass ihnen zumindest ein Artikel zugeordnet wurde. Die gespeicherte ValOrder( )-Prozedur erfüllt diese Anforderung. Darüber hinaus wird durch ValOrder( ) sichergestellt, dass der Auftragsgesamtbetrag weder den Wert des Kunden für Max_order_amt über- noch den Wert für Min_order_amt unterschreitet. Wenn in TasmanischeHandelsgesellschaft ein Auftrag unterhalb des Mindestbetrags oder oberhalb des Maximalbetrags für einen Kunden liegt, wird ein Meldungsfeld angezeigt, das dem Benutzer die Möglichkeit bietet, die Regel außer Kraft zu setzen. In einem strengeren Datenszenario würden Sie es den Benutzern nicht ermöglichen, diese Regel außer Kraft zu setzen.

ValOrder( ) ruft die gespeicherten Prozeduren RemainingCredit( ) und CalcMinOrdAmount( ) auf. Da die Datenbank keine Informationen darüber speichert, welche Aufträge eine Kundin oder ein Kunde bezahlt hat und welche noch nicht, ist es nicht möglich, Informationen über offen stehende Rechnungsbeträge der Kunden zu erhalten. Die RemainingCredit( )-Prozedur nimmt an, dass alle Aufträge noch nicht bezahlt wurden.

Gültigkeitsprüfung auf Formularebene

Die Gültigkeitsprüfung von Daten auf Formularebene schließt die Beschränkung des Benutzerzugriffs auf Daten durch Aktivierung und Deaktivierung entsprechender Steuerelemente ein. Optimistische Zeilenpufferung ist auf Formularebene für alle datengebundenen Formulare eingestellt. Beim Formular Auftragseingabe ist für die Tabelle, die im Datenraster angezeigt wird, optimistische Tabellenpufferung eingestellt. Die optimistische Zeilen- und Tabellenpufferung dient dazu, zur zuletzt gespeicherten Fassung eines Datensatzes zurückzukehren, wenn Benutzer sich entscheiden, Änderungen nicht zu speichern.

Datenbankpflege

Um es den Benutzern zu ermöglichen, die Tabellen neu zu indizieren und die Datenbankgültigkeit zu überprüfen, wurde zu der Anwendung das Formular Rebuild (Datenbank-Dienstprogramme) hinzugefügt. Das Formular Rebuild verwendet die Befehle REINDEX und VALIDATE.

Als Alternative zur Verwendung des REINDEX-Befehls könnten Sie die Indexausdrücke mit Hilfe der Funktionen TAG( ) und KEY( ) extrahieren, alle Indexnamen mit DELETE TAG ALL löschen und alle Indizes mit INDEX ON wiederherstellen. Diese Methode würde die CDX-Datei minimieren.

Kommentare zur Datenbankerstellung

Während der Entwicklung wurden einige der Tabellennamen und Feldnamen geändert, um die Möglichkeiten der Verwendung langer Namen innerhalb von Visual FoxPro zu verdeutlichen. Folglich mussten Sichten (Ansichten) und Indizes neu erstellt und die ControlSource-Eigenschaft datengebundener Steuerelemente auf Formularen und Berichten manuell geändert werden.

Nach der Anmeldung mussten die Benutzer ursprünglich eine Aktion aus einem Menü auf einem ansonsten leeren Bildschirm auswählen. In einer späteren Phase des Entwicklungsprozesses wurde das Feld Startup_action zur User_level-Tabelle hinzugefügt. Die Informationen dieses Feldes dienen dazu, anzugeben, welcher Teil der Anwendung unmittelbar nach der Benutzeranmeldung ausgeführt werden soll.

Im Projekt Tastrade gibt es zwei freie (nicht in die Datenbank aufgenommene) Tabellen: Behindsc und Repolist. Behindsc ist die Tabelle, in der Hintergrundinformationen gespeichert sind, die Aufschluss darüber vermitteln, wie bestimmte Funktionen in der Anwendung implementiert sind. Sie enthält keine Daten, die von der Anwendung verwendet werden. Repolist ist eine Tabelle, in der verfügbare Berichte zusammen mit einem beschreibenden Namen und einer Angabe über den Typ jedes Berichts aufgelistet werden. Diese Tabellen werden intern von der Anwendung verwendet. Sie bilden keinen Bestandteil der Daten, die durch die Benutzer in der Datenbank gespeichert werden. Jede von diesen Tabellen hätte in die Datenbank aufgenommen werden können. Sie wurden jedoch nicht dort aufgenommen, weil sie unabhängig von den Daten arbeiten, die in der Datenbank Tastrade gespeichert sind.

Siehe auch

Lösungsbeispiele | Beispiel Tasmanische Handelsgesellschaft | Erstellen der Spezifikation für Tasmanische Handelsgesellschaft | Entwerfen und Erstellen der Klassen der Beispielanwendung Tasmanische Handelsgesellschaft | Schreiben, Testen und Debuggen von Tasmanische Handelsgesellschaft | Tasmanische Handelsgesellschaft - Klassenbibliotheken