Strategie per il conteggio degli oggetti figli

3

Che cos'è un modo efficiente, OOP, per contare i record figli di un oggetto?

Nel mio attuale progetto, un distretto può contenere zero o più record Scuola . L'oggetto Districts funge da raccolta di District e può eseguire una singola query per ottenere i dati dietro diversi District in una volta sola, piuttosto che ogni query District (Active Record) per i propri dati. District- > schools () fornisce l'accesso alle scuole dell'infanzia.

Nella pagina in questione, voglio elencare tutti i distretti e un conteggio delle loro scuole secondarie. Questo sta diventando molto lento man mano che il numero dei distretti cresce, poiché ogni distretto deve nuovamente interrogare il tavolo delle scuole. Inoltre, il driver del database che stiamo utilizzando non fornisce un conteggio delle righe per il set di record, quindi quella sarebbe un'altra query. Alcune cose che ho considerato:

  • Un oggetto facoltativo disponibile attraverso un localizzatore di servizi che può fornire conteggi.
  • Archiviazione del conteggio figlio con il record genitore.

Quindi, il mio attuale metodo di conteggio dei record figlio è piuttosto pesante. Quali sono alcuni modi in cui posso alleggerire questo carico?

    
posta Annika Backstrom 29.12.2011 - 14:39
fonte

1 risposta

4

An optional object available through a service locator which can provide counts.

Sì che funziona , ma assicurati di farlo in una query .. (Per mantenerlo in OO, aggiungi un metodo nel posto appropriato, che esegue la query e restituisce una raccolta)

Select DistrictID, D.name,count(s.SchoolID) AS CountOfSchools
    from District s
    left join School s on s.DistrictID=d.DistrictID
group by DistrictID, D.name

* Questo presuppone che ogni scuola possa essere presente in un solo distretto.

Storing the child count with the parent record.

Funziona troppo! Ma non de-normalizzare i dati, Crea vista (come la query precedente) a cui l'oggetto ha accesso per i dati calcolati. Nota che questa vista è una relazione uno a uno semplice nella tua tabella di distretto.

    
risposta data 29.12.2011 - 15:17
fonte

Leggi altre domande sui tag