Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

josewilson

Campo Unique para cada Empresa

Recommended Posts

Galera minha dúvida é a seguinte:

 

Existe a tabela Cliente e a tabela Empresa

Cada Cliente pertence a uma Empresa

 

A tabela Cliente tem o campo cpfcnpj_cli

O Cliente pode ser de N Empresas

 

A ideia é fazer com que só possa cadastrar um CPF, CNPJ igual por Empresa...

 

Ex:

 

Pode acontecer: dois Clientes com CPF = 111.111.111-11 cada um em uma empresa diferente

Não pode acontecer: dois Clientes com CPF = 111.111.111-11 na mesma empresa

 

Existe uma maneira de fazer uma constraint dessas no MySQL, alguma coisa diferente ou teria que juntar com o PHP pra fazer o cadastro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok vou dar uma olhada..

 

Cara, eu consegui fazer essa regra funcionar se minha tabela nao tivesse o campo cod_cli e se o campo cpfcnpj_cli fosse o campo PK

 

Minha tabela Cliente tem que ficar assim olha:

 

cod_cli | cpfcnpj_cli | cod_emp |

1 | 111.111.111-11 | 1 |

2 | 111.111.111-11 | 2 |

3 | 222.222.222-22 | 2 |

4 | 222.222.222-22 | 1 |

 

e aceitar o cpfcnpj_cli igual somente se for de cod_emp diferentes

 

Consegui!!

 

Apliquei o mesmo esquema na constraint Unique

 

create table clientes
(
cod_clis int auto_increment,
cpfcnpj_cli int(15) not null,
cod_emp int not null,
constraint pk_clis primary key(cod_clis),
constraint un_clis unique key(cpfcnpj_cli, cod_emp),
constraint fk_clis foreign key(cod_emp) references empresa(cod_emp)
);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.

Na minha opinião a melhor coisa a fazer seria uma verificação com o PHP.

Você pega os dados CPF 111.111.111-11 e a empresa 2 e faz um select. SELECT * FROM Cliente WHERE cpfcnpj_cli='111.111.111-11' and cod_emp='2'

Caso retorne algum valor que dizer que este mesmo cadastro já existe, caso contrário executa o INSERT.

Caso tenha dúvidas em como realizar estes processos estou a disposição.

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu prefiro manter as constraints no BD é mais garantido, trate o erro sim na aplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.