корень в древовидной структуре с автоматической ссылкой на внешние ключи - PullRequest
0 голосов
/ 10 августа 2010

Мое приложение использует какие-то "виртуальные папки", поэтому мне нужно хранить древовидную структуру в базе данных.Таблица, содержащая данные, довольно проста и имеет 3 столбца:

  • id_folder (int, первичный ключ)
  • id_parent (int, ссылается на id_folder)
  • имя_папки(строка)

Мой вопрос: каков наилучший способ реализации корня?

  1. Создание id_parent nullable;корнем будет папка с id_parent = null или
  2. Создание папки в качестве собственного родителя, т. е. id_folder = id_parent.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 августа 2010

Я бы поспорил за вариант 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
0 голосов
/ 10 августа 2010

Это действительно зависит от того, есть ли у вас дополнительные требования.Мне нравится NULL, поскольку это логично, но другие требования могут требовать чего-то другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...