2011-01-11 4 views
1

입니다. 내 프로젝트의 권한 시스템에 대해 생각하고 있으며 권한 시스템을 구성하는 방법을 결정할 수 없습니다. 짧은 추상적 인 형태로 나는 내 질문을 다음과 같이 설명 할 것이다.
공유 엔티티 (행)를 만들고 사용 권한을 적용하거나 각 사용자에 대해 별도의 엔티티 (행) 복사본을 만들어야합니까?이 데이터베이스 설계 또는 권한/사용 권한은

내 상황 : 나는 다 대다 관계가 두 기관

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

있습니다. 사용자는 자신이 만든 회사 엔티티를 수정할 수 있습니다.

내 문제 : 다른 사용자가 소유 한 회사간에 연락처 엔티티 (행)를 공유 할 수 있으며 두 사용자가 Contact.ContactPerson을 다른 값으로 편집하려고한다고 가정합니다 (예를 들어 한 사용자가 전화 번호가 John , 다른 사람은 Tom의 번호 임)이 상황은 각 회사 (따라서 사용자)에 대해 별도의 연락처 사본을 만들면 해결할 수 있지만 비즈니스 규칙은 동일한 전화 번호를 가진 중복 연락처를 허용하지 않으며 다른 연락처 속성 전화 번호 외에 (내 비즈니스 규칙에 따라) 공유해야합니다.

이 상황을 해결하는 방법은 무엇입니까?

답변

1

결국 정책을 만들어야합니다. (버전 제어와 같이) 충돌이 발생하면 병합 정책을 적용하거나 편집 할 수있는 연락처 작성자 만 또는 해당 연락처가 회사에있는 한 모든 사람이 수정할 수있는 엄격한 정책을 사용하거나 stackoverflow와 같은 편집 권한을 얻으려면 rating (point) : P.

이 문제는 고객에게 직접 묻는 것으로 해결할 수 있습니다. 적용하려는 정책은 무엇입니까?

0

비즈니스 로직이 충돌하는 것 같습니다. 한 손에는 두 명의 사용자가 전화 번호가 누구인지에 대해 의견을 달리하는 것이 가능하다고 말하면서 (두 사람이 책상/전화를 공유하는 경우 완벽하게 유효합니다). 반면에 비즈니스 로직이 중복 전화 번호를 허용하지 않는다고 말합니다.

논리가 고유 전화 번호를 주장하는 이유는 무엇입니까? 고유 한 것으로 보장되지 않는 PK를 만들었 기 때문에 나에게 들리므로 적합하지 않습니다.

+0

이 전화 번호가있는 모든 회사에서 공유해야하는 속성이 포함되어있어 전화가 고유하고 공유됩니다. 그렇지 않으면 일부 전화 속성이 변경되면 (일부 플래그 가정) DB의 모든 전화 인스턴스를 찾아이 플래그 속성을 업데이트해야합니다. –

+0

좋아요. 이 경우 ContactPerson과 전화 번호를 구분해야한다고 말하는 것은 옳습니다. 이들은 별도의 개체입니다. 그러나 여러 연락처를 하나의 전화 번호로 연결하는 외래 키가되므로 연락처에 중복 된 전화 번호가있을 수 없다는 요구 사항은 의미가 없습니다. – kander