Considera il caso seguente: ci sono due modelli Immagine e Utente. Gli utenti hanno immagini associate e possono sceglierne una come immagine del profilo. Ci sono essenzialmente due modi per modellare questo:
1)
User:
id - primary key
profile_image - nullable foreign key to Image
Image:
id - primary key
user - foreign key to User
2)
User:
id - primary key
Image:
id - primary key
user - foreign key to User
profile - boolean true/false
Entrambi questi approcci hanno alcuni problemi.
Nel primo caso:
- noto problema dell'uovo di gallina (ad esempio, le chiavi esterne devono essere disattivate durante il ripristino dal backup)
- Può succedere che l'immagine del profilo punti al di fuori del dominio delle immagini associate all'utente
- Esiste un collegamento di dipendenza ridondante (cioè una relazione in più rispetto alla prima soluzione). Ciò avrà un impatto su un codice dell'applicazione
- Che cosa succede se in seguito decidiamo di avere un ordinamento sulle immagini in cui il primo è il profilo?
Il secondo caso:
- Esiste una leggera ridondanza dei dati (molte volte false )
- true può verificarsi più volte
- leggermente meno intuitivo (almeno per me)
Quindi la mia domanda è, quale di queste due soluzioni è migliore / più pulita?