1. Introdução
No artigo “Modelo de dados de rede relacional”, foi proposto um novo conceito de modelagem de dados HTMS, que é o desenvolvimento do modelo relacional canônico. Este artigo demonstrará exemplos de como ele pode ser praticamente utilizado usando a API no nível lógico.
Os exemplos estão ligados à conhecida solução educacional e metodológica para a criação de sites - um modelo para um projeto de pesquisa baseado na Web na estrutura do Django no MS Visual Studio .
A compreensão deste artigo requer um entendimento básico da linguagem Python e da estrutura do Django.
Descrição do banco de dados
O esquema de dados conceituais é de quatro tabelas e uma descrição das dependências entre elas:

Notas:
- número de sequência da resposta na pesquisa - usado apenas para formar um conjunto de consultas ao exibir a página com a pesquisa
- o nome do participante da pesquisa registrado no site da pesquisa - ele é preenchido apenas para usuários que se registraram (os eleitores que não se registraram podem votar e comentar). Usuários registrados podem sugerir a criação de novas pesquisas, mas não consideramos essas sutilezas neste artigo.
Dependências:
- Cada pesquisa (linha na tabela Pesquisas ) corresponde a 2 ou mais respostas, ou seja, linhas na tabela Respostas
- Cada resposta (uma linha na tabela Respostas ) corresponde a 0 ou mais comentários, ou seja, linhas na tabela Comentários
- Se o visitante do site votou pela primeira vez, uma nova linha será criada para ele na tabela Visiters . Os usuários são identificados pelo endereço IP
- Após cada votação, o número de votos expressos para a resposta selecionada na pesquisa aumenta em 1
- O site deve lembrar as respostas que cada visitante deu e os comentários que ele deixou: cada comentário do usuário é escrito em uma nova linha da tabela Comentários
Formalizando um banco de dados usando o ORM Django
Primeiro, mostramos como o banco de dados seria descrito tradicionalmente - usando as classes do pacote models do Django.

Notas:
- O atributo de pesquisas pode parecer redundante, pois é possível obter a lista de pesquisas através da lista de respostas, mas isso é feito para não perder o fato de participação na pesquisa se a resposta for removida da pesquisa.
- O Django cria (ou modifica) fisicamente o banco de dados antes do primeiro início do programa do site com base nas subclasses personalizadas de models.Model usando os comandos python manage.py migrate e makemigrations que são executados no contexto do aplicativo
Formalizando um banco de dados usando HTMS
Para criar uma descrição do banco de dados, você deve definir suas classes:

Polls_db é a principal classe de banco de dados do aplicativo do site de pesquisa. A classe principal do banco de dados é definida como uma subclasse de HTdb , que no HTMS serve como uma superclasse para bancos de dados de aplicativos (pode haver vários).
Pesquisas, respostas, comentários, visitantes - classes para tabelas de banco de dados. Tabela - uma das principais classes do HTMS, serve como uma superclasse para classes de tabelas específicas.
O HTMS cria (ou abre um banco de dados existente) diretamente durante a execução do programa do site. Opções relevantes:
- Crie um novo banco de dados com o nome "pesquisas":
my_db = Polls_db (db_name = "polls", novo = True )
- os principais arquivos de banco de dados ("vazios") serão criados fisicamente,
- no OP, o principal objeto de banco de dados my_db será criado - uma instância da classe Polls_db .
- Abra um banco de dados com o nome "pesquisas":
my_db = Polls_db (db_name = "polls")
- os arquivos principais do banco de dados existente serão abertos fisicamente,
- o objeto my_db será criado no OP, cujos atributos contêm as informações básicas sobre o banco de dados lidas em seus arquivos.
Quando há um novo banco de dados criado durante a inicialização de uma instância da subclasse HTdb , é necessário determinar a estrutura (esquema) real no nível lógico. Isso é feito uma vez no primeiro lançamento do site, mas, diferentemente da tecnologia ORM, no código do programa do próprio site.
- Defina todos os atributos do banco de dados - seus nomes e tipos de dados:

- Defina tipos de atributos com links (o restante por padrão será do tipo 'causa'):

- Defina objetos de tabela e selecione atributos (colunas) para eles no conjunto de todos os atributos do GT:

A execução desse código levará à formação da estrutura do banco de dados e à criação dos arquivos correspondentes no servidor, se o banco de dados for novo.
Se o banco de dados já foi criado, para trabalhar com ele, você só precisa criar instâncias das classes da tabela:

Comparação de HTMS e ORM
Obviamente, a formalização do esquema de dados no nível lógico em HTMS e ORM é semelhante, mas há várias diferenças fundamentais.
No HTMS, atributos e tipos de dados são definidos como um espaço único; no ORM, eles são vinculados a tabelas separadas.
Todo o conjunto de atributos do banco de dados no ORM é criado "de forma aditiva", conforme os modelos são definidos, eles não podem ser alterados programaticamente, mas no HTMS para todo o banco de dados como um todo, e você pode adicioná-los ou removê-los no aplicativo sem migração.
Os atributos para cada modelo individual no ORM são estáticos, enquanto no HTMS são dinâmicos. As estruturas de tabela no HTMS são definidas como projeções de um único espaço de atributo - é mais simples e mais claro que no ORM.Os algoritmos de site no HTMS podem fornecer opções para alterar a estrutura original do banco de dados, por exemplo, adicionar novos atributos ou excluir os existentes, o que é impossível em princípio na tecnologia ORM .
Observe que a tecnologia HTMS, se aplicada na estrutura do Django, apenas expande seus recursos e não requer o abandono do uso do ORM. Por exemplo, todo o excelente sistema de autenticação do Django, baseado nos modelos e na classe User (do módulo django.contrib.auth.models), pode ser usado. Portanto, na realidade, um site baseado em Django com HTMS geralmente será "multimodelo", ou seja, uma parte do banco de dados geral será puramente relacional, a outra rede relacional.
Exemplos de uso HTMS de nível lógico para bancos de dados de pesquisa
Função utilitário para preenchimento inicial de um banco de dados a partir de um arquivo JSON

A função de formar um conjunto de objetos com pesquisas (conjunto de consultas para exibição baseada em classe - pesquisas CBV)

A função de formar um conjunto de objetos com respostas à pesquisa (conjunto de consultas para respostas à pesquisa CBV)

A função de formar um conjunto de objetos com os resultados da votação em uma pesquisa (queryset for CBV)

Função para registrar o resultado da votação no banco de dados (chamado via URL no formulário de votação)

Esperamos que os leitores apreciem a simplicidade e a naturalidade de trabalhar com dados em HTMS!