Может ли двоичное дерево или дерево всегда представляться в базе данных как 1 таблица с самоссылкой? - PullRequest
0 голосов
/ 06 июня 2010

Раньше я не чувствовал этого правила, но кажется, что это двоичное дерево или любое дерево (у каждого узла может быть много дочерних элементов, но дочерние элементы не могут указывать на какой-либо родительский элемент), тогда эту структуру данных можно представить как 1 таблицу в база данных, где каждая строка имеет собственный идентификатор и parentID, который указывает на родительский узел.

Это на самом деле классическая диаграмма Сотрудник - Менеджер: один босс может иметь под собой много людей ... и каждый человек может иметь под собой n людей и т. Д. Это древовидная структура и представлена ​​в книгах базы данных в качестве общего примера в виде одной таблицы Employee.

Ответы [ 3 ]

2 голосов
/ 06 июня 2010

Ответ на ваш вопрос «да».

Предупреждение Саймона о том, что ваши деревья становятся циклическим графом, тоже верно.

Все то, что было сказано о «Вы должны вручную убедиться, что этого не произойдет, то есть СУБД не сделает этого автоматически, потому что вы не нарушите никаких правил целостности или ссылок»., НЕПРАВИЛЬНО.

Это замечание и оставшиеся комментарии верны, если вы рассматриваете только системы SQL.

Существуют системы, которые CAN делают это для вас чисто декларативным способом, то есть без необходимости писать * любой * код вообще . Эта система называется SIRA_PRISE (http://shark.armchair.mb.ca/~erwin).

1 голос
/ 06 июня 2010

Да, вы можете представлять иерархические структуры, самостоятельно ссылаясь на таблицу. Просто будьте в курсе таких ситуаций:

Employee    Supervisor
1           2
2           1
0 голосов
/ 06 июня 2010

Да, это правильно. Вот хороший справочник

Просто помните, что вам, как правило, нужен цикл, чтобы развернуть дерево (например, найти транзитивные отношения)

...