Jump to content
eduardoPires

Modelagem de dados para modelo relacional - Duvidas Trabalho

Recommended Posts

Pessoal, bom dia,

Tenho que entregar um trabalho com alguns requisitos de modelagem de dados e passando os requisitos da modelagem para o modelo relacional.

os 

 

a) Para a instituição financeira é muito importante manter um cadastro de todas as contas que foram criadas na instituição.

b) Para cada conta criada é importante saber se a conta está ativa ou já foi desativada (ou seja, o cliente encerrou a conta). Isso ajudará a filtrar as pesquisas.

c) As contas da instituição podem pertencer às seguintes categorias: corrente, poupança, salário. Há contas que podem ser corrente e poupança ao mesmo tempo. d) Para as contas da categoria corrente, as seguintes informações devem ser armazenadas: nro da conta, saldo atual, data de abertura, data da última movimentação, limite do cheque especial e valor da taxa administrativa.

e) Para as contas da categoria poupança as seguintes informações devem ser armazenadas: nro da conta, saldo atual, data de abertura, data da última movimentação, rendimento do mês atual.

f) Para as contas da categoria salário as seguintes informações devem ser armazenadas: nro da conta, saldo atual, data de abertura, data da última movimentação, limite para saque e limite para transferência.

g) No momento de criação da conta é importante associar uma senha a ela. Essa senha será solicitada antes da execução de qualquer transação. h) Os clientes da instituição devem ser registrados com as seguintes informações: CPF, nome, endereço completo, estado civil, escolaridade, data de nascimento.

i) É importante também saber em qual agência o cliente foi cadastrado.

j) As agências bancárias devem ser previamente cadastras, sendo que cada agência possui um número, um nome fictício e um endereço, sendo que os campos cidade, estado e bairro são campos frequentemente usados para se realizar buscas por agências.

k) Cada agência possui um gerente, que é um funcionário nomeado para tal tarefa. Cada gerente pode gerenciar apenas uma agência. Entretanto, o gerente de uma agência pode mudar e é muito importante armazenar quais foram os gerentes de uma dada agência com informações da sua data de entrada e saída da gerência.

l) Os gerentes são funcionários da empresa que precisam ter armazenados alguns atributos específicos: data de ingresso na carreira de gerente, agência que ele gerencia e se possui curso de formação

m) Para os funcionários da agência é preciso armazenar as seguintes informações: CPF, nome completo, nro da carteira de trabalho, RG, data de nascimento, endereço, sexo, estado civil, cargo na empresa (existem diferentes cargos além do gerente) e salário.

n) Toda conta bancária deve ter no mínimo um cliente associado. No entanto, uma conta pode ser conjunta. Nesse caso, é possível ter dois clientes associados à mesma conta. Um mesmo cliente pode ter diferentes contas bancárias.

o) Cada conta bancária tem um gerente responsável. O gerente da conta bancária é um funcionário, mas não necessariamente é o mesmo gerente da agência na qual a conta foi criada. Um gerente de conta pode gerenciar várias contas ao mesmo tempo.

p) Toda conta bancária está ligada a uma agência bancária, ou seja, a agência na qual ela foi criada, sendo que o número da conta bancária é único por agência.

q) É importante destacar que o gerente de conta e o gerente de agência são papéis distintos, embora um gerente de agência possa ser também um gerente de conta. Para os gerentes de conta é importante saber quais contas ele gerencia.

r) Uma vez que um cliente tenha uma conta bancária ele pode efetuar diferentes movimentações financeiras, conhecidas como transações bancárias. Cada transação bancária está relacionada a uma conta bancária. Além disso, é importante armazenar a data em que a transação foi realizada, o valor da transação e o canal onde foi feito a transação (internet banking, caixa eletrônico ou caixa físico). Toda vez que uma transação é realizada o saldo do cliente deve ser atualizado.

s) Cada transação possui um tipo. Os tipos de transação atualmente disponíveis são: saque, transferência, depósito e pagamento. Em cada uma dessas transações é importante armazenar apenas o valor da transação. Com o objetivo de simplificar o trabalho não vamos armazenar os atributos específicos de cada tipo de transação, embora esse seja um requisito interessante em problemas reais.

t) É importante observar que os funcionários da instituição também podem ter contas bancárias na instituição.

u) Ainda que um cliente encerre uma conta no banco, é importante manter o registro da conta na base de dados, mas com um indicativo de que ela não está ativa.

v) Cada conta bancária está associada um ou mais cartões de crédito. No entanto o cartão de crédito só pertence a uma conta

w) Um cartão de crédito possui um número identificador, uma bandeira (visa, mastercard, etc.), um código de segurança e uma data de vencimento.

x) Toda vez que um cartão de crédito é criado ele encontra-se bloqueado, sendo necessário que o cliente o desbloqueie antes de usá-lo.

y) A qualquer momento um cartão pode ser desabilitado z) Toda vez que uma transação bancária é realizada, é importante saber qual o cartão usado para executar a transação

 

A modelagem disso tudo esta em anexo.

Os codigos para criação do banco ficou da seguinte forma: 

create table pessoa(cpf varchar(14), nome varchar(50), DataNascimento date, Rua varchar(30), numero int, cep varchar(10), bairro varchar(30), cidade varchar(30), UF char(2), EstadoCivil varchar(15), primary key (cpf));

 

create table Cliente(cpf varchar(14), escolaridade varchar(20), primary key (cpf), foreign key (cpf) references pessoa(cpf));

 

create table Funcionario(cpf varchar(14), RG varchar(13), CarteiraDeTrabalho varchar(14), Sexo char(1), cargo varchar(20), primary key (cpf), foreign key (cpf) references pessoa(cpf));

 

create table GerenteAgencia(cpf varchar(14), cursoFormacaoEmGerencia char(1), dataIngresso date, primary key (cpf), foreign key (cpf) references funcionario(cpf));

 

create table GerenteConta(cpf varchar(14), primary key (cpf), foreign key (cpf) references Funcionario(cpf));

 

create table Gerencia(cpf varchar(14), dataInicio date, dataFim date, primary key (cpf), foreign key (cpf) references GerenteAgencia(cpf));

 

create table Agencia(numAgencia int, nome varchar(25), Rua varchar(30), numero int, cep varchar(10), bairro varchar(30), cidade varchar(30), UF char(2), GerenteAgencia varchar(14), primary key (numAgencia), foreign key(GerenteAgencia) references gerencia(cpf));

 

create table Trabalha(cpf varchar(14), numAgencia int, dataInicio date, dataFim date, primary key(cpf,numAgencia), foreign key (cpf) references funcionario(cpf), foreign key (numAgencia) references agencia(numAgencia));

 

create table conta(numConta int, Cliente varchar(14), numAgencia int, GerenteConta varchar(14), Status varchar(12), senha int[5] not null, dataUltimaMovi date, dataAbertura date, saldoAtual real, primary key (numConta, numAgencia), foreign key (cliente) references cliente(cpf), foreign key (GerenteConta) references gerenteconta(cpf), foreign key (numAgencia) references agencia(numAgencia));

 

create table CartaoConta(numCartao int[16], numConta int, numAgencia int, status varchar(12), bandeira varchar(14), dataVenc date, codSeguranca int[3], primary key (numCartao), foreign key (numConta, numAgencia) references conta(numConta, numAgencia));

 

create table transacoes(idTrans int, numCartao int[16], horaTrans time, MeioDaTransacao varchar(10), tipo varchar(14), valor decimal(15,2), dataTrans date, primary key (idTrans), foreign key (numCartao) references cartaoconta(numCartao));

 

create table contapoupanca(numConta int, numAgencia int, RendimentoMesAtual decimal(15,2), primary key (numConta,numAgencia), foreign key (numConta,numAgencia) references conta(numConta,numAgencia));

 

create table contacorrente(numConta int, numAgencia int, limiteCredEspec decimal(15,2), taxaAdm decimal(15,2), primary key (numConta,numAgencia), foreign key (numConta,numAgencia) references conta(numConta,numAgencia));

 

create table contaSalario(numConta int, numAgencia int, limiteTransf decimal(15,2), limSaque decimal(15,2), primary key (numConta,numAgencia), foreign key (numConta,numAgencia) references conta(numConta,numAgencia));
 

Há alguma coisa errada ou que pode ser melhorada pessoal?

Estou desesperado com isso...
imageproxy.php?img=&key=28afbb360db5c1b9imageproxy.php?img=&key=28afbb360db5c1b9

a.JPG

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By marsolim
      Oi gente tudo bem? to com uma dúvida aqui. acho que isso vai soar meio idiota mas sabe o checkbox que a gente coloca pro usuário fazer cadastro por exemplo com o "Confirmo que li e estou de acordo blablabla". a gente deve armazenar esse 'aceito' no banco de dados ou basta ele estar na página e ser validado na hora do cadastro?
       
      bem e paz pra todos
    • By eiwes
      Fala, galera
       
      Tenho duas Tabelas:
      1 - dados
      2 - respostas dados (usuários vão respondendo e é gravado aqui)
       
      Na verdade, não precisa ser nada pronto, mas sim um início, pois não consigo imaginar em nada que consiga dar certo.
       
      As respostas possuem níveis (como assim?), eles vão de 1 até 5. Na qual, 1 é Completamente Insatisfeito e 5 Completamente Satisfeito.
       
      Ao responder, o usuário “criteriza” aquela resposda de 1 até 5.
       
      Agora entra a inteligência que eu não consigo pensar em algo atingível.
       
      Caso ele aponte como 1: o usuário responderá +3 perguntas e aquela primeira voltaria na sequência.
       
      caso aponte 2: responderia +5 e voltaria aquela na sequência.
       
      caso aponte 3: responderia +7 e voltaria aquela na sequência.
       
      [...] e assim sucessivamente.
       
      Alguém teria alguma ideia de como daria pra filtrar esses dados e exibir com esses critérios inteligentes? Pois utilizar ORDER BY com CASE WHEN não daria, né?! Já utilizo o ORDER BY para colocar as respostas em ordem “cronológica”.
       
      Por favor, solicito ajuda para desencalhar esse projeto.
       
      Desde já, agradeço quaisquer comentários.
    • By Alan Arnese
      Bom dia pessoal
       
      Estou passando por um problema um tanto grave, eu tenho um hd que contem arquivos muito importantes, como planilhas de comercialização,notas fiscais etc e ele na primeira vez que o abri ele apareceu sem nenhum arquivo dentro, tudo oculto ou corrompido
       
      Frente a isso eu passei o software HDD Regenarator para ver se existiam bad blocks mas nenhum foi localizado, frente a isso eu passei o programa mini tool power recovery para scanear estes arquivos e recupera-los, ele achou a arvore de arquivos só que eu criei uma pasta dentro do mesmo HD para salvar os arquivos recuperados, quando foram salvos vieram todos corrompidos, com isso tenho riscos de ter sido corrompidos os arquivos raizes? Pois agora na minha cabeça está passando que pela primeira tentativa de recovery mesmo em pastas diferentes ele tenha salvado os arquivos corrompidos por cima dos arquivos raizes, e esse é meu medo, essa informação pode proceder?
       
      Desde já agradeço e um bom dia a todos!
       
       
       
    • By andrelimaverde
      Pessoal desde já agradeço a todos, e vamos lá.
      Primeiro esclareço que meu conhecimento em PHP é básico e em MYSQL praticamente nulo...
      Meu objetivo é: Salvar dados do formulário (3 páginas) no mesmo ID (mesma linha) do banco de dados.
      Tenho:
      <!-- PÁGINA INDEX.PHP --> <?php session_start(); ?> <html> <form method="POST" action="1.php"> <input type="text" name="namenome" placeholder="Nome"> <input type="text" name="namesobrenome" placeholder="Sobrenome"> <input type="radio" name="radio" value="Masculino"> <input type="radio" name="radio" value="Feminino"> <input type="submit" name="namebtn" value="Próximo Passo"> </form> </html> E assim são as outras duas páginas, exemplificando, muito simples...
      No Index o FORM tem action="1.php" 
      Na Pagina2 o FORM tem action="2.php" e assim sucessivamente.
       
      1.php funcionando perfeitamente:
      <?php session_start(); include_once 'conexao.php'; //conexao.php somente faz a conexão com banco de dados, define as credenciais e atrubi a variável $conn //$conn = new PDO('mysql:host=' . HOST . ';dbname=' . DBNAME . ';', USER, PASS); $btn = filter_input(INPUT_POST, 'namebtn', FILTER_SANITIZE_STRING); if($btn){ //Recebe os dados do form $nom = filter_input(INPUT_POST, 'namenome', FILTER_SANITIZE_STRING); $sob = filter_input(INPUT_POST, 'namesobrenome', FILTER_SANITIZE_STRING); $rad = filter_input(INPUT_POST, 'radio', FILTER_SANITIZE_STRING); //Insere os dados no banco $get_data = "INSERT INTO info_tabela (nome, sobrenome, sexo) VALUES (:namenome, :namesobrenome, :radio)"; $insert_data = $conn->prepare($get_data); $insert_data->bindParam(':namenome', $nom); $insert_data->bindParam(':namesobrenome', $sob); $insert_data->bindParam(':radio', $rad); if($insert_data->execute()){ header("Location:pagina2.php"); //Se enviar corretamente redireciona para segunda página }else{ $_SESSION['msg'] = "<p style='color:tomato;background:#fff;'>Não foi possível enviar suas informações, verifique e tente novamente.</p>"; header("Location:index.php"); //Se não apresenta o erro } }else{ $_SESSION['msg'] = "<p style='color:tomato;'>Não foi possível enviar suas informações, verifique e tente novamente.</p>"; header("Location:index.php"); } Até ai tudo bem, insere corretamente os dados nas respectivas colunas da tabela ID=1, NOME= 'nome', SOBRENOME= 'sobrenome', SEXO= 'sexo'.
      No Banco de Dados ainda temos as colunas a serem preenchidas no mesmo ID(mesma linha) --> CIDADE= ' ', ENDEREÇO= ' ', CEP= ' ', 
      Que referem-se à pagina2.php:
      <!-- PÁGINA PAGINA2.PHP --> <?php session_start(); ?> <html> <form method="POST" action="2.php"> <!-- ACTION 2.PHP RESPECTIVAMENTE --> <input type="text" name="namecidade" placeholder="Cidade"> <input type="text" name="nameendereco" placeholder="Endereço"> <input type="tex" name="namecep" placeholder="Cep"> <input type="submit" name="namebtn" value="Próximo Passo"> </form> </html> O problema, é que ao enviar o formulário com action="2.php" cujo arquivo possui o mesmo código que o "1.php" mudando somente os dados recebidos,
      No Banco de Dados é criado um novo ID(2) ou seja, uma nova linha, com os dados atuais nas colunas (cidade, endereço, cep) preenchidos, e as colunas anteriores (nome, sobrenome, sexo) vazias...
       
      Pessoal esta é a minha dúvida, como resolver, salvar todos os dados num mesmo id, mesma linha. O código do arquivo 2.php é o mesmo pois não faço ideia de como implementar isso, como em soluções anteriores tais dados costumava enviar com PhpMailer para e-mail então não entendo de MYSQL.
       
      Código simplificado e resumido ao máximo...
      Obrigado.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.