Questa è la classica domanda sul modello di ereditarietà delle tabelle e ci sono 3 soluzioni stabilite:
Ognuno ha pro e contro. Sei andato con l'ereditarietà della tabella delle classi, che è ciò che la maggior parte degli sviluppatori tende a fare naturalmente poiché segue il modello di progettazione del codice e sembra normalizzato. Ma ha le prestazioni peggiori, poiché richiede join frequenti, gli inserimenti e gli aggiornamenti sono costosi e l'applicazione dell'integrità dei dati è complessa. Preferisco di gran lunga il modello di ereditarietà tabella singola:una e una sola tabella, [Messages]
, per la sua semplicità e le prestazioni di runtime nel pattern di accesso più frequente (es. mostra la mia 'inbox' è una query semplice e veloce). Ti consiglio di eseguire alcuni test con il modello proposto, sotto carico e con set di dati di dimensioni ragionevoli.