Ho un'applicazione che ha bisogno di registrare le comunicazioni con gli utenti su diversi supporti: e-mail, SMS, voce, annunci sul sito web, ecc. in un database tradizionale.
Ho preso in considerazione 3 approcci per modellare questi diversi tipi di dati:
-
ereditarietà di una tabella link
Memorizzali tutti insieme in una singola tabella (cioè comm_message) con un campo discriminatore di qualche tipo per indicare il tipo di comunicazione (ad esempio, message_type). Ciò significa che alcuni campi della tabella non verranno utilizzati per ciascun tipo e significa che lo stesso messaggio può essere duplicato in diverse righe della tabella (se il messaggio viene inviato tramite più di un mezzo). -
Il messaggio "ha" i trasporti Avere una tabella dei messaggi (comm_message) e quindi trasporta la tabella (comm_transports) con i vari mezzi di comunicazione diversi. Una relazione molti-a-molti tra messaggi e trasporti significherebbe una riga per ogni messaggio nella tabella dei messaggi, ma quella riga potrebbe avere diversi trasporti diversi. Se sono necessarie informazioni specifiche aggiuntive per un particolare trasporto, potrebbe trovarsi nella propria tabella (ad es. Comm_sms, comm_email, ecc.) Che è collegata alla tabella many-to-many. Vale a dire, un approccio "ha-a".
-
Ereditarietà della tabella delle classi link Creare una tabella di messaggi di base (comm_message) e quindi un'altra tabella per ciascun supporto con campi specifici (eredità). My ORM (LLBLGen) faciliterebbe questo approccio utilizzando PK condivisi per le diverse tabelle. In questo approccio ci sarebbe una riga nella tabella di base (comm_message), più le righe in ciascuna delle tabelle correlate per ogni trasporto (comm_email, comm_sms, ecc.) Ma non ci sarebbe alcuna relazione molti-a-molti. Piuttosto, i record su tabelle diverse condividono lo stesso PK (1-1). Questo sarebbe più di un approccio "è un".
Contesto: questa è un'applicazione di medie dimensioni (circa 100 tavoli) che conserverò per molti anni, quindi mi piacerebbe ottenere questo "giusto". Avrò spesso bisogno di presentare tutte le informazioni di comunicazione insieme nell'interfaccia utente in una griglia, rapporti, ecc.
Quale dovrei usare? Perché?