sql >> Databasteknik >  >> RDS >> Database

Lägga till fler avancerade funktioner som att hantera kategorier och rösta på trådar och inlägg

I min andra artikel om ett onlineforum nämnde jag att det kan finnas flera mer avancerade funktioner att lägga till:

  • Forum-kategorier och underkategorier där varje kategori har ett ämne, flera moderatorer och ytterligare information som datum för skapande av kategorin.
  • Ett inlägg kan ha ett ämne utöver innehållet.
  • Vi kanske vill tillåta användare att rösta upp och rösta ner på trådar och inlägg.

För att lättare kunna greppa modellen har vi förberett ett exempel på ett sådant forum med kategorier, trådar, inlägg etc. Vi hoppas att detta gör det lättare att förstå saker och ting:

Entiteter från del 1 är färgade i gult och enheter från del 2 är färgade i orange. Här är den aktuella databasmodellen efter de två första artiklarna:




Mer information om inlägg

I den andra artikeln lade jag bara till relationer till "status" för trådar och inlägg, men nu skulle jag vilja förstärka inläggen med en ytterligare detalj utöver bara enkelt innehåll. För nu kommer jag att lägga till ett "ämne" för varje inlägg som kan skilja sig från "ämnet" i tråden. Med "ämnet" (tänk på ämnesraden i ett e-postmeddelande eller ämnet för ett MMS-meddelande) kan vi visa en komprimerad version av innehållet – som de första raderna i ett e-postmeddelande som visas i Outlook, eller på din telefons post. Användare kan också använda ett inläggs "ämne" för att spela in en kommentar på hög nivå som "Jag håller inte med" och sedan lägga sina argument i kommentarsavsnittet i inlägget. Detta är en trevlig enkel förändring av modellen.

Kategorier

Nu när vi har värmt upp oss, låt oss lägga till ett nytt koncept (entitet) för kategorisering av trådar och inlägg. Varje kategori kommer att definieras med ett namn; varje kategori skapas av en användare och kommer att ha minst en moderator bland användarna, plus några andra attribut som de inlägg och trådar vi redan har. Vi skulle vilja ha kategorier och underkategorier, så vi tillåter att kategorier refererar till andra (under)kategorier.

Eftersom jag skulle vilja ha flera moderatorer för varje kategori kommer jag att göra en tabell för att länka kategorier till grupper av användare och länka användare till dessa grupper. Den här tabellen kommer att definiera "grupper" av användare, varav en kommer att vara "moderatorer", men i framtiden kan detta utökas för andra typer av grupper.

Rösta eller "gilla"

Personligen föredrar jag att "rösta upp" eller "rösta ner" på något snarare än att bara "gilla" det (men jag antar att Mark Zuckerberg inte håller med mig om det). Jag kommer att välja att skapa en röstningsmekanism som tillåter användare att rösta upp eller ned. Vi kanske väljer att inte tillåta nedröster när det inte finns några upp-röster, eller begränsa antalet nedröster, men det är upp till applikationen att avgöra, databasen kommer helt enkelt att hålla reda på antalet upp- och nerröster.

Vi kanske skapar separata tabeller för röster på trådar och röster på inlägg, men jag kommer att behålla dem i samma tabell med valfria främmande nycklar från trådar och inläggstabellen. Dessutom väljer jag att inte ha omröstning på kategorier.

Formell design

För nu avslutar det förändringarna på modellen, så vi kan titta på den formella designen. Återigen utökar vi ERD som skapades i del 1 och 2. Ändringar som beskrivs i den här artikeln och som introduceras i modellen är färgade i blått.




Slutsats

Det finns fortfarande ytterligare förbättringar som kan göras, men här har vi gjort vår databas för ett onlineforum till en ganska komplett design – detta skulle stödja de flesta typiska diskussionsforum online.

Vilka andra funktioner kräver ditt onlineforum?

« Föregående del  


  1. SQL DEFAULT Begränsning för att infoga kolumn med ett standardvärde till SQL Server-tabell

  2. SQLite - Välj Data

  3. Använder variabel i SQL LIKE-satsen

  4. Ställ in startvärde för kolumn med autoinkrement