2012-09-26 79 views
0

所以我正在做一個類似於YahooMess的Instant Messenger類型的應用程序。我需要一個好的數據庫設計。我有一個有pk(id)用戶名和密碼的用戶表,但這些用戶也有一個由其他用戶創建的朋友列表。您可以給我什麼建議?謝謝!請推薦我一個好的數據庫設計

+2

你的問題太廣泛和主觀。很少有人對「什麼是X的最佳解決方案?」有一個明確的答案。的問題。 –

+0

只有這些字段需要爲您的應用程序。? – akaHuman

回答

1

構建用戶(UserId,Name,Password)表,然後是UserHasFriends(UserId,UserId_Friend)M:N表。

確保您存儲的密碼鹽漬hashs,從來沒有以純文本

工作示例:http://sqlfiddle.com/#!2/18aef/3

示例代碼:

create table Users 
(
    UserId int not null primary key, 
    Username varchar(255) not null, 
    Password varchar(64) not null 
); 

create table UserHasFriends 
(
    UserHasFriendId int not null primary key , 
    UserId int not null, 
    UserId_Fiend int not null 
); 

insert into Users 
values (1,'UserA','hashA'), 
    (2, 'UserB', 'HashB'), 
    (3, 'UserC', 'HashC'); 

insert into UserHasFriends 
values (1, 1,2), -- User B is a Friend of User A 
    (2,1,3); -- user C is a friend of A 

select UserWithFriends.Username as User, 
    Friends.Username as Friend 
from Users as UserWithFriends 
    join UserHasFriends 
    on UserWithFriends.UserId = UserHasFriends.UserId 
    join Users as Friends 
    on Friends.UserId = UserHasFriends.UserId_Fiend 
0

去下面的整個事情方式:

使用一個有(UserID, Username, Password)的關係。 第二個關係表示爲(UserID, FriendUserID) 其中FriendUserID是具有UserID的人的朋友的ID。

+0

謝謝!我以同樣的方式想到它 –