English 中文(简体)
獨特的Asp.Net SQL記錄
原标题:
  • 时间:2009-04-02 17:34:33
  •  标签:

I asked this question previously but the answers weren t what I was looking for.

我在Asp.net中创建了一个没有使用代码的表格。它包含两列。

您的用户ID和朋友的用户ID

这是一种多对多关系。

Heres what I want:

可能有多条记录使用您的姓名作为UserId,也可能有多条记录使用相同的FriendUserId...但不能同时有两个相同的记录。 例如:

戴夫:格雷格

大卫: 克里斯

格雷格:克里斯

克里斯:格雷格

很好

戴夫:格雷格

戴夫:格雷格

不好。

我右键单击表格,选择索引/键。然后将两列放入列部分,并选择将其设为唯一。我认为这将使它们作为一个整体独一无二,但个别地并不独一无二。

如果您前往数据集,它将显示两列旁边的密钥,并表示这两列存在约束被检查。

有办法确保您不会将重复副本插入表中,而不需要将每个列都设置为唯一吗?

我尝试使用我的SQL插入语句来控制它,但是没有成功。这就是我尝试过的。

将以下内容翻译为中文:将以下内容插入到[FriendRequests]中([UserId], [FriendUserId])的值为(" +UserId+" , "+PossibleFriend+" ),如果不存在则进行插入操作(从[FriendRequests]中查找[UserId]和[FriendUserId])。

That didn t work for some reason. Thank you for your help!

最佳回答

你应该创建复合主键来防止重复行。

ALTER TABLE FriendRequests
ADD CONSTRAINT pk_FriendRequests PRIMARY KEY (UserID, FriendUserID)

或者在表设计师中选择两个列,并右键单击将其设置为关键字。

为了防止自我友谊,您需要创建一个CHECK约束:

ALTER TABLE FriendRequests
ADD CONSTRAINT ck_FriendRequests_NoSelfFriends CHECK (UserID <> FriendUserID)

您可以在设计师中通过在表设计师中的任何位置右键单击,点击“检查约束”,点击“添加”并将表达式设置为UserID <> FriendUserID来添加检查约束。

您可能想看一下这个问题

问题回答

听起来你需要一个组合键,将这两个字段作为一个单一的键。

我有个更好的主意。创建一个新的表。名叫FriendRequestRelationships。包含以下列:

FriendRelationshipId (PRIMARY KEY) UserId_1 (FOREIGN KEY CONSTRAINT) UserId_2 (FOREIGN KEY CONSTRAINT)

将唯一限制放置在只允许一个UserId_1和UserId_2之间存在关系。这个表现在作为你的多对多关系马具。

创建一个标量函数,可以返回一个用户ID的FriendUserId,假设它被称为fn_GetFriendUserIdForUserId。

你可以通过运行以下查询来显示你的关系。

SELECT dbo.fn_GetFriendUserIdForUserId(UserId_1) AS Friend1 , dbo.fn_GetFriendUserIdForUserId(UserId_2) AS Friend2 , FROM FriendRelationshipId





相关问题
热门标签