A crescente demanda por sistemas informatizados eficientes tem impulsionado as organizações a adotarem práticas consolidadas de modelagem de dados como forma de garantir a qualidade e a confiabilidade das informações gerenciadas. Nesse contexto, a transição entre a teoria e a prática ocorre, em grande parte, por meio da modelagem conceitual, etapa essencial para a compreensão do domínio do problema e para a tradução dos requisitos do negócio em estruturas de dados coerentes.
O Diagrama Entidade-Relacionamento (DER) destaca-se como uma das principais ferramentas nesse processo, pois possibilita representar graficamente entidades, atributos e relacionamentos, proporcionando maior clareza e alinhamento entre os envolvidos no desenvolvimento do sistema. A utilização de um DER bem definido contribui significativamente para a construção de bancos de dados consistentes, facilitando a criação das tabelas e assegurando que operações como consultas, inserções e atualizações ocorram de forma ágil e segura. Além disso, essa abordagem auxilia na redução de redundâncias, na otimização do desempenho e na manutenção do banco de dados ao longo do tempo. Tais benefícios tornam a modelagem de dados indispensável em ambientes que lidam com grandes volumes de informações, como bibliotecas, hospitais, instituições de ensino e estabelecimentos comerciais.
Diante desse cenário, este estudo aborda a modelagem de um banco de dados voltado para uma biblioteca municipal, que atualmente enfrenta dificuldades no controle de livros, usuários e empréstimos devido ao uso de registros manuais e planilhas dispersas. O desafio proposto a Ricardo, profissional de uma empresa de desenvolvimento de software, consiste em elaborar um sistema de gerenciamento capaz de organizar essas informações de forma estruturada e confiável.
Para isso, a aplicação do DER mostra-se fundamental, uma vez que permite visualizar previamente a estrutura do banco de dados, assegurando que o sistema atenda de maneira eficiente às necessidades dos usuários e da organização.
Modelagem de Dados:
A modelagem de banco de dados é um processo fundamental para garantir a organização, integridade e eficiência no armazenamento e na recuperação de informações. Entre as principais técnicas utilizadas está o DER, que permite visualizar a estrutura do banco de dados antes da sua implementação, identificando entidades, atributos e relacionamentos. Ao utilizar um DER bem estruturado, é possível evitar redundâncias, otimizar consultas e facilitar a manuntenção do banco de dados. Esse processo é essencial para empresas e organizações que precisam gerenciar grandes volkumes de informações, como bibliotecas, hospitais, lojas e universidades.
O uso do DER permite transformar requisitos em estruturas bem definidas, proporcionando clareza no desenvolvimento e assegurando que o sistema atenda de forma eficiente às necessidades dos usuários e da organização. Na prática profissional, a criação de um DER bem definido auxilia na construção das tabelas do banco de dados, permitindo que consultas, inserções e atualizações de informações ocorram de maneira ágil e segura. Esse processo é fundamental para garantir que o sistema funcione corretamente e atenda às necessidades do cliente.
Entidades Fortes e Entidades Fracas na Modelagem Conceitual
Na modelagem conceitual de dados, as entidades representam objetos ou conceitos do mundo real que possuem existência própria no domínio do problema. Segundo Elmasri e Navathe (2019), as entidades podem ser classificadas como fortes ou fracas, de acordo com a forma como são identificadas no modelo.
As entidades fortes são aquelas que possuem um identificador próprio, denominado chave primária, capaz de distinguir unicamente cada ocorrência da entidade sem depender de outra entidade. Exemplos típicos incluem entidades como Livro, Usuário e Funcionário, que possuem atributos identificadores
próprios e existência independente no sistema. Para Date (2019), entidades fortes representam objetos fundamentais do negócio, sendo o ponto de partida para a construção de um modelo conceitual consistente.
Por outro lado, as entidades fracas não possuem um identificador completo próprio e dependem de uma entidade forte para serem corretamente identificadas. Sua identificação ocorre por meio da combinação de um identificador parcial com a chave primária da entidade à qual estão associadas. Elmasri e Navathe (2019) ressaltam que entidades fracas estão semanticamente subordinadas às entidades fortes, não podendo existir de forma independente. Um exemplo clássico é a entidade item_emprestimo, que depende da entidade Empréstimo para sua identificação, uma vez que sua existência só faz sentido no
contexto de um empréstimo específico.
No contexto de sistemas de bibliotecas, o uso de entidades fracas é especialmente relevante quando se deseja detalhar itens, ocorrências ou registros que só existem em função de uma transação principal, reforçando a integridade e a coerência do modelo.
Generalização e Especialização na Estruturação de um Banco de Dados Relacional:
A generalização e especialização são conceitos fundamentais do Modelo Entidade-Relacionamento Estendido (EER), utilizados para representar hierarquias entre entidades que compartilham características comuns. De acordo com Silberschatz, Korth e Sudarshan (2020), a generalização consiste no processo de abstração que identifica atributos e relacionamentos comuns entre diferentes entidades, agrupando-os em uma entidade mais genérica, enquanto a especialização representa o processo inverso, no qual uma entidade genérica é refinada em entidades mais específicas.
Nesse contexto, uma entidade genérica, também chamada de superclasse, concentra os atributos comuns, enquanto as entidades especializadas, denominadas subclasses, herdam esses atributos e podem incluir características próprias. Date (2019) afirma que essa abordagem reduz redundâncias, melhora a clareza semântica do modelo e facilita a manutenção e a evolução do sistema. Além disso, a especialização pode ser classificada de acordo com duas restrições fundamentais: total ou parcial, e disjunta ou sobreposta. A especialização é considerada total quando toda ocorrência da superclasse deve pertencer a pelo menos uma subclasse, e parcial quando isso não é obrigatório. Já a especialização disjunta ocorre quando uma instância da superclasse pode pertencer a apenas uma subclasse, enquanto na especialização sobreposta uma instância pode pertencer a mais de uma subclasse simultaneamente (Elmasri & Navathe, 2019).
No caso de um sistema de biblioteca, a utilização de uma entidade genérica Usuário com especializações Aluno e Professor exemplifica a aplicação prática desses conceitos, promovendo um modelo mais organizado, coerente e alinhado às boas práticas de engenharia de dados. A correta distinção entre entidades fortes e fracas, aliada à aplicação adequada dos conceitos de generalização e especialização, é essencial para a construção de modelos conceituais robustos e semanticamente corretos. Conforme destacado por autores consagrados da área de Banco de Dados, essas técnicas não apenas contribuem para a normalização e integridade dos dados, mas também facilitam a transição do modelo conceitual para os níveis lógico e físico, assegurando a qualidade e a longevidade dos sistemas de informação.
Cenário Real: Biblioteca Municipal
Daniel trabalha em uma empresa de desenvolvimento de software e recebeu o desafio de criar um sistema de gerenciamento para uma biblioteca municipal. Atualmente, a biblioteca enfrenta dificuldades no controle de livros, empréstimos e usuários, pois tudo é registrado manualmente ou em planilhas dispersas. Os principais problemas identificados foram a falta de organização no controle de livros e usuários, a dificuldade para registra empréstimos e devoluções e ausência de um banco de dados estruturado, tornando as buscas e consultas demoradas.
Para resolver essas questões, Daniel precisa criar um banco de dados bem estruturado, garantindo um registro eficiente de livros, usuários e empréstimos, além de facilitar o trabalho dos funcionários da biblioteca.A melhor forma de organizar os dados da biblioteca é por meio de um DER, que permitirá a criação de um banco de dados relacional.
Solução inicial do problema:
Foi identificado as principais entidades que fazem parte do sistema:
Livro - Representam os livros disponíveis no acervo. Representa o acervo da biblioteca.
Usuário - Representam as pessoas que são aptas a realizar empréstimos dos livros.
Aluno - Representam estudantes que podem utilizar os serviços da biblioteca.
Professor - Representam os professores que realizam empréstimos.
Funcionário - Representam os colaboradores responsáveis pelo atendimento e controle do acervo.
Empréstimo - Registram os eventos dos livros que são retirados, por quem e quando foram emprestados.
item_emprestimo - Registram quais livros foram emprestados e quando serão devolvidos.
Assim como seus atributos devem ser identificados:
Entidade: Livro | Atributos: (id_livro (PK), titulo, editora, ano_publicacao, quantidade_estoque)***
Entidade: Usuário | Atributos: (id_usuario(PK), nome, matricula, email, telefone, endereco)**
Entidade: Aluno | Atributos: (id_usuario(PK/FK))*
Entidade: Professor | Atributos: (id_usuario(PK/FK))*
Entidade: Funcionário | Atributos: (id_funcionario(PK), nome, cpf, cargo, telefone, email)
Entidade: Empréstimo | Atributos: (id_emprestimo (PK), id_usuario(FK), id_livro(FK), data_emprestimo)
Entidade: item_emprestimo | Atributos: (id_emprestimo(PK/FK), id_livro(PK/FK), data_prev_devolução, data_devolução)*
*** O atributo 'autor' pode futuramente ser normalizado em uma entidade própria, caso necessário.
** Representa qualquer pessoa que pode realizar empréstimos na biblioteca.
* A entidade Aluno é uma Especialização de Usuário, herda todos os atributos da entidade Usuário.
* A entidade Professor é uma Especialização de Usuário, herda todos os atributos da entidade Usuário.
*O atributo data_devolução não depende da entidade 'emprestimo', mas sim por cada livro emprestado. Portanto, pertence a entidade fraca: item_emprestimo
Entidade Empréstimo X Entidade item_emprestimo:
Vários alunos podem solicitar o empréstimo de livros, assim como vários professores solicitam a retirada de um livro ou mais. Com isso, teríamos milhares de registros duplicados e redundantes. Para resolver o relacionamento de muitos-para-muitos (N:N) entre a entidade e relação Livro e Aluno ou Livro e Professor foi necessário criar a entidade associativa item_emprestimo. Que por sua vez, não irá mais possuir referência direta a entidade LIVRO.
A entidade EMPRESTIMO representa o evento de retirada de materiais da biblioteca, armazenando informações comuns a toda a transação, como a data do empréstimo e o usuário solicitante. Os livros envolvidos em cada empréstimo são representados pela entidade ITEM_EMPRESTIMO, que resolve o relacionamento muitos-para-muitos entre EMPRESTIMO e LIVRO e contém atributos específicos, como data prevista e data efetiva de devolução.
A entidade ITEM_EMPRESTIMO caracteriza-se como uma entidade associativa, uma vez que resolve o relacionamento muitos-para-muitos entre EMPRESTIMO e LIVRO, além de possuir atributos próprios. Simultaneamente, trata-se de uma entidade fraca, pois não apresenta chave primária independente, sendo identificada pela combinação das chaves das entidades às quais se associa.
A entidade EMPRESTIMO é o ato/transação de empréstimo, ocorrido em uma data específica, realizado por um usuário e registrado por um funcionário. Além disso, podemos classificá-la como uma entidade forte, pois possui chave primária própria e representa um evento de negócio independente.
Relações:
Livro -> item_empréstimo
Tipo: (1:N)
Descrição: Um livro pode participar de vários empréstimos ao longo do tempo. (1:N)
Cada item_empréstimo refere-se a um único livro. (1:1)
Funcionário -> Empréstimo
Tipo: (1:N)
Descrição: Um funcionário pode registrar vários empréstimos. (1:N)
Cada empréstimo é registrado por um único funcionário. (1:1)
Usuário -> Empréstimo
Tipo: (1:N)
Descrição: Um professor ou aluno pode realizar um ou vários emprestimos. (1:N)
Um empréstino pode ser realizado por um único usuário. (1:1)
Empréstimo -> item_empréstimo
Tipo: (1:N)
Descrição: Um empréstimo pode conter vários item_empréstimos. (1:N)
item_emprestimo somente está associado a um único empréstimo. (1:1)
MER/EER (Modelo Entidade-Relaciomaneto Extendido): Generalização / Especialização
A entidade Usuário possui generalizações. As entidades dependentes são: Aluno e Professor. Elas são especializações disjuntas da entidade Usuário. De acordo com Elmasri & Navathe(2019) existem dois tipos de especialização:
Total → todo usuário deve ser aluno ou professor.
Disjunta → um usuário não pode ser aluno e professor ao mesmo tempo.
Segundo os autores, quando há especialização, não se deve repetir o tipo da subclasse como atributo, pois isso introduz inconsistência. A superclasse USUARIO não deve conter atributos que determinem sua subclasse; essa distinção é estrutural, não atributiva. A entidade Usuário apresenta um processo de generalização, do qual derivam as entidades Aluno e Professor, caracterizando um caso clássico de especialização no Modelo Entidade-Relacionamento Estendido (EER).
No contexto do sistema de biblioteca, a entidade Usuário atua como superclasse, pois reúne atributos comuns a todos os tipos de usuários do sistema, como identificação, nome, matrícula, e informações de contato. As entidades Aluno e Professor configuram-se como subclasses, uma vez que representam
especializações da entidade Usuário, herdando seus atributos e relacionamentos, mas permitindo a aplicação de regras específicas a cada tipo de usuário, como políticas distintas de empréstimo.
Segundo Elmasri e Navathe (2019), esse mecanismo de especialização proporciona maior clareza semântica ao modelo, evita redundância de dados e facilita a manutenção do esquema conceitual, ao permitir que alterações em atributos comuns sejam realizadas em um único ponto da estrutura. Além disso, a utilização de generalização e especialização contribui para a integridade dos dados, pois garante que todas as instâncias das subclasses estejam associadas a uma instância válida da superclasse.
Dessa forma, a modelagem adotada, em que Aluno e Professor são especializações da entidade Usuário, está alinhada às boas práticas recomendadas por Elmasri e Navathe, assegurando um modelo conceitual mais organizado, reutilizável e semanticamente consistente.

DER - Modelo lógico:
Segue abaixo, o script do modelo lógico aplicável em plataformas web de modelagem. O código, em dbml, está simplificado seguindo as Formas Normais (3FN), usando conceitos de MER/EER e pronto para e implementação física.
dbml simplificada:
livros {
id_livros integer pk >* item_emprestimo.id_livros
titulo varchar(100)
editora varchar(20)
ano_publicacao date
quantidade_estoque integer
}
usuario {
id_usuario integer pk >* emprestimo.id_usuario
nome varchar(50)
matricula varchar(20)
email varchar(20)
telefone varchar(20)
endereco varchar(50)
}
aluno {
id_usuario integer pk > usuario.id_usuario
}
professor {
id_usuario integer pk > usuario.id_usuario
}
funcionario {
id_funcionario integer pk
nome varchar(50)
cpf varchar(20) unique
cargo varchar(20)
telefone varchar(25)
email varchar(25)
}
emprestimo {
id_emprestimo integer pk *> funcionario.id_funcionario
id_usuario integer > usuario.id_usuario
id_livros integer >* livros.id_livros
data_emprestimo datetime
}
item_emprestimo {
id_emprestimo integer > emprestimo.id_emprestimo
id_livros integer > livros.id_livros
data_devolucao datetime
data_previsao_dev datetime
}
Implementação física: Solução na prática
Após a definição do modelo conceitual e do modelo lógico, o projeto evolui para o modelo físico, etapa responsável por materializar a estrutura do banco de dados em um Sistema Gerenciador de Banco de Dados (SGBD). Nessa fase, as entidades, atributos, chaves primárias e estrangeiras previamente modeladas são implementadas por meio de tabelas, colunas e restrições, garantindo a integridade e a consistência das informações armazenadas.
A implementação do modelo físico foi realizada utilizando o SQLAlchemy, um framework de mapeamento objeto-relacional (ORM) amplamente adotado na linguagem Python. O SQLAlchemy permite a definição das tabelas do banco de dados como classes Python, facilitando a correspondência entre o modelo relacional e a lógica da aplicação, além de promover maior organização, reutilização de código e manutenibilidade do sistema.
Por meio do uso do SQLAlchemy, foram implementadas as restrições de integridade, como chaves primárias, chaves estrangeiras e relacionamentos entre tabelas, respeitando a estrutura definida no Modelo Entidade-Relacionamento Estendido (EER). Essa abordagem possibilita a criação, o gerenciamento e a evolução do esquema do banco de dados de forma segura e controlada, reduzindo a probabilidade de inconsistências e erros durante a manipulação dos dados.
Dessa forma, o modelo físico desenvolvido com o apoio do SQLAlchemy assegura que o banco de dados atenda de maneira eficiente às necessidades do sistema de biblioteca, proporcionando desempenho adequado, integridade referencial e facilidade de manutenção ao longo do ciclo de vida da aplicação.
O SQLAlchemy integra-se facilmente a ferramentas de migração, como o Alembic, possibilitando o versionamento do esquema do banco de dados. Isso permite controlar alterações estruturais, documentar evoluções e aplicar mudanças de forma segura em ambientes distintos (desenvolvimento, teste e produção).
A proposta central é integrar conceitos teóricos de modelagem relacional (DER, entidades, relacionamentos, chaves e restrições) com uma implementação concreta por meio de um ORM (Object-Relational Mapping).
A modelagem física foi implementada utilizando a biblioteca SQLAlchemy, responsável por traduzir as estruturas definidas em Python para tabelas e relacionamentos em um banco de dados relacional. O Jupyter Notebook foi adotado como ambiente de apoio para documentação, experimentação e testes do ORM, permitindo visualizar e validar o comportamento das entidades e seus relacionamentos de forma incremental. A linguagem Python atua como base do projeto, integrando a lógica de domínio ao mapeamento objeto-relacional.
Como sistema gerenciador de banco de dados, foi utilizado o SQLite, escolhido por sua leveza, fácil configuração e, principalmente, por oferecer suporte completo a restrições relacionais, como chaves primárias, chaves estrangeiras e regras de integridade referencial — elementos essenciais em projetos de modelagem transacional (OLTP).
Inicialmente, foi avaliada a utilização do DuckDB, porém optou-se por sua substituição. Embora o DuckDB seja altamente eficiente para análises analíticas (OLAP) e processamento de grandes volumes de dados, ele apresenta limitações no suporte a constraints, o que o torna inadequado para projetos cujo foco é a consistência relacional e a fidelidade ao modelo físico de dados.
Dessa forma, o projeto evidencia boas práticas de organização, separação entre camada de dados e ambiente de testes, além de reforçar a importância da escolha adequada do banco de dados conforme o tipo de aplicação.
Repositório do Projeto
GitHub:
(https://github.com/userdanixdev/project_biblioteca_2)
Referências:
DATE, C. J. An Introduction to Database Systems. 8. ed. Boston: Pearson, 2019.
ELMASRI, R.; NAVATHE, S. Fundamentals of Database Systems. 7. ed. Boston: Pearson, 2019.
SILBERSCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Database System Concepts. 7. ed. New York: McGraw-Hill, 2020.
Comentários
Postar um comentário