sql >> Databasteknik >  >> RDS >> Database

Skapa en mer avancerad modell med status för användare, trådar och inlägg

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

  • Mer formell information om användaren istället för ett enda "namn"-fält. Du kanske vill ha användarens förnamn, efternamn och användarnamn eller smeknamn. Ett trevligt forum skulle också tillåta användare att ha en profilbild, e-post, roller, status (för att tillåta användare att blockeras) och annan information som när de senast besökte forumet.
  • Ytterligare kontroll relaterad till skapande av användare så att vi kan spåra när en ny användare skapas men innan hans/hennes e-postadress har bekräftats.
  • Forum-kategorier och underkategorier där varje kategori har ett ämne, flera moderatorer och ytterligare information som skapandet av kategorin. Ett ämne för ett inlägg utöver innehållet
  • Modererade inlägg som måste godkännas av en moderator innan de är synliga för andra användare. Inlägg och trådar skulle ha olika status som:väntar på publicering, publicerade, rapporterade som skräppost, blockerade, avblockerade.
  • Och då kanske vi vill tillåta användare att rösta upp och rösta ner trådar och inlägg.

För forumet kommer jag att använda termen "tråd" för att referera till en konversation med potentiellt flera inlägg relaterade till tråden.




Jag kommer att göra en inledande kommentar; Jag använder vanligtvis runda tal som 100 eller 1000 för att definiera längden på varcharfält; Jag föreslår inte att dessa nödvändigtvis är av lämplig storlek, utan jag använder detta som en stenografi, snarare än att lämna längden odefinierad (%). Å andra sidan använder jag ibland mycket specifika längder för fält som email och ip_address; 254 är den maximala längden som en e-postadress kan vara enligt RFC-definitionerna, medan 45 är den maximala längden som en IPv6-adress kan vara.

Användarinformation

I del 1 av vår artikelserie om att bygga ett onlineforum var användarinformationen mycket begränsad. Jag kommer att förbättra användarinformationen som lagras. För tillfället kommer moderering att vara väldigt grundläggande:användare kommer antingen att vara moderator eller inte. Vi kanske skapar mer komplicerade modereringsregler relaterade till kategorier och trådar senare.

För användarens status kommer jag att skapa user_status tabell, så att jag kan återanvända den i en annan situation även om det finns väldigt få statusar, som "EMAIL_NOT_VERIFIED", "VERIFIED" och "BLOCKED".

Skapa användare

Jag kommer att använda användarens status för att känna igen användare som har statusen "EMAIL_NOT_VERIFIED" efter att en användare har skapat sitt konto och ett e-postmeddelande har skickats till deras angivna e-postadress, men innan de har klickat på verifieringsadressen i e-postmeddelandet. Du kan till och med bli svårare och ha statusar som "EMAIL_VERIFICATION_TO_BE_SENT" och "EMAIL_VERIFICATION_RESENT" om några av dessa steg hanteras av olika komponenter i ditt system och inte omedelbart när användaren skapas.

Trådar och inläggsstatusar

Modererade inlägg måste godkännas av en moderator innan de är synliga för andra användare. Inlägg och trådar skulle ha olika status som:väntar på godkännande, godkända, rapporterade som spam, blockerade. För status för trådar och inlägg kommer jag att välja ett mer flexibelt sätt att hantera statusar genom att länka till status tabell. Då måste applikationen veta vad varje värde betyder i statustabellerna (om status =“GODKÄND” visas tråden), men jag föredrar detta framför att bara lagra en text i thread och post tabeller. Vi kommer att ha några statusar, som "WAITING_FOR_APPROVAL", "APPROVED", "REJECTED", "REPORTED_AS_SPAM" och "BLOCKED", och vi kanske vill lägga till fler i framtiden.

Med andra ord, en användare skapar en ny tråd eller ett nytt inlägg, och det sätts i statusen "NOT_APPROVED". Ej godkända trådar och inlägg visas inte för de flesta användare; dock kan moderatorer se ej godkända objekt och välja "Godkänn" eller "Avvisa". Användare kan markera en tråd eller ett inlägg som spam, men det måste bekräftas av en moderator. Spamtrådar och inlägg visas inte för användare.

Detta gör att jag kan använda status tabell för både trådar och inlägg, eftersom statusen för båda dessa bör ha samma betydelse. Jag kommer inte att missbruka status tabell för att indikera användarens status; Jag tror inte att det skulle vara ett bra designval.

Formell design

Så vi utökar ERD som skapades i del 1. Jag har färgat tabellerna som skapades i del 1-artikeln i gult och färgat de nyligen tillagda tabellerna i orange så att det är lättare att se tilläggen. Jag har dock inte markerat enskilda ändringar i tabeller.



Vad härnäst?

Återigen, det finns fortfarande ytterligare förbättringar att göra, men här har vi tagit ett mycket enkelt onlineforum och lagt till flera användbara nya funktioner.

I nästa delar ska jag titta på att lägga till andra funktioner som:

  • forum kategorier och underkategorier där varje kategori har ett ämne, flera moderatorer och ytterligare information som skapandet av kategorin. Ett ämne för ett inlägg utöver innehållet
  • och då kanske vi vill tillåta användare att rösta upp och rösta ner trådar och inlägg.

Vilka funktioner kräver ditt onlineforum? Finns det några funktioner du vill att jag ska ta hänsyn till när jag förbereder nästa del av den här serien? Om så är fallet, låt mig veta.

« Föregående del Nästa del »


  1. MySQL CAST vs CONVERT

  2. Få den första dagen i månaden i PostgreSQL

  3. PDO vs pg_* funktioner

  4. psql:kunde inte ansluta till servern:Ingen sådan fil eller katalog (Mac OS X)