Sto cercando di decidere se utilizzare solo tabelle individuali con più campi per l'archiviazione di post, pagine ed eventi o l'utilizzo di tabelle con campi di base oltre ad avere tabelle EAV come pure per campi facoltativi. Inoltre, l'EAV consentirebbe di aggiungere più "attributi" a ciascuna entità senza effettivamente modificare il database (basta cambiare leggermente il codice dell'applicazione).
Tuttavia, quello che mi preoccupa sono le prestazioni. EAV diminuirebbe le prestazioni in tale scenario (memorizzando dati come eventi)?
Inoltre, vale la pena aggiungere una tabella EAV come event_meta al database nel caso in cui avessi bisogno di aggiungere campi / attributi aggiuntivi al modello più avanti (quando le specifiche cambiano e il sistema deve essere espanso)?
Attualmente posso pensare a due opzioni:
-
Non si usano le tabelle EAV e si hanno solo tabelle singole per ogni tipo di entità (post, pagine ed eventi) e tutti i dati (circa 15 campi) nella tabella delle entità.
-
Utilizza le tabelle EAV per archiviare i dati facoltativi che di solito non vengono immessi dagli utenti (ciò impedirebbe alle tabelle delle entità di avere molti campi vuoti) ma di memorizzare tutti i dati necessari e cruciali nelle tabelle delle entità.
Inoltre, per l'opzione due potrei essere in grado di avere solo una "tabella" di una tabella generica anziché tre post, pagine ed eventi di tabelle e usare solo più righe valore attributo nella tabella EAV (e avere un campo tipo nella tabella dei post). Tuttavia ciò probabilmente ridurrebbe ancora di più le prestazioni.
L'opzione 1 è molto più semplice da implementare. Tuttavia, l'opzione 2 potrebbe rendere più semplice estendere le entità in futuro poiché il database non dovrebbe mai essere regolato.
Un'altra cosa importante da considerare è la prestazione. Cosa succede quando abbiamo milioni di righe in events_meta. Ogni volta che qualcuno visualizzerebbe un evento, l'applicazione dovrebbe eseguire query su entrambe le tabelle che sarebbero piuttosto grandi e temo che ridurrebbe le prestazioni.
Quindi quale opzione dovrei usare per la mia situazione?