Como faço para evitar que um determinado campo seja repetido em registros diferentes, tipo.
Digamos que eu tenha um cadastro de pessoas, com campos: nome, endereço, telefone, sexo, email, etc… E queira que o campo email não possa ser cadastrado novamente caso ele já exista em algum registro no banco.
Sei que é possivel fazer isso dentro da aplicação java, fazendo uma consulta e caso o email não exista em nenhum registro libere para uso. Mas para esse projeto necessito que o maximo de trabalho possivel sejá feito pelo servidor de BD pois as maquinas clientes necessitam de um grande desempenho. Então como faço para que o prórprio BD se encarregue de fazer essa verificação?
Cara não cria chave primaria, as chaves são apenas para referencias as tabelas, se vc criar duas chaves primairas em uma mesma tabela, ela vai pedir referencia de uma tabela e vc não tem essa referencia.
Evite chaves primárias compostas(combostas), eu sei que todos nós aprendemos na faculdade a fazer assim mas vamos evitar.
Cara a melhor opção e vc criar index nas colunas que vc quer, porém você precisa tomar cuidado com letras maiusculas e minusculas existem bancos que são case sensitive.
De uma pesquisada sobre index e indice de banco de dados
Você deve usar UNIQUE-KEY nos campos que você não quer que se repitam. Quando você tentar incluir/atualizar um registro que coincida com aquele, o banco irá lançar um raisse-error informando qual a unique-key estourou.
Porém mesmo com as unique-keys aconselho você a não depender delas. O ideal é você sempre fazer uma pesquisa antes com os campos que você não quer que se repita. Em alguns sistemas meus o login é feito pelo email do usuário, logo eu não apenas coloquei o email como unique-key como também antes da inclusão/atualização eu verifico se há outro usuário com o mesmo email.
realmente brunobuild, não quero usar chaves dupla pois a referida tabela tem vários relacionamentos, e isso acaba bagunçando os relacionamentos pois serão criados relacionamentos com campos desnecessarios, em clientes por exemplo se eu usar chave primaria composta de “CliCodigo” + “CliEmail”, qualquer outra tabela que use a tabela de clientes em um relacionamento vai ter além o campo “CliCodigo” que é o suficiente para o relacionamento, o campo “CliEmail” não interessará em nada para o relacionamento.
gracia-jj, obrigado pela dica, nunca usei UNIQUE-KEY, vou dar uma pesquisada, valeu gente.