При использовании вложенных наборов (иногда называемый Измененным Обходом дерева Предзаказа), можно извлечь всю древовидную структуру или любое поддерево в ней в древовидном порядке с единым запросом, за счет вставок, являющихся более дорогим, поскольку необходимо управлять столбцами, которые описывают чтобы путь через тебя древовидная структура.
Для [1 117] django-mptt, я использовал структуру как это:
id parent_id tree_id level lft rght -- --------- ------- ----- --- ---- 1 null 1 0 1 14 2 1 1 1 2 7 3 2 1 2 3 4 4 2 1 2 5 6 5 1 1 1 8 13 6 5 1 2 9 10 7 5 1 2 11 12
, Который описывает дерево, которое похоже на это (с id
представление каждого объекта):
1 +-- 2 | +-- 3 | +-- 4 | +-- 5 +-- 6 +-- 7
Или, как вложенная схема набора, которая делает его более очевидным, как lft
и rght
значения работают:
__________________________________________________________________________ | Root 1 | | ________________________________ ________________________________ | | | Child 1.1 | | Child 1.2 | | | | ___________ ___________ | | ___________ ___________ | | | | | C 1.1.1 | | C 1.1.2 | | | | C 1.2.1 | | C 1.2.2 | | | 1 2 3___________4 5___________6 7 8 9___________10 11__________12 13 14 | |________________________________| |________________________________| | |__________________________________________________________________________|
, Как Вы видите, для получения всего поддерева для данного узла, в древовидном порядке, просто необходимо выбрать все строки, которые имеют lft
и rght
значения между lft
и rght
значения. Также просто получить дерево предков для данного узла.
level
столбец является небольшим количеством денормализации для удобства больше, чем что-нибудь и tree_id
, столбец позволяет Вам перезапускать lft
и rght
нумерация для каждого узла верхнего уровня, который сокращает количество столбцов, затронутых вставками, перемещениями и удалениями, как lft
и rght
, столбцы должны быть скорректированы соответственно, когда эти операции происходят, чтобы создать или преодолеть разрывы. Я сделал [приблизительно 1 118] примечания разработки в то время, когда я пытался обернуть голову вокруг запросов, требуемых для каждой операции.
С точки зрения фактического работания с этими данными для отображения дерева я создал tree_item_iterator
служебная функция, которая, для каждого узла, должна дать Вам достаточную информацию для генерации безотносительно вида дисплея, который Вы хотите.
[еще 1133] информация о MPTT:
посмотрите мой ответ в этом посте;
Если вы хотите сохранить поставщика членства, который создает для вас .Net, вы можете скопировать все таблицы и т. Д. На другой sql базу данных и укажите ее провайдеру через файл конфигурации.
Напишите комментарий, если вам нужно больше.
Ознакомьтесь с этим пошаговым блогом о том, как настроить поставщика членства в вашем asp. Проект .net mvc. Инструмент sdk, который вам нужен для подготовки вашей базы данных, - это aspnet_regsql.exe, вам не нужно создавать отдельную базу данных для этого (многие люди думают, что им нужно предоставить отдельный aspnet.db), вы можете запустить команду в вашей существующей базе данных, и он создаст таблицы, представления, собственный проект? Что мне нужно, чтобы получить существующая база данных готова, если да? Если не, как мне узнать, что мне нужно делать с реализовать поставщика членства?
Преимущество использования поставщика по умолчанию (поставщик SqlMembership) заключается в экономии времени. Для создания полного поставщика членства и ролей требуется много работы.
Править [2014-06-19] Asp.Net Identity Framework - это новая рекомендация Microsoft по управлению разрешениями пользователей на песок.