Как работает тип данных иерархии? - PullRequest
3 голосов
/ 14 июля 2010

Я хотел бы создать пользовательский тип CLR в SQL Server 2005, который обладает теми же преимуществами производительности, что и иерархия для иерархий моделей.

У кого-нибудь есть идеи / указатели?

Ответы [ 2 ]

3 голосов
/ 16 июля 2010

Я нашел его - как реализован иерархический идентификатор. Это хитрый алгоритм, который называется ORDPATH.

http://www.cs.umb.edu/~poneil/ordpath.pdf

(через: http://sqlkpi.com/BLOGS/BOBB/post/ORDPATH-ORDPATH-everywhere.aspx)

Это может быть интересный сайд-проект.

2 голосов
/ 05 апреля 2015

SQL Server кодирует hierarchyid, используя кодировку, основанную на ORDPATH, но отличающуюся от него.

Можно найти «физическое представление» hierarchyid в [MS-SSCLRT]: форматы сериализации типов CLR Microsoft SQL Server . Подведем итог:

  1. Кодируйте каждое число n в hierarchyid как битовую строку, используя кодирование переменной длины. Если . следует n в hierarchyid, закодируйте n+1 вместо n.

    Длина строки битов не должна быть кратна восьми!

    Детали кодировки слишком длинные, чтобы включать их здесь. Обратите внимание, что кодировка должна поддерживать отрицательные целые, нулевые и положительные целые числа. Это также должно сохранять порядок. То есть для целых чисел a и b с кодировками e(a) и e(b), если a > b, то e(a) > e(b) (при сравнении лексикографических кодировок).

  2. Добавить 1 к битовой строке, если / следует за номером. Добавьте 0 к битовой строке, если за номером следует ..

  3. Объединить все битовые строки.

  4. Добавляйте 0 к результату шага 3, пока длина не будет кратна 8. (Если она уже была кратна 8, вы не добавите здесь 0).

...