Quando si considera come rappresentare l'ereditarietà nel database, è necessario considerare alcune cose.
Se si dispone di molte sottoclassi diverse, è possibile avere molti join aggiuntivi nelle query che riguardano quei tipi più complessi che possono compromettere le prestazioni. Un grande vantaggio di TPH è che si esegue una query su una tabella per tutti i tipi nella gerarchia e questo è un vantaggio per le prestazioni, in particolare per le gerarchie più grandi. Per questo motivo tendo a favorire tale approccio nella maggior parte degli scenari
Tuttavia, TPH significa che non è più possibile avere campi NOT NULL
per sottotipi poiché tutti i campi di tutti i tipi si trovano in un'unica tabella, spingendo la responsabilità dell'integrità dei dati verso la tua applicazione. Anche se questo può sembrare orribile nella pratica, non ho trovato che questa sia una restrizione troppo grande.
Tuttavia, tenderei a utilizzare TPT se ci fossero molti campi per ogni tipo e che il numero di tipi nella gerarchia fosse probabilmente basso, il che significa che le prestazioni non erano tanto un problema con i join, e ottieni una migliore integrità dei dati.
Si noti che uno dei vantaggi di EF e di altri ORM è che è possibile cambiare idea lungo la traccia senza influire sull'applicazione in modo che la decisione non debba essere completamente scolpita nella pietra.
Nel tuo esempio, non sembrano avere una relazione di ereditarietà, sembra un uno a molti dal tipo di indirizzo agli indirizzi
Questo sarebbe rappresentato tra le classi qualcosa di simile al seguente:
Address.AddressType
AddressType.Addresses
fonte
2009-05-31 01:02:49
il link non è più valido. Per favore correggi o cancella questa risposta –