Einzigartige Rekord in Asp.Net SQL
Frage
Ich habe diese Frage zuvor, aber die Antworten waren nicht das, was ich suchte.
Ich habe eine Tabelle in Asp.net ohne Code. Es enthält zwei Spalten.
YourUserID und FriendUserId
Dies ist eine viele zu viele Beziehung.
Heres, was ich will:
Es kann als die Benutzer-ID mehrere Datensätze mit Ihrem Namen sein, kann es auch mehrere Datensätze sein mit FriendUserId das gleiche sein ... aber es kann nicht mehrere Datensätze sein mit beide gleich sind. Zum Beispiel:
Dave: Greg
Dave: Chris
Greg: Chris
Chris: Greg
ist gut
Dave: Greg
Dave: Greg
ist nicht gut.
Ich klickte rechts auf dem Tisch und wählte Indizes / Schlüssel. Ich habe dann beide Spalten in den Spalten Abschnitt und wählte die einzigartig zu machen. Ich dachte, dies würde sie als Ganzes einzigartig machen, aber einzeln nicht eindeutig.
Wenn Sie den Datensatz gehen, es Tasten zeigt neben den beiden Spalten und sagt, dass es eine Einschränkung mit beiden Spalten überprüft werden.
Gibt es eine Möglichkeit nur dafür sorgen, dass Sie nicht eine Kopie eines Datensatzes in der Tabelle ohne einzelne Spalten eindeutig ist?
einfügenversuchte ich es mit meiner SQL-Anweisung INSERT controling aber das hat nicht funktioniert. Das ist, was ich versuchte.
INSERT INTO [FriendRequests] ([Benutzer-ID], [FriendUserId]) VALUES ( ' "+ Benutzer-ID +"', ' "+ PossibleFriend +"') WHERE NOT EXIST ([Benutzer-ID] SELECT [FriendUserId] FROM [FriendRequests])
Das ist nicht aus irgendeinem Grund nicht funktioniert. Vielen Dank für Ihre Hilfe!
Lösung
Sie sollten eine Verbindung Primärschlüssel erstellen doppelte Zeilen zu verhindern.
ALTER TABLE FriendRequests
ADD CONSTRAINT pk_FriendRequests PRIMARY KEY (UserID, FriendUserID)
oder wählen Sie beiden Spalten in Tabellen-Designern und die rechte Maustaste, um es als Schlüssel festgelegt.
Selbst Freundschaft Um zu verhindern, werden Sie eine CHECK
Einschränkung erstellen:
ALTER TABLE FriendRequests
ADD CONSTRAINT ck_FriendRequests_NoSelfFriends CHECK (UserID <> FriendUserID)
Sie können die Check-Einschränkung im Designer mit der rechten hinzufügen überall in der Tabelle Designer klicken, auf „Check Constraints“, „hinzufügen“, klicken und Ausdruck UserID <> FriendUserID
Einstellung
Sie können unter diese Frage prüfen wollen
Andere Tipps
Klingt wie Sie einen zusammengesetzten Schlüssel benötigen beiden Felder einen einzelnen Schlüssel zu machen.
Ich habe eine bessere Idee. Erstellen Sie eine neue Tabelle. Genannt FriendRequestRelationships. Haben die folgenden Spalten
FriendRelationshipId (PRIMARY KEY) UserId_1 (Fremdschlüssel) UserId_2 (Fremdschlüssel)
Setzen Sieeine eindeutige Einschränkung auf nur einer Beziehung wit UserId_1 und UserId_2 zu ermöglichen. Diese Tabelle dient nun als many-to-many-Beziehung Gurtzeug.
Erstellen Sie eine skalare Funktion, die die FriendUserId für eine Benutzer-ID zurückgeben kann, können sagen, es fn_GetFriendUserIdForUserId genannt
Sie können nun Ihre Beziehungen anzeigen, indem Sie die folgende Abfrage ausführen
SELECT dbo.fn_GetFriendUserIdForUserId (UserId_1) AS 'Friend1', dbo.fn_GetFriendUserIdForUserId (UserId_2) AS 'Friend2', VON FriendRelationshipId