Modelagem de Banco de Dados
Modelagem de Banco de Dados
Modelagem de Banco de Dados
CENTRO DE INFORMÁTICA
GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
RECIFE
2023
UNIVERSIDADE FEDERAL DE PERNAMBUCO
CENTRO DE INFORMÁTICA
CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO
RECIFE
2023
Ficha de identificação da obra elaborada pelo autor,
através do programa de geração automática do SIB/UFPE
Banca Examinadora:
Orientador(a)
Robson do Nascimento Fidalgo
Doutor(a)
Examinador(a)
Vinicius Cardoso Garcia
Doutor(a)
AGRADECIMENTOS
Nos últimos anos houve, devido a ascensão de grandes redes sociais, big data entre outros
uma ascensão de bancos NoSQL. Dentre estes bancos definidos como NoSQL destacam-se os
bancos orientados a documentos, em especial o MongoDB com grande popularização. À
medida que mais organizações adotam bancos orientados a documentos, há uma necessidade
crescente de diretrizes e melhores práticas na modelagem lógica desses sistemas. Uma forma
de criar modelagem de dados lógica para este tipo de banco é através da Aggregate Modeling
Language (AML), que tem forte base no conceito de agregados do Domain-Driven Design.
3
ABSTRACT
In recent years, due to the rise of large social networks, big data, and other factors, there has
been an emergence of NoSQL databases. Among these databases classified as NoSQL,
document-oriented databases have gained prominence, with MongoDB being particularly
popular. As more organizations adopt document-oriented databases, there is a growing need
for guidelines and best practices in the logical modeling of these systems. One approach to
creating logical data modeling for this type of database is through the use of the Aggregate
Modeling Language (AML), which is strongly rooted in the concept of aggregates from
Domain-Driven Design.
4
Sumário
1. Introdução........................................................................................................................................... 7
1.1. Motivação...................................................................................................................................7
1.2. Objetivos.................................................................................................................................... 7
2. Conceitos Básicos.................................................................................................................................8
2.1. Importância da modelagem de dados.......................................................................... 8
2.2. Bancos NoSQL...........................................................................................................11
2.3. Bancos orientados a documentos.............................................................................. 12
2.4. AML - Aggregate Modelling Language...................................................................... 14
2.4.1. Construtores da AML.............................................................................................. 17
Atributos...................................................................................................................... 17
Entidades e objetos de valor....................................................................................... 19
Agregados................................................................................................................... 20
Links............................................................................................................................ 21
3. Boas práticas para modelagem de bancos orientados a documentos....................... 25
3.1. Modelagem de agregados com AML......................................................................... 25
4 Conclusão...........................................................................................................................38
5
Tabela de Siglas
Sigla Significado
ER Diagrama entidade-relacionamento
6
1. Introdução
1.1. Motivação
1.2. Objetivos
7
2. Conceitos Básicos
Neste capítulo, são introduzidos alguns termos e conceitos utilizados ao longo deste
trabalho, em especial o por que engenheiros de software, administradores de bancos de dados
e arquitetos de sistemas buscam meios de modelagem como ferramenta de auxílio à
implementação do trabalho. Também são discutidas as diferenças e desafios específicos de
modelagem de bancos não relacionais quando comparados a bancos relacionais.
8
Figura 1 - Modelagem conceitual envolvendo 3 entidades
A modelagem lógica por outro lado contém detalhes estruturais do banco utilizado. O
mapeamento deste modelo conceitual apresentado em um modelo lógico deve ser feito em
uma notação adequada a depender do paradigma do banco utilizado.
9
Figura 2 - Modelagens lógicas em 3 paradigmas de bancos distintos
10
Esta variedade de possibilidades na representação de entidades em um banco orientado
a documentos torna especialmente importante além da modelagem conceitual também a
modelagem lógica que é o foco deste trabalho.
“Não existe uma definição geral aceita, nem uma entidade para
fornecer uma, então tudo o que podemos fazer é discutir algumas
características comuns dos bancos de dados que tendem a ser chamados de
NoSQL.” [13, tradução própria]
11
2.3. Bancos orientados a documentos
12
mesma coleção de dados. Por sua vez, no relacionamento por referência, os documentos
residem em coleções distintas com referências ao documento relacionado.
Exemplo de duas possibilidades distintas de relação 1 para 1 em um banco orientado a
documentos:
13
2.4. AML - Aggregate Modelling Language
14
Fonte: Retirado de [10]
Sadalage e Fowler [6] em NoSQL distilled discutem o fato de que alguns bancos
NoSQL, como por exemplo os bancos orientados a documentos, possuírem a característica de
serem “orientados a agregados”. Essa característica identificada se dá pelo fato de nesse tipo
de banco existir uma tendência de que os dados relacionados se mantenham agrupados na
mesma coleção, uma ligação semelhante ao que ocorre com os agregados do DDD. Segundo
Sadalage e Fowler ter essa abordagem de modelagem do banco orientada a agregados,
tomando como base os mesmos agregados do DDD, pode trazer consigo alguns benefícios.
Modelar um agregado em uma mesma coleção do banco pode levar a uma maior facilidade ao
lidar com clusters de instâncias diversas do banco, diminuindo o número de nós distintos
necessários na busca de informações. Outro benefício citado é a obtenção de atomicidade em
operações de leitura e escrita das informações desses agregados, levando a ganhos no quesito
de consistência de dados.
15
No contexto de modelagem de dados, uma das formas de representação lógica destes
agregados se dá a partir da representação estrutural dos documentos como na Figura 2. Este
tipo de representação apesar de ilustrar bem a estrutura deste agregado e as hierarquias no
documento não fornece uma boa representação de relacionamentos por referência assim como
da multiplicidade de relacionamentos por documentos embutidos. Este tipo de modelo é
amplamente utilizado em materiais sobre modelagem lógica de bancos orientados a
documentos.
Uma linguagem de modelagem que fornece suporte para modelagem de bancos
orientados a documentos e que é fortemente baseada no conceito de agregados é a AML. A
AML é uma Domain Specific Modeling Language (DSML) inspirada pelos mesmos
elementos visuais da UML porém voltada à modelagem de bancos orientados a documentos, o
que permite a utilização de ferramentas de modelagem UML já existentes no mercado (e.g,
Astah UML).
Atributos
17
A notação de atributo descreve um campo de uma entidade ou objeto de valor,
contendo em sua estrutura mais básica o nome deste atributo seguido do tipo do mesmo.
Figura 9 - Declaração de 3 atributos distintos em sua forma mínima, isto é, contendo apenas o
nome do campo e o tipo
Além do nome e tipo de campo mostrados na Figura 9, a AML permite, assim como
na UML, a definição de multiplicidade de um atributo indicando, no contexto da AML, se o
campo em questão se trata de um array. Também é possível a utilização do modificador de
visibilidade de atributo da UML, com significados distintos na AML, indicados na Figura 10.
18
opcional, considera-se que um atributo que não utilize o pictograma Unique ou Identifier é
um atributo Regular por padrão.
Figura 11 - Exemplo de atributo telefone como array de String e campo cpf declarado como
identificador
No DDD [1], como discutido na Seção 2, uma entidade é uma classe que representa
objetos que tenham identidade própria. Sua representação gráfica na AML se dá como uma
figura de classe ativa da UML, isto é, possui uma borda mais grossa. Os Value Objects (VO) ,
por outro lado, não contém identificador único e na AML são representados como uma classe
comum, com a borda mais fina em relação às entidades.
19
Figura 12 - Exemplos de uma entidade e um Value Object (VO)
Como mostra a Figura 12, tanto entidades, como Value Objects (VO) são compostos
por um Nome (Nm na Figura 8) e seus respectivos atributos, a diferença entre ambos se dá
pela identidade única presente nas entidades e que não está presente nos Value Objects. Na
Figura 12, usuário é uma entidade e possui o atributo cpf como identificador.
Agregados
20
Figura 13 - Exemplo de agregado composto por entidade Usuário e Value Object (VO)
Endereço
21
Links
Tomando como exemplo a Figura 14, a forma como relacionamos entidades e Value
Objects é através do link de composição.
22
Fonte: De autoria própria
Na Figura 16, temos um exemplo completo de um modelo lógico em AML, com todas
as informações necessárias. Temos neste exemplo informações a respeito do nome da coleção,
os nomes e atributos da entidade e do VO bem como informações sobre como se relacionam
neste agregado (hierarquia, representada pela direção da associação e cardinalidade).
O link de composição define um relacionamento por documento embutido, ele é usado
entre Entidade e Value Object e sempre dentro de um mesmo agregado, ou seja, relaciona
objetos dentro de uma mesma coleção. A Figura 17 mostra um objeto JSON válido para o
modelo da Figura 16 com a relação entre Usuário e Endereço através de documentos
embutidos.
Neste exemplo da Figura 16, Usuário é a raíz do agregado Usuários, por ser o
elemento hierarquicamente superior, ou seja, não existe nenhum link partindo em direção a
esta entidade.
Outra forma de relacionar objetos na AML é através do uso de referências para objetos
que compõem agregados distintos.
23
Figura 18 - Relacionamento por associação entre entidades de agregados distintos
24
a diagramação de um relacionamento M:N, pois não há essa restrição de unicidade, uma vez
que utilizado o Pictograma Regular (+veiculos).
25
3. Boas práticas para modelagem de bancos orientados a documentos
Este capítulo tem como objetivo introduzir o leitor ao processo de modelagem lógica
de dados de bancos orientados a documentos a partir do uso da Aggregate Modeling
Language (AML) e seus construtores, bem como auxiliar na aplicação de boas práticas de
modelagem. Serão apresentadas variações distintas de modelagem de relacionamentos,
contribuindo para a identificação de bad smells relativos a modelagem de dados orientados a
documentos a partir da reflexão sobre as vantagens e desvantagens entre diferentes
modelagens lógicas de um determinado domínio. Serão levantadas as implicações dessas
escolhas na construção e evolução de uma aplicação em termos de desempenho e
consistência. Os exemplos utilizam a linguagem de modelagem lógica AML e para
representação dos documentos o formato JSON utilizado no MongoDB.
26
Figura 22- Coleção de usuários contendo N veículos
27
Fonte: De autoria própria
28
Fonte: De autoria própria
Esta modelagem pode ser utilizada em um cenário que a existência da entidade veículo
seja independente à existência de algum usuário específico, ou seja, independe do
relacionamento no primeiro agregado. Essa redundância de dados pode levar a problemas de
inconsistência ao lidar com atualizações e exclusões de documentos - que era uma das
vantagens do primeiro modelo - porém têm como benefício ganhos de desempenho. Rick
Copeland [9] fala sobre esses ganhos de desempenho obtidos através de redundância de dados
no MongoDB, porém deixando claro que essa redundância pode dificultar o processo de
design do modelo lógico como um ponto negativo. Para este exemplo, o ganho de
desempenho pode vir, por exemplo, da possibilidade de leitura apenas dos dados de um
veículo a partir de sua coleção, sem trazer obrigatoriamente todos os dados do usuário e dos
demais veículos deste usuário.
29
A Figura 26 tem propriedades semelhantes às do primeiro exemplo, pois ela traz
consigo os mesmos ganhos de desempenho de leitura - ao tornar possível obter todos os dados
de veículo e usuário a partir da leitura de um único documento - com a vantagem de permitir
maior flexibilidade de consultas. Essa flexibilidade se dá pois a partir desta redundância de
dados podemos realizar consultas tanto na coleção de usuários quanto na coleção de veículos
e os dados de ambas as entidades sempre serão retornados. Por outro lado, isso pode se tornar
uma desvantagem em casos que a intenção seja obter somente os dados de uma única
entidade. Outra desvantagem diz respeito à maior dificuldade de consistência na medida que
os dados das entidades estão redundantes e a própria informação da relação também está,
sendo necessário tratar sempre de forma conjunta alterações em ambas as entidades para
garantir a consistência das mesmas.
Vaughn Vernon [5] diz que o requisito para se tornar raíz de um agregado é que a
entidade tenha uma identidade única global, ou seja, entre todos os agregados. No exemplo
em questão o veículo tem uma identidade única: a placa, e que, dependendo do caso de uso
pode ser mais interessante que seja utilizada para ser o identificador dos documentos que
31
algum atributo do usuário. Esta abordagem porém exige uma maior quantidade de leituras na
busca por todos os veículos de um usuário, dado que os veículos estão em documentos
distintos.
32
Fonte: De autoria própria
33
Com relação aos exemplos de modelagem vistos até aqui, este é o primeiro que utiliza
referência no lugar de documentos embutidos para realizar o relacionamento entre usuário e
veículos através da notação AML de dois agregados distintos. Copeland [9] discute as
vantagens e desvantagens entre as duas abordagens para uma tomada de decisão de qual
utilizar. Segundo ele, no relacionamento de documentos embutidos existem ganhos de
localidade, ou seja, a garantia de que ambas as entidades permanecem fisicamente juntas na
mesma instância de banco. Outro ganho viria através do que ele chama de atomicidade, ou
seja, existem ganhos de consistência de dados ao editar atributos de ambas as entidades e
aplicar essas alterações de forma conjunta. Já no modelo de relacionamento por referência os
ganhos viriam em termos de flexibilidade e escalabilidade. A flexibilidade se dá pelo fato de
permitir, quando necessário, buscas e leituras diretas por qualquer uma das entidades sem
necessidade de trazer no resultado também dados da outra entidade. Já em termos de ganho de
escala Copeland [9] cita as próprias limitações de tamanho de documentos, no caso do
MongoDB, 16MB por documento. Essa limitação no exemplo de relacionamento por
documento embutido limitaria a quantidade de veículos relacionados com um usuário a partir
desta limitação do tamanho máximo do documento do usuário.
Neste relacionamento seriam gerados dois documentos JSON independentes:
34
7. Coleção de documentos referenciados
35
Fonte: De autoria própria
36
Fonte: De autoria própria
Copeland [9] fala sobre este tipo de relacionamento, citando que embora não haja
duplicidade de dados nas entidades Usuário e Veículo ele traz complexidade nas consultas,
necessitando da utilização de JOINS, semelhante a Figura 6, pois diferentemente dos
documentos embutidos, documentos referenciados exigem junções quando precisam ser
consultados em conjunto. Contudo, nesse cenário, tem-se uma junção extra. Ou seja, existe
uma perda de desempenho maior sempre que necessário a leitura dos veículos de um usuário,
ou de dados de usuário dono de um veículo, logo é necessário pesar o tradeoff desempenho e
consistência. Ao eliminar a coleção intermediária e duplicar os dados das entidades usuario
dentro dos documentos de veículos e vice-versa eliminamos a necessidade de JOINS, porém
temos que ter cuidados para garantir a consistência dessas relações em ambas as coleções.
Este prejuízo de consistência não ocorre na modelagem com uma coleção intermediária
realizando o relacionamento pois permite eliminar e criar relacionamentos de forma atômica,
ou seja, com escrita em um único documento.
Exemplo de coleções e documentos em JSON representando esta modelagem:
38
4 Conclusão
39
5 Bibliografia
[1] EVANS, Eric. Domain-driven Design: Tackling Complexity in the Heart of Software.
Addison-Wesley Professional, 2004.
[2] KAUFMAN, Michael; MEIER, Andreas. SQL and NoSQL Databases: Modeling,
Languages, Security and Architectures for Big Data Management - Second Edition. Springer,
2023
[3] FIORI, Alessandro. Design with MongoDB: Best models for applications, Publicação
própria ISBN: 9798557417884, 2020
[4] Ranking of the most popular database management systems worldwide, as of February
2023 - statista.com - acesso em 10/09/2023
[5] VERNON, Vaughn. Implementing Domain-Driven Design. Addison-Wesley Professional,
2013
[6] SADALAGE, Pramod J; FOWLER, Martin. NoSQL Distilled. Addison-Wesley
Professional, 2012
[7] BUGIOTTI1, Francesca; Database Design for NoSQL Systems, Universita Roma Tre,
2014
[8] LIMA, C. Projeto Lógico de Bancos de Dados NOSQL Documentos a Partir de Esquemas
Conceituais Entidade-Relacionamento Estandido(EER). Universidade Federal de Santa
Catarina, 2016.
[9] COPELAND, Rick. MongoDB Applied Design Patterns.
[10] Persistence with NoSQL Databases - DDD -
https://www.aschommer.de/blog/persistence-with-nosql-databases-ddd.html - acesso em
15/09/2023
[11] de Lima, C. and dos Santos Mello, R. (2015). A workload-driven logical design approach
for nosql document databases. In Proceedings of the 17th International Conference on
Information Integration and Web-based Applications & Services, pages 1-10
[12] Hoberman, S. Data modeling for MongoDB: Building well-designed and supportable
MongoDB databases (1st ed.) Basking Ridge, NJ: Technics Publications, 2014
40