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 / 505
Accepted
Fergus
Fergus
Asked: 2011-01-11 20:49:33 +0800 CST2011-01-11 20:49:33 +0800 CST 2011-01-11 20:49:33 +0800 CST

Até onde você deve ir com a normalização?

  • 772

Eu tenho uma quantidade decente de dados em um banco de dados. Tenho tabelas bem formadas e boas relações entre elas com alguma redundância em meus dados. Mas até onde devo ir com a normalização? Existem desvantagens de desempenho para muita normalização?

performance learning
  • 5 5 respostas
  • 9024 Views

5 respostas

  • Voted
  1. Best Answer
    jcolebrand
    2011-01-11T21:29:48+08:002011-01-11T21:29:48+08:00

    Você deve ir até onde deve, e não mais. É claro. ~ O problema pode ser que isso é um pouco de arte, e é por isso que isso não é uma ciência pura.

    Nosso principal produto é um sistema de análise e relatórios e, nesse sentido, temos alguns registros detalhados. Inicialmente, o projetamos com muitas junções em um ID comum para alguns dos registros filhos, mas descobrimos que, se desnormalizássemos alguns campos, poderíamos cortar MUITAS junções e eliminar muitos problemas de desempenho.

    Mas só sabíamos disso porque 1) criamos um design "normalizado", 2) começamos a usá-lo, 3) traçamos o perfil do desempenho real após centenas de milhões de linhas em dezenas de tabelas.

    A história final é que, até traçarmos o perfil , não poderíamos saber ao certo o que funcionaria para nós. Gostamos da ideia de normalizar para que pudéssemos atualizar com mais facilidade, mas no final o desempenho real foi o fator decisivo. Esse é o meu conselho para você: perfil, perfil, perfil.

    • 41
  2. REW
    2011-01-11T21:05:12+08:002011-01-11T21:05:12+08:00

    A normalização é uma meta apenas quando suporta seu modelo de dados bem o suficiente para justificá-la. Destina-se a ser um guia para permitir o crescimento, gerenciamento e manutenção. Lembre-se de que nem o livro sobre normalização, nem seu autor irão construir ou manter seu banco de dados ou sua aplicação.

    Uma boa leitura sobre o assunto "normalização demais" está aqui.

    E, sim, pode haver um impacto no desempenho devido ao excesso de normalização. Isso seria uma passagem de tabela mais profunda para pegar coisas como tabelas de indicadores de status quando elas foram puxadas para uma tabela separada. Alguns dirão que isso geralmente é negado na velocidade de atualização (alterando o texto do status de "Bom" para "BOM" ou algo parecido) ou na capacidade de manutenção.

    • 11
  3. onedaywhen
    2012-04-12T01:15:07+08:002012-04-12T01:15:07+08:00

    Recomendo a leitura do seguinte apêndice encontrado em alguns dos livros mais recentes de Chris Date :

    Dois vivas para a normalização

    A normalização está longe de ser uma panacéia, como podemos ver facilmente ao considerar quais são seus objetivos e quão bem ela se compara a eles...

    Devo deixar claro que não quero que meus comentários nesta seção sejam vistos como qualquer tipo de ataque. Acredito firmemente que qualquer coisa menos do que um design totalmente normalizado é fortemente contra-indicado...

    • 6
  4. bernd_k
    2011-01-11T23:41:52+08:002011-01-11T23:41:52+08:00

    Eu acho que é igualmente importante olhar para as desnormalizações adicionadas explícitas, sejam valores agregados adicionados ou alguns campos de uma tabela mestre copiada para uma cópia detalhada.

    O argumento é principalmente algum argumento de desempenho.

    Se você fizer isso, certifique-se de que esses campos sejam atualizados por gatilhos e cabe ao banco de dados mantê-los consistentes.

    • 2
  5. Isaac A. Nugroho
    2011-01-12T22:59:49+08:002011-01-12T22:59:49+08:00

    Eu concordo totalmente com @jcolebrand. Ao projetar o modelo para seu aplicativo, você deve normalizar tudo o que puder. Mas então você deve criar o perfil das consultas construídas sobre seu modelo, especialmente aquelas executadas com frequência.

    Minha própria experiência: atributos que levaram duas junções para serem alcançados (isso significa três tabelas unidas) serão principalmente um porco de desempenho. E para piorar, é usado em transações online. Eu desnormalizei o atributo, então ele só precisa de um join e pediu ao programador para ajustar seu aplicativo para a consulta e atualizar o atributo. Agora funciona muito melhor...

    Em outras palavras, você deve equilibrar a normalização com o desempenho.

    • 2

relate perguntas

  • Como você ajusta o MySQL para uma carga de trabalho pesada do InnoDB?

  • Como determinar se um Índice é necessário ou necessário

  • Onde posso encontrar o log lento do mysql?

  • Onde estão alguns quebra-cabeças SQL úteis para ensinar SQL em um local de trabalho?

  • Como posso otimizar um mysqldump de um banco de dados grande?

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 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

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 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
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +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
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +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
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +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