2011-03-31 486 views
1

嘿傢伙我有一個令人困惑的問題,我有一個用戶表,它存儲了用戶所需的所有常用數據,但我試圖弄清楚用戶如何添加其他用戶?關係混淆

聽起來很奇怪,但User表中的每個用戶都有自己的UI,它是UserID我怎麼能添加另一個表,其中UserID可以與另一個UserID有關係?

enter image description here

我會給出答案的那些可以花時間上傳表圖,以及誰可以用一些例子爲sqlsyntax與此相關的問題,即幫助我將如何正確的語法以上問題是否想要在頁面上顯示所有的用戶ID朋友。我將如何添加一個朋友。

回答

2

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

1

我認爲你有一個用戶引用其他用戶加入一個簡單的要求。如果是這種情況,那麼您可以簡單地在User表中添加一列ReferenceUserID,並且每當新用戶引用另一個用戶時,只需將他添加到引用用戶的UserID即可。如果他不是被推薦的用戶,那麼默認情況下它將是NULL

稍後檢索,您可以使用自我加入。

更新:

對於朋友(多對多的關係),你應該看看在StackOverflow上

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

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

+1這需要你做更多的選擇,你是否爲友好連接插入兩行每個友誼userA,userB和userB,userA,或者在連接邏輯中包含一個謂詞以使單個記錄工作無論哪種方式。另外如果選擇第一個選項是自動2種方式的友誼? – Robb 2011-03-31 14:58:23

+0

@Robb - 好點。這是否像你可以關注的twitter,但其他人不需要關注?或者,這種關係更像Facebook,你確認你實際上是朋友,雙方都知道這種關係?不確定它會改變我的答案,但它確實會影響您對待數據的方式。 – NerdFury 2011-03-31 15:15:30

1

你對圖表等問題稍微有點....至少對我來說。

這取決於一對一的關係類型,它將成爲用戶表中的另一個列。如果它很多很多,你需要一個聯結表,有兩列UserIDA,UserIDB。取決於你爲什麼需要這種關係。