Estudo de Caso: Livraria Páginas & Letras



Modelagem de Dados e Implementação de Banco de Dados com SQLAlchemy:

Introdução:

A modelagem de dados constitui uma etapa fundamental no desenvolvimento de sistemas de informação, uma vez que possibilita a organização lógica e estruturada das informações que serão armazenadas em um banco de dados. Nesse contexto, o Modelo Entidade-Relacionamento (MER) desempenha um papel essencial, pois permite a representação conceitual dos elementos do domínio do problema, bem como das interações existentes entre eles.

Por meio do MER, é possível identificar as entidades relevantes, definir seus atributos e estabelecer os relacionamentos, favorecendo a compreensão da estrutura do banco de dados antes de sua implementação física. Essa abordagem contribui para a eliminação de redundâncias, a garantia da integridade dos dados e a otimização dos processos de armazenamento e recuperação das informações.

A adoção de um MER bem definido serve como base para o desenvolvimento de bancos de dados relacionais eficientes, permitindo que desenvolvedores e administradores compreendam de forma clara a organização dos dados e promovam manutenções e expansões futuras com maior segurança e consistência.

No contexto da livraria Páginas & Letras, observa-se a necessidade de modernização dos processos de gestão. Atualmente, o controle de vendas, estoque e cadastro de clientes é realizado de forma manual, o que resulta em atrasos operacionais, maior incidência de erros e dificuldades na tomada de decisões estratégicas. Diante desse cenário, a implementação de um banco de dados relacional, fundamentado em um Modelo Entidade-Relacionamento, surge como uma solução adequada para organizar as  informações, garantir acesso rápido e seguro aos dados e aumentar a eficiência das operações da empresa.

A Livraria Páginas & Letras :

A Livraria Páginas & Letras é um empreendimento tradicional que decidiu modernizar sua gestão. Atualmente, todo o controle de vendas, estoque e cadastro de clientes é feito manualmente, o que gera atrasos, erros e dificuldades na administração. A falta de um sistema informatizado afeta o atendimento ao cliente e a tomada de decisões estratégicas. Para resolver esses problemas, a livraria decidiu criar um banco de dados relacional. Com isso, contratou um pessoa para desenvolver o MER que servirá como base para o novo sistema. Após uma análise detalhada das necessidades da livraria Paginas & Letras, a solução proposta foi a criação de um Modelo de entidade e relacionamento, que estruturasse todas as informações essenciais. Com a modelagem de dados, a livraria ppoderá implementar um banco de dados relacional que garanta integridade, segurança e eficiência, facilitando o acesso às informações e a manutenção futura do sistema.

Implementação da solução:

1. Identificação das entidades:

Entidade: Livro - Representa os livros comercializados pela livraria
Entidade: Autor - Representa os autores das obras.
Entidade: Editora - Responsável pela publicação dos livros.
Entidade: Cliente - Representa os clientes da livraria.
Entidade: Venda - Registra as transações de compra realizadas.
Entidade: Item_Venda - Entidade associativa que detalha os livros vendidos em cada venda.
Entidade: Funcionário - Representa os colaboradores responsáveis pelas vendas.
Entidade: Categoria - Classificação

2. Definição dos atributos das entidades:

Especificação das características relevantes de cada entidade, incluindo chaves primárias e atributos descritivos.

O que é ISBN?

O ISBN (International Standard Book Number - Número Padrão Internacional de Livro) 
é um código numérico único usado para identificar livros de forma padronizada no mundo inteiro.

Para que serve o ISBN?

Ele permite Identificar exatamente uma edição específica de um livro, Facilitar vendas, controle de estoque e distribuição. Ele padroniza registros em livrarias, bibliotecas e editoras.

Como é o formato do ISBN?

Atualmente, o ISBN possui 13 dígitos, divididos em partes:

Exemplo: 978-85-333-0227-3

Componentes:

Prefixo (978 ou 979)
Código do país ou área linguística (ex: 85 = Brasil)
Código da editora
Identificação do título/edição
Dígito verificador (controle)

O que o ISBN identifica exatamente?

Não identifica apenas o livro, mas sim cada edição, cada formato (capa dura, brochura, e-book)
Ou seja, o mesmo título pode ter vários ISBNs, dependendo da edição e do formato.

ISBN no MER da livraria no Modelo Entidade-Relacionamento é normalmente a chave primária da entidade Livro. É um identificador único, obrigatório e não nulo.

Agora voltemos as entidades:

Entidade: Livro - Representa os livros comercializados pela livraria.

ISBN 
Título  
Ano de Publicação 
Preço 
Quantidade em estoque 
Edição 

Entidade: Autor - Representa os autores das obras.

id_autor 
nome 
nacionalidade

Entidade: Editora - Responsável pela publicação dos livros.

id_editora 
nome 
cnpj
contato

Entidade: Cliente - Representa os clientes da livraria.

id_cliente
nome
cpf
email
telefone

Entidade: Venda - Registra as transações de compra realizadas.

id_venda
data_venda
valor_total
forma_pagamento

Entidade: Item_Venda - Entidade associativa que detalha os livros vendidos em cada venda.

id_item_venda
quantidade
preco_unidade

Entidade: Funcionário - Representa os colaboradores responsáveis pelas vendas.

id_funcionario
nome
cargo

Entidade: Categoria - Classificação

id_categoria
nome_da_categoria
descrição

Observação Importante:

A entidade Item_Venda é necessária para resolver o relacionamento N:N entre Venda e Livro, 
permitindo armazenar quantidade e preço no momento da venda, prática essencial em sistemas reais.
A entidade Cliente não terá relação direta com o funcionário. Assim o cliente poderá comprar quantos livros quiser. (1:N) Assim o cliente está associado a entidade Venda


3. Estabelecimento dos relacionamentos:

Definição das associações entre as entidades, bem como suas cardinalidades e restrições.

Relacionamentos e Cardinalidades – Livraria

Entidades: Livro - Autor
Cardinalidade: Um autor pode escrever um ou vários livros (1,N)
Cardinalidade: Um livro pode ser escrito por um ou vários autores (1,N)
Tipo: N : N
Necessária uma entidade associativa: Livro_Autor para ocorrer essa cardinalidade.

Por qual motivo?
Em bancos de dados relacionaisb uma FK representa apenas 1:N. Não é possível colocar uma FK que represente múltiplos valores corretamente. Isso causaria duplicação de dados, violação da normalização e dificuldade de manutenção.A entidade associativa 'book_author' quebra o N:N em dois relacionamentos 1:N garante integridade referencial e permite escalabilidade.

                                                                                                Elaborado pelo autor


O relacionamento entre Livro e Autor é do tipo muitos-para-muitos (N:N), pois um autor pode escrever vários livros e um livro pode ser escrito por vários autores. Em bancos de dados relacionais, relacionamentos N:N não podem ser representados diretamente, sendo necessária a criação de uma entidade associativa (Livro_Autor) para resolver essa cardinalidade, garantindo integridade e normalização dos dados.

Aplicação das Formas Normais na Entidade 'book_author' 

A entidade associativa book_author foi criada para resolver o relacionamento muitos-para-muitos (N:N) entre as entidades Book e Author, garantindo a correta normalização do banco de dados.

  • Primeira Forma Normal (1FN):
    A entidade assegura a atomicidade dos dados, evitando o armazenamento de múltiplos autores em um único campo da entidade Book. Cada registro representa uma única associação entre um livro e um autor.

  • Segunda Forma Normal (2FN):
    Todos os atributos da entidade book_author dependem integralmente da chave primária, não existindo dependências parciais, uma vez que a tabela armazena apenas informações relativas à associação entre livro e autor.

  • Terceira Forma Normal (3FN):
    A entidade não apresenta dependências transitivas, pois informações próprias de livros e autores são mantidas exclusivamente em suas respectivas entidades, evitando redundância e inconsistências.

Dessa forma, a entidade book_author contribui para um modelo de dados normalizado até a Terceira Forma Normal (3FN), promovendo integridade, organização e facilidade de manutenção do banco de dados.


Entidades: Livro - Editora
Cardinalidade: Um livro pode ser publicado somente por uma única editora (1,1)
Cardinalidade: Uma Editora publica vários Livros (1,N)


Entidades: Livro - Categoria
Cardinalidade: Uma categoria pode conter vários livros (1,N)
Cardinalidade: Um livro contem somente uma categoria (1,1)
Tipo: 1 : N

Entidades:  Funcionário - Venda
Cardinalidades: Um funcionário pode registrar várias Vendas (1,N)
Cardinalidades: Uma venda pode ser realizada por um funcionário (1,1)
Tipo: 1:N

Entidades: Venda - Item_venda
Cardinalidade: Uma venda possui um ou vários itens de venda (1,N)
Cardinalidade: Um item_venda pertence a uma única venda (1,1)
Tipo: 1:N

Entidades: Livro - Item_venda
Cardinalidade: Um livro pode estar presente em vários itens de venda (1,N)
Cardinalidade: Um item_venda refere-se a um único livro (1,1)


                                                                                                        Elaborado pelo autor


                                                                                                      
O relacionamento entre as entidades Sale e Book é classificado como muitos-para-muitos (N:N), uma vez que uma venda pode envolver múltiplos livros e um mesmo livro pode estar associado a diferentes vendas. Considerando que bancos de dados relacionais não permitem a implementação direta  de relacionamentos N:N, fez-se necessária a criação da entidade associativa Item_Sale, cuja função é estabelecer a ligação entre essas entidades, além de possibilitar o armazenamento de atributos próprios da relação, como a quantidade de itens comercializados e o preço unitário praticado no momento da venda. Essa abordagem assegura a integridade referencial e a normalização do modelo de dados.

Entidades: Clientes - Venda
Cardinalidade: Um cliente pode comprar vários livros. (1,N)
Cardinalidade: Vários livros podem estar associados a um único cliente (N,1)
Tipo: 1:N

4. Criação do diagrama MER:

A criação do diagrama do Modelo Entidade-Relacionamento (MER) corresponde à etapa de consolidação da modelagem de dados, na qual as entidades, seus atributos e os relacionamentos previamente identificados são organizados e representados graficamente de forma clara, padronizada e consistente. Essa representação visual tem como principal objetivo facilitar a compreensão da estrutura do banco de dados, permitindo uma visão global do domínio do sistema antes de sua implementação física.

O diagrama MER atua como um artefato fundamental de comunicação entre analistas, desenvolvedores e demais envolvidos no projeto, pois explicita as regras de negócio, as cardinalidades e as dependências entre as entidades. Além disso, contribui para a validação do modelo, possibilitando a identificação de inconsistências, redundâncias ou lacunas ainda na fase conceitual.

Para a elaboração do diagrama, foram utilizadas ferramentas especializadas em modelagem de dados, de acordo com diferentes notações amplamente reconhecidas:

  • DB Designer (notação James Martin): empregado para a representação do modelo com foco mais próximo à modelagem lógica e física, adotando uma notação amplamente utilizada em ambientes profissionais e sistemas corporativos.

  • brModelo (notação Peter Chen): utilizado para a construção do modelo conceitual, enfatizando a clareza acadêmica na representação de entidades, atributos e relacionamentos, conforme a notação clássica de Peter Chen.

A utilização dessas ferramentas permite não apenas a padronização do diagrama, mas também a documentação adequada do processo de modelagem, assegurando que o modelo de dados esteja alinhado tanto aos conceitos teóricos quanto às práticas adotadas no mercado. Dessa forma, o diagrama MER torna-se a base estrutural para o desenvolvimento do banco de dados relacional da livraria Páginas & Letras, garantindo consistência, integridade e facilidade de manutenção ao longo do ciclo de vida do sistema.

Utilização do Banco de Dados com SQLAlchemy na Livraria Páginas & Letras

A utilização de um banco de dados relacional na livraria Páginas & Letras tem como objetivo organizar, armazenar e gerenciar de forma eficiente as informações relacionadas às operações do negócio, tais como cadastro de livros, autores, editoras, clientes, funcionários, controle de estoque e registro de vendas. Para a implementação desse banco de dados, foi adotado o SQLAlchemy, uma biblioteca ORM (Object-Relational Mapping) da linguagem Python.

O SQLAlchemy permite a representação das tabelas do banco de dados por meio de classes Python, estabelecendo uma correspondência entre os objetos do sistema e os registros armazenados no banco. Essa abordagem reduz a dependência de comandos SQL explícitos, facilitando a manutenção do código e promovendo maior legibilidade e reutilização.

No contexto da livraria, o SQLAlchemy é utilizado para:

  • Persistência de dados: realizar operações de inserção, atualização, exclusão e consulta (CRUD) de forma estruturada e segura.

  • Gerenciamento de relacionamentos: implementar corretamente os relacionamentos entre entidades, incluindo associações do tipo um-para-muitos (1:N) e muitos-para-muitos (N:N), conforme definido no Modelo Entidade-Relacionamento.

  • Garantia da integridade referencial: assegurar a consistência dos dados por meio do uso de chaves primárias e estrangeiras.

  • Abstração do banco de dados: permitir que a lógica de negócio seja desenvolvida independentemente do sistema gerenciador de banco de dados, facilitando futuras migrações ou expansões.

  • Facilidade de manutenção e escalabilidade: possibilitar alterações no modelo de dados com menor impacto no código da aplicação.

Além disso, o SQLAlchemy automatiza a criação das tabelas a partir dos modelos definidos, assegurando que a estrutura física do banco de dados esteja alinhada ao modelo conceitual previamente elaborado. Dessa forma, a livraria passa a contar com uma base de dados consistente, segura e preparada para apoiar a tomada de decisões e a modernização dos processos de gestão.

Acesso ao Projeto no GitHub:

Este projeto encontra-se disponível publicamente no GitHub, permitindo a visualização completa da estrutura, do código-fonte e da documentação associada. O repositório foi organizado seguindo boas práticas de versionamento e documentação, com o objetivo de facilitar a compreensão do projeto por avaliadores, estudantes e recrutadores.

O desenvolvimento do projeto contou com o uso de diversas ferramentas e tecnologias. Assim também, durante o desenvolvimento do projeto, foram aplicadas boas práticas amplamente reconhecidas na área de desenvolvimento de sistemas e bancos de dados, tais como a separação entre modelagem conceitual ,implementação física e lógica com a utilização de  ORM para maior abstração e manutenção do código. Assim também como a adoção de ambiente virtual Python para evitar conflitos de dependências e versionamento adequado com Git. A documentação clara e estruturada está no README.md do projeto no repositório

Este projeto integra o portfólio acadêmico e profissional do autor, com foco em Modelagem de Dados, Banco de Dados Relacional e SQLAlchemy ORM.

Repositório no GitHub:

> (https://github.com/userdanixdev/project_livraria)

Portfólio pessoal / LinkedIn:

> (www.linkedin.com/in/danixdev)

Considerações Finais:

O projeto foi desenvolvido com o objetivo de consolidar conhecimentos teóricos e práticos em modelagem de dados e implementação de bancos de dados relacionais, servindo como material de estudo, demonstração técnica e composição de portfólio.


Comentários

Postagens mais visitadas deste blog

Projeto de Banco de Dados: Setor Varejo

Projeto Prático de Engenharia de Dados com Python, SQL e GitHub

Um breve conceito prático sobre Engenharia de Dados