Primeira forma normal as cinco formas normais

Primeira forma normal as cinco formas normais

A normalização é uma abordagem de design de banco de dados para decompor sistematicamente as tabelas, a fim de remover a redundância dos dados e evitar anomalias que podem acompanhar a inserção, atualização e exclusão de dados. Existe a primeira forma normal (1NF), a segunda forma normal (2NF), a terceira forma normal (3NF), a forma normal de Boyce-Codd (BCNF), a quarta forma normal (4NF) e a quinta forma normal (5NF). A sexta forma normal ainda está sendo desenvolvida (ainda em estado de pesquisa) e não será discutida nesta série. A forma normal de Boyce-Codd é como a 3½ (3.5) forma normal. Um banco de dados relacional consiste em tabelas relacionadas, que deveriam ter sido normalizadas.

Este artigo (tutorial) explica sobre a primeira forma normal. Esta é a primeira parte da série, as cinco formas normais. O banco de dados de exemplo usado é o de uma loja de conveniência. Na Grã -Bretanha, uma loja de conveniência é chamada de loja de esquina. Em alguns países, é chamado de loja de provisões.

Tabela de transações não normalizadas

Uma transação é a compra de produtos por um cliente, da loja ou de receber produtos pela loja dos fornecedores, à venda. Supõe -se nesta parte da série (neste tutorial) que o funcionário que registra as transações não é treinado para essa gravação. Pode haver mais de um funcionário que não sabe nada sobre normalização. Se houver mais de um funcionário, todos os funcionários registram no mesmo livro de exercícios e nenhum deles sabe nada sobre normalização. O proprietário (dono da loja) também não sabe nada sobre normalização. Seu pai acabou de morrer e deixou algum dinheiro para ele, e ele decidiu investir em uma loja de conveniência. Então, o funcionário (ou funcionários) começam (s) com uma tabela para gravar todas as transações. A tabela possui os seguintes títulos da coluna, onde trans significa transação:

Trans (produto, categoria, cliente, fornecedor, funcionário, preço)

Trans refere -se a uma linha na tabela. A tabela é uma tabela de transações. Os exemplos de produtos vendidos na loja são: doces, chocolates, sprite, coca-cola, fanta, pepsi, leite, iogurte, queijo, cremes dentais, lenços, fraldas, doces, batatas fritas e nozes. Qualquer um desses nomes pode aparecer na coluna do produto.

Esses produtos se enquadram em categorias: confeitaria, refrigerante, produtos lácteos, produtos de higiene pessoal e lanche.

A coluna do cliente tem os nomes das pessoas que compram da loja. A coluna do fornecedor tem os nomes das empresas que fornecem os produtos a serem vendidos pela loja. A coluna do funcionário tem o nome do funcionário que vende um produto ou recebe um produto de um fornecedor e o registra. A coluna de ação indica se uma venda foi feita para um cliente ou um pedido foi feito (comprado) de um fornecedor.

Cada preço é o preço total dos produtos vendidos ou comprados em uma transação.

E assim, as primeiras fileiras da tabela são:

Antes de continuar, saiba que as colunas da tabela em uma tabela de banco de dados também são chamadas de atributos. As linhas com valores podem ser chamadas de objetos.

Agora, observe que na coluna de preços, a moeda não é indicada. Se a moeda é dólares ou euros ou alguma outra moeda, ela não precisa ser indicada. No entanto, é indicado em alguma área de comentários que não faz parte da tabela.

Da mesa: Existem três funcionários até agora, excluindo o proprietário, e um deles realizou a transação duas vezes; Existem três clientes até agora, e um deles comprou duas vezes; Existem quatro empresas de fornecedores até agora, e cada uma se preocupa com uma transação.

Redundância:

Observe que "John Smith" aparece como valor em duas linhas na mesma coluna. A repetição do mesmo valor na mesma coluna é a redundância que pode levar a problemas contábeis.

Regras de formulário do primeiro normal

Para que uma tabela esteja na primeira forma normal, as seguintes regras devem ser respeitadas. Caso contrário, haveria problemas contábeis:

1) Todas as colunas em uma tabela devem ter nomes de cabeçalho exclusivos.

2) Cada célula deve ter apenas um único valor.

3) Os valores armazenados em uma coluna devem ser do mesmo tipo.

4) As linhas devem ser distintas.

5) A ordem das colunas ou a ordem das linhas não importa.

Você, o leitor, que finalmente completa esta série e sabe tudo sobre formas normais, tornou -se um desenvolvedor de banco de dados. O proprietário da loja de conveniência é seu amigo. Você decidiu visitar o site de negócios do seu amigo (loja).

Você olha para a tabela anterior que eles produziram. Você reflete por algum tempo e depois balança a cabeça, dizendo: "HM-HM-HM". Você então diz a seu amigo, o proprietário e seus trabalhadores, que nem todas as regras da primeira forma normal foram respeitadas; E isso levaria a erros contábeis.

Você então partiu para ensinar a eles as regras da primeira forma normal, examinando as cinco regras dadas, pois elas estão relacionadas à tabela anterior, uma por um.

Regra 1: Todas as colunas em uma tabela devem ter nomes de cabeçalho exclusivos.

Faça todas as colunas da tabela anterior têm nomes únicos? Sim, e está tudo bem. Os membros da equipe não são ininteligentes, afinal. Eles simplesmente não foram educados sobre formas normais. A regra 1 não foi violada e isso não representa um problema.

Regra 2: Cada célula deve ter apenas um único valor.

Uma célula é a interseção de uma linha e uma coluna. Olhando para o último atributo (coluna) com o título, preço, há um número em cada célula e há apenas um número por célula. Tudo bem. Cada célula é um único valor.

Olhando para a coluna do funcionário, cada célula tem um nome de pessoa. Um nome consiste no primeiro e sobrenome, formando uma string (texto). Tudo bem. Cada célula na coluna tem uma corda e, portanto, cada célula tem um valor.

As células para as colunas do cliente e do fornecedor possuem uma única sequência cada e, portanto, um único valor. Tudo bem. Na coluna do cliente, "John Smith" está em duas células diferentes (linhas). Isso é redundância (repetição) e seu problema será discutido mais adiante no tutorial para 2nf.

Na coluna de categoria, cada célula deve ter uma categoria. Um texto de categoria (um valor) é uma string. No entanto, na segunda célula do topo, existem duas categorias (duas cordas): “refrigerante” e “produto lácteo” separado por uma vírgula. Estes são dois valores em uma célula. O restante das células na coluna de categoria tem valores únicos, mas esta célula tem dois. A regra de que cada célula deve ter apenas um valor único foi violado aqui na segunda célula. Isso levaria a problemas contábeis. Como existem dois valores em uma célula, a solução é dividir a linha de dados em duas linhas correspondentes, colocando os dois valores em duas células, duas linhas, na mesma coluna da seguinte maneira:

As duas categorias que estavam em uma célula foram colocadas em duas células na mesma coluna. No entanto, as outras células foram repetidas em suas colunas, introduzindo mais redundância. No decorrer da solução de um problema, foram adicionadas repetições (redundância), adicionando outro problema. A solução para repetições será discutida no próximo tutorial sobre a segunda forma normal.

Olhando para a primeira coluna do produto, a primeira célula tem dois valores: "doces" e "chocolates" separados por uma vírgula. Estes também são dois produtos. A solução é dividir a linha em dois, colocando os dois valores em duas células diferentes na mesma coluna e infelizmente também dobrando as outras células.

A segunda célula da mesma coluna do produto tem sete valores. Como a primeira célula, isso viola a regra: cada célula deve ter apenas um único valor. A solução é substituir a linha por sete novas linhas, com cada um desses valores em sua própria célula na mesma coluna e repetições das outras células em suas próprias colunas. As novas repetições aumentam a redundância.

Dos sete produtos, quatro caem na categoria de refrigerante e três caem na categoria de produtos lácteos. Os quatro produtos (Sprite, Coca-Cola, Fanta e Pepsi) estão associados à categoria, refrigerante. Os produtos (leite, iogurte e queijo) estão associados à categoria, produtos lácteos.

A nova tabela se torna:

A regra de que cada célula deve ter apenas um único valor agora está satisfeito. Não há célula com mais de um valor na tabela agora. Esta solução teve um custo. Mais células foram repetidas em suas colunas, adicionando mais repetições à repetição dupla (original) de "John Smith". Colocar uma tabela na segunda forma normal resolve o problema da repetição (redundância) da primeira forma normal.

Observação: A repetição na coluna de preços não é considerada um problema e não é levada em consideração ao produzir o 2NF. Observe também que nesta tabela resultante, alguns dos preços especificados foram divididos e são considerados apropriados.

Regra 3: Os valores armazenados em uma coluna devem ser do mesmo tipo.

O último atributo, a coluna de preços tem apenas números. Portanto, todos os valores nessa coluna são do mesmo tipo chamados números (precisamente, números inteiros). Cada uma das outras colunas tem valores de string de tipo. O tipo de string é chamado de texto em alguns códigos de tabela de banco de dados. E assim, a regra de que os valores armazenados em uma coluna deve ser do mesmo tipo é satisfeita sem nenhuma alteração no que a equipe havia feito. Eles não são ininteligentes, afinal.

Regra 4: As linhas devem ser distintas.

Na tabela anterior resultante, não há duas linhas iguais. Algumas células ocorrem em mais de uma linha na mesma coluna, mas não há duas linhas as mesmas células na mesma ordem. E assim, a regra de que as linhas devem ser distintas é satisfeita sem nenhuma mudança no que a equipe havia feito. Eles não são ininteligentes, afinal.

Regra 5: A ordem das colunas ou a ordem das linhas não importa.

Qualquer coluna pode ser a primeira ou a última coluna. Qualquer linha pode ser a primeira ou a última linha. E assim, a regra de que a ordem das colunas ou a ordem das linhas não importa é satisfeita sem nenhuma alteração no que a equipe havia feito. Eles não são ininteligentes, afinal.

A tabela está agora na primeira forma normal porque as cinco regras são satisfeitas.

Das cinco regras para ter uma mesa na primeira forma normal, a equipe, incluindo seu proprietário, violou apenas uma por ignorância que não é de sua culpa. Você, o desenvolvedor da web treinando -os, tem que parabenizá -los. No entanto, você deve insistir em que a regra de que cada célula deve ter apenas um único valor é a regra mais importante para colocar uma tabela na primeira forma normal.

Bem, isso não é tudo. Você não deixa as pessoas que você está treinando ainda. A tabela deve receber uma chave (uma chave primária). Em outras palavras, cada linha deve ser identificável por um ou mais valores celulares dessa linha. Se isso não for possível, uma nova coluna deve ser criada no lado esquerdo da tabela para ser chamado de coluna de chave.

Chave primária

Existe alguma coluna na tabela anterior onde nenhuma célula pode estar vazia ou ter um valor nulo, e todos os valores sempre serão únicos? Não há nenhum. Se houvesse um, então seria a chave primária. O leitor pode pensar que a coluna do produto tem valores únicos, mas esse não seria o caso o tempo todo. Por exemplo, o cliente “John Smith” ou um novo cliente ainda podem vir e comprar doces no futuro, como uma nova transação (linha). Então, haveria dois valores de string de doces em duas células na coluna do produto.

Existem duas ou mais colunas na tabela anterior resultante cuja combinação de células de linha é única e não pode ter nenhuma repetição na tabela a seguir? Se sim, o grupo de colunas formará a chave primária. Por acaso, não existe esse grupo; A menos que todas as colunas da tabela sejam consideradas a chave primária, pois nenhuma linha pode repetir. Tem que haver uma chave primária e deve haver colunas que não sejam de chave em uma tabela normalizada.

Como uma ou mais colunas não podem ser a chave primária da tabela anterior resultante, uma nova coluna deve ser adicionada na extremidade esquerda da tabela para ser a chave primária. Em uma coluna de chave primária, nenhuma célula está vazia e nenhuma célula tem um valor nulo. Todos os valores na célula devem ser únicos. A maneira mais fácil de ter esses valores para a coluna de chave primária é ter números de 1 para cima. Isto é, para a primeira linha, o valor da chave primária seria 1. Para a segunda linha, o valor para a chave primária seria 2. Para a terceira fila, o valor para a chave primária seria 3 e assim por diante. Quando uma nova linha de transação é adicionada na parte inferior, o novo valor da chave primária é um mais aquele logo acima. Portanto, a tabela completa para a primeira forma normal é a seguinte:

A coluna de chave primária é chamada de transídeo para "ID da transação". ID significa identificador. Essa chave primária é o tipo de incremento automático, o mesmo que o número automático. Uma nova linha terá um ID primário de 12. Esta tabela é uma tabela de transações. É a única tabela que a loja tem até agora.

Que completa o design da tabela para o primeiro formulário normal. No entanto, você como o desenvolvedor da web, não se afasta das pessoas que você está treinando ainda. Você ainda precisa explicar à equipe (os estagiários) o significado da dependência funcional. Com isso, eles poderão lidar com a questão da chave primária, bem como as cinco regras que você as ensinou na sua ausência.

Dependência funcional

A idéia de dependência funcional ou simplesmente dependência é que, uma vez que a chave primária de uma linha é conhecida, qualquer outro valor nessa linha pode ser buscado. Então, a chave primária é o valor dependente. Depende do restante dos outros valores na linha. Por exemplo, se o transídeo de 3 for dado para a tabela anterior, o produto correspondente será sprite. A categoria correspondente é "refrigerante". O cliente correspondente é "John Smith". O fornecedor correspondente é "empresa de bebida". O funcionário correspondente (funcionário) é "Mary Baker". A ação correspondente é "vendas". E o valor (preço) que o cliente pagou é de US $ 12 ($ não é indicado na tabela).

Neste ponto, você como o desenvolvedor do banco de dados pode sair. No entanto, antes de ir, você resume o que lhes ensinou.

Conclusão

Uma tabela na primeira forma normal não deve violar nenhuma das seguintes regras:

1) Todas as colunas em uma tabela devem ter nomes de cabeçalho exclusivos.

2) Cada célula deve ter apenas um único valor.

3) Os valores armazenados em uma coluna devem ser do mesmo tipo.

4) As linhas devem ser distintas.

5) A ordem das colunas ou linhas não importa.

Qualquer tabela em qualquer forma normal deve ter uma chave primária.

A idéia da dependência funcional ou simplesmente dependência é que, uma vez que a chave primária de uma linha é conhecida, qualquer outro valor nessa linha pode ser buscado.

Neste ponto, você como desenvolvedor de banco de dados pode tirar sua licença. No entanto, você voltará para ensiná -los sobre a segunda forma normal, porque uma tabela em 1nf ainda pode ter algumas vulnerabilidades.