你能帮我理解 nbd Key Class 文档或者祖先关系吗?

Can you help me understand the nbd Key Class Documentation or rather ancestor relationship?

我正在努力了解 gae 数据存储区,但我并不完全理解 documentation for the Key Class/ 或者这可能是我不了解的一般祖先关系。 我认为我想要的是多个祖先。

示例: 假设我想为我们学校每年赞助的 运行 慈善机构做模特;学童 运行 绕着跑道转了一圈,他们的亲属(=赞助商)在完成的每一轮比赛中都向慈善机构捐款。

在我看来,我会创建以下几种:

  1. 简介(可以是运行合作者和赞助商)
  2. 运行(定义谁(参见个人资料)运行什么慈善机构,实际完成的回合)
  3. 赞助(定义谁(cf.profile)为什么捐赠多少运行,是否已经捐赠)

我了解到datastore是一个nosql的非关系型数据库,但还没有完全掌握。所以我的问题是:

一个。为 "Sponsorship" 创建实体甚至是数据存储中的最佳方式吗?我也可以将其建模为有关系(每个 运行 都有赞助商)——但由于我还想跟踪赞助金额,赞助商是否支付了费用,也许更多,这似乎不合适

b。我想轻松查询一个人的所有赞助以及属于某个 运行 的所有赞助。 所以,我觉得,这将是合适的:

Profile --is ancestor of--> Run
Profile --is ancestor of--> Sponsorship
Run --is ancestor of--> Sponsorship

这样合理吗? 我可以看到 Key 的 constructor 以祖先顺序接受多种类型作为参数。那是为这个案子设计的吗? "Run" 和 "profile" 将是相同的 "level"(即妈妈和爸爸的祖先而不是父亲和祖父)——那个构造函数在 python 中会是什么样子?

在实体之间建立关系的主要方式是通过实体模型中的关键属性。通常不需要血统。

例如:

class Profile(ndb.Model):
    name = ndb.StringProperty()

class Run(ndb.Model):
    runner = ndb.KeyProperty(kind='Profile')
    rounds = ndb.IntegerProperty()
    sponsorship = ndb.KeyProperty(kind='Sponsorship')

class Sponsorship(ndb.Model):
    run = ndb.KeyProperty(kind='Run')
    donor = ndb.KeyProperty(kind='Profile')
    done = ndb.BooleanProperty()

祖先只是将实体放在同一个实体组中(这可能非常有限!),同时在模型已经建立的关系之上强制执行 额外的 关系。参见 Transactions and entity groups and maybe