2017-07-28 40 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并检索该文件夹中的所有子文件夹和笔记。