Em um relacionamento um a um, devo soltar uma da coluna de identificação da tabela?
-
27-09-2019 - |
Pergunta
Eu tenho as duas tabelas a seguir em MySQL: Cliente (ID, FirstName, LastName ...) Bônus (ID, CustomerID, Valor, ...)
A relação é individual, todo cliente tem apenas um bônus. (O CustomerID é único na tabela de bônus)
P: Devo soltar a coluna ID da tabela de bônus? (Eu quero saber por que ou por que não)
Solução
Eu removeria o bônus. Fazer isso removerá a necessidade de ter uma restrição única no bônus. Coluna Customerid, pois agora será um PK. Qualquer pessoa que olhe para a mesa verá o um a um mais claramente sem o bônus.ID coulmn. Você não precisará de um índice no bônus.customerid, o índice PK será tudo o que você precisa; portanto, menos espaço em disco e cache de memória desperdiçada. Além disso, se você precisar de um FK para a tabela de bônus, usará o valor do cliente (o novo PK), que pode ser usado para voltar às tabelas de clientes ou bônus, não apenas bônus.
Outras dicas
Presumo que não seja realmente um verdadeiro, porque você pode ter um cliente sem uma fila de bônus. As restrições de chave estrangeira no estilo SQL são sempre opcionais no lado de referência de qualquer relacionamento.
Concordo que a coluna bônus.ID parece ser completamente redundante.
Se é ono-a-um, por que existe alguma tabela extra? Em vez disso, você pode colocar "BonusValue" na sua tabela de clientes.
(Else: Sim, você pode abandonar o ID da mesa de bônus, o ID do cliente é a chave primária e o "id" é completamente redundante)