24.09.2004, 08:22 | #41 |
Участник
|
Цитата:
Сообщение от domandr
Да 50 000 элементов много. А почему не должно? Очень даже может быть.
Конечно же, я ни коим образом не утверждаю, что справочник (любой) не может содержать более 50 тыс. элементов! Я просто говорю о том, что если справочник не удовлетворяет некоторым, довольно жёстким, правилам или условиям (перечислены в моём сообщении), то применять его в виде ИЕРАРХИЧЕСКОГО - проблема, нужен другой подход. Удачи |
|
24.09.2004, 08:31 | #42 |
Участник
|
Цитата:
Сообщение от mazzy
Позволю себе не согласится только с одним пунктом.
Это rls - record level security. . иерархия для ограничения доступа на уровне записей тоже не нужна |
|
24.09.2004, 09:50 | #43 |
Участник
|
Цитата:
Сообщение от mazzy
Цитата:
Сообщение от domandr
А вот если взять ювелирную продукцию, так там каждое изделие - отдельная строка в накладной (со своим спец.номером). Тут, то как?
|
|
24.09.2004, 11:45 | #44 |
Участник
|
Цитата:
Сообщение от Andrew_Lan
РЕЗЮМЕ.
- Иерархический справочник должен быть НАСТРАИВАЕМЫЙ. Т.е. для разных пользователей он должен быть свой (см. п.1), и отражать только те данные и значения, с такой группировкой и в такой совокупности, которые позволены данному конкретному пользователю его полномочиями, мерой ответственности и компетентности. Но сейчас я вспоминаю, что пользователи все работали с этими справочниками через фильтры при поиске нужной номенклатуры, но на это тогда внимание не обратили, а то бы думаю быстро всех подведи под один знаменатель. |
|
24.09.2004, 11:55 | #45 |
Участник
|
Сергей, привожу ссылку на статью по той же теме, может быть будет полезна
http://rsdn.ru/?article/db/Hierarchy.xml |
|
24.09.2004, 12:35 | #46 |
Участник
|
Спасибо, Lexey.
Отличная ссылка. |
|
24.09.2004, 13:05 | #47 |
Moderator
|
Цитата:
Сообщение от Lexey
Сергей, привожу ссылку на статью по той же теме, может быть будет полезна
http://rsdn.ru/?article/db/Hierarchy.xml |
|
24.09.2004, 13:08 | #48 |
Участник
|
Цитата:
Сообщение от Dzemon
Очень спорная статья.
|
|
24.09.2004, 13:36 | #49 |
Участник
|
Прочитала. Эх, умно, красиво... НО!
Можно до бесконечности ломать копья на тему "можно-нельзя" и "нужно-не нужно". Какие могут быть ограничения и чем череваты попытки реализовать. Но проза жизни такова. Приходит к тебе юзер (ну, или консультант), который дальше своего интерфейса (то есть того, что он может увидеть и мышкой пощупать) не видит, и, что характерно, видеть не хочет и говорит: "ХОЧУ!". Даешь иерахию! Ну надо!!! Ты ему про реляции и иерархию, а он тебе: "А ты посмотри: вот тут сделали. Нет, ну как же красиво и удобно." Зачем я все это пишу? А затем, что совсем недавно (точнее - 15 минут назад ) по левую руку от меня птицей феникс восстала из пепла "инновационная" мысль накрутить иерархию на справочник. На справочник аналитики. То есть "иерархия" у нас была уже давно, сделанная аналогично "иерархии" в плане счетов: под аналитикой с типом "Заголовок", через третью структуру подвешены аналитики с типом "Значение". Но до сих пор эта роскошь использовалась только в нескольких отчетах (по "заголовочным" аналитикам собирались и печатались итоги). И вот, 15 минут назад была предпринята попытка сделать следующий шаг к загибанию Аксапты в бараний рог: в муках родилась ИДЕЯ выводить эут "иерархию" деревом. В lookup'овой форме для аналитики... Мотивы? Да пожалуйста, целый вагон: 1. У нас (предприятия) много аналитик, юзеры в них путаются, когда не видят родительских уровней. 2. Юзеры заводят не ту аналитику, а потом так и разносят. А сторнирование - не полезно для системы /Ничего не придумываю, цитирую по консультанту по финансам/ 3. Открывают модуль "Проекты" и тыкают пальцами: нет ну вот же! Красиво и удобно. Многоуважаемы Mazzy, возможно, помнит выложенный мною пару месяцев назад на AxForum'е проект, в котором была реализована иерархия на форме Тех.Мест (для модуля ТОРО). Тогда это пропихнули под эгидой "наличие иерархии прописано в ТЗ". Сейчас в ТЗ ничего такого нет. Но ведь "аналитик так много, без иерерхии с ними так сложно...". И что вот прикажете делать с такими "ситуациями"?! (ЗЫ Как-то сразу вспоминается анекдот "Дорогая! Ты не путай ситуацию с б...твом") |
|
24.09.2004, 15:08 | #50 |
Участник
|
у меня как раз реализовано предложение.
вся проблема в том, что изначально я хотел опубликовать набор проектов xpo, где пошагово разъяснено, как можно сделать иерархию правильно. проблема вся в том, что не успешаю подготовить отдельные пошаговые проекты. а публиковать сразу полностью готовый считаю методически неправильным... попробую таки в выходные доделать. приношу свои извинения за задержку. просто сейчас страшная запарка... |
|
24.09.2004, 15:14 | #51 |
Moderator
|
Ох, попытаюсь в выходные вытащить свои деревянные наработки...
|
|
24.09.2004, 15:30 | #52 |
Участник
|
Давай. Будет очень любопытно.
|
|
25.09.2004, 09:37 | #53 |
Участник
|
Вот наконец то нашел место где эта тема обсуждается всерьез.
Не буду комментировать комментировать посты, сразу перейду к обсуждению статьи, которая тут является главным звеном. Много времени нет поэтому обсуждать буду "порциями". Для начала несколько тезисов: 1. Господство реляционных СУБД (СУРБД) в наше время для разработки деловых приложений бесспорно, так же как то, что Аксапта построена на СУРБД. 2. Так же бесспорно что СУРБД не является идеальным решением в технологиях хранения, обработки и анализа больших объемов информации, но забудем про это пока. 3. Из литературных источников о принципах СУРБД и реаляционной алгебры мы знаем что есть ряд задач, которые СУРБД не могут решать эффективно, в ряд этих задач попадает то что мы тут называем "древовидностью". Поэтому реализация древовидности в СУРБД бесспорно является редко когда практичной задачей - с этим я не спорю. Но давайте посмотрим ниже. (Теперь собственно комментирование статей уважаемого Mazzy Цитата:
...В свое время были развиты иерархические СУБД. Однако с появлением реляционных баз данных, иерархические СУБД были незаслуженно забыты...
...На просторах СНГ массовое распространение иерархических справочников в учетных системах и в ERP-системах началось с 1С... Т.о. 1С являет собой продукт, который использует СУРБД немного не так как предполагается для них. Цитата:
Предполагается, что иерархия нужна для того, чтобы пользователь быстро искал информацию.
Моя цель сейчас состоит в том чтобы показать что этот постулат неверен, хотя большая часть сторонников и пользователей деревьев сами этого не понимают. Давайте привлечем немножко абстракции нам в помощь. Постановка задачи такова: 1. имеется некоторые сущности, некоторое множество объектов (в нашем случае - строк в таблице), которые нужно подвергнуть категоризации/классификации. 2. Классифируем мы объекты по свойствам. Например - цвет, размер, модель, класс, ассортимент и т.д. 3. Некоторые свойства объектов образуют иерархическое подчинение ВНУТРИ СЕБЯ. Это важный момент. Мы должны понимать что иерархия иерархии рознь - есть иерархия МЕЖКЛАССОВАЯ и есть иерархия ВНУТРИКЛАССОВАЯ. Межклассовая иерархия (у машины есть 4 колеса) превосходно реализуюется в СУРБД связанными таблицами. Внутриклассовая (каталоги в современный файловых системах) - это уже тот вид иерархии вокруг которого разгорелся спор. И тут уясним для себя важнейший момент: Внутриклассовая древовидная иерархия существует только в пределах одного свойства объекта! Если вы строите дерево вокруг нескольких свойств объекта, вы поступаете грубо неверно (это верно так же если свойство одно, но недостаточно нормализовано и на самом деле содержит в себе несколько независимых)! В дальнейшем постараюсь прояснить этот момент как можно чётче. Большая часть проблем и неграмотного дизайна древовидных структур связано именно с этим моментом. Вообще в идеале у справочника объектов должно быть ровно столько НЕЗАВИСИМЫХ древовидных классификаторов, сколько в нём есть полей иерархического свойства. Рассмотрим тут пример из статьи: Цитата:
...На первом уровне, как правило, представлены типы товаров, продукции и материалов, на втором уровне производители или бренды, на третьем уровне детализация по группам товаров и продукции, на четвертом уровне детализация по цветам или размерам, на пятом - по техническим характеристикам и т.д....
Остюда на самом деле и вытекает тезис mazzy о том что "иерархическое представление является удобным только для ОДНОГО пользователя". На самом деле это верно только для "неправильных иерархий" - для межклассовых иерархий - т.е. менеджер по закупкам хочет в корне иерархии видеть поле "производитель", но кладовщик хочет видеть в корне иерархии поле "склад". А ведь всё верно! Для них это действительно так, НО ТАКИЕ КЛАССИФИКАТОРЫ ДЕЙСТВИТЕЛЬНО НЕ НУЖНЫ И ЛЕГКО ЗАМЕНЯЮТСЯ ФИЛЬТРАМИ. Примером правильной классификации является, например, классификация по ассортименту... АССОРТИМЕНТУ И ТОЛЬКО. Пример из нашего классификатора: Лакокрасочная продукция / Эмали / Эмали для наружних работ / Пено-фталиевые В чём тут фокус? Фокус тут в том что уровни правильного классификатора НЕ ПЕРЕСЕКАЮТСЯ. Они не могут быть подменены один другим. Они не могут быть расчлелены на группу полей - внутри подгруппы Эмали не может быть таких же свойств, что в соседних группах. (*То что я сейчас говорю является своеобразным "правилом нормализации" для древовидных классификаторов. Правило это как правило не может быть соблюдено в полно объеме - *). Ниже mazzy приводит говорит о различии между иерархией и фильтрацией - ЭТО И ЕСТЬ ТО О ЧЁМ я говорю. Пример с яндексом еще раз подчёркивает это. На самом деле вокруг нас огромное количество "правильных деревьев" - ассортимент, структурные подразделения чего либо, иерархия в ООП, иерархия оглавления в книгах и т.д. и т.п. Теперь когда мы разобрались с тем почему не всякий древовидный классификатор является правильным надо уже разбираться с "правильными древовидными классификаторами", и о том нужны ли именно они. Об этом позже, когда появится время. P.S. Надеюсь мысли не слишком сумбурно высказаны, есть куча моментов здесь сказанных, которые по хорошему надо прояснять глубже... |
|
25.09.2004, 14:34 | #54 |
Участник
|
Еще раз переварил написанное и хочу подытожить, используя только что состряпанные термины:
"Ненормализованное дерево" - это дерево, которое строится на основе нескольких свойств объекта (либо одного ненормализованного поля, которое на самом деле содержит независимые данные внутри себя), которые находятся в иерархической взаимосвязи. Для таких деревьев как правило действует принцип "каждому нужно свой вид дерева". Такие деревья лучше всего организовывать только на уровне интерфейса пользователя, не ломая саму плоскую таблицу. Вообще если разобраться это не деревья, а просто тот или иной вид ГРУППИРОВКИ таблицы по нескольким её полям. Для таких деревьев характерно то, что их уровни можно менять местами - например Склад/Поставщик/Товар или Поставщик/Товар/Склад - оба варианта группировки возможны и наделены какой либо функциональностью (особенно в отчетах). "Нормализованное дерево" - это дерево построенное исключительно в рамках одного свойства объекта. Такое свойство представляет собой некую неделимую иерархическую сущность и может выстраивать только один вид иерархии. Например Сырьё/Топливо/Бензин не может быть выстроено по другому - Топливо/Сырьё/Бензин или Бензин/Топливо/Сырьё не имеют смысла. Следовательно для таких иерархий действует правило "всем нужен только один вид дерева" - такие "правильны" деревья невозможно рационально представить как набор нескольких независимых полей и простая фильтрация (даже с масками) по ним затруднена, более того - само по себе такое дерево имеет вполне очерченный смысл НА КАЖДОМ УРОВНЕ СВОЕЙ ИЕРАРХИИ. Под этим я подразумеваю то, что пользователям полезно и имеет смысл работать не только с листями такого дерева (конечными узлами), но и с ветками. Каждый узел такого дерева может быть использован как укрупнение или наоборот - уточнение каких либо действий/запросов/анализа. Например проставление скидки 5% на все горючесмазочные материалы, но 10% на бензин, или перенос папки со всеми её подпапками в другое место на диске, или вывод суммарного оборота по кафельной плитке и т.д. и т.п. Поэтому ИМХО, имеет смысл реализовать такое поле в виде настоящей древовидной таблицы. |
|
25.09.2004, 15:37 | #55 |
Участник
|
P.S.
Предпоследним параграфом я хотел отметить что "правильное" дерево - это несомненно нечто большее чем просто фильтрация - это способ восприятия информации и способ управления ею. За сим заканчиваю комментировать первую часть статьи. |
|
26.09.2004, 01:23 | #56 |
Участник
|
=A=L=X=, прежде всего, спасибо за обстоятельный комментарий.
Согласен, что как правило иерархии понимаются заказчиками и постановщиками неправильно, а следовательно неправильно и используются. Пока читал, хотел спросить: "какие будут предложения?" Потому увидел предлагаемый пример "Лакокрасочная продукция / Эмали / Эмали для наружних работ / Пено-фталиевые" В этой иерархии признак "Для наружных работ" является межвидовым. Этот признак скорее всего будет повторяться в других группах. Лакокрасочная продукция / Эмали / Эмали для наружних работ Лакокрасочная продукция / Краски / Краски для наружних работ Лакокрасочная продукция / Лаки / Лаки для наружних работ И т.п. Хуже всего, что этот признак скорее всего будет перемешиваться с видовыми признаками и принзаки одного смысла будут встречаться в разных уровнях иерархии... Лакокрасочная продукция / Эмали / Эмали для наружних работ / Пено-фталиевые Лакокрасочная продукция / Краски / Краски для наружних работ Лакокрасочная продукция / Краски / Маслянные Лакокрасочная продукция / Краски / Нитрокраски Лакокрасочная продукция / Краски / Краски для рисования / Гуашь Лакокрасочная продукция / Краски / Акварельные И т.п. Т.е. при большом количестве уровней, коллизии в реальной работе неизбежны. Какие будут предложения? Да, прежде всего отделить формат хранения и формат представления. Что еще? Да, очень интересный термин "нормальзованное/ненормализованное дерево". Поскольку вы об этом думали больше, то можно я спрошу? Для нормализованного дерева действует только одно правило "Нормализованное дерево - это дерево построенное исключительно в рамках одного свойства объекта"? Может есть другие правила? Бывает ли несколько степеней нормализованности деревьев? |
|
26.09.2004, 09:41 | #57 |
Участник
|
Цитата:
Потому увидел предлагаемый пример "Лакокрасочная продукция / Эмали / Эмали для наружних работ / Пено-фталиевые"
В этой иерархии признак "Для наружных работ" является межвидовым. Этот признак скорее всего будет повторяться в других группах. Цитата:
Лакокрасочная продукция / Эмали / Эмали для наружних работ
Лакокрасочная продукция / Краски / Краски для наружних работ Лакокрасочная продукция / Лаки / Лаки для наружних работ На самом деле путешествуя по нашему дереву я нахожу более "страшные" моменты, когда лаки разбиты на "...внешние работы" и "...внутренние работы", а на уровне ниже каждая из этих веток разбита на "Водные" и "Полимерные". Вот это уже серьезный недочет, но согласитесь - хорошего, универасльного решения нет ни в "древовидном", ни в "плоском" подходе нет. Цитата:
Да, прежде всего отделить формат хранения и формат представления.
Что еще? Действительно реализовавывать деревья в СУРБД - плохой тон. Действительно в аксапте нет встроенной поддержки древовидности. Действительно нужно 10 раз подумать прежде чем нагружать SQL-сервер сериями из сотен рекурсивных запросов, НО Желание клиента слишком часто действительно является законом. Правильная древовидность может действительно помогать и упрощать решение многих задач. На самом деле в аксапте и так есть куча мест где постоянно происходит КУЧА рекурсивных и не очень запросов, так что ответ на вопрос о том стоит ли оно того падение производительности не столь очевиден. Цитата:
Для нормализованного дерева действует только одно правило "Нормализованное дерево - это дерево построенное исключительно в рамках одного свойства объекта"? Может есть другие правила?
Цитата:
Бывает ли несколько степеней нормализованности деревьев?
|
|
26.09.2004, 14:05 | #58 |
Участник
|
Цитата:
Сообщение от =A=L=X=
Цитата:
Лакокрасочная продукция / Эмали / Эмали для наружних работ
Лакокрасочная продукция / Краски / Краски для наружних работ Лакокрасочная продукция / Лаки / Лаки для наружних работ Доски / Профильные / Для наружных работ Доски / Профильные / Для мебели |
|
26.09.2004, 14:08 | #59 |
Участник
|
Цитата:
Сообщение от =A=L=X=
Цитата:
Да, прежде всего отделить формат хранения и формат представления.
Что еще? Пример - спецификации (BOM). Узлы состоят из материалов и других узлов. Спецификации - типичная иерархия. Причем именно иерархия, а не граф. С циклами в спецификациях в обязательном порядке приходится бороться. Причем спецификациям изначально присуща рекурсия. Рекурся содержится в определении. Причем именно бесконечная рекурсия. Так что не любую иерархию можно описать несвязанными полями. Просто в БОЛЬШИНСТВЕ случаев иерархию применяют совершенно неоправдано. Еще раз спасибо за высказывания. По большей части - с вами совершенно согласен. |
|
26.09.2004, 14:16 | #60 |
Участник
|
Цитата:
Сообщение от mazzy
Цитата:
Сообщение от =A=L=X=
Цитата:
Лакокрасочная продукция / Эмали / Эмали для наружних работ
Лакокрасочная продукция / Краски / Краски для наружних работ Лакокрасочная продукция / Лаки / Лаки для наружних работ Доски / Профильные / Для наружных работ Доски / Профильные / Для мебели |
|