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 / 44351
Accepted
Tiddo
Tiddo
Asked: 2013-06-13 03:07:23 +0800 CST2013-06-13 03:07:23 +0800 CST 2013-06-13 03:07:23 +0800 CST

Prática recomendada para armazenar metadados de registro

  • 772

Qual é a melhor prática para armazenar metadados de registros individuais em um banco de dados?

Preciso armazenar metadados comuns, como hora de criação e hora da última atualização para muitas tabelas em meu banco de dados. Encontrei algumas soluções diferentes:

  1. Armazene os metadados diretamente nas tabelas.

    Prós:

    • Os metadados estão diretamente vinculados aos registros
    • Nenhuma junção é necessária para recuperar metadados

    Contras:

    • Muitas colunas duplicadas são necessárias (a menos que a herança seja usada)
    • Metadados e dados de negócios não são separados
  2. Crie uma tabela de metadados gerais e use chaves estrangeiras virtuais para vincular dados às tabelas e registros corretos.

    Prós:

    • Sem duplicação de colunas
    • Os metadados são separados dos dados de negócios

    Contras:

    • Sem links diretos entre metadados e dados (FKs não podem ser usados)
    • Junções requerem uma condição adicional
  3. Crie tabelas de metadados individuais para cada tabela que requer metadados.

    Prós:

    • Os metadados estão diretamente vinculados aos registros
    • Os metadados são separados dos dados de negócios

    Contras:

    • Muitas tabelas extras são necessárias
    • Muitas colunas duplicadas são necessárias (a menos que a herança seja usada)

Existem mais opções, prós ou contras do que as que mencionei aqui? E qual é a melhor prática para armazenar esses metadados?

database-design postgresql
  • 1 1 respostas
  • 7374 Views

1 respostas

  • Voted
  1. Best Answer
    Erwin Brandstetter
    2013-06-14T15:24:23+08:002013-06-14T15:24:23+08:00

    As colunas de que você está falando ocupam 20 bytes (se alinhadas sem preenchimento):

    hora de criação, hora de atualização e fonte de criação

    timestamp .. 8 bytes
    timestamp .. 8 bytes
    inteiro .. 4 bytes

    O cabeçalho da tupla e o identificador de item para uma linha separada em uma tabela separada sozinho ocupariam 23 + 1 + 4 = 28 bytes mais os 20 bytes de dados reais, mais 4 bytes de preenchimento no final. Faz 52 bytes por linha . Ver:

    • Configurando o PostgreSQL para desempenho de leitura

    Em relação ao armazenamento, você não tem nada a ganhar. Com relação ao desempenho, você quase não perde nada com apenas 16 - 24 bytes a mais por linha.

    As colunas também pertencem diretamente à linha, por isso faz sentido mantê-las juntas. Tenho o hábito de adicionar exatamente essas colunas (mais fonte separada para a última atualização) a todas as tabelas relevantes.

    Também é mais fácil escrever um TRIGGER ON INSERT OR UPDATEpara mantê-los atualizados.

    Resumindo: um voto forte para sua opção 1 .

    Onde eu iria para a opção 3 :
    se os metadados forem atualizados com frequência, enquanto a linha principal não é. Então pode valer a pena manter uma tabela 1:1 separada para tornar as ATUALIZAÇÕES mais baratas e reduzir o inchaço na tabela principal - ou até mesmo optar pela opção 2.

    Onde eu iria para a opção 2 :
    se o conjunto de colunas de metadados for altamente repetitivo. Você pode ter uma coluna FK para o conjunto de metadados na(s) tabela(s) principal(is). Não economiza muito para três pequenas colunas como no seu exemplo.

    • 10

relate perguntas

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

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

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • 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

    Conceder acesso a todas as tabelas para um usuário

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

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