Ich arbeite an der Erstellung eines Nachrichtensystems als Lieblingsprojekt, das die Möglichkeit von Dateianhängen beinhalten wird. Dies wird auf einer Website von mir für das interne Nachrichtensystem verwendet werden.
Eines der Merkmale dieses Systems ist, dass ich die MD5-Prüfsumme jeder hochgeladenen Datei beibehalten möchte, so dass, wenn doppelte Dateien hochgeladen werden, die beiden Links auf dieselbe Datei verweisen.
Bislang habe ich mir Folgendes ausgedacht:
Message
----------
MessageID (PK)
SenderID (FK)
RecipientsID (FK)
AttachmentsID (FK)
Subject
MessageText
DateSent
Recipient
----------
UserID (FK)
MessageID (FK)
Attachment
----------
ID
Name
MessageID (FK)
FileID (FK)
File
----------
ID
Checksum
LastAccessDate
AccessCount
Sie können also mehrere Nachrichten verfassen, von denen jede mehrere Anhänge enthalten kann. Aber auch, um Platz auf unserem Server zu sparen, da in meinem Anwendungsfall viele Benutzer dieselbe Datei hochladen werden, können verschiedene Anhänge auf dieselbe Datei verweisen.
Meine Frage ist, sollte die Nachrichtentabelle eine Art von RecipientsID enthalten? Oder reicht es aus, wenn meine Empfängertabelle auf die MessageID verweist?
Die gleiche Frage stellt sich für AttachmentsID in der Tabelle Message. Sollte ich eine Art von AttachmentsID haben? Oder reicht es aus, dass die Tabelle Attachment auf die MessageID verweist.
Ist es in Ordnung, wenn eine Nachricht keinen Bezug zu ihren Anhängen oder Empfängern hat, wenn sowohl Anhänge als auch Empfänger wissen, zu welcher Nachricht sie gehören? Oder sollte ich es anders machen?
Ich bin neugierig zu hören, wie erfahrene SQL-Experten dieses Schema aufbauen würden.
Bearbeiten: Ich möchte mehrere Empfänger und mehrere Anhänge pro Nachricht haben. Es tut mir leid, wenn das nicht klar war.
Gerade bei diesen eins-zu-vielen-Beziehungen habe ich Schwierigkeiten zu verstehen, ob ich es richtig mache.