Database
 sql >> Database >  >> RDS >> Database

Aggiunta di funzionalità più avanzate come la gestione delle categorie e la votazione di discussioni e post

Nel mio secondo articolo su un forum online, ho menzionato che potrebbero esserci diverse funzionalità più avanzate da aggiungere:

  • Forum categorie e sottocategorie in cui ogni categoria ha un argomento, diversi moderatori e informazioni aggiuntive come la data di creazione della categoria.
  • Un post potrebbe avere un oggetto oltre al contenuto.
  • Potremmo voler consentire agli utenti di votare a favore e vota contro su thread e post.

Per poter cogliere il modello più facilmente, abbiamo preparato un esempio di un forum di questo tipo con categorie, thread, post, ecc. Ci auguriamo che questo renda più facile capire le cose:

Le entità della Parte 1 sono colorate in giallo e le entità della Parte 2 sono colorate in arancione. Ecco l'attuale modello di database dopo i primi due articoli:




Maggiori dettagli sui post

Nel secondo articolo, ho aggiunto solo relazioni allo "stato" per thread e post, ma ora vorrei migliorare i post con un dettaglio aggiuntivo oltre al semplice contenuto. Per ora, aggiungerò un "oggetto" per ogni post che potrebbe essere diverso dal "oggetto" del thread. Con l'"oggetto" (pensa alla riga dell'oggetto di un'e-mail o all'oggetto di un messaggio MMS), possiamo visualizzare una versione ridotta del contenuto, come le prime righe di un'e-mail mostrata in Outlook o sul telefono posta. Inoltre, gli utenti possono utilizzare il "soggetto" di un post per registrare un commento di alto livello come "Non sono d'accordo" e quindi inserire le proprie argomentazioni nella sezione commenti del post. Questa è una bella semplice modifica al modello.

Categorie

Ora che ci siamo riscaldati, aggiungiamo un nuovo concetto (entità) per la categorizzazione di thread e post. Ogni categoria sarà definita con un nome; ogni categoria è creata da un utente e avrà almeno un moderatore tra gli utenti, oltre ad alcuni altri attributi come i post e le discussioni che abbiamo già. Vorremmo categorie e sottocategorie, quindi consentiremo alle categorie di fare riferimento ad altre (sotto)categorie.

Poiché vorrei avere più moderatori su ciascuna categoria, creerò una tabella per collegare le categorie a gruppi di utenti e collegare gli utenti a quei gruppi. Questa tabella definirà "gruppi" di utenti, uno dei quali sarà "moderatore", ma in futuro potrebbe essere ampliato per altri tipi di gruppi.

Votazione o "Mi piace"

Personalmente, preferisco "votare in alto" o "votare in basso" su qualcosa piuttosto che semplicemente "mi piace" (ma su questo credo che Mark Zuckerberg non sia d'accordo con me). Sceglierò di creare un meccanismo di voto che consenta agli utenti di esprimere un "voto positivo" o un "voto negativo". Potremmo scegliere di non consentire voti negativi quando non ci sono voti positivi o limitare il numero di voti negativi, ma spetta all'applicazione decidere, il database terrà semplicemente traccia del conteggio dei voti positivi e negativi.

Potremmo creare tabelle separate per i voti sui thread e i voti sui post, ma li terrò nella stessa tabella con chiavi esterne opzionali dalla tabella thread e post. Inoltre, scelgo di non votare le categorie.

Design formale

Per ora, questo riassume le modifiche al modello, quindi possiamo guardare il design formale. Ancora una volta, estendiamo l'ERD che è stato creato nelle parti 1 e 2. Le modifiche descritte in questo articolo e introdotte nel modello sono colorate in blu.




Conclusione

Ci sono ancora ulteriori miglioramenti che potrebbero essere apportati, ma qui abbiamo trasformato il nostro database per un forum online in un design abbastanza completo:ciò supporterebbe la maggior parte dei forum di discussione online tipici.

Quali altre funzionalità richiede il tuo forum online?

« Parte precedente