2016-10-27 4 views
-1

RDMSのバックグラウンドでこの問題が発生するので、文書データベースのベストプラクティスのいくつかが私には新しくなりました。私は共有データとそのデータへのアクセス権を保存する最良の方法を理解しようとしています。文書データベースの共有データとアクセス権を構成する最善の方法

プロジェクト表

projectId PK 
ownerId FK User.userId 
title 
... 

ユーザー表

userId PK 
name 
... 

ProjectShare表

sharedById FK User.userId 
sharedWithId FK User.userId 
state 
... 
:SQL Server内のスキーマは次のようになります。

上記の表では、ユーザーがアクセスできるすべてのプロジェクトを照会できました。その後、各プロジェクトに関連するすべてのデータを照会することができました。各プロジェクトには多くの関連テーブルがあります。データの階層的な性質は、文書データベースに適しているようです。

MongoDB、CouchDB、DocumentDBなどのドキュメントデータベースで、このような構造を最適にするにはどうすればよいですか?

+1

正直言って、正解はありません。同様のアプローチで終わるかもしれません。共有プロジェクトをサブ文書として埋め込むことになるかもしれません(ただし、*無制限の配列*条件を作成します)。すべてのコンテンツを1つのコレクションに保存するか(トランザクション目的で)、複数のコレクションを作成するかを選択できます。また、これは実際にはDocumentDBの質問ではありません。これはドキュメントデータベースのモデリングに関する質問です(コレクションの数を除いて、他のドキュメントデータベースについても同じ基本的な考慮事項があります)。 –

答えて

0

実際にDocumentDBでこのデータをモデル化する方法は複数あります。

DocumentDBのコレクションは異機種のドキュメントをホストでき、大規模に分割することができます。

質問の要件に応じて、プロジェクトのピボット(所有者、共有者、共有者の詳細を含むすべてのユーザーの保持)、またはユーザーのピボットを使用してデータを非標準化することができます。本プロジェクトを共有した他のユーザの情報を含むプロジェクトの詳細など)。

単純にソフトリファレンスを保存し、参照された情報を別のドキュメントとして保持することによって、非正規化のレベルを制御することもできます。たとえば、プロジェクトごとにピボットすると、すべてのユーザー情報を各プロジェクトドキュメントに繰り返し格納するか、userIdだけを格納することができます(この場合、ユーザー情報は別のドキュメントに格納されます)。クエリ/論理整合性制約に基づいて、参照するデータの量を制御できます。

+0

FWIW - Azure DocumentDBチームは、特定のシナリオに合わせてデータモデリングについて1:1のガイダンスを提供することをお手伝いいたします。 askdocdb {at} microsoft.comで自由にpingを実行してください –

関連する問題