关系混乱

时间:2011-03-31 14:44:04

标签: c# asp.net mysql sql html

嘿伙计我有一个令人困惑的问题,我有一个用户表,它存储了您期望的用户的所有常用数据,但我试图找出用户如何添加其他用户?

听起来很奇怪,但User表中的每个用户都有自己的UI,即UserID,如何添加另一个表,UserID可以与另一个UserID建立关系?

enter image description here

我将给那些可能花时间上传表格图表的人给出答案,谁可以帮助解决与此问题相关的sqlsyntax的一些示例,即如果我想显示,我将如何正确解决上述问题的语法页面上的所有UserIDs朋友。我该如何添加朋友?

4 个答案:

答案 0 :(得分:2)

你只需要一对多的关系。

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 :(得分:2)

enter image description here您只需要另一张类似于图片和墙贴牌桌子的桌子。您只需要能够为一个用户ID(一对多)记录许多朋友ID

例如:

然后得到朋友的查询将是:

DECLARE @UserID AS BIGINT

SET @UserID = 123

SELECT [friends].*
FROM [friends]
where [parentuserid]=@UserID#

插入好友:

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 :(得分:1)

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

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

<强>更新

对于朋友(多对多关系),您应该在StackOverflow上查看以下问题

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

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

Facebook使用类似的方法,他们在朋友之间有一种交叉连接表。

答案 3 :(得分:1)

你对图表等问了很多....至少对我来说。

这取决于关系的类型,一对一,它将是您的用户表中的另一个列。如果它是多对多你需要一个联结表,有两列UserIDA,UserIDB。根据你需要这种关系的原因。