Dichiarazione di non responsabilità: questa è una domanda derivata da questo .
Che cosa pensi del seguente esempio di caso d'uso?
- Ho una tabella contenente gli ordini.
- Questi ordini hanno molte informazioni correlate necessarie per le mie query correnti (pensate ai prodotti, le informazioni sull'acquirente, la regione, il paese e lo stato del punto vendita e così via)
- Per pensare con un approccio de-normalizzato, non devo inserire identificatori di questi articoli correlati nella mia raccolta di ordini principale. Invece, devo ripetere tutte le informazioni per ogni ordine (ad esempio: ripeterò il nome dell'acquirente, il cognome, ecc. Per ciascuno dei suoi ordini).
Supponendo la premessa precedente, mi sto impegnando a mantenere tutti i dati relativi a un ordine senza molti aggiornamenti (perché se modifico il nome dell'acquirente, dovrò ripetere tutte le ordini che aggiornano quelli effettuati dallo stesso acquirente e come blocchi MongoDB a livello di documento sugli aggiornamenti, bloccerei l'intero ordine al momento dell'aggiornamento).
Questo solleva le seguenti domande:
- Devo replicare tutti i dati relativi ai prodotti? (es .: categoria, creatore e attributi opzionali come colore, dimensioni ...)
- Che cosa succede se viene richiesta una nuova funzionalità e devo effettuare molte query con i prodotti "come punto di ingresso della query"? (es .: rapporti che mostrano il raggruppamento delle prestazioni di vendita dei prodotti per regione, paese o altro)
- È abbastanza giusto applicare l'operazione $ unwind alla raccolta originale dei miei ordini? (E le prestazioni?)
- Dovrei fare un'altra raccolta con queste domande in mente e replicare di nuovo tutte le informazioni dei prodotti (e i loro ordini)?
- Non sarebbe meglio memorizzare un product_id nella raccolta ordini originale per essere più tollerabile alle modifiche dei requisiti? (Che dire dell'emulazione di JOIN?)
- L'approccio ottimale sarebbe una soluzione mista con un sistema RDBMS come MySQL per recuperare i dati completi?
- Voglio dire: memorizzare prodotti, utenti e identificatori di posizione nella raccolta ordini e avere query in MySQL come
getAllUsersDataByIds
in cui eseguirò unSELECT * FROM users WHERE user_id IN ( :identifiers_retrieved_from_the_mongodb_query )
- Voglio dire: memorizzare prodotti, utenti e identificatori di posizione nella raccolta ordini e avere query in MySQL come