Das Design scheint mir gut, aber der Schlüssel, den Sie auf dieser Messages
Tabelle definieren, sollte anders sein. Es ist völlig in Ordnung, dass der Benutzer X eine Nachricht an Benutzern Y mehrfach sendet, so sehe ich zwei Möglichkeiten für Sie den Schlüssel definieren:
sender_id
/receiver_id
/gendate
: es sollte nicht passieren, dass zwei Nachrichten aus dem gleichen Benutzer auf den gleichen Benutzer werden zur gleichen Zeit gesendet
ID
: Sie bereits einen Ersatzschlüssel bereitstellt, können Sie verwenden, dass
Edit (weitere explaination)
Wenn Sie eine Tabelle definieren, können Sie auch Eindeutigkeitseinschränkungen definieren.
Angenommen, Ihre Tabelle hat einen eindeutigen Schlüssel definiert als (, receiver_id
); damit sagst du dem dbms "Hey, lass mich nicht zwei Nachrichten mit den gleichen Werten von sender_id
und receiver_id
einfügen, denn das sind die Kriterien, die ich verwenden möchte, um eine Zeile eindeutig zu identifizieren". Auf diese Weise werden Sie bei der Auswahl eines Absenders und eines Empfängers sicher sein, dass Sie nicht mehr als eine Nachricht erhalten.
Wenn Sie eine Zeile mit den Werten 2 und 23 in Ihrer Tabelle haben, wird beim Versuch, eine andere Zeile mit denselben Werten einzufügen, diese Fehlermeldung angezeigt.
Meine erste Option sagt, dass, wenn Sie ändern, dass eindeutige Schlüssel auch gendate
statt, umfassen, die dbms wird Ihnen versichern, dass es zwei Reihen nicht mit den gleichen sender_id
, receiver_id
UND gendate
Werte sein. Die Zeilen, die Ihren Fehler verursachen, werden dann als unterschiedlich betrachtet. Die zweite Option besagt, dass wenn Ihr eindeutiger Schlüssel ID
ist, Sie sogar mehrere Nachrichten gleichzeitig zwischen denselben Benutzern haben können, solange Sie für jede einzufügende Zeile einen anderen ID
-Wert generieren.
Nun, wenn eine einzelne Nachricht mehrere Empfänger haben könnte, möchten Sie eine Tabelle für die Empfänger der Nachricht erstellen, und verwenden Sie sie für eine viele zu viele Beziehung zwischen der Nachricht und der Empfänger-ID. –
Eine Nachricht hat genau einen Empfänger, nicht multiplizieren. Ich habe eine Benutzertabelle. Die Nachrichtentabelle enthält Fremdschlüssel für die Benutzer-ID. Wenn ein Absender mehrere Nachrichten an denselben Benutzer schreibt, wird der Fehler "eindeutige Einschränkung verletzt" angezeigt. Das ist das Problem! Ich habe auch die beiden Schlüssel auf unique = False gesetzt. – Tim
Dann ist Ihre eindeutige Einschränkung falsch. Es kann nicht nur auf Absender- und Empfänger-IDs basieren, Sie müssen auch etwas anderes darin einschließen. –