Non sto chiedendo se i tavoli EAV sono buoni o cattivi. Mi chiedo se sono considerati "normalizzati", e se no, perché? Se non sono normalizzati, quale forma normale stanno violando e perché?
Non sto chiedendo se i tavoli EAV sono buoni o cattivi. Mi chiedo se sono considerati "normalizzati", e se no, perché? Se non sono normalizzati, quale forma normale stanno violando e perché?
Una tabella EAV (aka Key-Question-Answer) è tecnicamente in 3NF:
1NF
2NF
3NF
Pertanto, l'EAV aderisce alla terza forma normale. Non soddisfa i 4NF, perché la struttura ha dipendenze multivalore (in realtà è progettata per); l'aggiunta di un nuovo ID entità alla tabella richiede la creazione di una riga per ciascun Attributo, mentre l'aggiunta di un Attributo appena supportato richiede l'aggiunta di una riga per ogni Entità che ha quel nuovo Attributo. Una struttura di tabella "appiattita" più tradizionale può incontrare 4NF; l'aggiunta di una nuova entità richiede solo l'aggiunta di una riga, e questo è l'unico motivo per aggiungere una riga alla tabella.
Se c'è un argomento per dire che non è 3NF, sarebbe che viola la regola "nessuna informazione nascosta" di 1NF in quanto la struttura dei dati non è nota al DB. Il campo "Valore" di una tabella EAV è necessario per poter contenere tutto ciò che può essere usato come valore; in quanto tale, di solito è un campo stringa di qualche tipo, contenente le rappresentazioni di stringa di dati come i numeri. Questi dati devono essere analizzati nei tipi corretti e la conoscenza necessaria per farlo non è contenuta in un punto accessibile nel DB (a meno che non sia incorporata nel Valore stesso, violando la regola "uno e un solo valore" 1NF o inclusa come colonna aggiuntiva , violando la regola "tutti i campi direttamente correlati alla chiave candidata" di 3NF), quindi è "nascosto".
Non è normalizzato
Una delle regole di normalizzazione è la seguente: Un campo dovrebbe avere lo stesso significato in ogni riga della tabella.
Anche la tabella non rappresenta alcuna Entità specifica ..
Chiedere se è normalizzato o meno è in gran parte fuori luogo.
Invece, dovresti chiedere "è basato su un modello relazionale della materia"? La risposta è un sonoro NO. Questo è per intento. Quando vengono scoperte nuove funzionalità dell'oggetto, come nuove entità o attributi, l'EAV può essere aggiornato senza modifiche alle definizioni dei dati.
Ciò significa che l'EAV è indipendente dai requisiti di informazione sull'argomento. Ciò a sua volta significa che possiamo costruire un EAV senza fare alcuna analisi dei dati sull'argomento. Questa è sia la grande attrazione che la terribile trappola dell'EAV.
Leggi altre domande sui tag database theory database-design relational-database