2013-10-15 47 views
2

我在數據庫中的四個表:如何鏈接四個表避免多元關聯

USER 
id 

PERMISSION 
id 

OBJECT 
id 

CONTEXT 
id 

現在的問題是,我想將它們連接到說,用戶對一個一個或多個權限或許多對象取決於上下文..它看起來很簡單,但我找不到一種方法來避免n元聯合..

希望有人會友善地幫助我解決這個問題。 在此先感謝。

回答

0

你可能會尋找像一個WEAK ENTITY

基本上,一個弱實體是一個數據庫實體不使自身的意義,但需要一個(或多個)外鍵承擔適當的身份和意義。

這意味着您將從N元關係轉換爲N元二元關係。

一種可能的做法是這樣的:讓我們說,我們稱之爲弱實體Rules

Rules(id, user_id, permission_id, object_id, context_id /*other columns*/); 

每個強大的實體與規則表中的關係。我不太喜歡這種方法,但對於小數據集,它可能工作得很好。作爲一般說明,儘管如此,我建議你更多地考慮一下你的數據庫模型:你是否完全確信所有這4個實體之間有如此密切的關係?例如,「上下文」是否影響用戶,對象和權限或只是權限?一個對象是否在多個上下文中同時存在,或者在特定的上下文中綁定對象(與變量作用域相同的概念)是有意義的?

+0

嗨,你建議不要做N元關聯,我可以做N元二元關聯。好的,但你建議創建一個包含四個對象的每個主鍵的連接表,所以它仍然是一個N- ary協會,不是嗎? –

+0

好吧,是的,沒有。現在它是一個具有N個二元關聯的實體,而不是N個表之間的關係。我發現它們看起來很相似,但是用你目前的設計我看不到很多選擇。 –