Detta är den klassiska frågan om tabellarvsmönster och det finns 3 etablerade lösningar:
Var och en har för- och nackdelar. Du gick med Class Table Inheritance, vilket är vad de flesta utvecklare brukar göra eftersom det följer kodens designmodell och det ser normaliserat ut. Men är det sämre prestanda, eftersom det kräver frekventa kopplingar, infogningar och uppdateringar är dyra och upprätthållandet av dataintegritet är komplext. Jag är mycket för Single Table Arv-modellen:en och endast en tabell, [Messages]
, för dess enkelhet och körtidsprestanda i det vanligaste åtkomstmönstret (t.ex. visa min 'inkorg' är en enkel och snabb fråga). Jag rekommenderar att du gör några tester med din föreslagna modell, under belastning och med rimligt stora datamängder.