Вы упомянули наиболее часто применяемый список смежности: https://blogs.msdn.microsoft.com/mvpawardprogram/2012/06/25/hierarchies-convert-adjacency-list-to-nested-sets
Есть и другие модели, включая материализованный путь и вложенные наборы: http://communities.bmc.com/communities/docs/DOC-9902.
Джо Селко написал книгу по этой теме, которая является хорошей справочной информацией с точки зрения общего SQL (она упоминается в приведенной выше ссылке на вложенный набор статей).
Кроме того, Ицик Бен-Ганн дает хороший обзор наиболее распространенных опций в своей книге «Внутри Microsoft SQL Server 2005: запросы T-SQL».
При выборе модели следует учитывать следующие основные моменты:
1) Частота изменения структуры - как часто меняется фактическая структура дерева. Некоторые модели обеспечивают лучшие характеристики обновления структуры. Однако важно отделить изменения структуры от других изменений данных. Например, вы можете смоделировать организационную структуру компании. Некоторые люди будут моделировать это как список смежности, используя идентификатор сотрудника, чтобы связать сотрудника с его руководителем. Обычно это неоптимальный подход. Подход, который часто работает лучше, - это моделирование организационной структуры отдельно от самих сотрудников и сохранение сотрудника как атрибута структуры. Таким образом, когда сотрудник покидает компанию, сама организационная структура не нуждается в изменениях, а только в ассоциации с ушедшим сотрудником.
2) Является ли дерево тяжелым для записи или чтения - некоторые структуры работают очень хорошо при чтении структуры, но несут дополнительные накладные расходы при записи в структуру.
3) Какие типы информации вам нужно получить от структуры - некоторые структуры лучше всего предоставляют определенные виды информации о структуре. Примеры включают поиск узла и всех его дочерних узлов, поиск узла и всех его родителей, определение количества дочерних узлов, удовлетворяющих определенным условиям и т. Д. Вам необходимо знать, какая информация потребуется от структуры, чтобы определить структуру, которая лучше всего подходит твои нужды.
person
JeremyDWill
schedule
01.06.2009