在GAE中,我试图找到一种方法来实现或构造类似于SQL数据库中的外键约束的东西。基本上,不应该允许通过外键约束删除被另一个实体引用的实体(换句话说:如果有孩子引用该父母,则不应该允许删除父母。)
我尝试了ndb数据存储区中的KeyProperty
,但这使我无法从我想要删除的实体中找到所有依赖项。 ancestor
层次结构似乎也没有削减它。我可以向孩子们查询ancestor
,但似乎没有办法从ancestor
查询孩子。
有没有办法让GAE ndb数据存储区中的ancestor
或其他数据库设计中的子项实现此外键约束?
答案 0 :(得分:1)
有没有办法让孩子从祖先那里获得
是的,它被称为查询,与持有父项密钥的子项中的KeyProperty一起使用,或者将父项作为子项的祖先。
您可以使用无用的祖先查询找到祖先的所有子女,无论其类型如何 - https://cloud.google.com/appengine/docs/python/datastore/queries?hl=en#Python_Kindless_ancestor_queries
数据存储区中没有外键约束。
除了不为你执行删除之外,不确定它是如何“切断”的。
答案 1 :(得分:0)
Tim指出,如果您使用祖先解决方案,您可以轻松查询所有孩子。如果您使用KeyProperty,情况也是如此;您可以轻松查询指向当前键的所有实体:
MyChildModel.all().filter(MyChildModel.my_key_property==my_parent_entity.key)
同样,我们还不清楚这个相当简单的解决方案如何不会削减它#34;。
但值得一提的是,将数据存储区视为关系数据库是一个根本性的错误。它不,你不应该尝试。您不能强制执行参照完整性;最终的一致性使得这是不可能的。