Bevor Sie mir Duplikate zeigen, beachten Sie bitte, dass ich die Seite durchsucht habe und einige einige Beispiele gefunden habe, die aber nicht ganz spezifisch für mein Problem sind:)
Was ist der beste Weg, um eine Friendship -Tabelle in SQL zu erstellen, aber sicherzustellen, dass jede Zeile eindeutig ist in dem Sinne, dass die gleiche UserID und FriendID niemals erlaubt sind, unabhängig davon, zu welcher Spalte sie gehören ?
Ich habe dieses grobe Beispiel
%Vor%Und es gibt 2 Fremdschlüssel für die Tabelle "Benutzer", sowohl von UserID als auch von FriendID.
Im Moment kann ich jedoch eine Freundschaft zwischen Benutzern zweimal einfügen und so ein Duplikat erstellen. Beispiel
%Vor% Wie stelle ich sicher, dass diese Integrität erzwungen wird, vielleicht 2 PKs ? Eine Art eindeutiger Index ? Oder würden Sie insgesamt ein besseres Tischdesign vorschlagen? Würden Sie auch eine autoinkrementierende FriendshipID
setzen? Wenn ja, kannst du erklären warum?
Erstellen des Primärschlüssels für die Tabelle FRIENDSHIP
:
... stellt sicher, dass Sie keine Duplikate in der Reihenfolge haben können. Das heißt, es wird Sie davon abhalten, Duplikate von Benutzer-ID "123" und Friendid "789" hinzuzufügen. Wenn Sie die Statusspalte angeben, ist dies nicht mehr der Fall, da ein anderer Statuswert Dubletten der Spalten "userid" und "friendid" zulässt.
Um umgekehrte Paare zu stoppen - Benutzer-ID "789" und Freund-ID "123" - müssen Sie entweder die Logik einschließen, um zu überprüfen, ob das Paar bereits in der Tabelle in einer gespeicherten Prozedur, Funktion oder Trigger vorhanden ist. Eine CHECK-Einschränkung der Benutzer-ID & lt; Friendid würde einen gültigen Versuch beenden, Benutzerid "789" und Friendid "123" hinzuzufügen, wenn das Reverse nicht bereits vorhanden ist.
%Vor%Quassnoi hat einen Artikel geschrieben, der erklärt, warum Sie eine Version der Tabelle mit zwei Zeilen pro Paar haben möchten, um Abfragen zu vereinfachen: Ссылка
(der Artikel spricht über MySQL, aber es ist es wert, als eine Leistungstechnik für jede SQL-Datenbank in Betracht gezogen zu werden)
Sie können eine UNIQUE-Einschränkung hinzufügen, um zu verhindern, dass ein Benutzer zweimal in einer Freundschaft ist.
Sie haben Nutzer und Freundschaften. Benutzer können Freundschaften (die 0 oder mehr Benutzer sein können) beitreten, indem sie einen Datensatz in der dritten Tabelle erstellen.
Tags und Links sql sql-server tsql database-design data-modeling