Devo usar chaves primárias compostas ou não?

Parece haver apenas suporte de segunda classe para chaves de banco de dados compostas no JPA do Java (via anotações EmbeddedId ou IdClass). E quando leio sobre teclas compostas, independentemente do idioma, as pessoas continuam aparecendo como uma coisa ruim. Mas não consigo entender o porquê. As chaves compostas ainda são aceitáveis para uso hoje em dia? Se não, por que não?

Encontrei uma pessoa que concorda comigo:http: //weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.asp

Mas outro que não:http: //weblogs.java.net/blog/bleonard/archive/2006/11/using_composite.htm

Sou apenas eu ou as pessoas não conseguem distinguir onde uma chave composta é apropriada ou não? Vejo chaves primárias compostas úteis quando a tabela não representa uma entidade - ou seja, quando representa uma tabela de junçã

Um exemplo simples:

Actor { Id, Name, Email } Movie { Id, Name, Year } Character { Id, Name } Role { Actor, Movie, Character }

Aqui, ator, filme e personagem obviamente se beneficiam de ter uma coluna de identificação como chave primári

função @Mut é uma tabela de junção Muitos-para-Muitos. Não vejo sentido em criar um ID apenas para identificar uma linha no banco de dados. Para mim, parece óbvio que a chave primária é{ Actor, Movie, Character }. Também parece ser um recurso bastante limitativo, especialmente se os dados na tabela de junção mudarem o tempo todo, você poderá encontrar colisões de chave primária assim que a sequência de chaves primárias for aproximada para 0.

Então, voltando à pergunta original, ainda é uma prática aceitável usar chaves primárias compostas? Se não, por que não?

questionAnswers(20)

yourAnswerToTheQuestion