Styrker ved den første
Det første skema adlyder bedre normaliseringsregler, og det er sandsynligvis bedre i de fleste tilfælde.
At have et thread_id
, som dybest set er en naturlig nøgle, der ikke er en FK til et andet bord, beder sandsynligvis om problemer. Det vil være meget svært at håndhæve, at det er unikt, når du ønsker det, og det samme, når du ønsker det. Af denne grund vil jeg opfordre til det første foreslåede skema.
Styrker af anden
Dit andet skema gør det muligt at ændre emnet for hver besked i tråden. Hvis dette er en funktion, du ønsker, kan du ikke bruge den første mulighed, som du har skrevet den (men se nedenfor).
Andre muligheder
Message
- id
- parent (fk to Message.id)
- subject
- content
- timestamp
- sender (fk)
MessageRecipient
- message_id (fk)
- recipient (fk)
- status (read, unread, deleted)
I stedet for at have et thread_id
koncept, kan du intead have en parent
koncept. Så vil hvert svar pege på den oprindelige beskeds registrering. Dette tillader trådning uden en 'tråd'-tabel. En anden mulig fordel ved dette er, at det tillader trådtræer såvel. Kort sagt kan du repræsentere meget mere komplicerede forhold mellem beskeder og svar på denne måde. Hvis du er ligeglad med det, så vil dette ikke være en bonus for din ansøgning.
Hvis du er ligeglad med de trådningsfordele, jeg lige har nævnt, vil jeg nok anbefale en hybrid af dine to skemaer:
MessageThread(models.Model):
- id
Message(models.Model):
- thread (pk)
- subject
- content
- timestamp
- sender
MessageRecipient
- message_id (pk)
- recipient (pk)
- status (read, unread, deleted)
Dette ligner det første skema, bortset fra at jeg flyttede 'emne'-kolonnen fra MessageThread
til Message
tabel, for at tillade emnet at ændre sig, efterhånden som tråden skrider frem... Jeg bruger simpelthen MessageThread-tabellen til at fungere som en begrænsning på tråd-id'et, der bruges i Message (som overvinder de begrænsninger, jeg nævnte i begyndelsen af mit svar). Du har muligvis også yderligere metadata, som du vil inkludere i MessageThread-tabellen, men det overlader jeg til dig og din ansøgning.