树状结构中的root,具有自动引用外键

时间:2010-08-10 17:59:27

标签: sql foreign-keys tree-structure

我的应用程序使用某种“虚拟文件夹”,因此我需要将树结构存储在数据库中。保存数据的表非常简单,它有3列:

  • id_folder(int,primary key)
  • id_parent(int,references id_folder)
  • folder_name(string)

我的问题是:哪个是实现root的最佳方式?

  1. 使id_parent可以为空;根目录是id_parent = null或
  2. 的文件夹
  3. 使文件夹成为其自己的父文件夹,即id_folder = id_parent。
  4. 谢谢。

2 个答案:

答案 0 :(得分:0)

这实际上取决于您是否有其他要求。我喜欢NULL,因为它具有逻辑意义,但其他要求可能需要其他东西。

答案 1 :(得分:0)

我会争论选项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