Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL - Relacionamento um a um?


Não, isso torna a relação "um para zero ou um". É isso que você realmente precisa?

Se sim , então sua "segunda solução" é melhor:
  • é mais simples,
  • consome menos armazenamento (e, portanto, torna o cache "maior")
  • há menos índices para manter, o que beneficia a manipulação de dados,
  • e (já que você está usando o InnoDB) naturalmente agrupamentos os dados, para que os usuários próximos também tenham suas contas armazenadas próximas, o que pode beneficiar a localidade do cache e certos tipos de varreduras de intervalo.

BTW, você precisará criar accounts.id um inteiro comum (não auto-incremento) para que isso funcione.

Se não , ver abaixo...

Bem, "melhor" é uma palavra sobrecarregada, mas a solução "padrão" seria a mesma de qualquer outro banco de dados:coloque as duas entidades (usuário e conta no seu caso) na mesma tabela física.

Teoricamente, você poderia fazer FKs circulares entre os dois PKs, mas isso exigiria diferido restrições para resolver o problema do ovo e da galinha, que infelizmente não são suportados no MySQL.

Não tenho muita experiência prática com essa ferramenta de modelagem específica, mas acho que é porque é "um para muitos", onde o lado "muitos" foi limitado a 1, tornando-o único. Por favor, lembre-se que "muitos" não significa "1 ou muitos", significa "0 ou muitos", então a versão "limitada" realmente significa "0 ou 1".

Não apenas na despesa de armazenamento para o campo adicional, mas também para o índice secundário. E como você está usando o InnoDB que sempre agrupa tabelas , esteja ciente de que os índices secundários são ainda mais caros em tabelas clusterizadas do que em tabelas baseadas em heap.

InnoDB requer índices em chaves estrangeiras.