2010-05-07 3 views
1

PrivilegeGroup 테이블과 Privileges 테이블이 다 대다 관계이기 때문에 PrivilegeGroup 테이블, Privileges 테이블 및 link 테이블이 있습니다. 응용 프로그램이 시작될 때 처음에 데이터베이스에서 PrivilegeGroup 테이블과 Privilege 테이블의 모든 내용을 데이터베이스에로드 할 생각입니다.이 정보는 어떻게 저장해야합니까?

쉽게 찾을 수있는 형식으로 저장하고 싶습니다. 보통 PrivilegeCodeGroupId을 통해 조회 할 것입니다.

어떤 구조가이 용도로 적합합니까? 목록 배열? 사전?

+1

이것은 WinForms 또는 Asp.Net 응용 프로그램입니까? (아니면 셰어 포인트에서 호스팅되는 콘솔 앱이나 워크 플로 등) 중요한 것은 자체 개발 한 보안 모델을 사용하는 대신 잘 알려진 보안 모델을 사용하도록 사용자를 안내하기 때문입니다. (예를 들어, 당신이 향하고있는 것처럼 보이는 방향보다는 표준 Asp.Net 회원 또는 액티브 디렉토리). 보안 모델에 관해서는 자신의 롤링은 결코 좋은 생각이 아닙니다. – David

답변

2

방법에 대한

Dictionary<GroupIdType, HashSet<PrivilegeCodeType>> 

이 방법을 신속 그룹 ID에 의해 권한의 HashSet의를 얻고, 특권이 존재하는지 확인하기 위해 HashSet에 대해 빠른 테스트를 할 수 있습니다.

3

GroupId가 PrivelegeCode를 조회 할 수 있고 다른 데이터가 필요하지 않다고 생각하는 것 같습니다. 그렇다면 Dictionary<GroupIdDataType, PrivelegeCodeDataType>을 사용하면 쉽게 조회 할 수 있습니다.

응용 프로그램을 시작할 때 한꺼번에로드하는 방법은 응용 프로그램을 실행하는 동안이 데이터를 변경하면 다시 시작하지 않아도 프로그램에 영향을 주는지 여부에 달려 있다고 생각합니다.

+0

하나의 GroupId에는 둘 이상의 PrivilegeCode가 있습니다. – 5YrsLaterDBA

+0

그래, 처음에는 그렇게 생각하지 않았다. 다 대다 관계였다. Chris Taylor의 답변 (사전 값으로 HashSet 사용)을 사용했다. 나는 똑같은 것을 반영하기 위해 나의 것을 편집 하겠지만 더 나은 답을 제공하는 것에 대한 신뢰를 얻어야한다. –

2

DataTable 클래스의 인스턴스에 데이터를 유지하도록 제안합니다.

+0

나쁜 제안이 아닙니다. 사용하기 쉽고 검색 및 필터링을 쉽게 수행 할 수 있습니다 .. 사전에 비해 성능 저하가 있습니다. 그러나 이는 거의 무시할 수 있습니다. – David

관련 문제