Por gentileza, gostaria de trocar ideias sobre a estrutura de banco de dados de um sistema de operações. Tenho cinco tipos de operações com campos diferentes e é inviável deixar tudo em uma mesma tabela. ( mais de 40 campos) Então penso que devo unir os poucos campos comuns e criar 5 tabelas para incluir as diferenças. O que me deixa em dúvida são duas questões: há campos que cabem em duas ou mais situações, se eu criar uma tabela de relacionamento para cada uma delas vou também ter dezenas de tabelas que particularmente acho ruim. Tenho que tomar cuidado na gravação porque não pode gravar parte dos dados.
Tabela dados comuns ( id_operacao,empresa,valor1,status,obs,origem,area,ativo)
Tb_situação 1 ( id_operacao,valor1,valor2,valor4,codigo3,codigo5,data1,data2,data3)
Tb_situacao 2 ( id_operacao,codigo1,codigo2,valor1,valor4,valor5,data2,data5,texto1,texto2)
tb situacao 3 ( id_operacao,codigo5,data1,texto1,texto2)
Tb situacao 4 ( id_operacao,valor10,codigo1,data2,data3,texto1)
tb situacao 5 ( id_operacao,valor2,codigo3,data1,data3,data5,data9,texto2)
Se eu quiser somar/quantificar as operacoes em um periodo vou precisar fazer union das tabela:
SELECT * FROM Tb_dados_comuns LEFT JOIN tb_dados_comuns.id_operacao=tb_situacao1.id_operacao UNION SELECT * FROM Tb_dados_comuns LEFT JOIN tb_dados_comuns.id_operacao=tb_situacao2.id_operacao ......
E quando for gravar: ( pode acontecer de gravar endereco e não gravar o cliente no código abaixo? public void adicionarCliente(Cliente cliente) { System.out.println("ClienteDAO executando função adicionarCliente"); String sql1 = "INSERT INTO endereco (cidade,rua) VALUES (?,?)"; System.out.println(sql1);
try {
stmt = conexao.prepareStatement(sql1);
stmt.setString(1, cliente.endereco.getRua());
stmt.setString(2, cliente.endereco.getCidade());
stmt.executeUpdate(sql1);
} catch (SQLException u) {
throw new RuntimeException(u);
}
String sql2 = "INSERT INTO clientes (nome,rg,cpf,telefone,Endereco_codigo) VALUES (?,?,?,?,LAST_INSERT_ID())";
System.out.println(sql2);
try {
stmt = conexao.prepareStatement(sql2);
stmt.setString(1, cliente.getNome());
stmt.setString(2, cliente.getRg());
stmt.setString(3, cliente.getCpf());
stmt.setString(4, cliente.getTelefone());
stmt.executeUpdate(sql2);
stmt.close();
conexao.close();
System.out.println("Conexão 2 adicionarCliente fechada!");
} catch (SQLException u) {
throw new RuntimeException(u);
}
}
}
Obrigada a quem puder me ajudar.