2011-01-11 39 views
1

我正在考慮我的項目的權限系統,我無法決定如何組織我的權限系統。簡而言之,我會將我的問題描述爲:
我應該爲每個用戶創建共享實體(行)並應用權限還是創建單獨的實體(行)副本?這是數據庫設計或授權/權限責任

我的情況:我有2個實體

Company 
{ 
    [PK] 
    Id, 
    Name, 
    Contacts, 
    OwnerUser 
}, 
Contact 
{ 
    [PK] 
    Phone, 
    ContactPerson 
} 

其中有許多一對多的關係。用戶可以修改他們創建的公司實體(自己)。

我的問題:聯繫實體(行)可以由不同用戶擁有的公司之間共享,並且假設兩個用戶都希望將Contact.ContactPerson編輯爲不同的值(例如,一個用戶聲稱電話號碼屬於John ,以及其他人是湯姆的號碼),如果我爲每個公司(以及用戶)創建聯繫人的單獨副本,但是我的業務規則不允許具有相同電話號碼的重複聯繫人,並且其他聯繫人屬性除了電話號碼之外,必須共享(根據我的業務規則)。

如何解決這種情況?

回答

1

最後你必須創建一個策略。如果發生衝突(如在版本控制中),則可以應用合併策略,或者只有在聯繫人位於她的公司時才能編輯聯繫人的只有創建者可編輯的嚴格策略,或者使用複雜策略評分(點)獲得訪問編輯像計算器:P。

而這個問題只能通過直接詢問客戶來解決,他想要應用什麼策略。

0

這聽起來像你的業務邏輯在那裏發生衝突。一方面,你認爲兩個用戶可能不同意電話號碼是誰(這是完全有效的,如果兩個人共用一個桌面/電話)。另一方面,你說你的商業邏輯不允許重複的電話號碼。

爲什麼你的邏輯堅持唯一的電話號碼?這聽起來就像你創造了一個不能保證是唯一的PK,因此是不合適的。

+0

電話是唯一且共享的,因爲它包含必須由擁有此電話號碼的所有公司共享的屬性。否則,當某些Phone屬性發生更改(假設某個標誌)時,我們將不得不在數據庫中查找所有Phone實例並更新此標誌\屬性。 – 2011-01-11 07:11:58