Stiamo discutendo e sto lottando per decidere da che parte scendere. Fondamentalmente abbiamo un tipo di evento che diciamo in questo modo (esempio semplificato).
public class Event
{
public virtual int EventId { get; set; }
public virtual DateTime DateTimeOccurred { get; set; }
}
Molti eventi diversi nel nostro sistema possono ereditare da questo così potremmo avere:
public class UserUpdatedEvent : Event
{
public virtual User User { get; set; }
}
Quindi in pratica qualsiasi evento può ereditare dall'evento di base e quindi possiamo tenere traccia di ciò che sta accadendo nel nostro sistema che dobbiamo fare mentre le attività si verificano da questi eventi, ecc.
La mia domanda è che dovremmo avere una tabella nel DB per ogni evento in modo che possiamo applicare chiavi esterne in questo esempio all'utente utilizzando la tabella per tipo con ogni sottotipo che fa riferimento alla tabella degli eventi di base. O dovremmo avere una singola tabella e una colonna, magari un link a un enum che dice quale sia l'evento e quindi un'altra colonna contenente la chiave primaria per quell'oggetto ma non saremo in grado di imporre l'integrità referenziale (magari con un trigger ma non ideale e non a prova di tutto).
I professionisti per una singola tabella sono la velocità, nessun join, più semplice da costruire / mantenere, ecc. I contro non sono integrità referenziale, stiamo usando EF e la tabella per tipo funziona molto bene, d'altra parte produciamo un molti report e questi sono sprocs SQL diretti per la velocità e i join diventeranno piuttosto pesanti.
In che modo le persone di solito scendono in una situazione come questa?
Grazie mille per eventuali approfondimenti sui sistemi esistenti con problemi simili e aiutandoci a risolvere questa decisione.