ПредишенСледващото

История ORDPATH в SQL Server
Тип на данните HierarchyId
Получаване на йерархията (разпределяне на кодове на нови възли)

Сортиране HierarchyId ценности
Типични искания към йерархична данни

Ordpath - нов подход за работа с йерархии (дървета) в SQL Server 2008

История ORDPATH в SQL Server

  • Йерархията се съхранява и да прочетете в неговата цялост.
  • Заявление нуждае от данните са в XML-формат.
  • Търсенето според документ за XML се извършват рядко и не критични времена.

За да не се изпълнява разбор на XML-документ всеки път, когато искате от него да се намери нещо, е първичната на XML-индекса. Когато създадете такъв индекс, на XML-документ се съхранява в база данни в лесен релационна форма, която след това го прави много по-ефективно, за да го търсят. За да се въведе йерархия на елементи в индекс използва ORDPATH-веригата (ORDPATH - йерархична схема за етикетиране). Такъв подход е в този случай е по-ефективен от конвенционалния "майка / детето".

Тип на данните HierarchyId

Горният нотация се HierarchyId логически стойности. Така HierarchyId стойности се преобразуват в видове характер и обратно. На двоични стойности на типа HierarchyId съхраняват много компактно.

Какво толкова особено тази схема възли за възлагане на кодове (ORDPATH-схема)?

  • С помощта на тази схема, винаги можете да създадете нов възел на всяко място в йерархията, без да се променят съществуващите възли.
  • Информация за всички възли майки (от незабавно родител в главната възел) е в кода за монтаж.
  • Лесно е да се идентифицират всички деца възли (не само преки наследници).
  • Шофиране съхранява информация не само за връзката родител / дете правоотношение, но също така и по реда на възлите (възел / 1/1 / е пред възел / 1/2 /).
  • Сортиране по колона HierarchyId изгражда йерархия на възли (редове от таблицата) в реда "право".

Получаване на йерархията (разпределяне на кодове на нови възли)

Преди да се справят с това как да се образуват нови кодове възли, когато ги добавите към йерархията, да се създаде тест плоча, която ще се проведе нашата йерархия:

Спомнете си, че логиката (текстова) форма HierarchyId-стойности представляват списък брой всички възли по пътя от корена на йерархията на даден възел, очертани с "/". Всеки възел се състои от няколко на един или повече компоненти (цифри), разделени от "." (Точка). ПРИМЕР правилни HierarchyId-стойности:

физически кодиране стойности HierarchyId очевидно трябва да отговарят на следните изисквания:

  • Тя трябва да бъде възможно най-компактна.
  • Тя трябва да осигури на "правилните" HierarchyId стойности вид ред (това е, например, стойността /0.1/0.2/ трябва да е по-голяма от стойността /0.1/0/).

Това е, например, /7/4.5/ стойност кодирани съгласно схема, както следва:

Всеки компонент на броя на възел се състои от две части - от порядъка код и действителната стойност. Таблица 1 представя всички използвани диапазони SQL-сървър. Например, за да кодира стойност от 11, в съответствие с таблицата, се използва интервала 8-15 и, съответно, двоичното представяне на този компонент е равен на:

101 / * код * диапазон 8-15 /

011 / * стойност, изчислена в началото на интервала (11-8 = 3) * /

Очевидно е, че битови последователности, кодиращи HierarchyId-стойност, има променлива дължина. И дължината им не е задължително да е кратна на осем бита (байт гранични). Е, как да се определи дължината на HierarchyId-стойности? Bit преход флаг на ново ниво в последния компонент на последния брой на възлите винаги е равен на единица. Тогава битова последователност е подплатени до границата един байт. Съответно, за да намерите HierarchyId-битови стойности на истинската дължина, просто трябва да се намери първият бит равен на една отдясно в последния байт - това е края на поредицата.

Нека си припомним, търсенето на "правилните" вид HierarchyId стойности. Според това изискване, например, стойността на / 1 / трябва да бъде по-малко от /1.1/. Но ако тези стойности се кодират, както следва:

това условие не е изпълнено, тъй като първите компоненти са равни на броя на възлите, а след това в първия смисъл устройството е, че във втория по - нула (знаме трансфер до следващото ниво). Оказва се, че втората стойност е по-малък от първия, но това е погрешно. За да се реши този проблем стойностите на всички не единствена от нивото си на възел брой компоненти се определя от още една. Това означава, че нашите ценности ще бъдат кодирани, както следва:

Така че, нека да се съберат всички парчета заедно. Нека се опитаме да кодирате някаква стойност и след това да сравните нашите резултати с тези, които ще се върнат на SQL сървър. Нека това да бъде на стойност /5.11/3/

  • Пишем съставните части на последователността от битове:
Подкрепете проекта - споделете линка, благодаря!