Vou começar com um exemplo. Se eu tiver uma person
tabela com a chave primária substituta pretendida Id
:
+----+------+------------+---------+ | ID | nome | DoB | SSN | +----+------+------------+---------+ | 1 | João | 1901-01-01 | 111-11-1111 | | 2 | Jane | 1902-02-02 | 222-22-2222 | | 3 | João | 1901-01-01 | 111-11-1111 | +----+------+------------+---------+
Nota Id
s 1 e 3 têm os mesmos atributos; Ambos representam a mesma pessoa.
Agora, pelo que sabemos sobre a teoria por trás do que constitui uma chave primária, que acho que está bem resumida aqui :
- A chave primária deve identificar exclusivamente cada registro.
- O valor da chave primária de um registro não pode ser nulo.
- O valor-chave primário deve existir quando o registro é criado.
- A chave primária deve permanecer estável — você não pode alterar o(s) campo(s) da chave primária.
- A chave primária deve ser compacta e conter o menor número possível de atributos.
Considere o primeiro marcador, " A chave primária deve identificar exclusivamente cada registro. " No meu exemplo, suponho que se cada um Id
representa ou não a exclusividade depende do que realmente deve ser considerado único. Um registro de banco de dados diferente? Sim. Uma pessoa diferente (o que os registros devem representar)? Não.
Assim, múltiplos Id
s representam o que é funcionalmente o mesmo sujeito gerador dos dados, presentes em 2 registros. Uma espécie de "dois para um ID". Não li nada que aborde diretamente o cenário que meu exemplo ilustra, no que se refere ao que é ou não é um PK.
- Este exemplo viola a teoria por trás do que constitui uma chave primária?
- Se não, este exemplo ilustra uma violação de qualquer princípio maior de arquitetura de banco de dados, ou este conceito pode ser reduzido a algo tão simples como "duplicação de dados - limpe-o"?
Muito Obrigado.
O problema com este modelo é que você não identificou todas as chaves candidatas na relação e não impôs a exclusividade das chaves que você não identificou. Na realidade
{SSN}
e, possivelmente,{Name, DoB, SomethingElse}
constituiriam chaves candidatas adicionais.No entanto,
Id
ainda é a chave primária desta relação, mas não identifica a entidade que você esperava. Ele não identifica uma "pessoa", mas outra coisa, por exemplo, "uma ocorrência de alguém inserindo os dados da pessoa".