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 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: