RDMBS: подход для эффективного доступа к данным древовидной структуры, хранящимся в базе данных - PullRequest
0 голосов
/ 09 февраля 2010

Некоторые подробности о сценарии: 1. У нас есть база данных MS SQL Server 2008, которая хранит записи «Ресурсы» в таблице. 2. Ресурсы могут иметь несколько дочерних ресурсов. 3. Дочерний ресурс может принадлежать нескольким родительским ресурсам. 4. Ресурсы связаны друг с другом через промежуточную таблицу, т. Е. Ресурс -> Ссылка -> Ресурс. 5. Может быть «n» уровней родительских и дочерних отношений, но в действительности это может быть не более 3 или 4 глубины. 6. Приложения должны представить представление данных, которое показывает все дерево для данного родителя и всех его дочерних элементов, где дочерние элементы могут быть на 1 потомка дальше от родительского, т.е. Resource (Parent) -> Link -> Resource - > Ссылка -> Ресурс (дочерний) 7. Конечным пользователям в идеале нужно видеть изменения в дереве в реальном времени на основе действий, которые они выполняют над отношениями с ресурсами. Под реальным временем я подразумеваю порядка нескольких секунд, поскольку изменение необходимо отразить в пользовательском интерфейсе.

Я провел некоторую исследовательскую работу с использованием серии представлений, но необходимость использования внешних объединений означает, что их представления не могут быть проиндексированы и, следовательно, могут плохо масштабироваться.

Следующее решение, которое я рассматриваю, - это создание одной или нескольких специальных таблиц, которые содержат плоское представление деревьев ресурсов. Однако вряд ли это поддержит требуемые нами обновления в режиме реального времени.

Кто-нибудь имел дело с подобным сценарием?

1 Ответ

1 голос
/ 09 февраля 2010

Это зависит от того, как вам нужно получить доступ к вашим деревьям. Если вам нужно, например, передать идентификатор и получить этот ресурс и все его вложенные дочерние элементы, вы можете рассмотреть функции с табличными значениями, используя рекурсивные общие табличные выражения.

Пример рекурсивного CTE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...