2012-09-26 2 views
0

Donc, je fais une application de type Instant Messenger similaire à YahooMess.J'ai besoin d'une bonne conception de base de données. J'ai une table d'utilisateur qui a un nom d'utilisateur et un mot de passe de pk (id), mais ces utilisateurs ont également une liste d'amis faite d'autres utilisateurs. Quel conseil pouvez-vous me donner?S'il vous plaît me recommander un bon design de base de données

+2

Votre question est trop large et subjective. Très rarement est-il une réponse définitive à "Quelle est la meilleure solution à X?" des questions. –

+0

Ces champs sont-ils nécessaires uniquement pour votre application? – akaHuman

Répondre

1

créer le tableau des utilisateurs (UserId, Name, Password), puis un tableau M: N UserHasFriends (UserId, UserId_Friend).

assurez-vous que vous stockez vos mots de passe comme hashs salés, jamais en texte brut

exemple de travail: http://sqlfiddle.com/#!2/18aef/3

exemple de code:

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

Aller sur la chose entière dans ce qui suit chemin:

Utilisez une relation qui a (UserID, Username, Password). La seconde relation passe alors à (UserID, FriendUserID) où FriendUserID est l'ID de l'ami de la personne ayant l'ID utilisateur.

+0

Merci, j'ai pensé de la même façon –

Questions connexes