A normalização de um banco de dados é o tema do artigo de hoje. Este é um tema super importante para a criação do banco de dados, vamos colocarmos a mão-na-massa assim como fizemos no primeiro artigo de Modelagem de Dados e vamos continuar a passar os fundamentos da linguagem e os conceitos básicos de como funciona um banco de dados.
O Oracle é um SGBD relacional e isso quer dizer que ele aplica as regras definidas por Edgar Frank Codd , ele foi quem desenvolveu o modelo de banco de dados relacional. Ao todo são 12 regras, porém vou passar à vocês apenas as 3 primeiras que são as essenciais para o seu dia-a-dia.
O que vamos falar nesse artigo!
Normalização Banco de Dados
Para começarmos a normalização é necessário recapitularmos o modelo da primeira parte da aula de modelagem, abaixo vocês vão ver o modelo relacional de entidades que fizemos na semana passada vamos seguir a ideia de sempre darmos exemplos em cima da teoria, então vou passando as regras para vocês com exemplos.
Com base no modelo que fizemos na ultima aula, vamos transformar isso tudo em tabelas (que seria o local onde guardamos as informações no Banco de Dados), e para isso existem algumas regras a serem seguidas.
Criando Tabelas na Normalização de Dados
Toda entidade vira uma tabela;
Então seguindo esta regra teremos as seguintes tabelas:
- TB_PRODUTO
- TB_COMANDA
- TB_ESTOQUE
- TB_CLIENTE
- TB_CAIXA
Se você clicar no nome da entidade aparecerá o nome da tabela que vai ser criada.
Relacionamentos que possuem atributos viram tabelas (existe a possibilidade em relacionamentos 1:n dos atributos irem para uma das tabelas, ao invés de se criar uma nova. Entretanto, relacionamentos com atributos são mais comuns em relacionamentos n:n, gerando assim uma nova tabela);
Agora vamos criar as tabelas desses relacionamentos.
- TB_PRODUTO_COMANDA
- TB_PRODUTO_ESTOQUE
- TB_CAIXA_ESTOQUE
- TB_CLIENTE_PAGAMENTO
Toda tabela possui um ou mais campos que são os campos únicos, onde cada entidade se diferencia, por exemplo, um cliente possui um CPF único que pode ser o que diferencia todos os clientes, estes campo únicos são chamados de chaves primárias.
Criando as Chaves Primárias na Normalização de Dados
Abaixo seguem as chaves primárias de todas as tabelas criadas.
- ID_PRODUTO
- ID_COMANDA, DT_INICIO, DT_FIM
- ID_ESTOQUE
- ID_CLIENTE (Que nesse caso vai ser o CPF)
- ID_PAGAMENTO
- ID_PRODUTO, ID_COMANDA, DT_INICIO, DT_FIM
- ID_PRODUTO, ID_ESTOQUE
- ID_PAGAMENTO, ID_ESTOQUE
- ID_CLIENTE, ID_PAGAMENTO
Criando Chaves Estrangeiras na Normalização de Dados
Relacionamentos são representados por chaves estrangeiras (ou Foreign Key – atributo correspondente à chave primária de outra relação, base para a integridade referencial);
Temos as tabelas que possuem chaves estrangeiras que compõem os relacionamentos das tabelas do nosso banco de dados.
- ID_PRODUTO, ID_COMANDA
- ID_PRODUTO, ID_ESTOQUE
- ID_PAGAMENTO, ID_ESTOQUE
- ID_CLIENTE, ID_PAGAMENTO
Perceberam algo bem interessante, as chaves estrangeiras são os mesmos campos que formam as chaves primárias compostas dos relacionamentos, então tentem sempre achar esta conexão entre os relacionamentos, chaves estrangeiras e chaves primárias.
Criando Relacionamentos na Normalização
Relacionamentos 1:1 podem ser mapeados numa única tabela (quando possuem a mesma chave primária), em duas tabelas (quando as chaves primárias são diferentes e um dos lados do relacionamento é obrigatório) ou em três tabelas (quando o relacionamento é opcional em ambos os lados)
No nosso caso existe apenas um relacionamento 1:1 na nossa modelagem que é o relacionamento da entidade Comanda x Cliente, porque um cliente pode apenas ter uma comanda para efetuar compras e uma comanda pode pertencer apenas a um cliente enquanto ela estiver ativada. Por esse motivo temos esse relacionamento 1:1.
Mas elas possuem chaves primárias diferentes então por esse motivo tempos duas tabelas, porém com a obrigatoriedade do ID_CLIENTE (Chave Primária da TB_CLIENTE, na TB_COMANDA).
- Relacionamentos 1:n são mapeados de forma que a chave primária do lado “1” seja representada do lado “n” como chave estrangeira;
- Relacionamentos n:n devem ser transformados em dois relacionamentos 1:n, resultando numa nova tabela;
Estes dois últimos passos ficarão mais legais nos desenhos que vou mostrar para vocês logo abaixo.
Ferramenta para Normalização de Dados
Após passar essas regras começamos a desenhar o nosso banco de dados, bom como nesse caso ficaria muito trabalhoso usar o Paint para desenhar tudo na mão, então eu vou utilizar o MySql Workbench que é uma ferramenta utilizada para modelar o MySQL, que é um banco de dados muito utilizado para aplicações web e que foi comprado pela Oracle e melhor de tudo, esta ferramenta é totalmente grátis.
3 Formas Normais
Um pouco mais de teoria com as 3 formas normais de Codd, que vou apresentar a vocês.
1ª Forma Normal (1FN)
Toda relação deve ter uma chave primária e deve-se garantir que todo atributo seja atômico. Atributos compostos devem ser separados. Por exemplo, um atributo Endereço deve ser
subdividido em seus componentes: Logradouro, Número, Complemento, Bairro, Cidade, Estado e CEP. Além disso, atributos multivalorados devem ser discriminados separadamente ou separados em uma outra relação. Por exemplo, um atributo multivalorado Telefones poderia ser separado em Telefone Residencial, Telefone
Comercial e Telefone Celular ou, ainda, ser convertido em outra relação que pudesse representar um número indeterminado de telefones.
Já passei para vocês como transformar um Modelo de Relacionamentos de Entidades em um modelo de relacionamento de tabelas. E se alguém ficar com alguma dúvida por favor comentem para que eu posso ajudá-los a resolve-las e claro fazer com que o meu curso evolua sanando as principais dúvidas de todos.
Para exemplificar vou pegar um dos casos de relacionamento, quando criamos a tabela TB_PRODUTO_COMANDA, que contém o Identificador da Comanda e o Identificador do Produto estamos transformando um relacionamento de n:n entre o produto e a comanda em um relacionamento 1:n, pois podem existir vários produtos, mas na tabela TB_PRODUTO_COMANDA vai existir apenas um ID_PRODUTO e campo quantidade para fazer os cálculos na hora da compra e o mesmo serve para a Comanda, onde podem existir várias comandas, mas apenas um identificador de comanda poderá estar atrelado a tabela TB_PRODUTO_COMANDA.
Segue a primeira parte do nosso modelo aplicando a primeira regra de normalização de Codd.
2ª Forma Normal (2FN)
Toda relação deve estar na 1FN e devem-se eliminar dependências funcionais parciais, ou seja, todo atributo não chave deve ser totalmente dependente da chave primária. Como exemplo, uma relação que contenha os atributos Código da Obra, Código do Fornecedor, Nome do Fornecedor e Preço de Venda, Considerando que a chave primária é composta pelos atributos Código da Obra e Código do Fornecedor, não está na Segunda Forma Normal, uma vez que o Nome do Fornecedor depende apenas do Código do Fornecedor, e não do Código da Obra. Uma nova relação (Fornecedor) deve ser criada contendo os campos Código do Fornecedor (como chave) e Nome do Fornecedor. Na relação original, ficariam os atributos Código da Obra e o Código do Fornecedor, ambos formando a chave primária composta, e o atributo Preço de Venda. Além disso, o atributo Código do Fornecedor também seria uma chave estrangeira para a nova relação criada. Esta forma normal ajuda a diminuir redundâncias de informações criadas indevidamente.
Essa regra é bem interessante, porque eliminamos informações duplicados e conseguimos conservar a integridade das informações, por exemplo, na tabela TB_PRODUTO colocamos o nome do tipo do produto, bom vamos dizer que o produto seja uma bebida, e que um funcionário cadastrou o banco de dados Bebida, mas veio outro funcionário e ao cadastrar o produto cadastrou Bebidas, isso faria com que tivéssemos dois tipos de produto cadastrados no banco, que na verdade seriam os mesmos, por esse motivo é necessário criar essas tabelas.
Aplicando a 2ª Regra temos o seguinte modelo:
3ª Forma Normal (3FN)
Toda relação deve estar na 2FN e devem-se eliminar dependências funcionais transitivas, ou seja, todo atributo não chave deve ser mutuamente independente. Como exemplo, uma relação que contenha os atributos Matrícula do Funcionário (atributo chave), Nome do Funcionário, Código do Departamento e Nome do Departamento não está na Terceira Forma Normal. O Nome do Departamento é dependente do Código do Departamento, e não da Matrícula do Funcionário. Uma mudança no nome do departamento, por exemplo, levaria a modificações em todos os funcionários daquele departamento. Para eliminar este problema, cria-se uma nova relação (Departamento) contendo Código do Departamento e Nome do Departamento. Na relação original, retira-se o Nome de Departamento, mantendo-se o Código do Departamento, agora como chave estrangeira. Esta forma normal também ajuda a diminuir redundâncias e aumentar a independência das relações.
Conclusão
Após aplicar as 3 formais normais temos o nosso relacionamento do Banco de Dados completo, mas antes de terminar gostaria de deixar para vocês minha fonte para escrever este artigo foi este ótimo trabalho acadêmico que eu encontrei no google, então caso alguém queira se aprofundar mais em modelagem vale muito a pena lê-lo. E se você gostou do artigo não deixe de comentar, sua opinião é muito importante para nós e claro se achou o artigo útil compartilha ele com os seus amigos no facebook, Linkedin ou até mesmo no seu grupo de whatsapp.
Link permanente
Link permanente
Excelente inicio de curso PL/SQL com o que aprendi sobre modelagem irei usa-lo em minha base de dados que estou montando. Continue com a aulas quero muito aprender Oracle!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Estava um pouco sem tempo, mas agora estou acompanhando tudo!! Um abraço!
Link permanente
Bom!!
Link permanente
Parabéns Pelo Material!
Link permanente
Tenho uma duvida Relacionamentos que possuem atributos viram tabelas (existe a possibilidade em relacionamentos 1:n dos atributos irem para uma das tabelas, ao invés de se criar uma nova. Entretanto, relacionamentos com atributos são mais comuns em relacionamentos n:n, gerando assim uma nova tabela);
Então o que é um relacionamento com atributo?
Link permanente
Olha, Jessica, ainda estou aprendendo sobre isto, mas acho que posso te responder.
Para entender o que é “relacionamento com atributos” imagine um banco de dados (bem simples) de um cinema. Serão criadas as entidades Filme e Sala_Cinema, além do relacionamento Sessão. Como pode analisar, será um relacionamento n:n, pois uma sala pode ter vários filmes e os filmes podem passar em várias salas.
Portanto, deve-se criar uma nova entidade chamada Sessão, com as chaves estrangeiras para Filme e Sala, além de seus próprios atributos, como data e hora da sessão. Assim, Sessão se torna um “relacionamento com atributos”.
Você pode observar essa explicação no artigo, quando o autor fala da 1FN, criando a TB_PRODUTO_COMANDA.
Link permanente
Instalei o oracle conforme vídeo de explicação de instalação mas ao abrir o programa oracle surge a seguinte mensagem: O windws não pode encontrar http://127.0.01%HTTPPOT%/apex/f?p=4950. Certifique-se de que o nome foi digitado corretamente e tente novamente.
Não sei o que fazer!!!!!
Link permanente
Aula excelente! Parabéns…
Link permanente
Muito bom o curso. Parabéns!
Link permanente
Bom dia William estou começando na area de banco de dados e estou com uma tremenda dúvida , me matriculei em uma pós-graduação MBA em Oracle, qual é a melhor opção é fazer um MBA em Oracle ou fazer um curso oficial da oracle.
Link permanente
Suas aulas são excelentes. Parabéns!
Link permanente
Você está de parabéns…
Estou conseguindo absorver bem as suas aulas, você é um ótimo instrutor!
Link permanente
Boa noite Willian..apesar de ter estudado superficialmente banco de dados acho que a abordagem ta legal, fácil de assimilar..Parabéns
Link permanente
Boa noite Willian..apesar de ter estudado superficialmente banco de dados acho que a abordagem ta legal, fácil de assimilar..Parabéns
Link permanente
Boa noite Willian..apesar de ter estudado superficialmente banco de dados acho que a abordagem ta legal, fácil de assimilar..Parabéns
Link permanente
Bom dia Willian, já conhecia um pouco de PL/SQL. Gostei muito da forma como abordou as 3 Formas Normais. Abraços
Link permanente
Boa noite Willian..apesar de ter estudado superficialmente banco de dados acho que a abordagem ta legal, fácil de assimilar..Parabéns
Link permanente
Boa noite Willian..apesar de ter estudado superficialmente banco de dados acho que a abordagem ta legal, fácil de assimilar..Parabéns
Link permanente
Muio boa a aula.
Link permanente
Muito Boa Aula, bem explicativo… vamos para proxima… Obrigado por dividir o conhecimento
Link permanente
Muito Boa Aula, bem explicativo… vamos para proxima… Obrigado por dividir o conhecimento
Link permanente
Muio boa a aula.
Link permanente
Link permanente
Muito bom!!!
Acompanhando de Campinas-SP
Link permanente
Link permanente
muito bom aprendi um pouco, quero aprender mais com vosco.
Link permanente
Oi Alexandre, tudo bem?
Fico muito feliz com o seu comentário, nosso objetivo é que todos aprendam muito com a gente.
Se você quiser continuar o seu aprendizado te recomendo esse curso, ele contém um conteúdo muito interessante para que você possa aprender ainda mais com a gente
http://formacaodbaoracle.aprendaplsql.com/
abs
William Miranda
Link permanente
William,
Gostei muito do teu artigo sobre modelagem de dados. Parabéns!
Não conseguir abrir o link do “ótimo trabalho acadêmico” que utilizaste como fonte de informações para escrevê-lo. Você poderia enviar o referido trabalho para o meu email ou indicar o link correto onde posso encontrá-lo?
Obrigado,
Araripe
Link permanente
Oi Francisco, tudo bem?
Infelizmente a faculdade tirou ele do ar, mas muito obrigado pelo seu comentário e ficamos muito feliz com o seu comentário e que você tenha gostado do nosso artigo.
abs
William Miranda