Jump to content


Photo

Remover Ou Não Os Dados Do Banco ?Como Implementar Na Questão De Prima


  • Faça o login para participar
15 replies to this topic

#1 DifusioN

DifusioN

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Masculino
  • Localidade:Itapevi-SP

Posted 12/01/2011, 00:52

Fala Polvo!

Seguinte, tenho um banco e preciso que sempre exista as informações em algumas tabelas.
Certo, dai veio a ideia de usar um campo do tipo boolean ou byte falando se tal registr será considerado com excluído ou não.
Blz...

Eaew, o que vocês analisam de tabelas assim?

E em relação as chames primárias? Como ficam?

Exemplo
create table cliente(
cpf_cli char(14) primary key,
nome varchar(255),
excluido boolean
);
create table venda(
id_venda integer primary key,
cpf_cli char(14) REFERENCES cliente(cpf_cli),
id_produto.........
);

Ta, e se eu marcar o cliente de cpf "tal1" como excluído? Na hora de gravar o mesmo cliente terei ke verificar se existe tal cpf armazenado na tabela cliente.
Se existir, verifico se está excluído
--Se tiver eu poderei inserir o mesmo cpf.......(mas como? Se a chame primária é o cpf?)
--Se não tiver excluído, aviso que ja existe registro
Se não existir, eu incluo o registro normalmente.


Ta, digamos que eu defina a chave primária da tabela cliente como cpf_cli e "excluido"
Como será feito o relacionamento na tabela venda? Ele irá encontrar + de 2 CPF's iguais presentes na tabela cliente

Eaew galera, o que eu estou pensando errado? Como implementar?
Abraçossss

#2 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 12/01/2011, 01:27

CPF não pode ser a chave primária nesse caso. Tem que usar um id mesmo. Aí resolve o problema do relacionamento e do CPF duplicado. O resto do raciocínio está certo.

#3 offspring

offspring

    O_o

  • Ex-Admins
  • 946 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 13/01/2011, 11:15

Se o CPF tiver como excluído e vc inserir o mesmo, seria bom vc alterar para naõ excluido, no máximo criar uma tabela de log onde vai registrar qaundo aquele CPF tiver sido excluído e depois colocado como ativo novamente (se vc precisa saber disso)

Por questões de LOG ficaria confuso vc ter vários CPF's pq o status mudou pra inativo/ativo.

CPF na minha opinião teria que ser chave primária

#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 13/01/2011, 11:48

Se ele puder reativar o cadastro e usar uma tabela de log como sugerido, é melhor então que o CPF seja só UNIQUE, e não necessariamente a chave primária. Porque CPF geralmente é do tipo varchar, então usar um id INT nos relacionamentos é melhor pro desempenho.

#5 offspring

offspring

    O_o

  • Ex-Admins
  • 946 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 13/01/2011, 12:30

Se ele puder reativar o cadastro e usar uma tabela de log como sugerido, é melhor então que o CPF seja só UNIQUE, e não necessariamente a chave primária. Porque CPF geralmente é do tipo varchar, então usar um id INT nos relacionamentos é melhor pro desempenho.


CPF não precisa ser varchar, o CPF é padronizado a quantidade de campos, se você fizer a limpeza dos pontos e hifen você poderá armazená-lo como INT, aumentando o desempenho, podendo deixá-lo como chave primária mesmo

#6 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 13/01/2011, 12:41

Bom, eu não gosto muito de CPF como INT, mas se ele resolver fazer assim, não tem problema. Usar INT(11) com ZEROFILL deve resolver.

#7 offspring

offspring

    O_o

  • Ex-Admins
  • 946 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 13/01/2011, 12:43

Bom, eu não gosto muito de CPF como INT, mas se ele resolver fazer assim, não tem problema. Usar INT(11) com ZEROFILL deve resolver.


Já teve algum problema em usá-lo como int?

Curiosidade mesmo... :D

#8 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 13/01/2011, 12:58

Agora que você perguntou, lembrei o motivo. O valor máximo para o campo INT UNSIGNED é 4294967295. E o CPF são 11 dígitos. Não cabe. Teria que usar BIGINT. E também gosto de gravar o valor formatado. Só isso.

#9 DifusioN

DifusioN

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Masculino
  • Localidade:Itapevi-SP

Posted 25/01/2011, 21:49

Po galera, valew pela ajuda ai!
Eu tinha esquecido deste tópico, pensei que o sistema do fórum ia me enviar um email avisando de respostas e tal mas acho que não configurei isso!
Então, irei utilizar a questão de:

CPF Existe e "Não Excluído": Aviso que já existe
CPF Existe e "Excluído": Altero o registro para "Não Excluído" e apago tudo relacionado com aquele CPF, adicionando os novos dados.
--Não Existe: Adiciono



Tipo, eu acabo perdendo as informações anteriores.
Vocês possuem alguma sugestão de como não perder os dados?

Na questão de usar um arquivo de "log" achei meio...sei lá xD
Quando se trata de um ID sequencial é mais fácil tratar uma tabela e manter sempre os dados, quando o PK é fixo e não sequencial, fica mais fodz.

Abraços e aguardo respostas =)

#10 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 25/01/2011, 22:11

Por que apagar os dados antigos? Se é o mesmo CPF, é porque se trata da mesma pessoa. Eu manteria os registros.

#11 DifusioN

DifusioN

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Masculino
  • Localidade:Itapevi-SP

Posted 25/01/2011, 22:30

Por que apagar os dados antigos? Se é o mesmo CPF, é porque se trata da mesma pessoa. Eu manteria os registros.

Eu falo em apagar apenas para permitir inserir novamente.

Ou no caso poderia apenas alterar, daria na mesma.....o problema que eu não teria como manter os dados anteriores armazenados, eu estaria escrevendo por cima do que era para ficar sempre armazenado.

#12 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 26/01/2011, 08:29

Se você quer assim, tem que ter uma tabela de log mesmo. Não tem jeito.

#13 DifusioN

DifusioN

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Masculino
  • Localidade:Itapevi-SP

Posted 26/01/2011, 09:00

Se você quer assim, tem que ter uma tabela de log mesmo. Não tem jeito.


Certo, uma tabela de Log como?

Tipo, ao remover eu mando para uma tabela identica onde a chave primária é um ID "serial" e coloco os mesmos dados das colunas?

Me da uma ajuda ai..

Agradeço..falowsssss

#14 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 26/01/2011, 11:01

É isso aí. Falou tudo.

#15 DifusioN

DifusioN

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Masculino
  • Localidade:Itapevi-SP

Posted 26/01/2011, 13:09

Gzuiziii xD
Vai dar trabalho... xD

Mas blzz, o importante é o resultado final =D

Grande abraço! Falows!




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq