Banco de Dados desativar dado

PostgreSQL

22/03/2015

Boa noite,
Estou Desenvolvendo um sistema de Controle escolar e estou precisando de ajuda no banco de dados estou precisando desativar um dado do banco para que futuramente caso precise reativar tal dado se alguém puder me ajudar agradeço.
Thiego Jesus

Thiego Jesus

Curtidas 0

Respostas

Alan Mario

Alan Mario

22/03/2015

Bom dia Thiego, me desculpe mas eu não entendi a sua duvida, como assim desativar um dado? não selecionar, não apagar, não modificar...?
GOSTEI 0
Thiego Jesus

Thiego Jesus

22/03/2015

Nao apagar!
tipo ele permanece no banco mas nao parece no sistema. mas ele tem que aparecer de volta quando reativar
GOSTEI 0
Marcos P

Marcos P

22/03/2015

Sua resposta está na sua própria frase... "ele permanece no banco mas nao parece no sistema. mas ele tem que aparecer de volta quando reativar ".

Para as tabelas que precisam desse recurso, crie uma coluna chamada "Status" ( boolean ).

Se status = true, o resgistro está ativo e aparece na aplicação.

Se status = false, o registro está está inativo.

Do lado da aplicação você deve tratar a ativação / inativação naquela tabela e todas as pesquisas para desprezar os registros inativos.

Ou seja, todo o tratamento ocorre na aplicação e não no BD !

Resolve ?
GOSTEI 0
Thiago Santana

Thiago Santana

22/03/2015

Thiego, você pode criar um campo do tipo booleano para as suas tabelas
com o valor default true e no sistema você filtra apenas os registros onde esse campo estejam com o valor true!
GOSTEI 0
Alan Mario

Alan Mario

22/03/2015

Ahhh agora entendi, só não sei como se faz, mas blz.
GOSTEI 0
Marilia Silva

Marilia Silva

22/03/2015

Marcos P, se não pedir demais, pode postar como posso fazer uma tabela com essas caracteristicas, por favor.
GOSTEI 0
Thiago Santana

Thiago Santana

22/03/2015

Dependendo do BD pode mudar um pouquinho a instrução!



CREATE TABLE CLIENTES
( ID_CLIENTE INT, NOME VARCHAR(255), ATIVO INT
);



O campo ativo você poderá utilizar 0 = TRUE, 1 = FALSE
GOSTEI 0
Marcos P

Marcos P

22/03/2015

Marilia,

É algo similar ao que o Thiago colocou no post acima...
GOSTEI 0
Randrade

Randrade

22/03/2015

Dependendo do BD pode mudar um pouquinho a instrução!



CREATE TABLE CLIENTES
( ID_CLIENTE INT, NOME VARCHAR(255), ATIVO INT
);



O campo ativo você poderá utilizar 0 = TRUE, 1 = FALSE


Apenas completando a resposta.

Após isso, basta colocar esta condição so select.

SELECT * FROM CLIENTES WHERE ATIVO = TRUE
                                 OU
SELECT * FROM CLIENTES WHERE ATIVO = 0

Neste caso, a consulta retornará somente os clientes ativos.
GOSTEI 0
Marcos P

Marcos P

22/03/2015

Uma outra abordagem, que pode ser analisada, é mover os registros "deletados" para uma tabela auxiliar com a mesma estrutura da tabela original.

Isso tende a ter um impacto menor na aplicação pois as queries não precisam ser alteradas, assim como a performance seria otimizada.

O lado negativo é que o banco de dados tende a aumentar consideravelmente de tamanho...

Existem várias abordagens para isso, veja por exemplo : Soft Deletion
GOSTEI 0
Thiago Santana

Thiago Santana

22/03/2015

Uma outra abordagem, que pode ser analisada, é mover os registros "deletados" para uma tabela auxiliar com a mesma estrutura da tabela original.

Isso tende a ter um impacto menor na aplicação pois as queries não precisam ser alteradas, assim como a performance seria otimizada.

O lado negativo é que o banco de dados tende a aumentar consideravelmente de tamanho...

Existem várias abordagens para isso, veja por exemplo : Soft Deletion


isso ai Marcos!
É bom analisar os impactos, mas o caminho é exatamente este!
Randrade completou legal meu post rsrs
GOSTEI 0
Marilia Silva

Marilia Silva

22/03/2015

Obrigada pessoal, mas o tipo de dado é INT mesmo?
GOSTEI 0
Jothaz

Jothaz

22/03/2015

Obrigada pessoal, mas o tipo de dado é INT mesmo?


Fica a gosto do freguês e de quais tipos o banco de dados dispõe, dai define-se as regras de como os registros serão tratados.

Por exemplo:

INT -> 0 - Ativo e 1 - Inativo

CHAR -> 'A' - Ativo e 'I' - Inativo

BIT -> Ativo (True) 1 e Inativo (false) 0

Particularmente acho mais performático INT ou BIT.

É sempre uma boa prática efetuar a exclusão lógica ao invés da exclusão física pois assim mantem-se a coesão nos dados históricos.

Sem falar que alguns sistemas, folha de pagamentos, deve-se manter o registros dos funcionários demitidos por exemplo.

Com será feito, através de flag´s ou de tabelas como o Marcos P sugeriu é uma questão a ser analisada de acordo com cada cenário.
GOSTEI 0
Marilia Silva

Marilia Silva

22/03/2015

Obrigada Jothaz pelas informações extras e importantes.
GOSTEI 0
Thiago Santana

Thiago Santana

22/03/2015

Obrigada pessoal, mas o tipo de dado é INT mesmo?


Fica a gosto do freguês e de quais tipos o banco de dados dispõe, dai define-se as regras de como os registros serão tratados.

Por exemplo:

INT -> 0 - Ativo e 1 - Inativo

CHAR -> ''A'' - Ativo e ''I'' - Inativo

BIT -> Ativo (True) 1 e Inativo (false) 0

Particularmente acho mais performático INT ou BIT.

É sempre uma boa prática efetuar a exclusão lógica ao invés da exclusão física pois assim mantem-se a coesão nos dados históricos.

Sem falar que alguns sistemas, folha de pagamentos, deve-se manter o registros dos funcionários demitidos por exemplo.

Com será feito, através de flag´s ou de tabelas como o Marcos P sugeriu é uma questão a ser analisada de acordo com cada cenário.


Exatamente isso Jothaz!
Fica ao seu critério Marilia...
GOSTEI 0
POSTAR