关系混淆

问题描述:

嘿家伙我有一个令人困惑的问题,我有一个用户表,它存储了用户所需的所有常用数据,但我试图弄清楚用户如何添加其他用户?关系混淆

听起来很奇怪,但User表中的每个用户都有自己的UI,它是UserID我怎么能添加另一个表,其中UserID可以与另一个UserID有关系?

enter image description here

我会给出答案的那些可以花时间上传表图,以及谁可以用一些例子为sqlsyntax与此相关的问题,即帮助我将如何正确的语法以上问题是否想要在页面上显示所有的用户ID朋友。我将如何添加一个朋友。

enter image description here您只需要另一张类似于图片和墙纸表的表格。你只需要能够录制了许多朋友的ID为一个用户ID(一对多)

如:

的查询然后让朋友将是:

DECLARE @UserID AS BIGINT 

SET @UserID = 123 

SELECT [friends].* 
FROM [friends] 
where [parentuserid][email protected]# 

插入一个朋友:

DECLARE @UserID AS BIGINT 
DECLARE @FriendID AS BIGINT 

SET @UserID = 123 
SET @FriendID = 321 

INSERT INTO [Friends] 
(
    [ParentUserID], 
    [ChildUserID] 
) 
VALUES 
(
    @UserID, 
    @FriendID 
) 

代码中插入它例如:

private void Test() 
{ 
    string Query = 
     @"INSERT INTO [Friends] 
      (
      [ParentUserID], 
      [ChildUserID] 
     ) 
      VALUES 
      (
      @UserID, 
      @FriendID 
     )"; 

    using (SqlConnection oSqlConnection = new SqlConnection("connect string")) 
    { 
     oSqlConnection.Open(); 

     using (SqlCommand oSqlCommand = new SqlCommand(Query,oSqlConnection)) 
     { 
      oSqlCommand.Parameters.AddWithValue("@UserID", Session["UserID"]); 
      oSqlCommand.Parameters.AddWithValue("@FriendID", Session["FriendID"]); 

      oSqlCommand.ExecuteNonQuery(); 
     } 
    } 
} 

你从哪里得到你的朋友ID?什么是添加朋友的过程?你会搜索它们并从列表中选择它们吗?

+2

是否需要'FriendID'? – 2011-03-31 14:57:02

+0

所以ParentUserID是当前的用户ID和childuserid是你添加的用户ID? – 2011-03-31 14:57:57

+0

@Chris - 不,但我总是在我的桌子上有一个主键。 – WraithNath 2011-03-31 14:58:29

我认为你有一个用户引用其他用户加入一个简单的要求。如果是这种情况,那么您可以简单地在User表中添加一列ReferenceUserID,并且每当新用户引用另一个用户时,只需将他添加到引用用户的UserID即可。如果他不是被推荐的用户,那么默认情况下它将是NULL

稍后检索,您可以使用自我加入。

更新:

对于朋友(多对多的关系),你应该看看在*上

Database design: Best table structure for capturing the User/Friend relationship?

UserRelationship 
==== 
RelatingUserID 
RelatedUserID 
Type[friend, block, etc] 

类似的方法是使用Facebook的,他们有以下问题朋友之间关系的一种交叉连接表。

+0

我认为他希望能够添加好友,而不仅仅是存储用户将他们引用到网站。但这并不完全清楚。你建议1:1的关系,我认为他需要很多关系。 – NerdFury 2011-03-31 14:54:46

+0

OP的问题不清楚......还有很多其他答案解释了另一方面(m2m rel),所以我没有包括这一点。 – 2011-03-31 15:05:20

你只需要一个多对多的关系。

Create Table Friend(
    UserId int, 
    FriendId int, 
    Constraint pk_friends Primary Key (UserId, FriendId), 
    Constraint fk_friend_user Foreign Key (UserId) References User(UserId), 
    Constraint fk_friend_friend Foreign Key (FriendId) References User(UserId) 
) 
+1

+1这需要你做更多的选择,你是否为友好连接插入两行每个友谊userA,userB和userB,userA,或者在连接逻辑中包含一个谓词以使单个记录工作无论哪种方式。另外如果选择第一个选项是自动2种方式的友谊? – Robb 2011-03-31 14:58:23

+0

@Robb - 好点。这是否像你可以关注的twitter,但其他人不需要关注?或者,这种关系更像Facebook,你确认你实际上是朋友,双方都知道这种关系?不确定它会改变我的答案,但它确实会影响您对待数据的方式。 – NerdFury 2011-03-31 15:15:30

你对图表等问题稍微有点....至少对我来说。

这取决于一对一的关系类型,它将成为用户表中的另一个列。如果它很多很多,你需要一个联结表,有两列UserIDA,UserIDB。取决于你为什么需要这种关系。