|
Как загрузить данные из БД в древовидный доменный объект
|
|||
---|---|---|---|
#18+
Есть стандартная база товаров (категории, товары) Есть уровень бизнес логики Коллекция категорий с вложеными товарами или другими категориями. Имеется два метода синхронизации доменного объекта с БД Update() тут просто рекурсивно проходим дерево, а вот как решить вопрос с загрузкой данных из БД я не знаю вот примерная схема: записи в БД ID ParentID Name 1 NULL Компьютеры 2 NULL Телевизоры 3 NULL Стиральные машины 4 1 Ноутбуки 5 1 Планшеты 6 1 Настольные Объект должен быть такой Коллекция "категории" 1 NULL Компьютеры | Ноутбуки | Планшеты | Настольные 2 NULL Телевизоры 3 NULL Стиральные машины Уровней может бысть сколько угодно, поэтому наверное нужен какой-то рекурсивный алгоритм я склоняюсь к тому чтобы сначало выбрать нулевой уровень и потом n+1 до конца, но хочется сделать только один SELECT (для производительности) Что посоветуете? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2011, 20:57 |
|
Как загрузить данные из БД в древовидный доменный объект
|
|||
---|---|---|---|
#18+
Есть еще другая стратегия: Анализируем последовательно каждую запись, если нет ИД создаем, если нет парент ИД, тоже создаем, если есть парент ИД просто добавляем в него и так рекурсивно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2011, 21:13 |
|
Как загрузить данные из БД в древовидный доменный объект
|
|||
---|---|---|---|
#18+
maxterbearно хочется сделать только один SELECT (для производительности)Так и сделайте, какие проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2011, 21:21 |
|
Как загрузить данные из БД в древовидный доменный объект
|
|||
---|---|---|---|
#18+
maxterbear, - вы описали только таблицу классификатора в БД. Где таблица объектов? - некоторые субд поддерживают в запросах деревянные запросы (на форум субд) - обязательно провести нагрузочное тестирование вашей модели - проектировать дерево в логической модели необязательно деревом в физической http://www.databaseanswers.org/data_models/ ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2011, 09:44 |
|
Как загрузить данные из БД в древовидный доменный объект
|
|||
---|---|---|---|
#18+
в mssql есть тип hierarchyid (это путь в дереве) по нему можно выбирать подчинённые указанного и сортировать (в т. ч. с использованием кластерного индекса) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2011, 10:17 |
|
Как загрузить данные из БД в древовидный доменный объект
|
|||
---|---|---|---|
#18+
maxterbear, Из вопроса не ясно, для чего предназначено дерево? Могу предположить, что дерево, как это общепринято, предназначено для компактного представления иерархии объектов (товаров) пред ясны очи пользователя. Поскольку любая нормальная ИС не должна ставить ограничений на количество объектов в БД, то тебе при проектировании ИС надо рассчитывать на достаточно большое количество объектов. Предположим, их когда-нибудь будет 20 000 000. Сможет-ли твоя ИС загрузить сразу все записи в дерево на клиенте? Пожалуй, что нет. Отсюда напрашивается работоспособная тактика: Показываешь клиенту в дереве только записи нулевого уровня. Их должно быть немного, 5-7, чтобы пользователь мог окинуть их одним взглядом, не прокручивая окно. Далее, пользователь изъявляет желание просмотреть какую-то папку. В этот момент твоя программа должна сделать запрос к БД и выбрать записи первого уровня, у которых "родитель" выбранный пользователем элемент. И т.д. Если всё правильно спроектировано, то твоё приложение будет летать на любом количестве записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2011, 14:31 |
|
|
start [/forum/topic.php?fid=33&tid=1547951]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
168ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
others: | 301ms |
total: | 546ms |
0 / 0 |