【发布时间】:2013-01-22 05:45:32
【问题描述】:
我想听听您对使用 Python NDB 有效实现一对多关系的意见。 (例如 Person(one)-to-Tasks(many))
在我的理解中,有三种实现方式。
- 使用“父”参数
- 使用“重复”结构化属性
- 使用“重复”键属性
我通常会根据以下逻辑选择一种方式,但这对您有意义吗? 如果你有更好的逻辑,请教我。
-
使用“父”参数
- 这些实体之间需要进行事务操作
- 这些实体之间需要双向引用
- 强烈有意“亲子”关系
-
使用“重复”结构化属性
- 不需要单独使用“许多”实体(始终与“一个”实体一起使用)
- “许多”实体仅由“一个”实体引用
- “重复”的次数少于 100
-
使用“重复”键属性
- 需要单独使用“许多”实体
- “许多”实体可以被其他实体引用
- “重复”次数超过 100 次
No.2 增加了实体的大小,但我们可以节省数据存储操作。 (我们需要使用投影查询来减少反序列化的 CPU 时间)。因此,我尽可能多地使用这种方式。
非常感谢您的意见。
【问题讨论】:
-
Task 有指向 Person 的 KeyProperty,您查询要查找 person 的任务吗?
-
这是#4选项@dragonx回答,不是吗?如果我需要查询人员的任务并且我们需要假设人员有很多任务,我使用此选项。我也在检索部分属性值的情况下使用它。
标签: python google-app-engine app-engine-ndb