1.1 Einleitung
Das Entwerfen einer Datenbank ähnelt in gewisser Weise dem Entwerfen der Architektur eines Java-Projekts. Sie können alle Daten in ein paar Tabellen ablegen oder aus Schemata und Dutzenden Tabellen eine schöne Datenstruktur erstellen.
Hier sind die Aufgaben, denen ein Entwickler normalerweise beim Entwerfen einer Datenbank gegenübersteht:
- Sicherstellen, dass alle notwendigen Informationen in der Datenbank gespeichert sind.
- Gewährleistung der Möglichkeit, Daten zu allen erforderlichen Anfragen zu erhalten.
- Reduzierung von Redundanz und Duplizierung von Daten.
- Sicherstellung der Datenbankintegrität
- Optimierung der Datenzugriffsgeschwindigkeit
Das Wichtigste, woran Sie denken sollten, ist, dass Sie keine ideale Datenbankstruktur erstellen können, weil. er wird sich ebenso wie Ihr Code ständig ändern. Beim Entwerfen Ihrer Datenbankstruktur sollten Sie drei Dinge beachten:
- Die Struktur muss gut genug sein.
- In allem muss eine Logik stecken, die andere Menschen verstehen können.
- Vorzeitige Optimierung ist die Wurzel allen Übels.
Sie müssen nicht die beste Datenbankstruktur der Welt erstellen. Sie wird sich noch verändern. Ihre Aufgabe besteht darin, sicherzustellen, dass es nach 20 Änderungen an der Struktur Ihrer Datenbank leicht genug ist, sie herauszufinden.
Wahrscheinlich wird Ihnen in den ersten Jahren Ihrer Arbeit niemand zutrauen, eine Basis von Grund auf zu entwerfen. Sie nehmen Änderungen an einem vorhandenen Schema vor. Sie müssen versuchen zu verstehen, auf welchen Grundsätzen es basiert, und sich an diese halten . Mit ihrer Charta steigen sie nicht in das Kloster eines anderen ein.
Optimieren Sie die Datenbank erst, wenn es notwendig ist. Wenn die Tabelle nur ein paar hundert Zeilen enthält, wird das DBMS sie höchstwahrscheinlich im Speicher behalten und Abfragen an sie zwischenspeichern.
Andererseits sollten Sie in der Lage sein, die Bearbeitung wichtiger Anfragen um das Zehn- oder sogar Hundertfache zu beschleunigen. Und es wäre schön, wenn du wüsstest, wie es geht. Wie sagt man in der High School im ersten Jahr? „Vergiss alles, was dir in der Schule beigebracht wurde…“
Wenn Sie wissen, was Datenbanknormalisierung ist, möchte ich Ihnen gerne mitteilen, dass Sie sich bei Ihrer Arbeit höchstwahrscheinlich mit Denormalisierung befassen werden . Nichts ist für die Heiligtümer des Projekts wichtiger als die Geschwindigkeit der Datenbank. Und wenn Sie, um die Auswahl von Daten aus der Datenbank zu beschleunigen, 200 (!) Tabellen zu einer zusammenfassen müssen (mit ungeheurer Redundanz), müssen Sie dies tun.
1.2 Bibliotheksdesign
Lassen Sie uns ein wenig in den Themenbereich eintauchen und über das Datenbankdesign nachdenken, indem wir etwas so Einfaches wie eine typische Buchbibliothek verwenden.
Die Hauptaufgabe jeder Bibliothek ist die Verwaltung des Buchbestandes. Es ist leicht, drei Hauptgruppen von Systembenutzern zu unterscheiden: Leser, Bibliothekar, Administrator . Die Aktivität jedes einzelnen wird in einem Anwendungsfalldiagramm dargestellt.
![](https://cdn.codegym.cc/images/article/ce739b07-800a-4e3c-a436-b40d3c54ea1d/512.jpeg)
Bereits jetzt lassen sich einige Entitäten und Beziehungen der zukünftigen Datenbank unterscheiden:
![](https://cdn.codegym.cc/images/article/b7373320-28d3-4fd8-9b62-a75c6102299f/1024.jpeg)
Bei diesem Ansatz ist nicht klar, wie der Leser mit dem Buch verbunden werden soll (der Leser hat keine Arität in der Beziehung „Ausgabe / Empfang“. Wenn das Buch mehrere Exemplare hat, kann es an mehrere Leser ausgegeben werden. Sogar Wenn ein Buch als Einzelexemplar verstanden wird, ist es beim Speichern in der Buchtabelle des aktuellen Lesers unmöglich, Informationen darüber zu erhalten, wer (und wie oft) dieses Buch zuvor genommen hat.
Die Lösung könnte die Einführung einer zusätzlichen Entität sein – einer Karte zur Ausstellung eines Buches. Bei der Ausgabe des Buches an den Leser wird eine Karte erstellt und bei der Übergabe des Buches ein entsprechender Vermerk angebracht. Mit Hilfe dieser Karten werden die Schulden jedes Benutzers ermittelt und Statistiken über die Nutzung von Büchern berechnet. Bei der Buchung von Literatur durch den Leser wird ebenfalls eine Karte gestartet; wird die gebuchte Literatur nicht innerhalb einer bestimmten Frist vom Leser in Anspruch genommen, wird die Karte vernichtet. Die Anzahl der Bücher, die ein Leser buchen kann, ist begrenzt.
Bei der Auswahl von Literatur sieht der Benutzer den Literaturkatalog mit der Möglichkeit, die Suchergebnisse nach Autor, Titel und Erscheinungsjahr zu filtern.
Es ist möglich, Statistiken für alle Bücher in der Bibliothek zu berechnen und gleichzeitig die Anzahl der ausgegebenen Exemplare des Buches für einen bestimmten Zeitraum zu berechnen. Sie können auch die Mindestanzahl der Buchinstanzen festlegen, für die die Berechnung durchgeführt wird. Basierend auf dieser Statistik werden ungenutzte Bücher aus der Bibliothek ausgebucht.
Folgende Haupteinheiten des Fachgebiets lassen sich unterscheiden:
- Benutzer (Bibliothekare und Administratoren);
- Leser;
- Lesesaal;
- Buch;
- Buchausgabekarte;
- Buchungskarte buchen.
Das modifizierte ER-Diagramm der Datenbank ist in der Abbildung dargestellt.
![](https://cdn.codegym.cc/images/article/af26b62d-dd9e-4713-be71-3f4fc10c5379/1024.jpeg)
Gemäß den in Abbildung 1 dargestellten Anwendungsfällen sollte die Datenbank die folgenden Abfragen implementieren (keine vollständige Liste):
- Bücher anzeigen, die den angegebenen Bedingungen entsprechen;
- Benutzer anzeigen, die Karten für die Ausgabe von Büchern haben, die nicht rechtzeitig geschlossen wurden (der Bibliothekar sucht nach Schuldnern);
- alle Bücher anzeigen, die den Buchleihkarten des jeweiligen Benutzers entsprechen und nicht rechtzeitig geschlossen wurden (der Benutzer kam in die Bibliothek, um neue Bücher zu kaufen – Sie müssen prüfen, ob er Schuldner ist, und ihn darüber informieren);
- alle Buchungskarten löschen, die vor mehr als N Sekunden erstellt wurden;
- Zeigt alle Bücher an, die nicht abgeschlossenen Buchreservierungskarten des angegebenen Benutzers entsprechen (der Leser hat Bücher bestellt und ist für sie in die Bibliothek gekommen – der Bibliothekar muss diese Liste erhalten, um sie auszugeben).
1.3 Schemabildung
Um ein Datenschema zu erstellen, müssen Sie zunächst das ER-Diagramm mit den Details der Entitäten ergänzen (verfeinern). Gleichzeitig ist es manchmal möglich, Fehler bei der Erstellung eines ER-Diagramms zu finden – bei dieser Aufgabe wurde festgestellt, dass das Buch „irgendwie“ mit dem Bibliothekssaal verbunden werden musste.
Dies kann durch die Angabe der erforderlichen „Hallennummer“ im Buch erfolgen, allerdings muss bei diesem Ansatz dasselbe Buch mehrmals in der Datenbank beschrieben werden (sofern es in verschiedenen Sälen vorkommt). Ein korrekterer Ansatz besteht darin, eine zusätzliche Entität „Buchplatzierung“ einzuführen. Die Abbildung zeigt ein ER-Diagramm mit einer hinzugefügten Entität und Requisiten.
![](https://cdn.codegym.cc/images/article/e0d1296a-18db-464c-88ac-c6f6a33c661b/1024.jpeg)
Das obige ER-Diagramm spiegelt die wichtigsten Tabellen, Beziehungen und Attribute wider; auf seiner Grundlage können Sie ein Datenbankmodell erstellen. Es gibt keinen Standard für das ER-Diagramm, es gibt jedoch eine Reihe von Notationen (Chen, IDEFIX, Martin usw.), für das Domänenmodell konnten jedoch weder der Standard noch die Notationen gefunden werden. Im Zuge der Erstellung eines solchen Diagramms werden jedoch zwangsläufig Schlüsselfelder (extern und intern) hervorgehoben, manchmal auch Indizes und Datentypen.
In diesem Fall im folgenden Diagramm:
- für Links wird Martins Schreibweise („Krähenfüße“ verwendet);
- Tabellen werden als Rechtecke dargestellt, die in drei Abschnitte unterteilt sind:
- Tabellenname;
- interne Schlüssel (mit einer Markierung markiert);
- Die übrigen Felder sind ausgefüllt, die Pflichtfelder sind mit einer Markierung gekennzeichnet.
Bei der Entwicklung dieses Modells bestand der Wunsch, die Tabelle „Administratoren“ mit der Tabelle „Bibliothekare“ zu verbinden – fügen Sie jedoch die Tabelle „Benutzer“ hinzu:
- der Administrator ist keinem bestimmten Raum zugeordnet (Sie müssten das entsprechende Feld mit Nullwerten ausfüllen);
- Dies würde wahrscheinlich die Verteilung der Zugriffsrechte erschweren – jetzt hat nur der Datenbankadministrator (der über ein spezielles DBMS-Panel arbeitet und kein Konto im zu entwickelnden System hat) Zugriff auf die Administratorentabelle. Beim Zusammenführen von Tabellen würden Benutzerabfragen jedoch Zugriff auf die neue Tabelle erfordern.
Bei der Erstellung dieses Diagramms wurde ein Fehler im ER-Diagramm gefunden und behoben – eine Tabelle wurde hinzugefügt, librarians_rooms
die Bibliothekare und Hallen vereint. Dies ist notwendig, da ein Bibliothekar in mehreren Räumen arbeiten kann, mehrere Bibliothekare jedoch im selben Raum arbeiten können.
Beim Entwerfen von Datenbanken sollten Sie in der Lage sein, zumindest wie im obigen Beispiel zu argumentieren. Wenn Sie glauben, dass es Ihnen gelungen ist, gehen wir weiter: noch mehr Theorie.
GO TO FULL VERSION