In den vorangegangenen Modulen haben wir das Konzept von Datenbanken eingeführt, die Arten der darin gespeicherten Daten besprochen und das Senden von REST-API-Anfragen zum Abrufen von Daten geübt. Dabei blieben wir ein außenstehender Teilnehmer am Prozess und forderten lediglich Informationen aus verschiedenen Quellen an.

Jetzt ist es an der Zeit, Ihre Datenbank zu erstellen! In diesem Modul werden wir genau das tun, wir werden verstehen, wie Daten in der Datenbank gespeichert werden und wie sie miteinander verknüpft werden können. Beginnen wir aber zunächst mit der Theorie. Es geht um die Form, in der die Daten zu uns kommen, und darum, in welche Kategorien die Datenbanken je nach Datenstruktur eingeteilt werden.

Daten-Grundlagen

Datendarstellung

Der absolute Spitzenreiter bei der Datendarstellung in der REST-API ist das JSON-Format. In allen Beispielen der vorangegangenen Module haben wir Daten in diesem Format erhalten. Es sei daran erinnert, dass REST uns bei der Wahl des Formats keine Beschränkungen auferlegt, in Zukunft werden Sie sicher auch andere kennenlernen (z. B. XML). Gleichzeitig bevorzugen Entwickler aufgrund seiner Leichtigkeit und einfachen Lesbarkeit oft JSON.

JSON (JavaScript Object Notation) ist ein textbasiertes Datenaustauschformat, das auf JavaScript basiert. Und lassen Sie sich von dem JavaScript im Titel nicht täuschen. Das JSON-Format hat zwar seinen Ursprung in dieser Programmiersprache, ist aber völlig unabhängig davon und kann überall verwendet werden.

Sehen wir uns einmal an, woraus ein JSON-Objekt besteht und wie es geschrieben wird.

Alle Daten, die Sie erhalten haben, wurden in geschweifte Klammern "{}" eingeschlossen. Sie werden immer am Anfang und am Ende des JSON-Objekts platziert.

Das Objekt selbst besteht aus einer Reihe von Datensätzen, die "Key : Value"-Paare sind und durch Kommas "," voneinander getrennt sind.

Der Schlüssel ist der Name des Eintrags selbst, eingeschlossen in Anführungszeichen "". Beispiele: "Name", "Wert", "Region", "Adresse". Es kann sich dabei um ein beliebiges Wort handeln, wobei bei der Entwicklung darauf geachtet werden muss, dass die Bedeutung klar ist.

Werte können verschiedene Arten haben. Betrachten wir sie alle.

  1. Zeichenkette. Enthält Textinformationen, eine Menge von Zeichen im Unicode-Standard. Strings werden in Anführungszeichen "" eingeschlossen.
  2. Zahl. Kann entweder eine Ganzzahl oder eine Gleitkommazahl sein. Sie wird so geschrieben, wie sie ist, es ist nicht notwendig, Anführungszeichen einzuschließen.
  3. Boolescher Wert. Einer von zwei Werten. Entweder wahr oder falsch. Wie eine Zahl wird sie ohne Anführungszeichen geschrieben.
  4. Array. Eine geordnete Menge von Elementen. Jedes Element kann von beliebigem Typ sein. Ein Array wird in eckige Klammern "[]" eingeschlossen, und seine Elemente werden durch Kommas getrennt.
  5. Objekt. Der JSON-Wert kann ein anderes JSON-Objekt sein. Für ihn gelten die gleichen Regeln wie für das Stammobjekt. Es ist ebenfalls in geschweifte Klammern eingeschlossen und enthält einen eigenen Satz von Datensätzen.

Betrachten Sie die Daten, die Sie in den ersten Modulen erhalten haben, mit diesen Informationen im Hinterkopf. Wählen Sie die JSON-Komponenten aus und bestimmen Sie, zu welchem Typ die empfangenen Werte gehören.

Speichern von Daten

Wir haben uns mit JSON beschäftigt. Jetzt kommen wir zur Hauptsache - den Datenbanken. In ihnen können Daten auf vielfältige Weise gespeichert werden. Dabei hat sich historisch gesehen das relationale Datenbankmodell am weitesten verbreitet.

Bei der Verwendung des relationalen Modells werden die Daten in Form von Tabellen mit einem bestimmten Datensatz gespeichert, dessen Struktur in der Entwurfsphase der Datenbank genau festgelegt wird. Die Beschreibung einer Datenstruktur in relationalen Datenbanken wird als Schema bezeichnet. Es definiert die Zusammensetzung der Tabellen, die Struktur der Felder in diesen Tabellen sowie die Beziehungen zwischen ihnen.

Das DBMS verwendet die Sprache SQL, um Daten mit einem relationalen Modell zu verwalten.

SQL - Strukturierte Abfragesprache. Es handelt sich um eine deklarative Sprache, d. h. ihre Befehle beschreiben nur die notwendige Aktion (Daten suchen, löschen, ändern), und jedes DBMS entscheidet selbst, wie es sie ausführt.

Es gibt viele verschiedene relationale DBMS. Zu den gängigsten gehören Oracle, MySQL, MS SQL und PostgreSQL. AppMaster verwendet übrigens PostgreSQL, d.h. ein modernes, fortschrittliches DBMS, das in einer Vielzahl von Unternehmen eingesetzt wird und zudem eine kostenlose Software ist (d.h. Sie müssen kein zusätzliches Geld für seine Nutzung bezahlen).

Ist Ihnen aufgefallen, dass die Abkürzung SQL in fast jedem DBMS-Namen vorkommt? Eine alternative Bezeichnung für eine relationale Datenbank ist eigentlich SQL-Datenbank.

Es gibt jedoch noch einen anderen Ansatz. Nicht-relationale Datenbanken, oder NoSQL. Es ist erwähnenswert, dass "No" in diesem Fall nicht die Negation von "no" ist, sondern eine Abkürzung für "Not only". Das heißt, "Nicht nur SQL".

Nicht-relationale DBMS verwenden kein gemeinsames Abfrageformat (wie SQL), sondern jedes von ihnen implementiert seine eigene Art, mit Daten zu arbeiten.

Sie benötigen keine eindeutig definierte Datenspeicherstruktur. Die Daten selbst werden in ihnen nicht in Form strenger Tabellen gespeichert, sondern in Form von Objekten mit einer beliebigen Anzahl von Attributen (ähnlich wie JSON). Dies kann von Bedeutung sein, wenn man mit Daten arbeitet, deren Struktur häufigen Änderungen unterworfen ist.

Gleichzeitig sind NoSQL-Lösungen aufgrund ihrer freien Struktur einfacher zu skalieren, wenn Sie eine auf mehrere Server verteilte Datenbank erstellen müssen.

Beispiele für NoSQL-DBMS sind MongoDB und Redis.

Datenbank-Design

Nun ist es an der Zeit, Ihre eigene Datenbank zu entwerfen. Gehen Sie dazu auf die Registerkarte Datenentwurf (Data Designer) im linken Bereich.

Die Daten in der Datenbank werden in Form von speziellen Tabellen (Modellen) gespeichert. Wie Sie feststellen können, haben wir bereits ein Modell. Es ist Teil des Berechtigungsmoduls und ist standardmäßig in jedem Projekt enthalten. Mit seiner Hilfe werden neue Benutzer der Anwendung angelegt und bestehende verwaltet. Aber wir werden uns jetzt nicht mit ihm beschäftigen, sondern unser eigenes Modell erstellen.

Stellen Sie sich vor, dass wir einen Kartendienst entwickeln. Lassen Sie uns ein Modell erstellen, das Informationen über Länder enthält. Um ein solches Modell zu erstellen, klicken Sie mit der rechten Maustaste in einen leeren Bereich des Canvas und wählen Sie Leeres Modell erstellen.

Zum Erstellen müssen wir nur den Namen des Modells angeben. Mit der automatischen Generierung von Endpunkten und Elementen der Benutzeroberfläche werden wir uns in weiteren Modulen des Kurses beschäftigen.

Bitte beachten Sie, dass das Modell unmittelbar nach der Erstellung bereits 4 Felder enthält. Dabei handelt es sich um Systemfelder, deren Vorhandensein die anfängliche Erstellung und weitere Verwendung des Modells stark vereinfacht.

  1. ID (Ganzzahl) - Eindeutiger Bezeichner, Primärschlüssel. Er wird automatisch für jeden neuen Eintrag in der Tabelle erstellt und soll sicherstellen, dass es keine Duplikate gibt. Anhand der ID können Sie einen Datensatz in einer Tabelle eindeutig identifizieren. Ihr Wert beginnt bei 1 und wird bei jedem neuen Eintrag automatisch um 1 erhöht.
  2. CreatedAt (datetime) - Der Zeitpunkt, zu dem der Datensatz in der Tabelle erstellt wurde.
  3. UpdatedAt (datetime) - Der Zeitpunkt, zu dem der Eintrag zuletzt geändert wurde.
  4. DeletedAt (datetime) - Der Zeitpunkt, an dem der Eintrag gelöscht wurde. Natürlich nur dann, wenn ein Soft-Removal verwendet wurde. Das heißt, eine solche Löschung, bei der der Datensatz nur als gelöscht markiert und durch Zugriffsanfragen gefiltert wird, aber gleichzeitig physisch in der Tabelle verbleibt. Dies unterscheidet sich von der Massenlöschung, bei der die Daten tatsächlich vollständig gelöscht werden.

Zusätzlich zu den systemeigenen Feldern ist es ratsam, dem erstellten Modell benutzerdefinierte Felder hinzuzufügen. Nehmen wir an, wir möchten den Namen des Landes und eine Beschreibung mit Informationen dazu sehen.

Die Wahl des Feldtyps sollte kein Problem sein. Für den Namen eignet sich String und für die Informationsbeschreibung Text.


Darüber hinaus sind vier weitere Schalter verfügbar:

  1. Mehrere Werte (Array) - Verwenden Sie Arrays anstelle von einzelnen Einträgen.
  2. Nicht Null - Das angegebene Feld darf nicht leer sein, sondern muss immer Daten enthalten.
  3. Eindeutig - der Wert des Feldes muss eindeutig sein, in diesem Modell kann es keine zwei Datensätze geben, deren Werte dieses Feldes gleich sind.
  4. Index - gibt an, dass ein spezieller Index für dieses Feld erstellt wird, um die Suche zu beschleunigen.

Im Allgemeinen ist es nur dann richtig, ein Häkchen zu setzen, wenn es wirklich notwendig ist. Wir könnten zum Beispiel Not null und Unique für Ländernamen markieren, wenn wir davon ausgehen, dass es kein Land ohne Namen oder zwei Länder mit demselben Namen geben kann. Es ist jedoch ratsam, dies in der Phase der Erstellung der Anwendungslogik zu kontrollieren und keine Einschränkungen in der Datenbank selbst vorzunehmen.

Legen Sie auf ähnliche Weise eine Tabelle mit Informationen über Städte an. Überlegen Sie, welche Datenfelder sie enthalten kann und welcher Art diese Felder sind.

Die Daten in der Datenbank existieren nicht für sich allein, sondern in Form von verstreuten Tabellen. Sie stehen in einer bestimmten Beziehung zueinander. Der Schlüssel zur Entwicklung eines Datenmodells besteht darin, diese Beziehungen zu definieren und Beziehungen herzustellen.

Um solche Beziehungen herzustellen, muss man mit der Maus eine Linie von der Grenze eines Modells zu einem anderen ziehen. In unserem Beispiel wissen wir sicher, dass jede Stadt in einem bestimmten Land liegt, also können wir eine Verbindung von Land zu Stadt herstellen.


Es gibt 3 verschiedene Arten von Verbindungen:

  1. Eins-zu-eins (hat einen). Jeder Datensatz in der Tabelle wird einem Datensatz aus der zugehörigen Tabelle zugeordnet (dies gilt auch in umgekehrter Richtung). Ein einfaches Beispiel ist eine Person und ihr Reisepass. Wir können immer sicher sein, dass diese Verbindung eindeutig ist. Ein Reisepass kann nur einen Inhaber haben, und jede Person kann nur einen gültigen Reisepass besitzen.
  2. One-to-many (hat viele). Jeder Datensatz in einer Tabelle kann viele Datensätze in einer anderen Tabelle enthalten. Unsere Datenbank ist ein ähnliches Beispiel. Ein Land kann viele verschiedene Städte haben, aber jede Stadt kann nur zu einem Land gehören. Das ist die Verbindung, die wir herstellen werden.
  3. Viele-zu-Viele. Eine Beziehung, bei der mehrere Datensätze aus einer Tabelle mit mehreren Datensätzen aus einer anderen Tabelle übereinstimmen können. Ein einfaches Beispiel ist die Beziehung zwischen Lehrern und Schülern. Jeder Lehrer kann viele Schüler unterrichten, so wie jeder Schüler von vielen verschiedenen Lehrern lernen kann.

Hausaufgaben

Stellen Sie sich vor, Sie müssen eine Anwendung für einen Online-Shop entwickeln. Erstellen Sie ein Datenbankmodell, damit es funktioniert.

  • Es ist notwendig, für die Verfügbarkeit von Waren mit Karten ihrer Beschreibung, verschiedene Warenkategorien, Informationen über Bestellungen und über Kunden zu sorgen.
  • Füllen Sie die Tabellen mit Feldern verschiedener Typen (verwenden Sie mindestens 5 Typen).
  • Stellen Sie Beziehungen zwischen den Tabellen her. Verwenden Sie alle 3 Verknüpfungstypen.