【发布时间】:2010-01-09 19:13:14
【问题描述】:
我正在创建一个 Trivia 应用,需要一些帮助来设计我的模型关系。这个问题可能会变得相当复杂,但我会尽量简洁。
琐事问题都属于特定类别。类别可能是另一个类别中的一个类别。如果创建/删除了一个琐事问题,我需要确保我也更新了一个计数器。通过这种方式,我将能够查看每个类别中有多少问题,并将其显示给用户。如果一个类别有“子”类别,我将需要一种显示所有子类别的累积计数器的方法。准确的计数相当重要,但不是关键任务。我不介意使用分片计数器。我的问题是,我应该如何设计它以使其采用 GAE 非规范化并保持优化?
我正在考虑创建一个 Category 类,其中每个类都有一个 ListProperty,它将代表祖先树。它将按顺序包含树中每个父实体的键。但是,在构造实体时我是否也应该指定父级,还是在这种情况下不需要?我在想我可能必须在事务中运行我的计数器更新,这就是我考虑父子关系的原因。
或者也许有更优化的方式来设计我的关系,这样我仍然可以相当准确地计算每个类别中的所有问题。提前感谢您的帮助。
【问题讨论】:
-
有点离题,但我注意到您将使用应用程序引擎作为数据存储。你有一些应用引擎和创建持久模型的经验吗?如果不是,我会指出 App Engine 的行为与许多其他持久模型略有不同。我发现在使用 App Engine 时会遇到一些限制,而不是像 Hibernate(在 Java 世界中)这样更通用的东西。例如查询属性路径,例如您无法查询 triviaCard.someCategory.question。如果使用 GAE,请注意将这些约束纳入您的设计
-
我不确定这是否适用于您的评论,但我没有使用 Java API。
标签: python database-design google-app-engine