Fiz uma pergunta semelhante no SO e fui aconselhado a fazer o tipo de pergunta aqui. Isto é para um curso sobre bancos de dados relacionais. Um exemplo de problema pergunta "como é que todas as tabelas em um banco de dados relacional devem estar na primeira forma normal" meu primeiro problema com isso é que o 3NF não é considerado melhor, então a afirmação não seria falsa? Meu segundo problema com isso é no SO, as pessoas disseram que a Primeira Forma Normal é boa porque elimina a redundância. Não vejo como isso acontece porque 1) todos os valores são atômicos 2) existe uma chave primária - nenhuma das quais elimina a redundância.
Acho que outra maneira de perguntar é por que é importante que os valores sejam atômicos?
A principal importância da primeira forma normal não é que ela elimine a redundância , mas sim que ela elimine grupos repetidos .
Em vez de ter várias colunas do mesmo tipo de dados em um registro (0NF), você remove as informações repetidas em uma relação separada e as representa como linhas. Isso é o que constitui 1NF.
Tabelas que possuem colunas como:
phone_1
,phone_2
,phone_3
ou que contêm dados orientados a listas como:212-555-1212, 212-555-1234, 416-967-1111
violam 1NF.1NF é importante porque é muito mais flexível que 0NF, sendo muito mais fácil de usar ao inserir, atualizar e ler dados. Isso ocorre porque cada tipo de elemento de dados (por exemplo, número de telefone do cliente) possui exatamente uma coluna para localizá-lo e essa coluna possui apenas um dado para cada registro. Isso significa que você pode usar instruções SQL simples para ler ou gravar elementos de dados individuais sem precisar analisar strings delimitadas ou usar construções como:
where phone_1=@Number or phone_2=@Number or phone_3=@Number
e assim por diante.Em relação a 1NF vs 3NF, as formas normais são cumulativas. Uma tabela na 3NF também está na 1NF, então é tão verdadeiro dizer que "Toda tabela em um banco de dados relacional deve estar na 1NF" quanto dizer que "Toda tabela em um banco de dados relacional deve estar na 3NF". Eu diria que ambos são verdadeiros, mas acrescentaria "a menos que você tenha um motivo muito bom e bem considerado para desnormalizar" .
"Acho que outra maneira de perguntar é por que é importante que os valores sejam atômicos?"
No momento, estou trabalhando com aplicativos que têm valores separados por vírgulas em campos varchar/texto, e isso é um pé no saco. Entre outras coisas, no aplicativo você tem que fazer todos os tipos de divisão e conversão de strings bobas para obter os dados no formulário correto, e no lado do banco de dados você não pode usar índices no campo, pois todas as pesquisas devem estar em o formulário WHERE minhacoluna LIKE '%search%'
Existem outras razões também, mas essas duas vêm à mente primeiro.
O 1NF elimina a redundância e também ajuda a reduzir ou eliminar problemas de consistência de dados.
Suponha que você tenha uma tabela de
Invoices
, que contém dados de pagamento e dados do cliente.Os dados do cliente são informações como
Name
,Address
,PhoneNumber
etc. Se você duplicar esses dados em cada linha...Invoice
registros para o mesmoCustomer
Address
valores diferentes para o mesmoCustomer
, qual é o correto?Address
tabela do que verificar seInvoice
há um endereço atual na tabela.A primeira forma normal significa eliminar domínios com relações como membros - em outras palavras, eliminar colunas que permitem tabelas como valores.
No contexto de 1NF, "atômico" significa apenas qualquer tipo que não seja uma relação porque tais valores são atômicos em relação à álgebra relacional. Portanto, dizer que os valores devem ser atômicos é o mesmo que dizer que as relações não devem ter relações como valores.
A primeira forma normal é necessária porque as linguagens de dados relacionais (na prática, SQL) não suportam tabelas aninhadas. As tabelas aninhadas também complicam o modelo de dados desnecessariamente, pois as mesmas informações podem ser expressas por meio de chaves estrangeiras.
A primeira forma normal não elimina a redundância nos dados. As formas normais superiores eliminam diferentes formas de redundância, mas esse não é o caso da 1FN.
As formas normais são construídas umas sobre as outras, ou seja, as tabelas devem estar na 1FN antes de poderem estar na 2FN e assim por diante. Portanto, 3NF implica que o banco de dados também está em 1NF.