在数据库中存储目录结构

时间:2010-07-27 11:26:11

标签: ruby-on-rails database

在我的rails应用程序中,用户可以拥有一个目录结构,其中包含子文件夹中的文件夹和文件。哪种是存储此类数据的最佳方式? 此外,哪个数据库提供了最佳方法?

3 个答案:

答案 0 :(得分:5)

您可以使用任何SQL数据库将目录树存储在单个表中,方法是使表自引用。一个很好的例子是Windows Installer's Directory table,你会看到这样的结构:

  • 目录 =主键ID字段,通常为整数
  • Directory_Parent =“外键”id字段,指向同一表中另一个目录的ID
  • =包含目录/文件夹名称的字符串

您的文件表将具有引用目录ID的外键。要查找完整路径,必须在链中跟进并从末尾(右)构建路径,将每个父目录添加到前面(左侧)。例如,文件将使用Value“子文件夹”指向目录ID“4”,然后您获取父级的值“文件夹”,然后再次显示父级值,直到到达根目录,创建类似{{1}的路径}。

答案 1 :(得分:2)

如果您的数据库支持递归查询(Oracle的连接或标准的递归公用表表达式),那么自引用表就可以了(它很容易更新和查询)。

如果您的DBMS不支持分层查询,那么Eimantas建议使用预先排序的树遍历方案可能是最好的方法。

答案 2 :(得分:1)

这是存储在sql中的简单树。检查标准parent-child方案或实现预先排序的树遍历方案(左 - 右)。