6

メンバーとイベントの2つのモデルがあります。メンバーは多くのイベントに参加でき、イベントには多くの参加者がいます。私はこのように考えます:

class Members(ndb.model):
    event = ndb.KeyProperty(repeated=True)

class Events(ndb.model):
    member = ndb.KeyProperty(repeated=True)

多対多の関係を築くための最良の方法は何ですか?

4

1 に答える 1

13

この場合、一方のモデルにもう一方のモデルを指すキーの配列/リストが必要だと思います。配列/リストの長さには制限があるため(現在最大は5000です)、メンバーモデルがイベントモデルを指すようにする必要があります(メンバーはおそらく多くのイベントに参加しないと想定しています( 5000)ですが、イベントには多くの(5000人以上の)メンバーがいます)。ここで、出席者のリストが必要な場合は、メンバーモデルでイベントキーを照会するだけです。人数だけが必要な場合は、キーのみのクエリを実行できます。これにより、コストを節約できます。

何らかの理由で両方のケースを5000以上にする必要がある場合は、メンバーキーとイベントキーを含む別の(出席者)モデルを作成し、各イベントのゲストごとにこの出席者モデルを作成できます。ゲストのリストを取得するには、このモデルに特定のイベントを照会するだけです。メンバーのイベントのリストが必要な場合は、その逆を行います。これは上記よりもはるかに多くの作業ではないので、5000が制限要因でなくても、それを実行する方法になる可能性があります。

于 2012-11-26T13:01:12.537 に答える