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 / 50050
Accepted
anotheruser1488182
anotheruser1488182
Asked: 2013-09-18 03:42:24 +0800 CST2013-09-18 03:42:24 +0800 CST 2013-09-18 03:42:24 +0800 CST

Qual é a maneira correta de especificar um registro como o registro *atual*?

  • 772

As duas opções em que pensei são adicionar uma coluna booleana chamada Current na tabela; mas tenho certeza de que isso violaria algum nível de normalização devido a mais de um registro poder ser definido como atual.

Como alternativa, ter outra tabela que especifique o ID do registro atual, mas também não parece uma ótima maneira de fazer isso.

Existe uma maneira ou convenção melhor para alcançar esse tipo de coisa?

Edit: Eu provavelmente deveria ter dito que só pode haver um registro atual, então quando ele é alterado, o registro atual anterior precisa que seu status 'atual' seja removido. O sistema não é complicado o suficiente para precisar se preocupar com simultaneidade ou algo assim. O principal motivo da pergunta é que eu queria fazer as coisas da maneira correta/convencional, se houvesse.

Acredito que a melhor maneira é ter uma tabela de configurações que contenha o ID do registro atual .

database-design design-pattern
  • 2 2 respostas
  • 507 Views

2 respostas

  • Voted
  1. mustaccio
    2013-09-18T04:23:39+08:002013-09-18T04:23:39+08:00

    Eu vi várias abordagens para isso:

    • uma coluna indicadora booleana (se o DBMS escolhido suportar isso) ou caractere (por exemplo, 'Y', 'N');

    • uma coluna de "status" mais geral, contendo valores como 'ACTIVE','HISTORY','EXPIRED' etc.

    • um par de colunas de carimbo de data/hora (por exemplo, START_DT, END_DT), indicando o intervalo de datas em que um determinado registro está (estava) ativo. O registro atual teria o valor END_DT no futuro, como '9999-12-31', o que simplifica a consulta do registro atual:...where current_date between START_DT and END_DT

    • uma tabela de histórico onde todos os registros não atuais seriam movidos assim que se tornassem não atuais. Se você está interessado apenas nos registros atuais, você deve consultar a tabela atual , caso contrário, você deve consultar uma exibição que UNION ALLcontém tabelas atuais e históricas.

    Nos três primeiros casos, você precisaria garantir a consistência por meio de algum tipo de restrição, se seu aplicativo não puder fazer isso.

    Qual abordagem você escolhe depende do que constitui o registro atual em seu caso particular.

    • 1
  2. Best Answer
    RLF
    2013-09-18T04:32:01+08:002013-09-18T04:32:01+08:00

    Supondo que cada login possa ter um 'registro atual', você pode ter uma tabela na forma de:

    CREATE TABLE dbo.CurrentRecords
    (principal_sid varbinary(85),
     current_id int);
    

    No entanto, será necessária a manutenção desta mesa e a limpeza posterior.

    Se o 'registro atual' for baseado no aplicativo cliente, talvez apenas persista na memória e passe o current_id (ou equivalente) para quaisquer consultas, procedimentos e assim por diante que você usar.

    Se você estiver preocupado com a simultaneidade, use os bloqueios apropriados para controlar essa parte da imagem.

    EDIT: Com base na sua atualização, como há um único 'registro atual', concordo que uma tabela de uma linha com o ID do registro atual é suficiente.

    • 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

    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