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ügen

versuchte 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!

War es hilfreich?

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 Sie

eine 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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top