Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL - Relazione uno a uno?

No, questo rende la relazione "uno a zero o uno". È quello che ti serve davvero?

Se , allora la tua "seconda soluzione" è migliore:

  • è più semplice
  • occupa meno spazio di archiviazione (e quindi rende la cache "più grande")
  • ha meno indici da mantenere, il che avvantaggia la manipolazione dei dati,
  • e (dato che stai usando InnoDB) naturalmente cluster i dati, così gli utenti che sono vicini avranno anche i loro account archiviati vicini, il che potrebbe avvantaggiare la località della cache e alcuni tipi di scansioni dell'intervallo.

A proposito, dovrai creare accounts.id un numero intero ordinario (non auto-incremento) affinché funzioni.

Se no , vedi sotto...

Bene, "migliore" è una parola sovraccarica, ma la soluzione "standard" sarebbe la stessa di qualsiasi altro database:metti entrambe le entità (utente e account nel tuo caso) nella stessa tabella fisica.

In teoria, potresti creare FK circolari tra i due PK, ma ciò richiederebbe un differimento vincoli per risolvere il problema dell'uovo e della gallina, che sfortunatamente non sono supportati da MySQL.

Non ho molta esperienza pratica con quel particolare strumento di modellazione, ma suppongo che sia perché è "uno a molti" in cui il lato "molti" è stato limitato a 1 rendendolo unico. Ricorda che "molti" non significa "1 o molti", significa "0 o molti", quindi la versione "limitata" significa in realtà "0 o 1".

Non solo nella spesa di archiviazione per il campo aggiuntivo, ma anche per l'indice secondario. E poiché stai usando InnoDB che raggruppa sempre le tabelle , fai attenzione che gli indici secondari sono ancora più costosi nelle tabelle in cluster che nelle tabelle basate sull'heap.

InnoDB richiede indici su chiavi esterne.