AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 26933
Accepted
Celeritas
Celeritas
Asked: 2012-10-15 17:17:16 +0800 CST2012-10-15 17:17:16 +0800 CST 2012-10-15 17:17:16 +0800 CST

Primeira Forma Normal, por que é boa e como reduz a redundância

  • 772

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?

normalization relational-theory
  • 4 4 respostas
  • 8075 Views

4 respostas

  • Voted
  1. Best Answer
    Joel Brown
    2012-10-16T04:06:58+08:002012-10-16T04:06:58+08:00

    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_3ou que contêm dados orientados a listas como: 212-555-1212, 212-555-1234, 416-967-1111violam 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=@Numbere 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" .

    • 10
  2. Petter Brodin
    2012-10-16T04:55:50+08:002012-10-16T04:55:50+08:00

    "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.

    • 2
  3. JNK
    2012-10-16T05:55:29+08:002012-10-16T05:55:29+08:00

    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, PhoneNumberetc. Se você duplicar esses dados em cada linha...

    • Os dados são presumivelmente redundantes (já que você tem os mesmos detalhes em todos os Invoiceregistros para o mesmoCustomer
    • Os dados podem se tornar inconsistentes. Se eu tiver dois Addressvalores diferentes para o mesmo Customer, qual é o correto?
    • Os dados são organizados de forma menos lógica/intuitiva. Se você deseja enviar uma promoção a um cliente, faria mais sentido verificar uma Addresstabela do que verificar se Invoicehá um endereço atual na tabela.
    • 0
  4. JacquesB
    2021-06-21T22:51:47+08:002021-06-21T22:51:47+08:00

    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.

    • 0

relate perguntas

  • Questão do banco de dados do dicionário multilíngue

  • Coluna duplicada para consultas mais rápidas?

  • As formas normalizadas superiores sempre atendem aos critérios das inferiores?

  • Recursos de exercícios de normalização

  • Como estruturar um modelo para representar de forma adequada e eficiente dados em forma de árvore em bancos de dados relacionais?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve