Criar um modelo conceitual e lógico utilizando um exemplo

#5 Eu Respondo: Criando diagramas de banco de dados

Criar um modelo conceitual e lógico utilizando um exemplo

Criar um modelo conceitual e lógico utilizando um exemplo

 

Resposta

Boa madrugada Rafael. Pode contar com minha ajuda sempre, estamos aí para isto. Pela forma da questão que você escreveu eu entendi que seria um modelo conceitual e lógico de banco de dados. Vamos fazer os dois porém temos que revisar algumas coisinhas antes de por a mão na massa.

Nota: Infelizmente não consegui recriar o exercício proposto no office e no draw, por isto utilizei uma ferramenta gratuita e que se encaixa perfeitamente nesta resposta: o brModelo

 

O que é modelo?

Em computação podemos chamar de “modelo” um conjunto de regras que devem ser obedecidas para que algo esteja de acordo com um padrão. Por exemplo, o modelo perfeito de batatas fritas para mim é aquelas crocantes, sequinhas e com pouco sal.

Então podemos dizer que o “modelo de batata frita perfeita” são as que obedecem estas três “regras” (sequinha, crocante e com pouco sal). Todas as outras batatas fritas que não possuem estas características não são do mesmo “modelo de batata frita perfeita” (aquelas que são oleosas e molengas estão mais para “modelo de batatas fritas que dão dor de barriga”).

Usando o mesmo princípio em banco de dados, os modelos servem para que a base de dados contenha características “boas” e que facilitem a criação, alteração e manutenção dos dados e meta-dados (informações sobre os dados). Para que isto fosse possível, criou-se os dois principais modelos conhecidos na área de banco de dados: o modelo entidade-relacionamento e o modelo relacional.

 

Modelo Entidade-Relacionamento (ER)

É um modelo muito simples, utilizado para se ter uma ideia de como será o banco de dados. Consiste basicamente em duas entidades (conjunto de dados de uma determinada coisa) e um relacionamento entre elas (algum campo que as “juntam” de alguma forma ). Expressamos graficamente este modelo utilizando o “diagrama conceitual” que está ilustrado na figura 1.

 

Figura 1 - Diagrama conceitual

Figura 1 – Diagrama conceitual

Para ficar ainda mais fácil de entender, vamos supor o seguinte exemplo: Temos que cadastrar em um banco de dados informações sobre um cardápio de uma pizzaria. A primeira “entidade” que baixa em nossa mente é a gloriosa “pizza”. Esta entidade provavelmente vai ter as entidade “tamanho”, “valor”, “tipo”, “ingredientes” etc. Você fez o banco com uma entidade só e sem nenhum relacionamento, cadastrando todos os dados na “entidade” (tabela)  pizza. Desta forma temos o seguinte diagrama:

Figura 2 - Entidade "Pizza"

Figura 2 – Entidade “Pizza”

O atributo “codigoPizza” está em azul porque ele é um atributo “chave primária”. Um atributo chave é como uma identificação, um RG da linha. Quando fazemos uma relação normalmente um atributo “chave” de uma entidade é “copiado” em outra entidade. O atributo “estrangeiro” na outra entidade é chamado desta forma mesmo: “chave estrangeira”.

O sistema está rodando tudo OK. Mas um belo dia o dono da pizzaria quer que o tamanho “grande” seja chamado de “gigante” e quer tirar o orégano de todas as pizzas. E agora? Todos os dados das pizzas estão colocados em uma tabela só ( a tabela pizza). Você vai ter que mudar o tamanho “grande” linha por linha, e remover o ingrediente “orégano” de cada pizza também. Imagina o trabalho!

Para resolver estes problemas nós podemos criar outras entidades e relacionar a entidade “pizza” com elas. Vamos começar colocando uma entidade de nome “tamanho” e uma relação dela com “pizza”.

Figura 3 - Entidade pizza e tamanho

Figura 3 – Entidade pizza e tamanho

Agora sim! Toda vez que mudarmos o dado “nomeTamanho” da entidade “tamanho”, automaticamente todos os tamanhos das pizzas também mudarão. Só para esclarecimento, a seta em cima do retângulo diz a direção da relação, ou seja, “pizza” possui um “tamanho”.

Como todos sabem, uma pizza pode ter somente um tamanho (o tamanho não muda depois que ela é feita), e um tamanho pode ser colocado em várias pizzas. Para deixar isto claro no banco de dados nós usamos a cardinalidade (os numerozinhos entre parênteses ao lado de cada extremidade da linha).

Na Figura 3, as cardinalidades indicam o seguinte: “Pizza” possui um e somente um “tamanho” (1,1). “Tamanho” pode estar em zero ou infinitas pizzas (0,n). É meio complicado de entender a serventia de saber isto, mas na próximo parágrafo você vai entender.

O problema do tamanho foi resolvido mas e os ingredientes? Como ficariam?

O caso da pizza e tamanho, a pizza tem somente um tamanho e um tamanho existe em várias pizzas, mas o caso dos ingredientes é diferente: Uma pizza pode possui zero ou infinitos ingredientes e um ingrediente pode estar em uma ou infinitas pizzas. O diagrama ficaria da seguinte forma:

Figura 4 - Entidades pizza e ingrediente

Figura 4 – Entidades pizza e ingrediente

Repare agora nas cardinalidades de “pizza” e “ingrediente”. Ambas possui a mesma cardinalidade (0,n). Quando isto acontece é necessário criar uma “entidade associativa”, que nada mais é que uma entidade que terá duas chaves estrangeiras que serão as chaves primárias das duas entidades ligadas. Nosso diagrama ficará da seguinte forma:

Figura 5 - Entidade Associativa

Figura 5 – Entidade Associativa

 

Desta forma a pizza de código ‘1’ terá os ingredientes ‘2’,’3′ e ‘4’ que tem por nome ‘milho’,’queijo’,’orégano’. Agora se eu quiser deletar o orégano, basta ir nesta tabela e deletar todos os registros que tem o ingrediente de código ‘4’.

Conseguimos resolver dois dos vários problemas que poderão surgir no nosso banco de dados. Tudo isto sem nem começar a fazê-lo!

Entendeu porque é tão importante criar nossa base de dados utilizando diagramas e modelos? É fundamental planejar antes de agir e banco de dados é ainda mais importante planejar do que propriamente construir.

 

Modelo Relacional (MR)

Seguindo a mesma lógica e princípios do modelo entidade-relacionamento, este modelo foca-se mais na parte estrutural do banco de dados em como as colunas vão se chamar e quais os tipos de dados elas vão ter (números, letras, datas etc).

Este modelo utiliza o diagrama lógico. No brModelo nós termos a opção do clique esquerdo do mouse > Gerar esquema lógico. Automaticamente um diagrama lógico aparece como ilustra a figura 6.

Figura 6 - Modelo Relacional

Figura 6 – Modelo Relacional

Como você pode ver, este diagrama contém uma espécie de retângulos com tabelas.  Cada linha de cada retângulo é um atributo, os que estão com uma chave amarela ao lado são “chaves primárias”, isto é, identificadores de cada tabela.

Os que estão com chave cinza são “chaves estrangeiras”, isto é, chaves de outras tabelas que identificam o dado de uma tabela em outra. No nosso exemplo nós possuímos uma entidade “fraca”, que não possui chaves primárias. Ela serve para armazenar relações de outras tabelas. Em nosso caso as tabelas “ingredientes” e “pizza”.

Cada linha representa uma relação e as cardinalidades correspondentes, como já explicado anteriormente.

Este modelo corrige algumas inconsistências do modelo anterior, caso seu modelo conceitual estiver errado, no modelo lógico você vai visualizar o erro com mais facilidade, podendo assim corrigir o modelo anterior. Se você construiu um bom modelo relacional, no brModelo existe a opção de gerar o esquema físico, que nada mais é a transformação do diagrama em linguagem SQL pronta para ser executada.

Podemos concluir desta forma que os modelos servem tanto para documentação do software quanto para a própria criação das tabelas do banco de dados, pois ele gera o código SQL automaticamente, sem dor de cabeça.

 

 Resolução da pergunta

Depois de relembrar o que cada modelo faz, vamos resolver o exercício. No enunciado podemos ver que se trata de um banco de dados de uma empresa de aluguel de carros. Obviamente já temos as entidades “carro”, “aluguel”, “cliente”.

No enunciado não pede para colocarmos os atributos de cada entidade, somente algumas regras de negócio, em que precisaremos colocar. Por padrão eu sempre coloco codigo[nome da entidade], para ter no mínimo uma chave primária. Nosso primeiro diagrama do problema está ilustrado na figura 7.

Figura 7 - Primeira noção do diagrama

Figura 7 – Primeira noção do diagrama

A partir deste diagrama vamos requisito por requisito complementá-lo.

 

Primeiro requisito – Saber o funcionário que realizou o aluguel

Este é fácil! Simplesmente adicionamos uma nova entidade “funcionário” e a relacionamos com a entidade associativa “aluguel” assim ilustrado na figura 8.

Figura 8 - Resolvendo o primeiro requisito

Figura 8 – Resolvendo o primeiro requisito

Repare que o funcionário participa externamente, somente realizando o aluguel. Não é como cliente e aluguel que ambos são (0,n) ao mesmo tempo.

 

Segundo requisito – Análise de reparos

Neste requisito além de saber quais reparos foram feitos nos carros, termos que saber a oficina e o tipo de reparo e o seu motivo. Vamos criar desta forma uma nova entidade “reparo” que se relacionará com a entidade “carro” e que terá os atributos que satisfaçam os requisitos citados assim ilustrado na figura 9.

Figura 9 - Resolvendo o segundo requisito

Figura 9 – Resolvendo o segundo requisito

Repare que sempre coloco o nome da entidade no final de cada atributo. Não é obrigatório, mas fica mais fácil depois na aplicação procurar por um determinado dado em uma tabela e realizar uma consulta SQL mais específica.

 

 Terceiro requisito – Data da compra do carro

Este é o mais fácil de todos. Somente colocar um atributo “dataCompraCarro” na entidade carro, como mostra a figura 10.

Figura 10 - Resolvendo o terceiro requisito

Figura 10 – Resolvendo o terceiro requisito

Nosso modelo conceitual está de acordo com as exigências pedidas. Agora falta somente preencher com os outros atributos indispensáveis, como por exemplo o nome do cliente, renavam no carro, data do reparo etc.

 

Modelo Lógico

Como estou usando o brModelo simplesmente cliquei com o botão esquerdo e selecionei a opção “Gerar Esquema Lógico”  e o diagrama relacional apareceu. Alterei um pouco a posição das tabelas para que elas ficassem mais bonitas, como ilustra a figura 11.

Figura 11 - Modelo relacional

Figura 11 – Modelo relacional

Pronto! Exercício resolvido!

 

Download dos arquivos

Clique aqui para fazer o download do modelo conceitual e lógico, além de fazer o download do brModelo para visualizá-los.

 

Dúvidas?!

Não deixe de comentar! Seu comentário vale mais que 1.000 acessos. Farei o possível para responder prontamente.

Virei a madrugada fazendo esta aula então se estiver alguma coisa escrita erroneamente ou com erros de semântica por favor me avise.

13 ideias sobre “#5 Eu Respondo: Criando diagramas de banco de dados

  1. André

    Jonathan, quanto ao DER da pizzaria, não contempla os vários preços q uma pizza pode ter dependendo do tamanho, certo? Como eu representaria, por exemplo, 3 pizzas de calabresa, tamanho pequeno, médio e grande? Seriam 3 pizzas com msmo nome só q com ids de tamanhos diferentes? Obrigado!

    Responder
    1. Jonathan Autor do post

      Você poderia criar uma nova entidade chamada “tamanho” e fazer uma entidade associativa chamada “pizzaTamanho” que conteria o id da pizza, o id do tamanho e o valor que você colocaria no tamanho da pizza. Poderia adicionar o campo de “pedaços” também para guardar a quantidade de pedaços que cada pizza possuirá.

      Responder
      1. Kwanza

        Cordial saudações!
        Preciso de uma ajuda…

        Preciso criar uma Base de Dados de Sistema de Aplicação de Multas.
        Eu não entendo de Viação e Trânsito…

        Obrigado!

        Responder
  2. Mayara

    olá, preciso de uma suuuuuuuuuuuuuuper ajuda !
    tem comoo vc fazer pra mim ou me ajudar com isso:
    Fazer o DER do BD empresa na ferramenta DIA.
    Fazer a modelagem de dados do BD empresa na ferramenta ERWIN.
    Fazer o BD empresa no SGBD Firebird.
    Diferenças entre os BD’s que funcionam em modo monousuário e cliente-servidor

    AGRADEÇO MUUUUUITO, TEM SEMANAS QUE ESTOU TENTANDO E NADA ATÉ AGR.]

    OBRIGADA

    Responder
    1. Jonathan Autor do post

      Oi Mayara tudo bem? Pelo que li você precisa modelar e criar um banco de dados, correto? Para isto precisamos de alguns dados desta tal “empresa” que você precisa fazer. Veja que a modelagem e a criação do banco vai depender diretamente da empresa. Aguardo seu retorno :)

      Responder
  3. Pingback: Aplicando as formas normais em um exemplo

  4. Pingback: Aprendendo a programar em SQL

Deixe uma resposta

O seu endereço de email não será publicado


oito − = 7

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>