Olá amigo tudo bem?
Se bem entendi o seu problema. Você tem alguns recursos disponíveis ao seu favor. Mas por se tratar de um trabalho de faculdade a intenção é o aprendizado. Por isso, para você entender melhor a solução a ser aplicada, você deve entender primeiramente a modelagem de dados o DER (Diagrama Entidade Relacionamento). Isto permite você tangenciar de uma forma visível o relacionamento e as cardinalidades de suas tabelas, principalmente se você tiver uma ferramenta de case de modelagem que lhe permita fazer engenharia reversa, como por exemplo o CA-Erwin, DBDesigner e um muito utilizado para estudos o BRModelo, dentre outros.
A tabela "TIPO_MOVIMENTACAO" é uma tabela do tipo "lookup", ou uma tabela de consulta padronizada para os tipos de movimentação permitidos para efetuar a movimentação em si.
Já a tabela de "MOVIMENTACAO" é a ação a ser executada, onde serão registrados as movimentações do proprietário da conta. Onde este proprietário terá os dados das suas contas cadastrados nas tabelas "CONTA_POUPANCA" e "CONTA_CORRENTE" respectivamente.
A tabela "CONTA_BANCARIA" por sua vez é uma tabela associativa, isto quer dizer que ela tem a função de ligar, conectar, relacionar os registros da conta poupança e corrente e associá-las a movimentação correspondente permitindo que uma conta tenha nenhuma ou muitas movimentações.
Por isso, para você aplicar uma solução, sugiro que você alimente as tabelas com dados fictícios e faça uma query primeiramente para consultar e observar como os dados são apresentados. Exemplo:
Selecionar tudo
SELECT M.* -- DEFINA AQUI OS DADOS RELEVANTES QUE VOCÊ DESEJA VISUALIZAR
FROM CONTA_BANCARIA CB
INNER JOIN CONTA_POUPANCA CP
ON CB.NUM_BANCO = CP.NUM_BANCO
AND CB.NUM_AGENCIA = CP.NUM_AGENCIA
INNER JOIN CONTA_CORRENTE CC
ON CB.NUM_BANCO = CC.NUM_BANCO
AND CB.NUM_AGENCIA = CC.NUM_AGENCIA
LEFT JOIN MOVIMENTACAO M
ON CB.NUM_CONTA = CC.NUM_CONTA
AND CB.NUM_BANCO = CC.NUM_BANCO
AND CB.NUM_AGENCIA = CC.NUM_AGENCIA
INNER JOIN TIPO_MOVIMENTACAO TM
ON M.COD_MOVI = TM.COD_MOVI;
/*
-- NESTE CASO EU ESTOU RETORNANDO APENAS OS REGISTROS DE DEPÓSITO
-- QUE OCORRERAM ENTRE OS DIAS 17 E 19 DO MÊS DE MARÇO
WHERE TM.COD_MOVI = 1
AND TO_CHAR(M.DATA_HORA,'DD/MMM/YYYY') BETWEEN '17/03/2013'
AND '19/03/2013'
*/
Assim você conseguirá visualizar todas as contas que tiveram ou não movimentação uma vez que a cardinalidade da tabela "MOVIMENTACAO" é (0:N), ou seja, não existe a obrigatoriedade de haver um registro de movimentação para determinada conta, apesar de ser muito improvável. Caso você queira ver apenas as contas que tiveram movimentação troque o "LEFT" por "INNER JOIN", dessa forma só serão retornados os dados que possuirem registros correspondentes em comum entre as tabelas "CONTA_BANCARIA" X "MOVIMENTACAO".
Obviamente conforme for crescendo a quantidade de registros, você deve determinar filtros para restringir o resultado, exemplo, filtrar o resultado por tipo de registro, período, determinada conta específica (se for o caso), além de avaliar o uso de índices ou não (exemplo comentado).
Agora, como você tem que fazer uma atualização do saldo, esta atualização ocorrerá de acordo com o tipo de movimentação, conforme segue:
DEPOSITO -> somatório (adiciona um valor ao saldo). Você pode especificar ou não para qual conta que vai (corrente ou poupança);
INVESTIMENTO -> contabiliza o juros de determinada aplicação no período (para efeito de teste pode usar o rendimento médio da poupança de aproximadamente 0.49/a.m). Isto também implicará em um acréscimo no saldo, isto também sem considerar que a aplicação não tenha nenhuma taxa, encargos, emolumentos, que é o caso da poupança para aplicações até R$50.000,00. Geralmente é utilizada uma conta específica para investimentos, mas se resolver considerar a poupança como investimento, o saldo a ser alterado será da tabela "CONTA_POUPANCA";
As demais, são contas de subtração, ou seja, você terá que tirar, descontar do saldo final. Que são os casos do: SAQUE, TRANSFERENCIA, PAGAMENTO;
Estas transações tem regras para acontecer, mas não deve estar dentro do contexto deste trabalho. Assim sendo, você terá que simular uma transação.
Até aqui foi relativamente simples. Para este caso, como solução você pode usar uma "TRIGGER" (que eu acredito que seja o que o professor quer que vocês utilizem). Esta "TRIGGER" você deve colocar na tabela "MOVIMENTACAO" para que ela monitore as ocorrências de registro e dispare a ação correspondente com a operação realizada de acordo com os critérios citados (intervalo de tempo) alterando o valor do saldo, exemplo:
"UPDATE":
CONTA_CORRENTE -> SALDO_CC;
CONTA_POUPANCA -> SALDO_POUP;
Partindo do pressuposto que o professor já tenha passado para vocês o conceito do uso de triggers. Para não ficar muito "fácil" e dar um pouquinho de "graça", agora sugiro que você dê uma estudada nos seguintes links, caso tenha alguma dúvida, poste aqui novamente.
Documentação oficial da Oracle:
http://docs.oracle.com/cd/B19306_01/ser ... s_7004.htm
Techonthenet:
http://www.techonthenet.com/oracle/triggers/
Psoug
http://psoug.org/definition/TRIGGER.htm
Obs.: Eu não testei os códigos do exemplo, por isso, por favor, considere o fato de poder haver algum equivoco de sintaxe;
Espero ter ajudado.
Abç.,