Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2013, 12:31   #1
Дротаверин
 
Регистрация: 24.06.2012
Сообщений: 9
Восклицание Организация дерева в MSSQL

Нужно хранить большие объемы данных (миллионы записей). Логично, что структуру в виде например Б-дерева нужно организовать не на c#, а внутри БД. Поля в записях БД будут например такие: код объекта (как ключ), название объекта (как данные), указатель на родителя, указатель на _что-то_еще? Если я использую Б-дерево, то потомков можно быть приличное число.

Методы поиск/изменение/удаление узлов организовать как хранимые процедуры. А из формы просто их вызывать.

Правильно ли я понимаю суть вообще?
Дротаверин вне форума Ответить с цитированием
Старый 29.06.2013, 13:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Правильно ли я понимаю суть вообще?
Суть чего? Иерархического хранения данных или оптимальной реализации твоей конкретной задачи?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.06.2013, 13:56   #3
Дротаверин
 
Регистрация: 24.06.2012
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Иерархического хранения данных или оптимальной реализации твоей конкретной задачи?
Если под иерархическим хранением данных подразумевается древовидная структура, то: суть древовидной структуры и оптимальное решение одновременно.
Задача в принципе является классической, должны же быть хоть какие-то примеры. А я нахожу лишь примеры на с# для организации дерева в оперативной памяти, и общие представления о том, как это делается в sql.
Дротаверин вне форума Ответить с цитированием
Старый 29.06.2013, 14:18   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в sql нет понятия дерева, вы просто должны обеспечить связи между записями.
а именно, хранить ид родителя, тогда все предки родителя найдутся через select * from table where parentid=<id>
и так далее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.06.2013, 14:32   #5
Дротаверин
 
Регистрация: 24.06.2012
Сообщений: 9
По умолчанию

Ага, значит указатели на потомка не храним. Нубский вопрос: существую ли указатели в SQL в приниципе? Или использовать родительский ключ?
Дротаверин вне форума Ответить с цитированием
Старый 29.06.2013, 14:36   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Дротаверин Посмотреть сообщение
Ага, значит указатели на потомка не храним. Нубский вопрос: существую ли указатели в SQL в приниципе? Или использовать родительский ключ?
ключ по сути и есть указатель.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.06.2013, 14:39   #7
Дротаверин
 
Регистрация: 24.06.2012
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ключ по сути и есть указатель.
Благодарен, по крайней мере понятно, куда рыть. Спасибо.
Дротаверин вне форума Ответить с цитированием
Старый 29.06.2013, 17:56   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
суть древовидной структуры и оптимальное решение одновременно.
Суть структуры проста:
Цитата:
Таблица:
ID - Ключевое поле записи
IDParent - Поле, где указан ключ записи-родителя
Поля с данными - Другие поля с данными
Потом составляется выборка типа той что выше представлена.

А вот чтиво:
http://club.shelek.ru/viewart.php?id=306
http://citforum.ru/database/articles/tsql_mssql/#ERHA
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.06.2013, 12:48   #9
Дротаверин
 
Регистрация: 24.06.2012
Сообщений: 9
Восклицание

Цитата:
Сообщение от Stilet Посмотреть сообщение
Спасибо за литературу.

Вот еще момент. Имеет ли смысл вообще хранение данных в таком виде: ключом является "код объекта", (см. рисунок 1) Ведь например для поиска по названию автомобиля придется перебирать всю структуру и теряется сама суть дерева. Может стоит вычислять например хэш от названия и его применять в качестве ключа?

В примерах встречаю организацию дерева как действительной иерархии (шкаф->полка шкафа-> книга) Но никто не хранит однотипные данные иерархически как в рисунке 2.
Я опять не верно понимаю суть?
Изображения
Тип файла: png table.png (6.2 Кб, 36 просмотров)
Тип файла: jpg дерево.jpg (8.0 Кб, 137 просмотров)
Дротаверин вне форума Ответить с цитированием
Старый 30.06.2013, 14:08   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Имеет ли смысл вообще хранение данных в таком виде
Да имеет. Но пока не ясно подходит ли под твою задачу, ибо она не озвучена.
Цитата:
Может стоит вычислять например хэш от названия и его применять в качестве ключа?
Ну и что ты понимаешь в своем определении хеша?
Цитата:
Но никто не хранит однотипные данные иерархически как в рисунке 2.
Чет я не понял где тут однотипные данные...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MSSQL Xe-Xe SQL, базы данных 4 31.10.2011 15:39
Флажок + MsSql FanRammstein Microsoft Office Access 3 20.07.2011 16:27
MSSQL- сложно!!!! 8oOoRPM Фриланс 1 21.05.2011 20:36
C# + MSSQL dampirik Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 3 17.12.2009 01:40
mssql + с# dampirik SQL, базы данных 1 14.12.2009 19:03