2010-08-10 10 views
0

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

  • id_folder (INT, первичный ключ)
  • id_parent (INT, ссылки id_folder)
  • folder_name (строка)

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

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

спасибо.

ответ

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 
+0

Спасибо за ваш ответ – manolowar

0

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