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 / 114907
Accepted
phil294
phil294
Asked: 2015-09-14 09:33:49 +0800 CST2015-09-14 09:33:49 +0800 CST 2015-09-14 09:33:49 +0800 CST

Tabela dividida vs. mesmos valores em várias linhas

  • 772

tenho uma tabela products:

#products
ID | category | type | criteria1 | criteria2

, com categorye typesendo chaves estrangeiras de outras tabelas.

Devo dividir esta tabela em category1_type1_products, category1_type2_productse assim por diante? Parece-me que deveria, porque agora na minha tabela, existem alguns milhares de entradas com o mesmo IDe categoryvalor. Cargas de informações redundantes.

Além disso, uma consulta poderia ser executada mais rapidamente se o mysql não tivesse que pesquisar todas as linhas com a categoria específica e digitar primeiro. (certo?)

Esse é um comportamento de estruturação recomendado? Se não, e se minha tabela tiver 5 milhões de tuplas?

mysql database-design
  • 1 1 respostas
  • 608 Views

1 respostas

  • Voted
  1. Best Answer
    jkavalik
    2015-09-14T10:13:43+08:002015-09-14T10:13:43+08:00

    Não. Isso significaria que a tabela NAME contém DATA - você terá que modificar a estrutura do banco de dados (criar nova tabela) apenas para adicionar mais uma categoria ou tipo.

    Se sua coluna de categoria/tipo for tinyint ou smallint (dependendo do número razoavelmente esperado de valores possíveis), então você realmente tem a normalização adequada em vigor. Se não houver dependência (funcional) entre duas chaves para categorias para duas linhas diferentes, esses dois valores não são uma redundância, mas uma maneira mínima de armazenar os dados reais.

    Do ponto de vista do desempenho, a parte importante é a indexação adequada para suas consultas. Se você costuma pesquisar linhas com categoria e/ou tipo específico, deve ter um índice nessa coluna (ou índice composto em ambas as colunas e possivelmente outro) para otimizar essas consultas. Você deve ativar o log de consulta lenta e verificar periodicamente quais consultas estão demorando mais (você pode usar pt-query-digestpara analisar o log) e otimizá-las (adicionando índices adequados e/ou reescrevendo as consultas).

    Quando você tem índices adequados no lugar, no caso proposto de várias tabelas, selecionar a tabela certa para ler levará aproximadamente o mesmo tempo que o MySQL precisa para "pular" para a parte certa do índice. (É um pouco simplista, mas o ponto é que selecionar a tabela certa para ler é uma sobrecarga em si).

    Do ponto de vista do "esquema", eu ficaria mais preocupado com essas duas colunas criteria1e, criteria2se esses forem seus nomes reais e uso, isso parece um possível problema - mas isso pode depender do seu caso de uso e pode ser realmente bom. Mas se houver alguma chance de você adicionar uma vez criteria3e outros, isso diria para você adicionar uma tabela separada para eles, uma linha por critério e FK à tabela atual.

    • 1

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

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

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • 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
    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

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