2011-01-11 19 views
1

私のプロジェクトの権限システムについて考えていますが、権限システムの構成方法を決定することはできません。要約すると、私は自分の質問を次のように記述します:
共有エンティティ(行)を作成し、権限を適用するか、ユーザーごとに個別のエンティティ(行)コピーを作成する必要がありますか?このデータベース設計または許可/許可の責任は

私の状況:私は、多対多の関係を持っている2つのエンティティ

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

を持っています。ユーザーは、作成した(所有する)会社エンティティを変更することができます。

私の問題:異なるユーザーが所有する会社間で連絡先(行)を共有でき、両方のユーザーがContact.ContactPersonを別の値に編集したいとします(たとえば、電話番号がJohn 、それ以外の場合はトムの番号)、この状況は、各企業(したがってユーザ)ごとに個別の連絡先のコピーを作成すると解決できますが、ビジネスルールでは同じ電話番号の連絡先が重複しないようにできます。電話番号のほかに(私のビジネスルールに従って)共有する必要があります。

この状況を解決するにはどうすればよいですか?

答えて

1

最後に、ポリシーを作成する必要があります。 (バージョン管理のように)競合が発生した場合にマージするポリシーを適用することができます。また、編集可能な連絡先の作成者のみが作成する厳密なポリシーや、連絡先が会社内にある限り誰でも編集できます。 stackoverflowのような編集にアクセスするための評価(ポイント):P。

この問題は、クライアントに直接尋ねることで解決できます。どのポリシーを適用したいのですか。

0

ビジネスロジックが矛盾しているようです。一方では、2人のユーザーが電話番号が誰であるかについて2人のユーザーが反対する可能性があると言います(2人が机や電話を共有する場合は完全に有効です)。一方、ビジネスロジックで電話番号が重複しないようにすることができます。

あなたのロジックが一意の電話番号を主張するのはなぜですか?ユニークであることが保証されていないPKを作成したように、それは不適切です。

+0

この電話番号を持つすべての会社で共有する必要があるプロパティが含まれているため、電話機は一意で共有されています。それ以外の場合、Phoneプロパティが変更された場合(Flagがあると仮定します)、DB内のすべてのPhoneインスタンスを検索し、このフラグプロパティを更新する必要があります。 –

+0

申し訳ありません。その場合は、ContactPersonと電話番号を分ける必要があると言います。別々のエンティティです。ただし、複数の連絡先を1つの電話番号にリンクする外部キーとなるため、連絡先に電話番号が重複しないようにする必要はありません。 – kander

関連する問題