在我的rails应用程序中,用户可以拥有一个目录结构,其中包含子文件夹中的文件夹和文件。哪种是存储此类数据的最佳方式? 此外,哪个数据库提供了最佳方法?
答案 0 :(得分:5)
您可以使用任何SQL数据库将目录树存储在单个表中,方法是使表自引用。一个很好的例子是Windows Installer's Directory table,你会看到这样的结构:
您的文件表将具有引用目录ID的外键。要查找完整路径,必须在链中跟进并从末尾(右)构建路径,将每个父目录添加到前面(左侧)。例如,文件将使用Value“子文件夹”指向目录ID“4”,然后您获取父级的值“文件夹”,然后再次显示父级值,直到到达根目录,创建类似{{1}的路径}。
答案 1 :(得分:2)
如果您的数据库支持递归查询(Oracle的连接或标准的递归公用表表达式),那么自引用表就可以了(它很容易更新和查询)。
如果您的DBMS不支持分层查询,那么Eimantas建议使用预先排序的树遍历方案可能是最好的方法。
答案 2 :(得分:1)
这是存储在sql中的简单树。检查标准parent-child
方案或实现预先排序的树遍历方案(左 - 右)。