所以在过去的三年里,我一直在使用关系数据库,我在创建noSql数据库的思维方式上遇到了一些麻烦。我有以下模型:
class Account(ndb.Model):
first_name = ndb.StringProperty()
last_name = ndb.StringProperty()
email = ndb.StringProperty()
password = ndb.StringProperty()
class Organisation(ndb.Model):
org_name = ndb.StringProperty()
org_address = ndb.StringProperty()
.. and so on
class UserProfile(ndb.Model):
user = ndb.KeyProperty(kind='Account')
organisation = ndb.KeyProperty(kind='Organisation')
role = ndb.StringProperty()
帐户x组织从技术上讲是一个多对多的关系,因此UserProfile就像一个链接表,就像在关系数据库中一样
据我所知,我不应该为了获得一个实体的信息而进行超过1次的查询。例如,如果我查询得到属于该用户的所有UserProfiles,那么我就不必遍历和查询每个UserProfiles实体来单独获取每个组织的信息。我觉得我的组织方式不是最好的,也不是它应该的方式。
我正在考虑的另一件事是将组织详细信息存储在帐户模型本身中,但如果组织详细信息发生更改,那么我将不得不查询所有与组织相关的帐户,并分别更新每个帐户。
只是对如何做到这一点普遍感到困惑,任何帮助或解释我哪里出了错都将不胜感激。
发布于 2019-02-28 13:54:37
为了获取一个实体的信息,我不应该进行超过1次的查询
好吧,在你的例子中你不是--额外的查找(而不是查询)将用于收集关于组织的信息,这些组织是与您查询的用户配置文件实体不同的实体。
但是你得到了两个大体的(和相反的)想法:
ndb.KeyProperty
来引用其他实体:最少/不需要重复信息,因此不需要同步/维护,但需要多次查询/查找才能聚合分布在多个实体之间的信息这真的是由你决定什么对你的应用程序有意义,并相应地在两个极端之间取得平衡/中间地带。
就我个人而言,如果可能的话,我倾向于支持第一个。当我遇到需要多个查询/查找的情况时,我总是仔细检查是否真的需要同时使用来自多个实体的信息(例如,在单独的屏幕上显示组织详细信息可能是可以接受的?)。但这只是个人喜好。
https://stackoverflow.com/questions/54918344
复制相似问题