Sebbene minimalista come mostrato, la tabella degli attributi di Model2 introduce il concetto di meta-dati nell'impasto, con tutto il buono che ne deriva. Ci sono altri vantaggi in Model2, ad esempio i miglioramenti in termini di prestazioni associato a dimensioni di riga inferiori (della tabella Value), ma vorrei concentrarmi sul concetto di metadati.
Anche così com'è La tabella degli attributi di Model2 costituisce un repository di tutti gli attributi validi (con model1 sarebbe necessario eseguire una sorta di query aggregata per ottenere un elenco di questo tipo). Inoltre, e così com'è , il repository è sufficiente per introdurre vincoli di chiave esterna per aiutare a mantenere l'integrità del set di dati (con il Modello 1 sarebbero necessarie forme esterne di convalida dei valori memorizzati nella colonna degli attributi.
Con poche semplici aggiunte, la tabella degli attributi può diventare un repository versatile che può essere utilizzato per vari scopi. Ad esempio, la tabella può includere alcuni dei seguenti
- informazioni come il nome descrittivo di visualizzazione di ciascun attributo
- alcuni flag indicanti il tipo di campo (numerico vs stringa vs data etc.), per una gestione/elaborazione differenziata
- la particolare tabella dei valori in cui è memorizzato l'attributo sottostante (il modello mostra solo una tabella ma l'ottimizzazione/il ridimensionamento a volte richiede di dividere le tabelle)
- il fatto che l'attributo possa essere memorizzato come colonna a sé stante nella tabella "Valore" (ancora una forma di ottimizzazione, ottenendo essenzialmente il meglio da entrambi i mondi:la flessibilità dello schema del modello EAV ma le prestazioni del modello tradizionale modello relazionale per gli attributi più utilizzati e/o più comuni a tutte le entità.
- la possibilità di rinominare gli attributi, senza disturbare la tabella principale. Modifiche solo a livello di metadati.
- varie semantiche orientate all'applicazione. Ad esempio, indicatori che indicano che un particolare attributo dovrebbe essere offerto come uno dei campi di ricerca di base rispetto a quelli avanzati.
In poche parole, la tabella degli attributi diventa una risorsa che consente all'applicazione di essere veramente data-driven (o più precisamente, meta guidato dai dati). In effetti potrebbe piacerti anche una tabella di entità, ovvero quella in cui vengono raccolti i metadati relativi ai vari tipi di entità:quali sono i diversi tipi di entità, quali attributi sono consentiti per quale tipo di entità ecc.
Ora... presta attenzione al commento di zerkms , sotto la domanda stessa. Nonostante tutti i suoi vantaggi, il modello EAV presenta anche la sua parte di inconvenienti e sfide, poiché viene in mente la complessità delle query e anche problemi di prestazioni. Queste preoccupazioni non dovrebbero tuttavia squalificare, a priori, EAV:ci sono molti casi d'uso in cui EAV è un approccio migliore.
Supponendo che EAV sia la scelta allora Model2, o anche qualcosa di leggermente più sofisticato è decisamente superiore a model1.