Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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)
);
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.
Eu prefiro manter as constraints no BD é mais garantido, trate o erro sim na aplicação.
Concerteza criar a constraint e tratar o erro no PHP
Chave composta.