繁体   English   中英

如何在GAE ndb中建模唯一约束

[英]How to model a unique constraint in GAE ndb

我想要几个“捆绑包”(Mjbundle),它们本质上是一捆问题(Mjquestion)。 Mjquestion具有整数“ index”属性,该属性必须是唯一的,但仅应在包含它的捆绑包内是唯一的。 我不确定如何正确地建模类似的东西,我尝试使用下面的结构化(重复)属性来实现,但是实际上并没有任何约束Mjquestion索引的唯一性。 什么是更好/正常/正确的方法?

class Mjquestion(ndb.Model):
    """This is a Mjquestion."""
    index = ndb.IntegerProperty(indexed=True, required=True)
    genre1 = ndb.IntegerProperty(indexed=False, required=True, choices=[1,2,3,4,5,6,7])
    genre2 = ndb.IntegerProperty(indexed=False, required=True, choices=[1,2,3])
    #(will add a bunch of more data properties later)

class Mjbundle(ndb.Model):
    """This is a Mjbundle."""
    mjquestions = ndb.StructuredProperty(Mjquestion, repeated=True)
    time = ndb.DateTimeProperty(auto_now_add=True)

(使用上述模型并获取了某个Mjbundle实体后,我不确定如何从基于索引的mjquestions中快速获取Mjquestion。有关过滤结构化属性的说明似乎可以在Mjbundle类型级别上使用,而我已经拥有一个Mjbundle实体,并且不确定如何快速查询该实体所包含的问题,而又不通过代码“手动”遍历所有问题。)

因此,我愿意就如何更好地做到这一点提出任何建议。

  • 我阅读了此信息性答复: https : //stackoverflow.com/a/3855751/129202它给出了有关可伸缩性的一些想法,在相关说明中,我希望仅提供几个捆绑软件,但每个捆绑软件都会有成千上万的问题。

  • 也许我根本不应该使用Mjbundle的mjquestions属性,而是专注于育儿:创建的每个Mjquestion都应具有某个Mjbundle实体作为父代。 然后,通过执行祖先查询,“手动”在“插入时间”实施唯一性。

使用StructuredProperty时,所有类型的实体都将作为包含实体的一部分存储-因此,在获取捆绑包时,您已经获取了所有问题。 如果您坚持使用这种存储方式,则解决方案是迭代检查代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM