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 / 55951
Accepted
Rachel
Rachel
Asked: 2014-01-02 16:40:15 +0800 CST2014-01-02 16:40:15 +0800 CST 2014-01-02 16:40:15 +0800 CST

Decidindo quando estender para tabelas filhas

  • 772

Eu tenho uma tabela de entidades. Para propósitos de exemplo, vamos chamá-los de Vehicles: Car, Boat, Motercycle, etc.

O ideal é colocar todas as entidades em uma única Vehiclestabela porque muitas tabelas relacionadas ( VehicleRatings, VehicleComments, VehicleHistoryetc) serão aplicadas a qualquer entidade, não apenas a uma delas.

Mas algumas das entidades têm algumas propriedades individuais que não são compartilhadas com os outros tipos de entidade. No momento, há apenas 1 propriedade extra para uma entidade e 2 para outra. Espero que haja mais alguns que serão identificados mais tarde, mas não muitos no geral.

Como sei quando é melhor criar uma tabela filho para cada tipo de entidade para armazenar essas propriedades individuais, em vez de apenas adicionar uma coluna extra na Vehiclestabela pai? Há alguma pergunta que eu possa fazer a mim mesmo para ajudar a determinar essa resposta?

Estou procurando otimizar principalmente o desempenho da consulta, seguido pela facilidade de manutenção.

database-design
  • 2 2 respostas
  • 1610 Views

2 respostas

  • Voted
  1. Best Answer
    Joel Brown
    2014-01-03T05:49:56+08:002014-01-03T05:49:56+08:00

    De uma perspectiva lógica de ERD, o design apropriado é claramente o padrão de supertipo/subtipo de entidade. O que você está lutando é como implementar isso de uma perspectiva física.

    Como muitos problemas de modelagem de dados, não há uma regra rígida e rápida. Você está olhando para um compromisso. Você deseja um pouco mais de complexidade na lógica e nas consultas de seu aplicativo (supertipo/subtipo) ou deseja correr o risco de que a lógica de seu aplicativo não imponha adequadamente suas restrições e que um registro de carrovehicle em sua tabela consolidada possa obter um valor não nulo valor na anchor_weightcoluna?

    Os tipos de coisas que você deve considerar ao decidir como negociar essas alternativas são:

    • Quantas colunas dependentes de subtipo existem?
    • Qual a probabilidade de novos subtipos serem definidos no futuro - ou que novas colunas dependentes de subtipo sejam necessárias?
    • Qual seria a gravidade se dados inadequados (valores de coluna) fossem registrados para alguns registros?
    • Onde você se posiciona filosoficamente? (por exemplo, "Colunas nulas são más", "Restrições impostas por aplicativos são más", "Relacionamentos 1:1 são ruins", "Juntas internas são más", etc.)
    • Quantas consultas eu tenho que visam apenas um subtipo?
    • Tenho alguma restrição de ambiente de programação que torna os modelos físicos de supertipo/subtipo mais difíceis de trabalhar (por exemplo, uso pesado de ORMs ou ferramentas simplistas como o Access).

    No final das contas, você tomará uma decisão prática com base no que é mais importante para você. O que quer que você decida terá prós e contras - mas serão seus prós e contras.

    • 8
  2. Walter Mitty
    2014-01-02T20:45:20+08:002014-01-02T20:45:20+08:00

    Você pode querer examinar duas técnicas: herança de tabela de classe e chave primária compartilhada. Essas duas técnicas possuem tags que as descrevem no SO.

    Aplicando essas duas técnicas ao seu caso, você pode acabar com um design mais simples, porém mais poderoso do que o que você propõe. Em alguns casos, você pode dispensar completamente o TypeID, porque uma junção entre a tabela generalizada e a tabela especializada apropriada produzirá exatamente os objetos que você está procurando. Além disso, como a junção está em duas chaves primárias, a junção será relativamente rápida.

    • 1

relate perguntas

  • Os índices filtrados podem ajudar a melhorar as consultas baseadas em uma hora inserida ou isso deve ser evitado?

  • Qual é a diferença entre os tipos de dados MySQL VARCHAR e TEXT?

  • É melhor armazenar os valores calculados ou recalculá-los a pedido? [duplicado]

  • Armazenar vs calcular valores agregados

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

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