un pattern di progettazione composito sarebbe utile per l'appartenenza al gruppo?

0

Sto cercando di pensare al modo migliore per gestire le iscrizioni ai gruppi su un sito web. Le persone si registrano e selezionano le caselle di controllo in un elenco di interessi. Ogni settimana inviamo e-mail a interesse per quei membri che hanno indicato questo interesse.

tuttavia memorizzo le informazioni nel database, mentre sto lavorando con gli elenchi e generando elenchi di indirizzi email o manipolando le appartenenze ai gruppi, il modello di progettazione composito sembrava interessante.

sarebbe facile popolare il gruppo, quindi eseguire alcune funzioni di aggregazione che dicono ... generare l'elenco di indirizzi e-mail in base agli interessi.

ma non sono sicuro di vedere altri vantaggi. ho bisogno di qualcosa di scalabile e flessibile.

pensieri?

    
posta changokun 12.11.2012 - 01:31
fonte

1 risposta

3

Gli schemi di progettazione si applicano più al codice, che ai database. Quando hai inserito il mondo del database, vuoi semplicemente un database normalizzato . Il problema più grande che hai con il pattern composito è la scala: per manipolare quegli oggetti OO, dovresti estrarre tutti i dati dal database, indipendentemente se ne hai bisogno, il che è uno spreco e poco pratico se ottieni elenchi di grandi dimensioni.

Nel tuo caso:

  • users : id, nome, email, ecc.
  • interests : id, descrizione
  • users_interests : user_id, interest_id

con le chiavi primarie / uniche appropriate. Successivamente, è possibile ottenere tutte le informazioni necessarie in un'unica query di database.

Ad esempio:

  • Tutte le email interessate a cycling ( id=2 ):

    SELECT email FROM users
    JOIN   user_interests ON user_interests.id = users.id
    WHERE  user_interests.interest_id = 2
    
  • Tutti gli utenti interessati agli ID 2, 3, 4 e 5 :

    SELECT email FROM users
    JOIN   user_interests ON user_interests.id = users.id
    WHERE  user_interests.interest_id IN (2, 3, 4, 5)
    GROUP BY users.id
    HAVING COUNT(users.id) = 4
    

Tuttavia, molti framework (ad esempio CakePHP per PHP) lo faranno per te.

    
risposta data 12.11.2012 - 01:47
fonte