Sto cercando un buon approccio per il modello di dati della mia applicazione. La maggior parte dei thread si concentra sui prodotti di e-commerce e il mio scenario è leggermente diverso.ereditarietà di tabelle singole, EAV o NoSQL?
L'obiettivo è memorizzare gli articoli ricevuti dai clienti e riportarli su di essi. Sebbene i report iniziali siano semplici elenchi (questi sono i tuoi articoli e le loro coppie chiave/valore) voglio prepararmi per le query future sulle raccolte nel loro insieme, quindi sono incerto sull'EAV come approccio.
Ogni elemento è di tipo (ricorrente) e ogni articolo avrà una quantità flessibile di coppie chiave/valore. Abbiamo circa 15 tipi di articoli e non è molto probabile che crescano rapidamente.
La quantità di coppie chiave/valore sarà bassa, tra 4 e 20 ed è (per fabbisogno) non basata sul tipo di articolo, ma sul cliente gli articoli appartengono a.
Per chiarire, un cliente potrebbe desiderare che memorizzi le condizioni dell'articolo in cui un altro potrebbe desiderare che io memorizzi il colore o un ID di sostituzione. Dipende davvero. Quindi è molto probabile che avrò comunque valori NULL nel mio insieme, poiché ogni tipo di oggetto otterrà comunque tutte le chiavi/i valori di quel cliente. Questo mi fa pensare Ereditarietà tabella singola (con valori NULL) è accettabile, ma dovrebbe essere campo_1 campo_2 ecc. Con una sorta di mappatura perché il cliente deciderà il nome della chiave desiderata. Quale non mi sembra giusto?
Un insieme di articoli del cliente (e le relative chiavi/valori) sarà solitamente> 20 e < 500, quindi i set di dati per cliente non sono certamente enormi.
Forse sarebbe un buon approccio andare (semi) EAV in MySQL per l'applicazione stessa (creazione del cliente e dei campi desiderati) ma spostare i record degli articoli raccolti come un "documento" in un database NoSQL (Redis et tutto) per ulteriori elaborazioni?
O è complicare troppo le cose che possono/dovrebbero essere risolti in un RDBMS?
Mi sono imbattuto anche in questo http://backchannel.org/blog/friendfeed-schemaless-mysql che sembra una soluzione ma non è sicuro visto che i miei numeri sono così bassi.
Grazie per i vostri approfondimenti. Per quanto riguarda il punto 2, il mio problema è che non ho idea di quale rapporto sia necessario in linea. In questo momento è sufficiente un elenco che è perfettamente fattibile in EAV. È lo scenario sconosciuto di cui sono preoccupato, chiedendomi se NoSQL risolverà quelli meglio di SQL. Questo è fondamentalmente il punto 3. Sono consapevole che l'uso di NoSQL non è una soluzione magica, e credo che potrei sempre esportare in quel formato in un secondo momento. – MattW