数据存储区中的关系(一对多)

时间:2015-06-05 05:25:35

标签: python google-app-engine

我实际上只是想知道在Google数据存储区中建立此类关系的最有效方式是什么。

说我有'用户'和'项目'。一个项目可能有很多用户(一对多)。有没有更好的方法来像这样建模呢?

class Users(ndb.Model):
    properties...

class Projects(ndb.Model):
    properties...

class UserToProject(ndb.Model):
    user = ndb.KeyProperty(Users)
    project = ndb.KeyProperty(Projects)

我从“正常化”的角度看待这个问题,但我猜这可能是一种成本较低的方式......

1 个答案:

答案 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()
警告:周五下午 - 未经测试的代码。虽然概念应该有所帮助:))