Utilisation de l'API HTMS pour travailler avec une base de données réseau relationnelle

Présentation


Dans l'article «Modèle de données de réseau relationnel», un nouveau concept de modélisation de données HTMS a été proposé, qui est un développement du modèle relationnel canonique. Cet article montrera des exemples de la façon dont il peut être pratiquement utilisé à l'aide de l'API de niveau logique.

Les exemples sont liés à la solution pédagogique et méthodologique bien connue pour la création de sites - un modèle pour un projet d'enquête en ligne sur le framework Django dans MS Visual Studio .

La compréhension de cet article nécessite une compréhension de base du langage Python et du framework Django.


Description de la base de données


Le schéma de données conceptuel est composé de quatre tableaux et d'une description des dépendances entre eux:




Remarques:

  • numéro de séquence de la réponse dans l'enquête - utilisé uniquement pour former un ensemble de requêtes lors de l'affichage de la page avec l'enquête
  • le nom du participant au sondage inscrit sur le site - il est rempli uniquement pour les utilisateurs enregistrés (les utilisateurs non enregistrés peuvent voter et commenter). Les utilisateurs enregistrés peuvent suggérer de créer de nouveaux sondages, mais nous ne considérons pas ces subtilités dans cet article.

Dépendances:

  1. Chaque sondage (ligne du tableau Sondages ) correspond à 2 réponses ou plus, c'est-à-dire lignes du tableau Réponses
  2. Chaque réponse (une ligne dans le tableau des réponses ) correspond à 0 commentaire ou plus, c'est-à-dire lignes du tableau Commentaires
  3. Si le visiteur du site a voté pour la première fois, une nouvelle ligne est créée pour lui dans le tableau Visiteurs . Les utilisateurs sont identifiés par leur adresse IP
  4. Après chaque vote, le nombre de votes exprimés pour la réponse sélectionnée dans l'enquête augmente de 1
  5. Le site doit se souvenir des réponses données par chaque visiteur et des commentaires qu'il a laissés: chaque commentaire utilisateur est écrit dans une nouvelle ligne du tableau Commentaires

Formalisation d'une base de données à l'aide d'ORM Django


Tout d'abord, nous montrons comment la base de données serait décrite de façon traditionnelle - en utilisant les classes du package Django de modèles .



Remarques:

  • L'attribut polls peut sembler redondant, car il est possible d'obtenir la liste des sondages à travers la liste des réponses, mais cela est fait pour ne pas perdre le fait de participer au sondage si la réponse est supprimée du sondage
  • Django crée (ou modifie) physiquement la base de données avant le premier démarrage du programme de site en fonction des sous-classes personnalisées de modèles. Modèle utilisant les commandes python manage.py migrate et makemigrations qui sont exécutées dans le contexte de l'application

Formalisation d'une base de données à l'aide de HTMS


Pour créer une description de base de données, vous devez définir ses classes:



Polls_db est la classe de base de données principale pour l'application de site d'enquête. La classe de base de données principale est définie comme une sous-classe de HTdb , qui dans HTMS sert de super-classe pour les bases de données d'application (il peut y en avoir plusieurs).


Sondages, réponses, commentaires, visiteurs - classes pour les tables de base de données. Table - l'une des principales classes de HTMS, sert de superclasse pour les classes de tables spécifiques.


HTMS crée (ou ouvre une base de données existante) directement pendant l'exécution du programme de site. Options pertinentes:

  1. Créez une nouvelle base de données avec le nom "sondages":
    my_db = Polls_db (db_name = "polls", new = True )
    • les fichiers de base de données principaux ("vides") seront physiquement créés,
    • dans l'OP, l'objet de base de données principal my_db sera créé - une instance de la classe Polls_db .

  2. Ouvrez une base de données avec le nom "sondages":
    my_db = Polls_db (db_name = "polls")
    • les fichiers principaux de la base de données existante seront physiquement ouverts,
    • l'objet my_db sera créé dans l'OP, dont les attributs contiennent les informations de base sur la base de données lue dans ses fichiers.

Lorsqu'une nouvelle base de données est créée lors de l'initialisation d'une instance de la sous-classe HTdb , il est nécessaire de déterminer la structure réelle (schéma) au niveau logique. Cela se fait une fois au premier lancement du site, mais, contrairement à la technologie ORM, dans le code programme du site lui-même.


  1. Définissez tous les attributs de base de données - leurs noms et types de données:

  2. Définissez les types d'attribut avec des liens (le reste par défaut sera de type 'cause'):

  3. Définissez les objets de table et sélectionnez des attributs (colonnes) pour eux dans l'ensemble de tous les attributs de la GT:


L'exécution de ce code entraînera la formation de la structure de la base de données et la création des fichiers correspondants sur le serveur, si la base de données est nouvelle.


Si la base de données a déjà été créée, pour travailler avec elle, il vous suffit de créer des instances des classes de table:


Comparaison de HTMS et ORM


Évidemment, la formalisation du schéma de données au niveau logique dans HTMS et ORM est similaire, mais il existe un certain nombre de différences fondamentales.


Dans HTMS, les attributs et les types de données sont définis comme un seul espace; dans ORM, ils sont liés à des tables distinctes.


L'ensemble des attributs de base de données dans ORM est créé "de manière additive", car les modèles sont définis, ils ne peuvent pas être modifiés par programme, mais dans HTMS pour la base de données entière dans son ensemble, et vous pouvez les ajouter ou les supprimer dans l'application sans migration.


Les attributs de chaque modèle individuel dans l'ORM sont statiques, tandis que dans le HTMS, ils sont dynamiques. Les structures de table dans HTMS sont définies comme des projections d'un espace d'attribut unique - c'est plus simple et plus clair que dans ORM. Les algorithmes de site Web HTMS peuvent fournir des options pour changer la structure d'origine de la base de données, par exemple, ajouter de nouveaux attributs ou supprimer ceux existants, ce qui est impossible en principe dans la technologie ORM .


Notez que la technologie HTMS, si elle est appliquée dans le framework Django, ne fait qu'élargir ses capacités et ne nécessite pas l'abandon de l'utilisation d'ORM. Par exemple, tout l'excellent système d'authentification de Django, basé sur les modèles et la classe User (du module django.contrib.auth.models), peut être utilisé. Par conséquent, en réalité, un site basé sur Django avec HTMS sera généralement «multimodèle», c'est-à-dire qu'une partie de la base de données globale sera purement relationnelle, l'autre réseau relationnel.


Exemples d'utilisation HTMS de niveau logique pour les bases de données d'enquête


Fonction utilitaire pour le remplissage initial d'une base de données à partir d'un fichier JSON


La fonction de formation d'un ensemble d'objets avec des sondages (jeu de requêtes pour une vue basée sur une classe - sondages CBV)


La fonction de formation d'un ensemble d'objets avec des réponses d'enquête (jeu de requêtes pour les réponses d'enquête CBV)


La fonction de formation d'un ensemble d'objets avec les résultats du vote sur une enquête (jeu de requêtes pour CBV)


Fonction d'enregistrement du résultat du vote dans la base de données (appelée via URL depuis le formulaire de vote)




Nous espérons que les lecteurs apprécieront la simplicité et le naturel de travailler avec des données dans HTMS!

Source: https://habr.com/ru/post/fr463515/


All Articles