2013-02-22 1 views
1

lu beaucoup de messages, mais encore confus .. Alors,Multivalued attributs et les clés étrangères

Je veux faire quelque chose comme cela -a utilisateur unique a plusieurs amis. par exemple utilisateur

user_id-> U1, frdlist-> U2, U3, U4

Donc, pour cela, j'ai une table utilisateur nommé ayant user_id comme la clé primaire et une table nommée frdlist ayant user_id et frd_ids , Je suis confus comment faire une table frdlist. Dans cette colonne user_id et frds_ids, les deux sont des clés étrangères faisant référence à la même colonne (user_id) de la table parente (user).

Comment faire cela. aide de plz. J'utilise Oracle 11g.

+0

Vous semblez avoir la bonne idée, il n'y a aucun problème à avoir plus d'une colonne étant la clé étrangère se référant à la même clé primaire. – Neil

+0

S'il vous plaît trouver le lien pour sqlfiddle [link] (http://sqlfiddle.com/#!4/a1c35) .Ceci est comment votre exigence fonctionne.Dont être confus à ce sujet.La première chose que vous devez faire, pour essayer ce que vous vouloir, et si cela ne fonctionne pas demander ici dans 'SO'.Comme mentionné par Neil, il n'y a pas de problème avec votre approche, Enjoy :) –

Répondre

0

C'est simple. Votre schéma serait

user (
    user_id  PRIMARY KEY 
    , first_name 
    , middle_name 
    , last_name 
    .... 
) 

frduser (
    friendshipid PRIMARY KEY 
    , user_id  FOREIGN KEY REFERENCES user(user_id) 
    , friend_id  FOREIGN KEY REFERENCES user(user_id) 

Une contrainte unique sur (user_id, friend_id) de frduser ne serait pas suffisante car il cherchera une combinaison unique de valeurs, pas des valeurs uniques. Vous aurez besoin d'écrire un déclencheur DML sur frduser qui empêcherait toute insertion/mise à jour/suppression de valeurs utilisateur-utilisateur en double.