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