Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Тип данных hierarchyid является системным типом данных переменной длины. Тип данных hierarchyid используется для представления положения в иерархии. Столбец иерархии типов не представляет дерево автоматически. Приложение должно создавать и назначать значения иерархии таким образом, чтобы требуемое отношение между строками отражается в значениях.
Значение типа данных hierarchyid представляет позицию в древовидной иерархии. Значения hierarchyid обладают следующими свойствами.
Чрезвычайно компактный: среднее количество битов, необходимых для представления узла в дереве с n узлами, зависит от среднего количества дочерних элементов узла. Для небольших вентиляторов (0-7), размер составляет около 6 * logA n bits, где A является средним вентилятором. Узел в организационной иерархии 100 000 человек со средним вентилятором шести уровней занимает около 38 бит. Эта величина округляется до 40 бит (5 байт), которые необходимы для хранения.
Сравнение находится в порядке глубины: учитывая два значения
aиbозначаетa<b, что до b в глубине первого обхода дерева. Индексы для типов данных hierarchyid располагаются в порядке приоритета глубины, а узлы, встречающиеся рядом при проходе по дереву с приоритетным направлением глубины, хранятся рядом друг с другом. Например, потомки некоторой записи хранятся рядом с этой записью. Дополнительные сведения см. в разделе "Иерархические данные" (SQL Server).Поддержка произвольных вставок и удалений: с помощью метода GetDescendant всегда можно создать одноуровневый элемент справа от любого заданного узла, слева от любого заданного узла или между двумя братьями и сестрами. Свойство сравнения сохраняется, если произвольное число узлов вставляется в иерархию или удаляется из нее. Большинство операций вставки и удаления сохраняют свойство компактности. Однако вставки между двумя узлами создают значения иерархии с немного менее компактным представлением.
Кодировка ограничена 892 байтами: Таким образом, узлы, имеющие слишком много уровней в их представлении, чтобы соответствовать 892 байтам, не могут быть представлены типом hierarchyid .
Тип hierarchyid доступен клиентам среды CLR в качестве SqlHierarchyId типа данных.
Remarks
Тип данных hierarchyid логически кодирует сведения об одном узле в дереве иерархии, кодируя путь от корня дерева к этому узлу. Такой путь логически представлен в виде последовательности меток всех посещенных дочерних узлов, начиная с корня. Представление начинается косой чертой, а путь к корню представлен одной косой чертой. Для уровней ниже корня каждая метка кодируется в виде последовательности целых чисел, разделенных точками.
Сравнения дочерних узлов выполняется путем сравнения этих целочисленных последовательностей, разделенных точками, в лексикографическом порядке. Уровни разделяются косой чертой. То есть косая черта отделяет родительский узел от дочернего. Например, следующие пути с длиной 1, 2, 2, 3 и 3 уровня соответственно допустимы для типа hierarchyid:
//1//0.3.-7//1/3//0.1/0.2/
Узлы можно вставлять в любое место. Узлы, вставляемые после /1/2/ , но до /1/3/ этого можно представить как /1/2.5/. Узлы, вставляемые до 0 того, как иметь логическое представление в виде отрицательного числа. Например, узел, который поставляется раньше /1/1/ , можно представить как /1/-1/. Узлы не могут иметь начальные нули. Например, /1/1.1/ является допустимым, но /1/1.01/ недопустимым. Чтобы избежать ошибок, вставляйте узлы с помощью метода GetDescendant.
Преобразование типов данных
Тип данных hierarchyid можно преобразовывать в другие типы описанным ниже образом.
Используйте метод ToString для преобразования значения иерархии в логическое представление в виде типа данных nvarchar(4000 ).
Используйте чтение (ядро СУБД) с помощью CSharp и write для преобразования иерархии вvarbinary.
Чтобы передать параметры иерархии через SOAP, сначала приведение их в виде строк.
Обновление баз данных
При обновлении базы данных до более новой версии SQL Server новая сборка и тип данных hierarchyid устанавливаются автоматически. Помощник по обновлению обнаружит все пользовательские типы данных или сборки с конфликтующими именами. Помощник по обновлению рекомендует переименовать любую конфликтующую сборку и переименовать любой конфликтующий тип или использовать в коде двух частей имена, чтобы ссылаться на этот ранее существующий тип пользователя.
Если обновление базы данных обнаруживает сборку пользователя с конфликтующим именем, она автоматически переименовывает сборку и помещает базу данных в подозрительный режим.
Если во время обновления обнаруживается пользовательский тип данных с конфликтующим именем, никаких специальных шагов не предпринимается. После обновления существует как старый тип пользователя, так и новый системный тип. Тип пользователя доступен только с помощью двух частей.
Использование столбцов hierarchyid в реплицированных таблицах
Столбцы с типом данных hierarchyid могут использоваться во всех реплицированных таблицах. Требования к приложению зависят от того, является ли репликация одной направления или двунаправленной, а также от используемых версий SQL Server.
Однонаправленная репликация
Однонаправленная репликация включает репликацию моментальных снимков, репликацию транзакций и репликацию слиянием, в которой изменения не вносятся на подписчике. Как столбцы hierarchyid работают с одной направленной репликацией, зависит от версии SQL Server, запущенной подписчиком.
Издатель SQL Server может реплицировать столбцы иерархии на подписчик SQL Server той же версии без каких-либо особых соображений.
Издатель SQL Server должен преобразовать столбцы иерархии , чтобы реплицировать их на подписчик под управлением SQL Server Compact или более раннюю версию SQL Server. SQL Server Compact и более ранние версии SQL Server не поддерживают столбцы иерархии . Если вы используете одну из этих версий, вы по-прежнему можете реплицировать данные на подписчик. Для этого следует установить параметр схемы или уровень совместимости репликации (для репликации слиянием), чтобы столбец можно было преобразовать в совместимый тип данных.
Фильтрация столбцов поддерживается в обоих случаях. При этом производится фильтрация столбцов типа hierarchyid. Фильтрация строк поддерживается, если фильтр не включает столбец hierarchyid .
Двунаправленная репликация
Двунаправленная репликация включает репликацию транзакций с обновляемыми подписками, одноранговую репликацию транзакций и репликацию слиянием, при которых изменения выполняются на подписчике. Репликация позволяет настраивать таблицу со столбцами типа данных hierarchyid для двунаправленной репликации. Обратите внимание на следующие требования и рекомендации.
Издатель и все подписчики должны работать с одной и той же версией в SQL Server 2016 (13.x) или более поздней версии.
Репликация реплицирует данные в виде байтов и не выполняет никаких проверок для обеспечения целостности иерархии.
Иерархия изменений, внесенных в источник (подписчик или издатель), не поддерживается при репликации в место назначения.
Значения столбцов hierarchyid могут иметь одинаковые двоичные представления во всех базах данных. Конфликты могут возникать в двунаправленной репликации, когда логика приложения независимо создает один и тот же иерархий для разных сущностей . Поэтому на подписчике и издателе могут создаваться одинаковые значения, но применяются они к разным строкам. Репликация не проверяет наличие этого условия, и нет встроенного способа секционирования значений столбцов иерархии , так как для столбцов нет
IDENTITY. Чтобы избежать подобных необнаруживаемых конфликтов, приложения должны использовать ограничения или другие механизмы проверки.Возможно, что строки, вставляемые на подписчик, могут быть потеряны. Родительская строка вставленной строки может быть удалена на издателе. Это приводит к необнаруживаемому конфликту, если строка из подписчика вставляется на издателе.
Фильтры столбцов не могут отфильтровать столбцы иерархии , не допускающие значения NULL. Вставка из подписчика завершается ошибкой, так как значение по умолчанию для столбца hierarchyid на издателе отсутствует.
Фильтрация строк поддерживается, если фильтр не включает столбец hierarchyid .