Excluir registro ou ocultar

PostgreSQL

01/07/2014

Boa tarde pessoal

Estou com uma dúvida de análise de um sistema que estamos desenvolvendo na empresa onde trabalho. Estamos criando um portal de notícias que provavelmente terá dezenas de acessos diários e um grande volume de dados.

Conversando com alguns amigos administradores de banco de dados, sobre boas práticas de modelagem de banco de dados, um deles me disse que "não é correto excluir registros de uma aplicação, devido a questões de segurança, integridade e histórico das informações", pesquisei em alguns fóruns a respeito do assunto e vi um post confirmando essa afirmação.

A minha dúvida é: No meu caso onde terei um fluxo de dados muito grande e um número de acesso alto, é viável ocultar um registro no banco de dados, usando por exemplo uma coluna "_excluido" e um valor booleano "true" para manter o registro ou seria melhor excluir "fisicamente" o registro do bando de dados? o Quanto isso implicaria na performance das consultas ? ocultar o registro é realmente uma boa prática ou depende do caso ?


Obrigado, espero que alguém possa me ajudar :)
Leandro Silva

Leandro Silva

Curtidas 0

Melhor post

Itamar Souza

Itamar Souza

01/07/2014

Boa tarde
Em relação à integridade, se o banco estiver bem feito o próprio banco vai impedir a exclusão de um registro se o mesmo estiver com outra referência, quanto ocultar o registro nas suas consultas você vai considera apenas o que não estiver com o status de oculto, portanto não vai mudar muita coisa.
GOSTEI 1

Mais Respostas

Edinei Steffen

Edinei Steffen

01/07/2014

Caro, Leandro.

Não existe a possibilidade ocultar um registro do banco de dado, o banco de dados é o ponto inicial dos dados. Vc pode utilizar flags para ocultar os registro da tua aplicação, otimizando as SQL que buscam estas informações do Banco de Dados.

Ai isso sim implica diretamente nas performances das SQLs, resgatar blocos de registros é muito mais rápido do que buscar sempre todos os registros.

Outro detalhe, quanto mais vc conseguir explorar o uso de SQLs bem elaborados mais rápido vai ficar a tua aplicação.

Outra opção que diz respeito a performance em banco de dados é a utilização de índices para os campos mais acessados das tabelas, geralmente não é notada diference com 100 ou 1000 registros, mas quando o banco começa a ter mais de 10.000 ou 1.000.000 ai sim é bem perceptível.

Cara, poderia elencar diversos outros fatos para garantir performance em Banco de Dados, mas vou colocar algumas palavras chaves aqui e se vc usar algo relacionado com elas vc vai saber que vai impactar em performance (TRIGGERS, FUNCTION, VIEWS, PROCEDURES, INNER JOIN, INDEX... etc). Quando mais estratificado vc conseguir resgatar os registros do Banco de Dados, mais rápido vai ser a sua aplicação, pois ela vai precisar processar menos, isso é quase um conceito de processamento distribuído...

Aproveite esta faze de análise do banco de dados que ela é muito importante e pode ajudar muito a tua aplicação.

Bom trabalho
GOSTEI 1
Leandro Silva

Leandro Silva

01/07/2014

Obrigado pela ajuda

A minha ideia era realmente criar uma flag na tabela de notícias da minha base de dados, para mante-lo "oculto" de forma que seja possível recupera-lo facilmente em caso de um usuário excluir o registro acidentalmente, porém esses dados vão gerar um volume morto de informação que vai aumentar consideravelmente o tamanho da base de dados, por isso fiquei na dúvida de manter ou não esses dados.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

01/07/2014

Bom, o o próprio PostgreSQL não "exclui" de fato os dados, ele os marca como "habilitados para serem excluídos" posteriormente. O PostgreSQL é um SGBD muito poderoso e se você acha que vai precisar desses dados futuramente, é melhor apenas marcar com um flag ao invés de excluir. Um bom tunning no banco de dados e você não terá dor de cabeças com esses registros.
GOSTEI 1
Ronaldo Lanhellas

Ronaldo Lanhellas

01/07/2014

Uma dica: Se você quer tentar "ocultar" esses dados da aplicação você poderia tentar o seguinte:

1 - criar uma tabela auxiliar (com a mesma estrutura da tabela original, vamos chamar de tb_backup).
2- copiar para lá todas os dados que você iria excluir.
3 - Excluir os dados antigos da tabela original
GOSTEI 1
POSTAR