Einführung
In dem Artikel „Relationales Netzwerkdatenmodell“ wurde ein neues Konzept der HTMS-Datenmodellierung vorgeschlagen, das eine Entwicklung des kanonischen relationalen Modells darstellt. Dieser Artikel zeigt Beispiele, wie es mit der Logik-Level-API praktisch verwendet werden kann.
Die Beispiele sind an die bekannte pädagogische und methodische Lösung zum Erstellen von Websites gebunden - eine Vorlage für ein webbasiertes Umfrageprojekt zum Django-Framework in MS Visual Studio .
Das Verständnis dieses Artikels erfordert ein grundlegendes Verständnis der Python-Sprache und des Django-Frameworks.
Datenbankbeschreibung
Das konzeptionelle Datenschema besteht aus vier Tabellen und einer Beschreibung der Abhängigkeiten zwischen ihnen:

Anmerkungen:
- Sequenznummer der Antwort in der Umfrage - wird nur verwendet, um ein Abfrageset zu bilden, wenn die Seite mit der Umfrage angezeigt wird
- Der Name des auf der Website registrierten Umfrageteilnehmers wird nur für registrierte Benutzer ausgefüllt (nicht registrierte Benutzer können abstimmen und kommentieren). Registrierte Benutzer schlagen möglicherweise vor, neue Umfragen zu erstellen. In diesem Artikel werden solche Feinheiten jedoch nicht berücksichtigt.
Abhängigkeiten:
- Jede Umfrage (Zeile in der Umfragetabelle ) entspricht 2 oder mehr Antworten, d. H. Zeilen in der Tabelle " Antworten"
- Jede Antwort (eine Zeile in der Antworttabelle) entspricht 0 oder mehr Kommentaren, d. H. Zeilen in der Kommentartabelle
- Wenn der Site-Besucher zum ersten Mal abgestimmt hat, wird in der Visiters- Tabelle eine neue Zeile für ihn erstellt . Benutzer werden durch die IP-Adresse identifiziert
- Nach jeder Abstimmung erhöht sich die Anzahl der abgegebenen Stimmen für die ausgewählte Antwort in der Umfrage um 1
- Die Site sollte sich merken, welche Antworten jeder Besucher gegeben hat und welche Kommentare er hinterlassen hat: Jeder Benutzerkommentar wird in eine neue Zeile der Kommentartabelle geschrieben
Formalisierung einer Datenbank mit ORM Django
Zunächst zeigen wir, wie die Datenbank traditionell beschrieben wird - unter Verwendung der Klassen des Modells Django-Paket.

Anmerkungen:
- Das Attribut "Umfragen" scheint redundant zu sein, da es möglich ist, eine Liste von Umfragen über eine Liste von Antworten abzurufen. Dies geschieht jedoch, um die Tatsache der Teilnahme an der Umfrage nicht zu verlieren, wenn die Antwort aus der Umfrage entfernt wird
- Django erstellt (oder ändert) die Datenbank physisch vor dem ersten Start des Site-Programms basierend auf den benutzerdefinierten Unterklassen von Modellen. Modell mit den Befehlen python manage.py migrate und makemigrations, die im Anwendungskontext ausgeführt werden
Formalisieren einer Datenbank mit HTMS
Um eine Datenbankbeschreibung zu erstellen, müssen Sie ihre Klassen definieren:

Polls_db ist die Hauptdatenbankklasse für die Umfragesite-Anwendung. Die Hauptdatenbankklasse ist als Unterklasse von HTdb definiert , die in HTMS als Oberklasse für Anwendungsdatenbanken dient (es können mehrere vorhanden sein).
Umfragen, Antworten, Kommentare, Besucher - Klassen für Datenbanktabellen. Tabelle - eine der Hauptklassen von HTMS, dient als Oberklasse für Klassen bestimmter Tabellen.
HTMS erstellt (oder öffnet eine vorhandene) Datenbank direkt während der Ausführung des Site-Programms. Relevante Optionen:
- Erstellen Sie eine neue Datenbank mit dem Namen "polls":
my_db = Polls_db (db_name = "polls", new = True )
- Die Hauptdatenbankdateien ("leer") werden physisch erstellt.
- Im OP wird das Hauptdatenbankobjekt my_db erstellt - eine Instanz der Klasse Polls_db .
- Öffnen Sie eine Datenbank mit dem Namen "polls":
my_db = Polls_db (db_name = "polls")
- Die Hauptdateien der vorhandenen Datenbank werden physisch geöffnet.
- Das Objekt my_db wird im OP erstellt, dessen Attribute die grundlegenden Informationen über die aus ihren Dateien gelesene Datenbank enthalten.
Wenn während der Initialisierung einer Instanz der HTdb- Unterklasse eine neue Datenbank erstellt wird, muss die tatsächliche Struktur (Schema) auf logischer Ebene ermittelt werden. Dies erfolgt einmal beim ersten Start der Site, jedoch im Gegensatz zur ORM-Technologie im Programmcode der Site selbst.
- Definieren Sie alle Datenbankattribute - ihre Namen und Datentypen:

- Definieren Sie Attributtypen mit Links (der Rest ist standardmäßig vom Typ 'Ursache'):

- Definieren Sie Tabellenobjekte und wählen Sie Attribute (Spalten) für sie aus der Menge aller Attribute des GT aus:

Die Ausführung dieses Codes führt zur Bildung der Datenbankstruktur und zur Erstellung der entsprechenden Dateien auf dem Server, wenn die Datenbank neu ist.
Wenn die Datenbank bereits erstellt wurde, müssen Sie zum Arbeiten damit nur Instanzen der Tabellenklassen erstellen:

Vergleich von HTMS und ORM
Offensichtlich ist die Formalisierung des Datenschemas auf logischer Ebene in HTMS und ORM ähnlich, aber es gibt eine Reihe grundlegender Unterschiede.
In HTMS werden Attribute und Datentypen als ein einzelnes Leerzeichen definiert, in ORM sind sie an separate Tabellen gebunden.
Der gesamte Satz von Datenbankattributen in ORM wird "additiv" erstellt, da Modelle definiert sind, können sie nicht programmgesteuert geändert werden, sondern in HTMS für die gesamte Datenbank als Ganzes, und Sie können sie in der Anwendung ohne Migration hinzufügen oder entfernen.
Die Attribute für jedes einzelne Modell im ORM sind statisch, während sie im HTMS dynamisch sind. Tabellenstrukturen in HTMS werden als Projektionen eines einzelnen Attributraums definiert - sie sind einfacher und klarer als in ORM. HTMS-Website-Algorithmen können Optionen zum Ändern der ursprünglichen Datenbankstruktur bereitstellen, z. B. Hinzufügen neuer Attribute oder Löschen vorhandener Attribute, was in der ORM-Technologie im Prinzip unmöglich ist .
Beachten Sie, dass die HTMS-Technologie, wenn sie im Django-Framework angewendet wird, nur ihre Funktionen erweitert und nicht auf die Verwendung von ORM verzichtet. Beispielsweise kann das gesamte hervorragende Authentifizierungssystem von Django verwendet werden, das auf den Modellen und der Benutzerklasse (aus dem Modul django.contrib.auth.models) basiert. In der Realität ist eine Django-basierte Site mit HTMS normalerweise ein "Multimodell", dh ein Teil der Gesamtdatenbank ist rein relational, der andere relationales Netzwerk.
HTMS-Verwendungsbeispiele auf logischer Ebene für Umfragedatenbanken
Dienstprogrammfunktion zum erstmaligen Füllen einer Datenbank aus einer JSON-Datei

Die Funktion zum Bilden einer Reihe von Objekten mit Abfragen (Abfragesatz für klassenbasierte Ansicht - CBV-Abfragen)

Die Funktion zum Bilden einer Reihe von Objekten mit Umfrageantworten (Abfragesatz für CBV-Umfrageantworten)

Die Funktion der Bildung einer Reihe von Objekten mit den Ergebnissen der Abstimmung über eine Umfrage (Queryset für CBV)

Funktion zum Aufzeichnen des Abstimmungsergebnisses in der Datenbank (über URL aus dem Abstimmungsformular aufgerufen)

Wir hoffen, dass die Leser die Einfachheit und Natürlichkeit der Arbeit mit Daten in HTMS zu schätzen wissen!