Dúvida básica?

10 respostas
tolfo

Estou fazendo um sisteminha com java e mysql,
tenho uma tabela de Empresas e o chave primária tem que ser o CNPJ,
coloquei o CNPJ como INTEGER e está dando pau,
ai mudei de INTEGER para BIGINTEGER e está aceitando,
porém, mantendo como BIGINTEGER dá problemas em outras manipulações que preciso fazer.
Então a pergunta é:
que tipo deve ser declarado o CNPJ em uma tabela, sendo ele chave primária?

10 Respostas

WashingtonBotelho

Pior que estou estudando BD agora, mas já tentou Double?

maquiavelbona

Eu acho que você não modelou corretamente o seu sistema. CNPJ não deveria ser chave primária, poderia ser campo único. Procure por UNIQUE no seu banco de dados que você vai ver o que você quer e não tem como CNPJ ser int, pois são 13 números e o campo INT vai de -[telefone removido] a [telefone removido] ( mais do que um CNPJ ). Vai ter que trabalhar com ele em outra formatação ( até varchar se você não for fazer cálculos com ele ! ).

Até!

lordtiago

Vc tem que manipular ele pra cálculos também?
porque o cpf bruto seria composto por caracteres, o varchar seria uma boa pedida.
E pode ser usado para comparações (a tarefa mais ocasional).
Acho que basicamente seria isso!

WashingtonBotelho

maquiavelbona, muitas empresas usam o cpf/cnpj como chave primária por serem números únicos, onde não se repetem para outros indivíduos. Se ele não for manipular o cnpj rolava de ser varchar mesmo.

maquiavelbona

Então algo está errado. CNPJ é único mas não é imutável. Então ele deveria ser um campo UNIQUE e não chave primária. A chave primária tem que ser algo que você possa ter sem coincidências e nem alterações, pois os relacionamentos serão em cima desse campo.

Até!

FabricioPJ

Quando trabalho com BDs, tudo o que não for calculável (nome, cnpj e etc…), eu declaro como VARCHAR.

Não sei se os colegas irão concordar, mas trabalhando assim, nunca tive problemas.

tolfo

agradeço a atenção de todos…
tenho mais uma perguntinha, aonde devo definir um campo com UNIQUE utilizando o MySQL Administrator?

maquiavelbona

Não creio que o MySQL Administrator faça isso, mas sim o Query Browser. Caso queira saber o SQL, é:

ALTER TABLE `table` ADD UNIQUE ( `cnpj` )

Até!

F

Só para reforçar.

Também não acho a melhor idéia colocar CNPJ como chave primária, pois apesar de ser único não é imutavel. Crie um campo denominado id_empresa e o torne sua primary key…

tenho uma tabela de Empresas e o chave primária tem que ser o CNPJ,
coloquei o CNPJ como INTEGER e está dando pau,
ai mudei de INTEGER para BIGINTEGER e está aceitando,
porém, mantendo como BIGINTEGER dá problemas em outras manipulações que preciso fazer.
Então a pergunta é:
que tipo deve ser declarado o CNPJ em uma tabela, sendo ele chave primária?

Porque integer ou biginter? Coloca varchar.

G

kra eh melhor vc repensar na modelagem dos seus dados, pois dados mal modelados podem trazer varios problemas no futuro, entao sugiro fazer como os amigos a cima citaram, coloque o cnpj como campo do tipo varchar, e crie uma chave primaria do tipow… idcliente… com auto incremento, pois ela sera a referencia da sua tabela, e ela que sera usada como fk nas outras tabelas se necessario e claro, o campo cnpj como chava primaria podera te trazer problemas de integridade dos dados em sua base entre outros, pois o mesmo pode ser alterado pelos usuarios do cliente.

vlws

Criado 17 de fevereiro de 2008
Ultima resposta 18 de fev. de 2008
Respostas 10
Participantes 7