2010-11-27 8 views
3

J'ai besoin de créer une base de données dans laquelle il y a 3 tables l'une est AMIS la seconde est l'utilisateur est l'autre. J'ai un à plusieurs relations entre les utilisateurs et les amis. Il y a un à plusieurs relation entre les utilisateurs et la table d'images. J'ai une question ici avec la structuration d'une base de données pour les profils d'utilisateurs, mais c'était lilbit déroutant. Ils ont l'ID utilisateur comme clé étrangère mais je pense que l'image ID devrait être la clé étrangère dans la table des utilisateurs.créer la base de données mysql pour le profil d'utilisateur

Une autre question est, pouvons-nous avoir 2 clés étrangères dans une table car j'ai une à plusieurs relation de la table des utilisateurs avec des photos et des amis table. Désolé je ne suis pas bon dans la base de données. J'ai juste besoin d'un peu d'aide. Merci

Répondre

1

Vous pouvez avoir autant de raccourcis clavier que nécessaire. Il est logique de donner un ID utilisateur à PICTURES si vous voulez lier plus d'une image à un utilisateur. Si vous voulez que chaque utilisateur n'ait qu'une seule image, vous pouvez lui donner une image.

Vous pouvez également faire les deux. Reportez-vous à USERS.pictureid si vous voulez voir l'image principale (comme une image portrait ou un avatar) et permettre à PICTURES d'avoir un ID utilisateur afin que vous puissiez gérer un ensemble d'images pour chaque utilisateur. Vous pouvez également donner à un utilisateur plus d'un pictureid, par exemple un driverlicencepictureid, un avatarpictureid, un portraitpictureid etc, chacun étant une clé étrangère à PICTURES.pictureid. Vous pouvez même envisager la possibilité de faire en sorte que chaque image soit liée à plusieurs utilisateurs, comme Facebook, ce qui permet à chaque utilisateur d'être "tagué" sur plusieurs images, mais aussi de marquer plus d'un utilisateur dans chaque image .

Dans ce cas, vous aurez besoin d'une table pour attacher ces deux. Définissez une table croisée USERSPICTURES qui contient un ID utilisateur et un ID d'image. Vous pouvez utiliser cette table pour définir des liens croisés entre les utilisateurs et les images.

Comme je l'ai déjà dit, vous pouvez toujours donner à chaque utilisateur un identifiant pour une image spécifique en plus de la table croisée.

La même chose vaut pour les amis de cours. Chaque personne peut être un ami de chaque autre personne. Donc, dans ce cas, vous pourriez peut-être faire avec la table FRIENDS simplement stocker la relation entre deux utilisateurs. Donnez à vos amis un User1Id et un User2Id, et cela permet de stocker la connexion entre deux utilisateurs (si c'est ce que vous voulez).

+0

Golez merci pour la réponse. Si je donne l'ID de l'utilisateur et user2id alors quelle relation je dois définir un à plusieurs je pense que im juste stocker la relation. L'autre relation entre l'image et l'utilisateur est de un à plusieurs, car l'utilisateur peut avoir plusieurs images. J'ai les tables et les relations suivantes. – SilentCoder

+0

Cela dépend. Si vous utilisez ma suggestion pour redéfinir la table FRIENDS dans une sorte de table USERRELATION, vous créez réellement une relation plusieurs à plusieurs entre les utilisateurs. Il existe une relation un à plusieurs entre USERS.userid et RELATION.user1id et une même relation entre USERS.userid et RELATION.user2id. Si vous pensez que FRIENDS est une entité différente (pas des utilisateurs en soi), il peut être utile de conserver une table FRIENDS avec une simple relation un à plusieurs entre USERS.userid et FRIENDS.userid. – GolezTrol

+0

Golez merci pour la réponse. Si je donne l'ID de l'utilisateur et user2id alors quelle relation je dois définir un à plusieurs je pense que im juste stocker la relation. L'autre relation entre l'image et l'utilisateur est de un à plusieurs, car l'utilisateur peut avoir plusieurs images. J'ai les tableaux suivants. Utilisateurs: id, nom d'utilisateur, mot de passe, email, ip, port, ID de pk. La table des amis contient l'ID comme pk, friendid. La table Pictures contient l'identifiant comme pk, filepath, isprofile. Pouvez-vous définir des clés dans les tableaux. Je veux dire fk ou une clé unique si nécessaire. Merci. – SilentCoder

1

Si vous essayez de créer une sorte de fonctionnalité 'amis' sur Facebook, vous devez référencer la même table. Par exemple votre table USERS pourrait ressembler à ceci:

(userID, nom, email, amis,)

le champ d'amis pourrait alors faire référence à beaucoup des users'friends' en inscrivant leur relevent (userID) s » comme ceci:

"23, 345, 34, 34, 23"

Tous dans le même domaine. Toutes les fonctions que vous devez écrire pour lister vos amis peuvent ensuite l'utiliser avec un explode() pour rassembler les détails d'un ami.

Enfin, oui il est possible d'avoir 2 clés étrangères dans une table, vous pouvez en avoir autant que vous le souhaitez. En théorie, quelque chose de plus évolutif serait d'avoir les tables suivantes dans votre BD.

UTILISATEURS AMIS PHOTOS

Le tableau d'amis serait alors la liste des relations entre deux utilisateurs comme ceci:

AMIS TABLE

user1 = 34 < --- ceci est une référence clé étrangère l'userID de USERS table
user2 = 44 < --- ceci est une clé étrangère référençant le userID de USERS table

+0

Remerciez pour la réponse. S'il vous plaît jeter un oeil à mon commentaire ci-dessus. – SilentCoder

1

Vous pouvez avoir deux clés étrangères dans une table, bien que ce ne soit pas le cas selon votre description. Les amis auront un utilisateur FK et les photos auront un utilisateur FK. Et c'est tout pour les FK. Par exemple, si les utilisateurs sont amis avec les utilisateurs, leurs amis sont toujours des utilisateurs, donc les liens d'amitié doivent être établis via une table de liens many-to-many comme Friendships. mais selon votre description, vous devriez être couvert en termes de FK parce que vous n'avez pas 2 FK dans une table.

Questions connexes