2016-10-27 10 views
-1

RDMS 배경에서이 문제가 발생하므로 문서 데이터베이스의 모범 사례 중 일부는 새로운 것입니다. 공유 데이터를 저장하고 해당 데이터에 대한 액세스 권한을 얻는 가장 좋은 방법을 이해하려고합니다. SQL Server의 스키마는 다음과 같습니다문서 데이터베이스에서 공유 데이터 및 액세스 권한을 구성하는 가장 좋은 방법은 무엇입니까

프로젝트 표

projectId PK 
ownerId FK User.userId 
title 
... 

사용자 표

userId PK 
name 
... 

ProjectShare 표

sharedById FK User.userId 
sharedWithId FK User.userId 
state 
... 

위의 표에서 사용자가 액세스 할 수있는 모든 프로젝트를 쿼리 할 수 ​​있습니다. 그런 다음 각 프로젝트와 관련된 모든 데이터를 쿼리 할 수 ​​있습니다. 각 프로젝트에는 많은 관련 테이블이 있습니다. 데이터의 계층 적 특성은 문서 데이터베이스에 적합합니다.

MongoDB, CouchDB 또는 DocumentDB와 같은 문서 데이터베이스에서 어떻게 구성하면 좋을까요?

+1

정직하게 말하면, 이에 대한 정답은 없습니다. 비슷한 접근법으로 끝날 수도 있습니다. 결국 공유 프로젝트를 하위 문서로 포함하게 될 수도 있습니다 (단, 무한 배열 * 조건이 생성됩니다). 모든 컨텐츠를 단일 콜렉션에 보존하거나 (트랜잭션 용도로) 선택하거나 여러 콜렉션을 작성할 수 있습니다. 또한 이것은 실제로 DocumentDB 질문이 아닙니다. 이것은 문서 데이터베이스 모델링 질문입니다 (컬렉션 수를 제외하고 다른 문서 데이터베이스에도 동일한 기본 고려 사항이 적용될 예정이므로). –

답변

0

사실이 데이터를 DocumentDB에서 모델링하는 방법은 여러 가지가 있습니다.

DocumentDB의 컬렉션은 이기종 문서 세트를 호스팅 할 수 있으며 대량으로 파티셔닝 할 수 있습니다.

쿼리 요구 사항에 따라 프로젝트에서 피벗 (소유자를 포함한 모든 사용자 유지, 공유 및 공유 세부 사항 유지) 또는 사용자를 중심으로 모든 프로젝트를 유지하는 등 여러 방향으로 데이터가 비정규 화 될 수 있습니다. 이 프로젝트 등을 공유 한 다른 사용자의 정보를 포함하여 프로젝트의 세부 사항).

소프트 참조를 저장하고 참조 된 정보를 별도의 문서로 유지함으로써 비정규 화 수준을 제어 할 수도 있습니다. 예를 들어, 프로젝트별로 피벗하면 각 프로젝트 문서에 모든 사용자 정보를 반복적으로 저장하거나 userId 만 저장하면됩니다 (이 경우 사용자 정보는 별도의 문서에 저장됩니다). 쿼리/논리적 무결성 제약 조건에 따라 참조 할 데이터의 저장량을 제어 할 수 있습니다.

+0

FWIW - Azure DocumentDB 팀은 특정 시나리오에 맞게 데이터 모델링에 대한 1 : 1 지침을 제공하게되어 기쁩니다. askdocdb {at} microsoft.com에서 무료로 핑 (ping)하십시오. –