我正在开发一个项目,我需要设计一个像目录管理这样的表。我只是DB的初学者,所以我真的需要你们这些人的专业知识。我目前对数据库设计的想法可以如下所示:
id name type create_time parent_id
1 folder1 folder 2011-2-3
2 folder2 folder 2011-2-3 1
3 folder3 folder 2011-2-3 1
4 folder4 folder 2011-2-3 1
5 file1 file 2011-2-3 4
....
你可以看到parent_id指向它自己的表PK id。约束符合现实世界,如文件夹可以包含文件夹,文件不能有孩子等...
最常用的查询方案是:
给定一个id,找到它的所有子文件(包括文件夹和文件),对于每个文件,指示它是否有子项。
给定一个id,找到它的所有祖先id(父母,祖父母......)
考虑大规模应用,问题:
感谢您的帮助。
答案 0 :(得分:1)
您可以这样考虑:
id name ----- type ---- create_time parent_id
1 folder1 --- folder --- 2011-2-3
2 folder2 --- folder --- 2011-2-3 ----- 1
3 folder3 --- folder --- 2011-2-3 ----- 2-1
4 folder4 --- folder --- 2011-2-3 ----- 3-2-1
5 file1 ----- file ----- 2011-2-3 ----- 4-3-2-1
将层次结构信息放在parent_id中,该信息表明其所有祖先。
当你想在folder4下添加一个新文件夹时,例如您只需将4附加到folder4的parent_id值,并将其作为新文件夹的parent_id。
通过这种方式,你不必递归地找出所有的祖先。
答案 1 :(得分:0)
使用parent_id的体系结构不适合列出所有父节点和所有子节点 - 您需要一个递归过程来执行此操作。
看看这篇文章http://www.sitepoint.com/hierarchical-data-database-2/,唯一的问题是添加记录 - 但可以通过触发器进行简化
要获得正确的索引,请参阅Davide Piras的评论