Não sei se esse é o melhor canal para minha dúvida, mas…
Eu tenho experiencia em um sistema ERP, e nessa experiencia, como em qualquer outra, vi vantagens e desvantagens, coisas boas e coisas ruins, e por aí vai, mas indo direto ao ponto.
Muitas tabelas do banco de dados tinha o campo STATUS varchar, ou char, etc…Ex: a tabela de pedido de venda, pedido de compra, ordem de serviço, produto, etc. Esses status eram fixados em enuns ou parametrizados, isso sempre gerava uns transtornos quando entrava um status novo, em relatórios, e alem disso muitos status eram comuns entre as tabelas, por exemplo, status A=Aberto, E=Encerrado, tinha tanto em pedido de compra como em pedido de venda e em ordem de serviço.
Eu imaginei ter uma tabela generica de status e relacionar essa tabela com as outras no meu banco, eu comunizava os status e deixava isso dinâmico.
Não sei que consegui passar o problema que eu tive e a minha idéia, se sim, eu gostaria da opinião de voces.
Eu particularmente gosto de usar NUMBER, tendo a tabelinha la com a descricao dos Status, e constraint bloqueando entradas invalidas.
Afinal nem todo mundo deveria abrir seu fonte Java pra saber o que significa o status “E”. Erro? Excluido? “Executando”?
Para STATUS geralmente eu uso SMALLINT no banco e Integer no Java, já no fonte eu coloco uma classe com constantes que costumo utilizar no sistema (isso qdo tenho muitas) e pego os valores dos status diretamente dessas constantes. Ex:
public static final int STATUS_ATIVO = 1;
public static final int STATUS_INATIVO = 0;
public static final int STATUS_EXCLUIDO = 999;
Então, essa forma também existia no sistema (era mais ou menos assim), mas se há um status novo por exemplo, como isso fica hard code, precisa alterar no código.
A forma utilizada pelo fabim é a mesma que eu to pensando em fazer, por isso estou pedindo opiniões.
Eu acho que dessa forma (a do fabim) fica mais dinâmico e evita erros.