在阅读了 GAE Datastore API 之后,我仍然不确定是否需要将键名和父级复制为实体的属性。
假设有两种实体:Employee 和 Division。每个员工都有一个部门作为其父级,并由一个帐户名称标识。我使用帐户名作为员工的键名。但是在为 Employee 建模时,我仍然会将这两个保留为属性:
division = db.ReferenceProperty(Division)
account_name = db.StringProperty()
显然,我必须手动division
与其父级保持一致,并account_name
与其键名保持一致。我做这项额外工作的原因是:
- 恐怕 GQL/Datastore API 可能不支持父级和键名以及普通属性。我可以对属性做些什么,而不是父名或键名(或者它们本质上是引用属性)?如何在 GQL 查询中使用键名?
- 键名和父级的含义不是特别清楚。由于名称不是自我描述的,我必须通知其他贡献者我们使用帐户名称作为键名......
但这确实是不必要的工作,浪费时间和存储空间。我无法摆脱 SQL 的想法——为什么谷歌不让我们定义一个属性作为关键?另一个是父母?然后我们可以命名它们并用作普通属性......
这里的最佳做法是什么?