Mantenere la coerenza quando gli articoli possono essere in diverse classi

2

Ho difficoltà a capire come relazionare correttamente un articolo con le classi.

Ad esempio, ho un sito web di directory aziendali che mostra i profili di diverse società in base ai prodotti / servizi che offrono. La compagnia "LG", ad esempio, produce smartphone, TV, frullatori, ecc.

Desidero che la società venga visualizzata di conseguenza in ciascuna categoria e ogni categoria principale mostri il numero di società che detiene [vale a dire Elettronica (243) ci sono 243 aziende che producono elettronica].

Supponiamo di avere:

 1. Electronics (243)        
    - Computers (14)
    - Smartphones (8)        // one of the 8 is LG 
    - TVs (10)               // one of the 10 is LG
 2. Kitchen tools (120)
    - Blenders (4)
    - etc.

Voglio che la categoria padre mostri il numero totale di ... [uniche] ... aziende in esso. Se la società LG produce TV e smartphone, la categoria padre conta una società due volte, fornendo quindi informazioni errate. L'utente potrebbe pensare che ci siano 2 aziende in questa categoria, mentre ce n'è solo una.

Come posso evitare i duplicati?

    
posta Nurbek 29.10.2016 - 16:09
fonte

2 risposte

1

Sembra un lavoro per Imposta tipo di dati astratti !

Affinché ciascuna azienda possa essere recuperata tra le sottocategorie, è sufficiente accumularle in una struttura predefinita mentre si scorre su di esse. Quelli che sono già stati scoperti saranno scartati dalla struttura. Al termine, chiedi alla struttura cosa per la sua cardinalità (conteggio o lunghezza).

Questa idea è supportata in molte lingue. Non hai elencato il tuo ma sarei sorpreso se non esistesse già in qualche modo. L'idea è ben documentata se trovi che devi implementarla tu stesso.

Alcune lingue non forniscono automaticamente l'hash necessario per questo a tutti gli oggetti (guardandoti java). Se costruisci i tuoi oggetti per questo, assicurati di averne a che fare. Tuttavia, è probabile che tu riesca a cavartela con stringhe che persino java fornisce con un hash.

Per quanto non sembra giusto, spiega semplicemente cosa stai mostrando loro:

Departments (unique companies)

  1. Electronics (18)
    • Computers (14)
    • Smartphones (8)
    • TVs (10)
  2. Kitchen tools (12)
    • Blenders (4)
    • etc.
    
risposta data 29.10.2016 - 21:16
fonte
1

I tuoi requisiti

  • hai un albero di categorie
  • hai società; le società sono assegnate ad almeno una categoria; possono essere assegnati a diversi
  • si desidera contare le società assegnate a qualsiasi nodo di categoria, assicurandosi che ogni azienda venga conteggiata una sola volta:
    • per le categorie di fogli contate il numero esatto di aziende assegnate
    • per le categorie principali, devi prendere in considerazione le società che sono assegnate alla categoria stessa e le società assegnate a tutti i bambini, assicurandosi di non contare due volte l'azienda
    • matematicamente, nella categoria radice si conta il numero totale di aziende.

Possibile soluzione

Il tuo modello di dati deve rappresentare la relazione diretta di aziende e categorie (nodi).

Devi quindi creare la chiusura transitiva di questa relazione:

  • Per un nodo foglia, il gruppo di chiusura conterrebbe tutte le società in relazione diretta.
  • Per un nodo genitore, il gruppo di chiusura conterrebbe tutte le società in relazione diretta con quel nodo e tutte le società nei gruppi di chiusura dei suoi figli. Si noti che in un set, per definizione, ogni elemento appare al massimo una volta; tecnicamente faresti qui unione di set.

Potresti seguire due approcci pratici per l'implementazione:

  • Puoi implementarlo nel tuo modello OOP, costruendo un contenitore di contenitori di chiusura per ogni nodo. A te decidere se costruire questo set di chiusura su richiesta o se lo mantieni ogni volta che aggiungi una nuova associazione.
  • Puoi farlo anche nell'RDBMS usando una tabella di chiusura.

Per raggiungere l'obiettivo prefissato, contatteresti le aziende nel set di chiusura di ciascuna categoria.

Letture aggiuntive

Molti articoli qui si riferiscono a chiusure transitive in un grafico o in un albero a livello di nodo (vale a dire che la chiusura conterrà tutti i nodi raggiungibili da uno o più movimenti verso il basso nell'albero). Dovresti adattarli per inserire la chiusura non il nodo stesso, ma le società che sono collegate a ciascuno di questi nodi.

risposta data 29.10.2016 - 22:04
fonte