Bom dia meus caros amigos, cá estou eu novamente com uma pequena dúvida.
Estou desenvolvendo um sistema para um Cursinho Particular, na interface de perfil de aluno vou exibir as disciplinas escolhidas por ele e na frente em uma jTable exibirei as faltas conforme os meses do ano, segue a imagem abaixo da interface e do banco de dados para representar suas respectivas faltas …
O que acontece é que estou achando esse BD poluído, carregado demais, gostaria de saber de vocês se existe alguma outra forma de trabalhar com esses dados para serem exibidos na tabela separadamente sem trabalhar com várias colunas no banco, ou não existe outro caminho?
isso é uma tarefa de Normalização de Dados. Em geral se vê isso em disciplinas de bancos de dados. Existem algumas formas ( 3 ou 4 eu acho ) e elas são bem teoricas e genericas pra vc usar em qualquer situação.
vc pode ter apenas uma tabela Faltas, que contem um Mes ( pode ser um numero, uma enumeração, etc, não precisa ser um id de uma tabela MES necessariamente ) e o total de faltas.
pra mostrar isso na tela vc precisa fazer um loop esperto
eu não entendi se f_fev e f_mar são tabelas ou campos, se são campos, vc pode ter criar uma tabela de faltas, onde cada linha vai representar um aluno, em uma disciplina, em um dado mes ( unique constraint ).
em alguns casos precisa-se desnomalizar os dados ( performance, disponibilidade, etc ) mas são casos mais especiais. por exemplo, se vc tem uma tabela Faltas, o normal é que ao inserir a tabela fique bloqueada ( lock ) então vc tem um gargalo para inserir dados. se vc lê MUITO mais do que insere, em geral é ok, mas se vc insere MUITO, existem tecnicas para evitar isso. se o seu sistema é bem simples, não se preocupe com isso ( mas saiba que existe - ou vc acha que o google tem uma tabela apenas para todos os usuarios? )
Cada falta está associada a um único aluno, certo?
Cada aluno pode ter 0 ou várias faltas, certo? Logo, é uma simples relação 1 : N.
Assim sendo, você pode criar uma tabela chamada faltas com as colunas id, id_aluno, ano, mes e dia (ou uma coluna do tipo DATE chamada DATA_FALTA, mas isso tornaria a coisa mais complicada).
Cada registro nesta tabela indica um dia em que o aluno faltou.
Aí para buscar as faltas, basta fazer a contagem de faltas para aquele aluno no dia, mês e ano:
SELECT a.id, a.nome, count(f.*) FROM Aluno a INNER JOIN Faltas f ON a.id = f.id_aluno WHERE ano = ? AND mes = ? AND dia = ?;
Porém, você pode melhorar isso, colocando uma coluna para referenciar a disciplina na qual o aluno faltou (vamos que ele tenha ido na segunda aula?). Então, você consegue, até mesmo, contar faltas por disciplina.