Показать сообщение отдельно
Старый 25.09.2004, 14:34   #54  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Еще раз переварил написанное и хочу подытожить, используя только что состряпанные термины:

"Ненормализованное дерево" - это дерево, которое строится на основе нескольких свойств объекта (либо одного ненормализованного поля, которое на самом деле содержит независимые данные внутри себя), которые находятся в иерархической взаимосвязи. Для таких деревьев как правило действует принцип "каждому нужно свой вид дерева". Такие деревья лучше всего организовывать только на уровне интерфейса пользователя, не ломая саму плоскую таблицу. Вообще если разобраться это не деревья, а просто тот или иной вид ГРУППИРОВКИ таблицы по нескольким её полям. Для таких деревьев характерно то, что их уровни можно менять местами - например Склад/Поставщик/Товар или Поставщик/Товар/Склад - оба варианта группировки возможны и наделены какой либо функциональностью (особенно в отчетах).

"Нормализованное дерево" - это дерево построенное исключительно в рамках одного свойства объекта. Такое свойство представляет собой некую неделимую иерархическую сущность и может выстраивать только один вид иерархии. Например Сырьё/Топливо/Бензин не может быть выстроено по другому - Топливо/Сырьё/Бензин или Бензин/Топливо/Сырьё не имеют смысла. Следовательно для таких иерархий действует правило "всем нужен только один вид дерева" - такие "правильны" деревья невозможно рационально представить как набор нескольких независимых полей и простая фильтрация (даже с масками) по ним затруднена, более того - само по себе такое дерево имеет вполне очерченный смысл НА КАЖДОМ УРОВНЕ СВОЕЙ ИЕРАРХИИ. Под этим я подразумеваю то, что пользователям полезно и имеет смысл работать не только с листями такого дерева (конечными узлами), но и с ветками. Каждый узел такого дерева может быть использован как укрупнение или наоборот - уточнение каких либо действий/запросов/анализа. Например проставление скидки 5% на все горючесмазочные материалы, но 10% на бензин, или перенос папки со всеми её подпапками в другое место на диске, или вывод суммарного оборота по кафельной плитке и т.д. и т.п.
Поэтому ИМХО, имеет смысл реализовать такое поле в виде настоящей древовидной таблицы.