Il progetto a cui sto lavorando ha profonde relazioni genitore / figlio che devono rafforzare la disponibilità.
Immagina di essere un grande venditore elettronico in tutto il mondo (Best Buy) e di vendere telefoni cellulari
Abbiamo Regioni (Asia, Europa, Nord America ..), Paesi all'interno di Regioni , Magazzini all'interno di Paesi , Negozi che funzionano con Magazzini .
Ecco i 4 livelli che hanno relazioni parent-child.
(Livello 1) (Livello 2) (Livello 3) (Livello 4)
Regioni - > Paesi - > Magazzini - > Stores
Vendiamo solo telefoni cellulari e abbiamo in totale 100 diversi modelli disponibili. La disponibilità del singolo telefono può variare in tutti questi livelli (punti di disponibilità). Ad esempio:
Per impostazione predefinita, tutti i modelli di telefoni cellulari sono disponibili per tutti i negozi.
Vendiamo solo 100 modelli di telefoni, - Solo 80 di loro sono disponibili in Asia - Su 80 solo 60 di questi sono disponibili in India - Su 60 solo 50 di questi sono disponibili nel magazzino di Delhi - e infine su 50 solo 45 di questi sono disponibili nel negozio di Nuova Delhi 1
Anche alcuni degli attributi dei telefoni potrebbero cambiare tra questi punti di disponibilità.
Ad esempio: Nokia Lumia 830 potrebbe essere commercializzato come Lumia X in India. L'India potrebbe offrire Vodafone per impostazione predefinita per Nokia Lumia 830 , ma Delhi Warehouse può scegliere di ignorarlo e offrire un altro fornitore di simcard.
Finora ho trovato 2 modi per gestire:
1- Applicazione di tutti i mapping disponibili in ogni livello.
Pertanto, quando realizziamo 90 telefoni Nokia disponibili per la regione Asia, creeremo.
- 90 voci a livello di regione
- 90 x Numero di voci di Paesi nel Livello 2
- 90 x numero di Paesi x numero di voci di magazzino nel livello 3
- 90 x numero di Paesi x numero di magazzini x numero di voci di negozi nel livello 4
Quindi qualcuno che modifica la disponibilità a livello di negozio nella regione Asia può vedere tutti i prodotti disponibili e filtrare come preferisce o modificare gli attributi. Il magazzino di Delhi non può venderne 10, il negozio di Nuova Delhi non può vendere 5 degli specifici disponibili nel magazzino. Quindi
Rimuoveremo - 10 mappature dal magazzino - 10 x Numero di tutti i mapping di negozi forniti da warehuse dall'alto - 5 mappature x dallo specifico negozio di Nuova Delhi
Questo approccio è più facile da gestire nel codice. Ma tutte le operazioni stanno creando molti record di dati e gestire questo con le transazioni potrebbe essere problematico.
2- La sola creazione di record per quelli non è disponibile nel livello selezionato e accetta tutto è disponibile in ogni livello.
In effetti, per impostazione predefinita, tutti i prodotti sono disponibili a livello globale, a meno che non siano state create restrizioni specifiche al livello richiesto
Quindi mettiamo a disposizione 90 telefoni Nokia per la regione Asia, creeremo:
-
90 voci nel livello 1
Se qualcuno cambia la disponibilità a livello di negozio nella regione Asia, può vedere tutti i prodotti disponibili e filtrare come preferisce o modificare gli attributi. Supponiamo che il magazzino di Delhi non ne detenga 10. Il negozio di Nuova Delhi non offre 5 telefoni disponibili nel magazzino. Quindi
Aggiungeremo
-
10 mapping x Numero di negozi al livello 3
- 5 mappature al negozio di Nuova Delhi
Tuttavia, implementare questo approccio e trovare i telefoni cellulari disponibili nei negozi richiederà la lettura dei valori dai genitori.
Inoltre, essere in grado di ignorare un attributo di un modello di telefono in ogni livello in modo semplice e gestibile diventa una sfida.
Ho pensato a come risolvere questo problema in un modo piacevole e pulito e se utilizzare Database di documenti o Data Warehouse sarebbe effettivamente più adatto.