参照プロパティとは、おそらくキー プロパティを意味します。これは別のデータストア エンティティへの参照です。db API と ndb API の両方に存在します。これらを使用して、多くのエンティティを別のエンティティのキーにポイントすることで、多対 1 の関係をモデル化できます。
構造化されたプロパティは、まったく異なる獣です。データ構造を定義し、それを別のエンティティに含めることができます。
1 つの連絡先に複数のアドレスを含めるドキュメントの例を次に示します。
class Address(ndb.Model):
type = ndb.StringProperty() # E.g., 'home', 'work'
street = ndb.StringProperty()
city = ndb.StringProperty()
class Contact(ndb.Model):
name = ndb.StringProperty()
addresses = ndb.StructuredProperty(Address, repeated=True)
guido = Contact(name='Guido',
addresses=[Address(type='home',
city='Amsterdam'),
Address(type='work',
street='Spear St',
city='SF')])
guido.put()
特定のアプリケーションでは、次のように NDB を使用することをお勧めします (利用可能な API の最新バージョンを使用することが常に最善です)。
繰り返し構造化されたプロパティとしてプロジェクト モデルに含まれる投稿モデル。ユーザーには、アクセス許可を持つプロジェクトのキーを含む KeyProperty が繰り返されます。
もう少し複雑にするために、プロジェクトとパーミッション/ロールを表す別のモデルを作成し、それを繰り返し構造化されたプロパティとしてユーザー モデル内に含めることができます。
キーを保持する主な理由は、HRD の結果整合性を考慮してデータにアクセスできるようにするためです。
これについてさらにサポートが必要な場合はお知らせください。
編集:
明確にするために、提案された構造は次のとおりです。
モデル:
- ユーザー
- User-Project-Mapping (オプション、パーミッションの処理に必要)
- 計画
- 役職
ユーザー モデルには、繰り返される構造化プロパティとして User-Project-Mapping が含まれている必要があります。
プロジェクト モデルには、繰り返される構造化プロパティとして Post が含まれている必要があります。
User-Project-Mapping には、プロジェクトへのキー参照と関連する権限表現のみを含める必要があります。
これは商用プロジェクトのように聞こえるので、これについてさらにサポートが必要な場合は、喜んで相談させていただきます。あなたが成功するのに十分であることを願っています!