fredferrao:
Eu sou mais um partidario do uso de chaves artificiais.
Uma das questões, é o que o colega ja disse acima, PK’s não deveriam mudar.
E outra, pra que serve uma PK senão apenas fazer os relacionamentos as tabelas? Se queres que outros campos sejam únicos então crie Unique Contraints. Se quer performance, crie índices para os campos de suas consultas.
E tambem não gosto de chaves compostas, aff ja vi tabelas com 10 ou mais campos formando a PK, ja pensou que filé pra fazer os relacionamentos disto e depois fazer joins. Mas como sempre uso o famoso id integer primary key, pelo menos em meus sistema nunca terei chaves compostas.
Existem situações e situações. Não da pra generalizar e dizer que chave artificial é melhor que natural. Nem sempre isso ocorre!
Muitas vezes chave natural é muito mais interessante por vários motivos e a simples criação de indice pode não garantir performance em um campo.
O fato do java não trabalhar bem com chave composta não deve ser uma limitação imposta ao modelo de dados. Deve-se avaliar a necessidade de chave artificial ou natural com base em outros aspectos e não na limitação dos ORM’s java.
em minha opinião, um exemplo de uma boa chave natural é a sigla do estado. Nese caso não vejo a menor necessidade de usar chave artificial. Vou criar mais um campo, inventar mais um join, pq? pq meu ORM não faz o serviço dele direito? . Melhor trocar de ORM, ou de linguagem =P