2013-02-22 92 views
1

閱讀很多帖子,但仍然困惑..所以,多值屬性和外鍵

我想做出這樣的事情 - 一個單一的用戶有多個朋友。例如 用戶

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

所以,爲了這個,我有有USER_ID作爲主鍵和 表命名frdlist有USER_ID和frd_ids一個名爲user表,我很困惑如何使frdlist表。 在這個user_id和frds_ids列中都是引用父表(user)的同一列(user_id)的外鍵。

如何做到這一點。 plz幫助。我正在使用oracle 11g。

+0

你似乎有正確的想法,有多個列是引用相同主鍵的外鍵是沒有問題的。 – Neil 2013-02-22 23:37:20

+0

請查閱sqlfiddle [link](http://sqlfiddle.com/#!4/a1c35)的鏈接。這就是您的要求的工作方式。不要對此感到困惑。您必須做的第一件事,就是嘗試一下想要,如果這不起作用,請在'SO'中問這裏。正如尼爾所說,你的方法沒有問題,請享受:) – 2013-02-23 00:45:12

回答

0

這很簡單。你的模式將是

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) 

frduser(user_id, friend_id)一個獨特的約束是不夠的,因爲它會尋找價值的獨特組合,而不是唯一的值。您需要在frduser上編寫DML觸發器,以防止插入/更新/刪除重複的用戶好友值。