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?
Pior que estou estudando BD agora, mas já tentou Double?
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 -2147483648 a 2147483647 ( 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é!
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!
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.
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é!
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.
agradeço a atenção de todos…
tenho mais uma perguntinha, aonde devo definir um campo com UNIQUE utilizando o MySQL Administrator?
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é!
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…
[quote] 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? [/quote]
Porque integer ou biginter? Coloca varchar.
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