我实际上只是想知道在Google数据存储区中建立此类关系的最有效方式是什么。
说我有'用户'和'项目'。一个项目可能有很多用户(一对多)。有没有更好的方法来像这样建模呢?
class Users(ndb.Model):
properties...
class Projects(ndb.Model):
properties...
class UserToProject(ndb.Model):
user = ndb.KeyProperty(Users)
project = ndb.KeyProperty(Projects)
我从“正常化”的角度看待这个问题,但我猜这可能是一种成本较低的方式......
答案 0 :(得分:2)
你在这里有一个多对多的关系,因为一个项目有很多用户,一个用户可能被分配到很多项目(我假设)。
使用NDB,我们可以尝试忘记传统的数据库关系,并专注于对象本身。表示这一点的最简单方法是将项目列表链接到用户:
class Project(ndb.Model):
properties...
class User(ndb.Model):
properties...
projectKeys = Ndb.KeyProperty(kind=Project, repeated=True)
现在,从用户的角度来看,我们可以简单地检索他们所属的所有项目:
user = User.query(...).get()
projectKeys = user.projectKeys # you can retrieve these as required
从项目角度查看时,您可以按如下方式找到链接的用户:
project = Project.query(...).get()
users = User.query(User.projectKeys=project.key).fetch()
警告:周五下午 - 未经测试的代码。虽然概念应该有所帮助:))