2017-03-08 65 views
1

我想在SQL服務器數據庫中存儲每個用戶的朋友列表。 我很困惑存儲朋友的每個用戶列表的最佳方式

  1. 我應該使用表爲每個用戶或
  2. 我應該只是使用一個表給大家,或者
  3. 有沒有其他的最好方法(我要經常查詢它)?

當我查詢時,如何獲得單個用戶的所有朋友?

+0

對每個用戶都有專門的表格不是一個好習慣。通常它會成爲每個人的表格(您的選項2),以及一個關係表來指定用戶之間的關係。 – Raptor

回答

2

當我們說SQL Server時,我們說的是RDBMS。

然後有normalization INF,2NFand 3rdNF ...,這是你的問題如何規範一個用戶和他的朋友的數據庫。

我認爲,你需要三張表

Individual (IndId (PK), Name ...) 
User (UserId (PK), IndId (FK to Individual Table), login, password etc) 
Friends(FID(PK), UserId (FK to User Table), IndId (FK to Individual Table)) 

獲取一個用戶的所有朋友

Select I.* from Friends F 
    JOIN User U on F.UserId=U.UserId // Get all friends of all users 
    JOIN Individual I on I.IndId =F.IndId // Get there names etc 
    Where I.Name = 'MyFriend' // filter a friend 
+0

好的,我將創建3個表格,然後如何獲取單個用戶的所有朋友(userIds) –

+0

@PavanVarma,請參閱更新的答案 – Anil

0

你應該有2個表:

TBL_Users將有User_ID

TBL_Friends將有一個Friend_IDFriend_User_ID

的相關性將是TBL_Users.User_ID之間TBL_Friends.Friend_User_ID

1

我做的是cre所有tbl_users列表的第一個表。然後創建另一個表tbl_friendslisttbl_friendslist表的功能是存儲用戶表ex的id。用戶10添加用戶11的數據將存儲在tbl_friendslist表中,並且我用戶ENUM標記用戶11是否接受,拒絕了請求。

0

你需要兩個表。 用戶(ID,用戶名,...) UserFriendShip(ID,ToUserId,FromUserId,RequestStatus,RequestStatusReason)

例子:我想成爲朋友與您(我們的用戶,以便用戶表中有我們的記錄)

ToUserId:您的用戶ID FromUserId:我的用戶ID ResquestStatus:請求,接受,或枚舉值,所以使用tinyint而不是int在sql server中的枚舉值。 RequestStatusReason:這個區域非常重要。認爲你先接受然後拒絕了我。該區域將存儲該細節。

指定你的必需品,然後你可以自己設計我只是試圖檢查。

相關問題