Ordpath - egy új megközelítés a hierarchiákkal (fákkal) való együttműködéshez a sql szerver 2018-ban

ORDPATH történelem az SQL Serverben
HierarchiaId adattípus
Hierarchia kialakítása (kódok hozzárendelése az új csomópontokhoz)

HierarchyId értékek rendezése
Tipikus lekérdezések a hierarchikus adatokhoz

Ordpath - egy új megközelítés a hierarchiákkal (fákkal) való együttműködéshez a sql szerveren 2008-ban

ORDPATH történelem az SQL Serverben

  • A hierarchia teljes egészében megmarad és olvasható.
  • Az alkalmazásnak ezeket az adatokat XML formátumban kell megadnia.
  • Az XML dokumentumadatokra vonatkozó adatok ritkán kerülnek végrehajtásra, és nem kritikusak.

Annak érdekében, hogy egy XML-dokumentumot ne értelmezzen minden alkalommal, amikor valamit meg kell találnia benne, az elsődleges XML index célja. Ha létrehoz egy ilyen indexet, akkor az XML-dokumentumot az adatbázisban egy kényelmes relációs formában tárolja, amely lehetővé teszi, hogy hatékonyabban végezzen keresést. Az elemek hierarchiájának bemutatásához ez az index az ORDPATH sémát (ORDPATH - hierarchikus címkézési sémát) használja. Ez a megközelítés ebben az esetben hatékonyabbnak bizonyult, mint a hagyományos "Szülő / Gyermek".

HierarchiaId adattípus

A HierarchyId értékek fenti formája logikus. Tehát a HierarchyId értékek átalakulnak karaktertípusokká és vissza. Bináris formában a HierarchyId típus értékei nagyon kicsiek.

Mi olyan figyelemre méltó ebben a rendszerben a kódok kódok hozzárendeléséhez (ORDPATH-séma)?

  • Ezzel a sémával mindig hozzáadhat egy új csomópontot a hierarchiában lévő bármely helyhez a meglévő csomópontok módosítása nélkül.
  • A szülőcsomópontok (a közvetlen szülőktől a gyökércsomópontig) összes szülőcsomódhoz tartozó információ jelen van a csomópont-kódban.
  • Könnyű azonosítani az összes gyermek csomópontot (nemcsak az azonnali leszármazókat).
  • A séma nem csak a szülő / gyermek kapcsolatról, hanem a csomópontok sorrendjéről is rendelkezik (a csomópont / 1/1 / a csomópont előtt / 1/2 /).
  • Az oszlop szerinti hierarchiák szerinti sorrend meghatározza a hierarchia csomópontjait (a táblázat sorai) a "jobb" sorrendben.

Hierarchia kialakítása (kódok hozzárendelése az új csomópontokhoz)

Mielőtt megértenük, hogyan hozhatók létre új csomópont-kódok a hierarchiában, hozzon létre egy olyan tesztcímkét, amely tárolja hierarchiáját:

Emlékezzünk, hogy egy logikai (szöveges) formában HierarchyID-értékeket képviselnek, listát az összes csomópont az útvonal a gyökértől a hierarchia egy adott csomópont által határolt „/”. Minden csomópont szám egy vagy több összetevőből (számokból) áll, amelyeket a "." (Dot) szimbólummal választ el. Az érvényes HierarchyId értékek példája:

A HierarchyId értékek fizikai kódolása nyilvánvalóan meg kell felelnie a következő követelményeknek:

  • A lehető legegyszerűbb legyen.
  • El kell látnia a „helyes” sorrend HierarchyID értékeket (azaz például az érték /0.1/0.2/ nagyobbnak kell lennie, mint az érték /0.1/0/).

Így például a / 7 / 4.5 / érték értéke a következőképpen van kódolva:

A csomópont minden összetevője két részből áll - a tartománykód és a tényleges érték. Az 1. táblázat bemutatja az SQL szerver által használt összes tartományt. Például ha 11-es értéket kíván kódolni, akkor a táblázat szerint a 8-15 tartományt használjuk, ennek megfelelően az összetevő bináris ábrázolása:

101 / * a tartomány kódja 8-15 * /

011 / * érték a tartomány kezdetére konvertálva (11 - 8 = 3) * /

Nyilvánvaló, hogy a HierarchyId értékeket kódoló bitszekvenciák változó hosszúságúak. És a hossza nem feltétlenül több, mint nyolc bit (byte határok). Tehát hogyan határozza meg a HierarchyId értékének hosszát? Az utolsó csomópont utolsó elemében az új szintre való átmenet bitjelzője mindig egyenlő az egyik értékkel. Továbbá, a bitszekvencia nullákkal van ellátva a byte-határhoz. Ennek megfelelően, annak érdekében, hogy megtalálják a valódi hossz HierarchyID bites érték, akkor csak meg kell találni az első bit egyenlő egy a jobb oldalon az utolsó bájt - ez a vége a sorozat.

Ne feledkezzünk meg arról a követelményről, hogy a HierarchyId értékeket "helyesen" rendezzük. E követelmény szerint például az / 1 / értékének kisebbnek kell lennie, mint a /1.1/ értéke. De ha ezeket az értékeket kódolja:

akkor ez a feltétel nem teljesül, mivel a csomópontok első összetevője egyenlő, és az első érték egy egység, míg a második - nulla (az új szintre való átmenet zászlója). Kiderül, hogy a második érték kisebb, mint az első, és ez nem megfelelő. A probléma megoldásához az összes olyan csomópont értéke, amely nem éri el a szintjüket, még a csomópontszám-összetevők értékeivel rendelkezik. Vagyis az értékeink kódolása a következő:

Szóval, tegyük össze mindent. Próbáljunk meg kódolni néhány értéket, majd hasonlítsuk össze eredményünket azzal, amit az SQL szerver visszatér. Legyen ez a /5.11 / 3 /

  • Kiírjuk a bitszekvencia komponenseit: