Cita: Bueno, gnxsoloyo ya me puso tarea, lo de "absolutamente innecesario" no es tan cierto, ya que "porque la clave primaria está formada por las dos PF al mismo tiempo, es decir, la PK es (idUsuario, idAmigo)" no es cierto, en ese caso hablamos de claves foraneas, que no sustituyen a lo que se llama "clave primaria"
Las dos FK en este caso, y pedona que te lo discuta, no "sustituyen" una clave primaria, sino que
son la clave primaria. Son la clave primaria de una relación N:N, y sólo deben llevar un atributo adicional (y no un autoincremental en ese caso), si y sólo si existe en esa relación más de un caso en el que el par de FK puedan repetirse. En ese caso el atributo se denomina "discriminante".
Una relación N:N (que sólo se ve en el DER lógico), se transforma en el modelo físico en una tabla donde la PK está formada por las PK de las tablas que se relacionan. Así dicen las reglas de transformación. Esto es lo que se enseña en Bases de Datos I en cualquier facultad.
Finalmente: Por definición, una clave primaria (PK) es un campo
o conjunto de campos que identifican unívocamente un registro dado en una tabla (o una tupla en una relación), pero
no existe ninguna regla que especifique que la FK de una tabla no pueda ser al mismo tiempo la PK de esa tabla, caso que sería el de las entidades débiles dentro del DER lógico.
Si bien, ambos ejemplos
podrían funcionar igual, lo que yo te propongo evitará por restricciones de definición de tablas, que existan inconsistencias, mientras que agregar un autoincremental puede generar duplicidades de par de FK. En otras palabras, lo que propones pone en riesgo la integridad referencial y la consistencia de datos buscada.