Oi Emiliano!
Desculpa, não sei se entendi direito a sua dúvida. Mas vou esclarecer alguns conceitos, e você me avisa se é por aí o que gostaria de saber.
=)
A chave primária é uma configuração que criamos quando queremos que aquele valor sirva como index, ou seja, quando queremos que não permita valores nulos ou repetidos.
A chave primária pode ser uma "Natural Key" ou "Surrogate Key".
Natural Key, é uma coluna que já existe na tabela, de um valor de negócio que pode servir como chave primária.
Se for uma tabela de usuários de um banco por exemplo, podemos usar o número de conta corrente como index, pois não repetirá valores, nem terá um valor nulo, pois todo usuário do banco tem uma conta. Sendo assim o número da conta atuaria como natural key, e podemos ou não torná-la a primary key de nossa tabela.
Surrogate Key é uma coluna com um número criado, sem valor relevante para seu negócio, que pode servir como primary key pois se trata de um índice criado especialmente para isso.
No nosso caso do curso por exemplo, a maioria de nossos códigos já podem ser considerados surrogate keys, pois se você verificar nas consultas, verá que são números ordenados e criados artificialmente, que não significam nada para nosso negócio. (Ex: Em Cod_Fabrica temos 001, 002, 003)
Criamos uma chave estrangeira quando queremos fazer uma relação entre tabelas, ou seja, relacionamos a chave primária de uma tabela, com versão dela mesma em outra tabela.
Nossas tabelas fato então, ficam sim com mais de uma chave primária, pois elas na verdade são chaves primárias de outras tabelas.
Acho que talvez tenha uma confusão acontecendo quando você diz que uma chave "não pode repetir".
Quando estamos fazendo uma consulta, a mesma chave primária aparecerá várias vezes, pois ela pode fazer muitas relações com valores de outras colunas.
O que ela não pode, é guardar o mesmo valor mais de uma vez na tabela original do banco de dados, ou guardar um valor nulo.
Por exemplo, ao consultar a Fato 001, olhando os dados sobre as minhas fábricas, podemos ver que seus valores repetirão, pois terei vários produtos que se relacionam com aquela fábrica. O mesmo ocorre com a repetição de clientes.
O que não pode acontecer:
Ter um valor nulo ali, pois todo produto e cliente terá um fábrica.
Um mesmo código se referir a fábricas diferentes.
Sobre a repetição da combinação de todas as primary keys juntas, acredito que conceitualmente, o banco é pensado segundo seu modelo de negócio para que isso não aconteça. Pode ver que em nenhuma das nossas fatos isso acontece, pois a lógica do negócio não permite.
O cuidado está na formatação dos dados quando carregados. Por exemplo, não faz sentido carregar duas vezes dados sobre o mesmo cliente, na compro do mesmo produto, que vem da mesma fábrica, no mesmo dia concorda? Se tudo foi elaborado com boas práticas, todos os indicadores viriam iguais! A linha inteira viria duplicada, e não queremos isso!
Sua dúvida tinha algo a ver com esses conceitos? Pode me falar mais sobre esse erro? É um erro que aconteceu com você? Ou é uma dúvida sobre um possível erro?
Desculpe a extensão da resposta, espero que ajude!