2017-07-28 71 views
0

我想爲瀏覽器寫一個筆記記錄應用程序。用戶擁有一個帳戶,並且可以創建文件夾,子文件夾,子文件夾等,以及放在該文件夾結構中的任何位置的註釋。如何有效地存儲和檢索數據庫中的樹形結構數據?

雖然(無論是在服務器上還是理想情況下在用戶的瀏覽器中緩存),但我很難想象一種有效的方式來存儲和檢索這些信息,並且Google的搜索信息讓我有點困惑。這真的是一個複雜的問題,因爲有些信息暗示,或者我錯過了什麼?

難道要做一個簡單的SELECT * WHERE user_id = ?,發送給用戶,並讓客戶端代碼從完整的筆記和文件夾列表中構建樹?

+0

只有一個NotesFolders表,並有一個ParentID字段,將文件夾鏈接到樹中上面的文件夾。如果ParentID爲空,則它是根文件夾。或者,也許可以使所有根文件夾從ID 1繼承。 – bushell

+0

半結構化數據的存儲和檢索效率在很大程度上取決於您要執行的查詢/命令。你能更具體地瞭解你的預期工作量嗎? –

+0

搜索「鄰接列表」和「遞歸查詢」。 –

回答

0

你的想法是可能的,但效率不高。想象一下你有一個擁有10.000個筆記和子文件夾的用戶。如果您使用查詢,每次用戶登錄,所有這些信息都將被下載 - 即使他只是想編輯一個音符。

我認爲最好的辦法是給每個文件夾和註釋一個唯一的ID和一個parent_id字段。如果用戶創建一個子文件夾,則該子文件夾將獲取其自己的ID,而parent_id將成爲父文件夾的唯一ID。 如果筆記/文件夾位於頂層(沒有父級),您可以指定一個特殊的parent_id來標識它們。

這樣做有一些優點: 只有在用戶需要時才能加載數據。如果您的用戶沒有打開文件夾,則無需下載該文件夾中的所有筆記。 只要他打開文件夾,您可以簡單地撥打SELECT * WHERE parent_id = id並檢索該文件夾中的所有子文件夾和筆記。