我的应用程序使用某种“虚拟文件夹”,因此我需要将树结构存储在数据库中。保存数据的表非常简单,它有 3 列:
- id_folder (int, 主键)
- id_parent (int, 引用 id_folder)
- 文件夹名称(字符串)
我的问题是:这是实现根的最佳方法?
- 使 id_parent 可以为空;根将是 id_parent=null 的文件夹,或者
- 使文件夹成为自己的父文件夹,即 id_folder=id_parent。
谢谢你。
我的应用程序使用某种“虚拟文件夹”,因此我需要将树结构存储在数据库中。保存数据的表非常简单,它有 3 列:
我的问题是:这是实现根的最佳方法?
谢谢你。
这实际上取决于您是否有其他要求。我喜欢 NULL,因为它具有逻辑意义,但其他要求可能需要其他内容。
我会支持选项1。
如果您选择选项 2,那么显示子文件夹的逻辑将需要进行混淆检查,以确保 id_folder 和 id_parent 不匹配。
选项1:
SELECT * --don't kill me for using *, it's just for an example
FROM Folders
WHERE id_parent = @folderId
选项 2:
SELECT * --don't kill me for using *, it's just for an example
FROM Folders
WHERE id_parent = @folderId AND id_parent <> id_folder