Ho cercato di rispondere a un complesso problema di struttura dati Mysql per campi personalizzati per un'applicazione online. Sono abbastanza nuovo per Mysql quindi qualsiasi input è apprezzato.Matrice, EAV, LOB serializzato per campi personalizzati?
Il database corrente è un database relazionale e ogni utente del servizio condividerà lo stesso database e le stesse tabelle.
Ecco un esempio di ciò che sto cercando di fare.
Diciamo che sto provando a creare un elenco. Questo elenco può contenere fino a 30 campi personalizzati. L'utente può scegliere tra 12 elementi unici e ogni elemento può avere fino a 15 attributi definiti dall'utente.
Ogni elenco può essere univoco all'interno di un account e tra account. Gli account possono avere numerosi elenchi e ogni lista può avere diverse quantità di elementi e diversi attributi per elemento.
Un elemento può essere molte cose, ad esempio: scelta multipla, pulsante, campo di telefono, indirizzo, testo singola linea, testo su più righe, ecc
Un esempio di attributi per una scelta multipla (casella di controllo) elemento potrebbe essere: rosso, verde, blu, arancione, bianco, nero
Un esempio di un elemento di testo a riga singola potrebbe essere: campo di inserimento Nome.
Ogni elemento deve inoltre avere un campo titolo e un campo tag definiti dall'utente che possono essere referenziati e utilizzati in altre funzioni dell'app.
La segmentazione è molto importante. Un utente deve essere in grado di segmentare un elenco in base a qualsiasi elemento. Ad esempio, un utente potrebbe voler segmentare l'elenco "ABC" in base a tutti i record in cui "rosso" è presente nell'elemento a scelta multipla n. 1 (potrebbero avere più di 1 elemento a scelta multipla per un elenco).
In questo esempio, suppongo che gli array, EAV, LOB serializzato funzionino correttamente. Tuttavia, non sono sicuro di quale sarebbe la migliore struttura per i miei bisogni alla mia portata.
In realtà, molto probabilmente ci saranno fino a 50.000 record per elenco e vi è una possibilità reale di oltre 20.000 account, ciascuno con numerosi elenchi. Pertanto, sto cercando la struttura più efficiente e flessibile.
Per rendere le cose ancora più complesse, ho anche bisogno di garantire un modo efficace per aggiungere/eliminare elementi a un particolare elenco in qualsiasi momento. Ad esempio, se un utente crea un elenco con il numero massimo consentito di campi personalizzati (30) e poi tre mesi dopo decide di voler eliminare un campo, ho bisogno di un modo per trovare quell'elenco e tutti i valori associati per quel campo personalizzato e quindi elimina tutti i valori, il tipo di elemento e i suoi attributi. L'utente sarebbe quindi autorizzato ad aggiungere un nuovo elemento a questo elenco.
Ho esaminato molti dei messaggi EAV su questo sito, così come questo http://www.martinfowler.com/eaaCatalog/serializedLOB.html Non sembra che EAV sarebbe molto efficiente per le mie esigenze a causa degli aspetti negativi del recupero dei dati.
Mi chiedevo anche quanto bene un array multidimensionale avrebbe funzionato a questa scala? Credo che wordpress usi questo per i loro campi personalizzati.
Qualsiasi input sarebbe molto apprezzato per quanto riguarda la migliore strutturazione del database per questa situazione. Grazie!
Anche io sto affrontando la stessa sfida: quale soluzione sei andato? Sarei molto interessato alle tue esperienze – philwilks