3

我正在设计一个简单的项目基于待办事项列表。这个想法是在项目下定义任务(没有工作流 - 只需要“完成任务”或不需要)。即每个任务具有多个任务,并且该任务可以具有其他多个任务。如果该项目下的所有任务都完成,则可以说完成了一个项目。 ,我试图用refrenceproeperty来创建hirarchy,但是找不到简单的方法(不需要花30秒以上找到项目的所有孩子,并检查它是否完成)。检测项目是否完成。如何为这样的工作设计数据库?还有,如果我需要复制项目以定义另一个项目,如何复制分层数据?谷歌应用程序引擎中的数据库设计

回答

3

的应用程序的首要理念引擎数据存储与其他nosql数据库一样,是为了写作而不是读取。考虑到这一点,你可以像Adam建议的那样使用父母关系,并在每个节点上保留一个“不完整的计数”,这个计数表明直接的孩子数量还没有完成。当你标记节点完成时,减少其父节点的计数;如果这会导致它完成,请移至其父项,等等。通过这样的结构,您可以立即显示任务是否完成。

+0

要了解更多关于“在写作而不是在读”的理念,您可以在Google I/O上观看Bret Saltkin的视频。这两个视频的链接嵌入在我详细的博客文章中。 http://akhilspassion.blogspot.in/2012/12/database-design-for-google-app-engine.html – nanospeck 2013-12-26 06:24:56

0

可能最好通过将任务实体的设置为其所属的任务实体或项目实体来实现任务的层次结构。

我认为找到一个项目的所有子项是否完整的技巧是使用ANCESTOR查询。

如果你正在创建你的任务记录,从而使他们的父母被设定为它们所属的任务或项目,你应该能够编写这样的事:

all_done = db.Query().ancestor(project_entity).filter('complete = ', False).count() 
if all_done > 0: 
    #Not all done 
else: 
    #All done