Megosztás:


SQL Graph-architektúra

A következőkre vonatkozik: Az SQL Server 2017 (14.x) és újabb verziói az Azure SQL DatabaseAzure SQL Managed InstanceSQL Database-adatbázist a Microsoft Fabricben

Ismerje meg az SQL Graph architektúráját. Az alapok ismerete megkönnyíti más SQL Graph-cikkek megértését.

SQL Graph-adatbázis

A felhasználók adatbázisonként egy gráfot hozhatnak létre. A gráf csomópont- és éltáblák gyűjteménye. A csomópont- vagy éltáblák az adatbázis bármely sémájában létrehozhatóak, de mindegyik egy logikai gráfhoz tartozik. A csomóponttáblák hasonló típusú csomópontok gyűjteményei. Egy csomóponttábla például Person egy Person gráfhoz tartozó összes csomópontot tartalmazza. Hasonlóképpen, az éltáblák is hasonló típusú élek gyűjteményei. Egy éltábla például az összes olyan élet tartalmazza, Friends amely egy másikhoz PersoncsatlakozikPerson. Mivel a csomópontok és élek táblákban vannak tárolva, a normál táblákon támogatott műveletek többsége a csomópont- vagy éltáblákon támogatott.

Az alábbi ábra az SQL Graph adatbázisarchitektúrát mutatja be.

Az SQL Graph adatbázisarchitektúrát bemutató ábra.

Csomóponttábla

A csomóponttáblák egy gráfsémában lévő entitást jelölnek. Minden alkalommal, amikor létrehoz egy csomóponttáblát a felhasználó által definiált oszlopokkal együtt, egy implicit $node_id oszlop jön létre, amely egyedileg azonosít egy adott csomópontot az adatbázisban. A rendszer automatikusan létrehozza a benne lévő $node_id értékeket, és az adott csomóponttábla gráftáblájának objektumazonosítójának és egy belsőleg létrehozott bigint értéknek a kombinációja. Az oszlop kijelölésekor $node_id azonban megjelenik egy JSON-sztring formájában kiszámított érték. Emellett egy pszeudooszlop, $node_id amely egy egyedi utótaggal rendelkező belső névre képez le. Amikor kiválasztja a $node_id pszeudooszlopot a táblából, az oszlop neve a következőképpen $node_id_<unique suffix>jelenik meg: .

Note

A belső $node_id oszlop lekérdezésének egyetlen támogatott és ajánlott módja a pszeudooszlopok lekérdezése a lekérdezésekben. A lekérdezésekben ne használja közvetlenül az $node_id_<hex_string> oszlopokat. Emellett a pszeudooszlopokban látható számított JSON-ábrázolás implementálási részlet. Nem szabad közvetlen függőséget vállalnia a JSON-ábrázolás formátumától. Ha ezzel a JSON-ábrázolással kell foglalkoznia, fontolja meg a NODE_ID_FROM_PARTS() és más kapcsolódó Rendszerfüggvények használatát. Nem ajánlott közvetlenül használni a gráf pszeudooszlopait ($node_id, $from_id, $to_id) predikátumokban. Például egy predikátumot n.$node_id = e.$from_id el kell kerülni. Az ilyen összehasonlítások általában nem hatékonyak a JSON-ábrázolásra való átalakítás miatt. Ehelyett használja a MATCH függvényt, amennyire csak lehetséges.

Javasoljuk, hogy a csomóponttábla létrehozásakor a felhasználók egyedi korlátozást vagy indexet hozzanak létre az $node_id oszlopon, de ha nem jön létre, a rendszer automatikusan létrehoz egy alapértelmezett egyedi, nemclustered indexet. A gráf pszeudooszlopainak indexe azonban a mögöttes belső oszlopokon jön létre. Ez azt jelzi, hogy az $node_id oszlopon létrehozott index a belső graph_id_<hex_string> oszlopban jelenik meg.

Edge table

Az éltáblák egy gráfban lévő kapcsolatot jelölnek. Az élek mindig irányítva vannak, és két csomópontot csatlakoztatnak. Az éltáblák lehetővé teszik a felhasználók számára a több-a-többhöz kapcsolatok modellezését a gráfban. A felhasználó által definiált oszlopok ("attribútumok") nem kötelezőek az éltáblákban. Minden alkalommal, amikor létrehoz egy éltáblát, valamint a felhasználó által definiált oszlopokat, három implicit oszlop jön létre a peremtáblában:

Oszlop név Description
$edge_id Egyedileg azonosít egy adott élet az adatbázisban. Ez egy generált oszlop, és az érték a peremtábla object_id és egy belsőleg létrehozott bigint érték kombinációja. Az oszlop kijelölésekor $edge_id azonban megjelenik egy JSON-sztring formájában kiszámított érték. $edge_id egy pszeudooszlop, amely egy egyedi utótaggal rendelkező belső névre képez le. Amikor kiválasztja $edge_id a táblát, az oszlop neve a következőképpen $edge_id_<unique suffix>jelenik meg: . A pszeudooszlopnevek lekérdezésekben való használata ajánlott módja a belső $edge_id oszlop lekérdezésének, és a belső név hexa sztringgel való használatát kerülni kell.
$from_id Tárolja a $node_id csomópontot, ahonnan a peremhálózat származik.
$to_id Tárolja annak a csomópontnak a $node_id tárolóját, amelyen az él leáll.

Azokat a csomópontokat, amelyekhez egy adott él csatlakozni tud, a beszúrt adatok és $from_id oszlopok $to_id vezérlik. Az első kiadásban nem lehet kényszereket definiálni a peremtáblán, így nem lehet két csomóponttípust csatlakoztatni. Ez azt jelzi, hogy az élek a gráf két csomópontját is csatlakoztathatják, a típusuktól függetlenül.

Az oszlophoz hasonlóan ajánlott, hogy a $node_id felhasználók az éltábla létrehozásakor egyedi indexet vagy korlátozást hozzanak létre az oszlopon $edge_id , de ha nem jön létre, a rendszer automatikusan létrehoz egy alapértelmezett egyedi, nemclustered indexet ezen az oszlopon. A gráf pszeudooszlopainak indexe azonban a mögöttes belső oszlopokon jön létre. Ez azt jelzi, hogy az $edge_id oszlopon létrehozott index a belső graph_id_<unique suffix> oszlopban jelenik meg. Az OLTP-forgatókönyvek esetében azt is javasoljuk, hogy a felhasználók indexet hozzanak létre ($from_id, $to_id) oszlopokon, így gyorsabban kereshetnek a peremhálózat irányába.

Az alábbi ábra bemutatja, hogyan vannak tárolva a csomópont- és éltáblák az adatbázisban.

A csomópont- és éltábla-ábrázolás ábrája.

Metadata

Ezekkel a metaadatnézetekkel megtekintheti egy csomópont vagy éltábla attribútumait.

sys.tables

A bit alábbi oszlopai gráftáblák azonosítására használhatók. Ha is_node 1 értékre van állítva, akkor a tábla egy csomóponttábla, és ha is_edge 1 értékre van állítva, akkor a táblázat egy éltábla.

Az oszlop neve Adattípus Description
is_node bit Csomóponttáblák is_node esetén a beállítás értéke 1.
is_edge bit Éltáblák is_edge esetén az érték 1.

sys.columns

A graph_type nézetben lévő graph_type_desc oszlopok és sys.columns oszlopok hasznosak a gráfcsomópontokban és az éltáblákban használt különböző típusú oszlopok megértéséhez:

Az oszlop neve Adattípus Description
graph_type int Belső oszlop értékkészlettel. Az értékek a gráfoszlopok és NULL mások esetében 1–8 között vannak.
graph_type_desc nvarchar(60) Belső oszlop értékkészlettel.

Az alábbi táblázat az oszlop érvényes értékeit sorolja fel graph_type :

Oszlopérték Description
1 GRAPH_ID
2 GRAPH_ID_COMPUTED
3 GRAPH_FROM_ID
4 GRAPH_FROM_OBJ_ID
5 GRAPH_FROM_ID_COMPUTED
6 GRAPH_TO_ID
7 GRAPH_TO_OBJ_ID
8 GRAPH_TO_ID_COMPUTED

sys.columns csomópont- vagy éltáblákban létrehozott implicit oszlopokra vonatkozó információkat is tárol. A következő információk lekérhetők a sys.columns oszlopaiból, a felhasználók azonban nem választhatják ki ezeket az oszlopokat csomópontból vagy éltáblából.

A csomóponttáblák implicit oszlopai a következők:

Az oszlop neve Adattípus is_hidden Comment
graph_id_\<hex_string> BIGINT 1 Belső gráfazonosító értéke.
$node_id_\<hex_string> NVARCHAR 0 A csomópontazonosító külső, karakteres ábrázolása.

A peremtáblák implicit oszlopai a következők:

Az oszlop neve Adattípus is_hidden Comment
graph_id_\<hex_string> BIGINT 1 Belső gráfazonosító értéke.
$edge_id_\<hex_string> NVARCHAR 0 A peremhálózat-azonosító karakterábrázolása.
from_obj_id_\<hex_string> INT 1 A "csomópontból" belső object_id érték.
from_id_\<hex_string> BIGINT 1 A "csomópontról" belső gráfazonosító értéke.
$from_id_\<hex_string> NVARCHAR 0 a "csomópontból" karakterábrázolása.
to_obj_id_\<hex_string> INT 1 A "csomóponthoz" belső object_id .
to_id_\<hex_string> BIGINT 1 A "to node" belső gráfazonosító értéke.
$to_id_\<hex_string> NVARCHAR 0 A "to node" külső karakterábrázolása.

Rendszer funkciók

Az alábbi beépített függvényekkel kezelheti a gráftáblák pszeudooszlopait. Ezekre a függvényekre részletes hivatkozásokat a megfelelő T-SQL-függvényhivatkozások tartalmaznak.

Built-in Description
OBJECT_ID_FROM_NODE_ID A gráftábla objektumazonosítójának kinyerése egy node_id.
GRAPH_ID_FROM_NODE_ID A gráfazonosító értékének kinyerése egy node_id.
NODE_ID_FROM_PARTS Hozzon létre egy node_id a gráftábla objektumazonosítójából és egy gráfazonosító-értékből.
OBJECT_ID_FROM_EDGE_ID A gráftábla objektumazonosítójának kinyerése a következőből edge_id: .
GRAPH_ID_FROM_EDGE_ID Kinyeri egy adott edge_idgráfazonosító értékét.
EDGE_ID_FROM_PARTS A gráftábla objektumazonosítójából és a gráfazonosító értékéből építkeznek edge_id .

Transact-SQL hivatkozás

Ismerje meg az SQL Serverben és az Azure SQL Database-ben bevezetett Transact-SQL bővítményeket, amelyek lehetővé teszik a gráfobjektumok létrehozását és lekérdezését. A lekérdezési nyelvi bővítmények asCII art szintaxissal segítik a gráf lekérdezését és bejárását.

Data Definition Language (DDL) utasítások

Task Kapcsolódó cikk Notes
CREATE TABLE CREATE TABLE (Transact-SQL) CREATE TABLE mostantól ki van terjesztve, hogy támogassa a tábla AS NODE vagy AS EDGE létrehozását. Az éltáblákhoz nincs szükség felhasználó által definiált attribútumokra.
ALTERNATÍV TÁBLÁZAT ALTERNATÍV TÁBLÁZAT (Transact-SQL) A csomópont- és éltáblák ugyanúgy módosíthatók, mint a relációs táblák.ALTER TABLE A felhasználók felhasználó által definiált oszlopokat, indexeket vagy korlátozásokat adhatnak hozzá vagy módosíthatnak. A belső gráfoszlopok (például $node_id vagy $edge_id) módosítása azonban hibát eredményez.
INDEX LÉTREHOZÁSA INDEX LÉTREHOZÁSA (Transact-SQL) A felhasználók létrehozhatnak indexeket pszeudooszlopokon és felhasználó által definiált oszlopokon csomópont- és éltáblákban. Minden indextípus támogatott, beleértve a fürtözött és a nemclustered oszlopcentrikus indexeket is.
PEREMHÁLÓZATI KORLÁTOZÁSOK LÉTREHOZÁSA ÉLKORLÁTOZÁSOK (Transact-SQL) A felhasználók mostantól peremhálózati korlátozásokat hozhatnak létre az éltáblákon az adott szemantikák kényszerítése és az adatintegritás fenntartása érdekében
LEDOBÓ TÁBLÁZAT DROP TABLE (Transact-SQL) A csomópont- és éltáblák ugyanúgy elvethetők, mint a relációs táblák.DROP TABLE Jelenleg nincsenek olyan mechanizmusok, amelyek meggátolják a szélek által hivatkozott csomópontok törlését. Az élek kaszkádolt törlése nem támogatott egy csomópont törlésekor (vagy a teljes csomóponttábla elvetésekor). Minden ilyen esetben a törölt csomópontokhoz csatlakoztatott éleket manuálisan kell törölni a gráf konzisztenciájának fenntartása érdekében.

Adatmanipulációs nyelv (DML) utasítások

Task Kapcsolódó cikk Notes
INSERT BEHELYEZKEDÉS (Transact-SQL) A csomóponttáblába való beszúrás nem különbözik a relációs táblába való beszúrástól. A rendszer automatikusan létrehozza az $node_id oszlop értékeit. Ha megpróbál beszúrni egy értéket vagy $node_id$edge_id oszlopot, az hibát eredményez. A felhasználóknak meg kell adniuk az $from_id értékeket és $to_id az oszlopokat, miközben beszúrnak egy éltáblába. $from_id és $to_id az $node_id adott élhez csatlakozó csomópontok értékei.
DELETE DELETE (Transact-SQL) A csomópont- vagy éltáblák adatai ugyanúgy törölhetők, mint a relációs táblákból. Ebben a kiadásban azonban nincsenek korlátozások annak biztosítására, hogy egyetlen él sem mutasson egy törölt csomópontra, és hogy az élek kaszkádolt törlése ne legyen támogatott a csomópont törlésekor. Javasoljuk, hogy a csomópontok törlésekor a csomóponthoz csatlakozó összes csatlakozó él is törlődjön.
UPDATE UPDATE (Transact-SQL) A felhasználó által definiált oszlopok értékei az UPDATE utasítással frissíthetők. A belső gráfoszlopok nem frissíthetők, $node_id$edge_id$from_id és $to_idnem frissíthetők.
MERGE ÖSSZEOLVADÁS (Transact-SQL) MERGE az utasítás egy csomóponton vagy éltáblán támogatott.

Lekérdezési állítások

Task Kapcsolódó cikk Notes
SELECT VÁLASZT (Transact-SQL) Mivel a csomópontok és élek táblákként vannak tárolva, a legtöbb táblaművelet a csomópont- és éltáblákon is támogatott.
MATCH MÉRKŐZÉS (Transact-SQL) A MATCH beépített használata támogatja a mintaegyezést és a gráfon keresztüli bejárást.

Limitations

A csomópont- és éltáblákra bizonyos korlátozások vonatkoznak:

  • A helyi vagy globális ideiglenes táblák nem lehetnek csomópont- vagy éltáblák.
  • A táblatípusok és a táblaváltozók nem deklarálhatók csomópontként vagy éltábláként.
  • A csomópont- és éltáblák nem hozhatók létre rendszerverziójú időtáblákként.
  • A csomópont- és éltáblák nem lehetnek memóriaoptimalizált táblák.
  • A felhasználók az UPDATE utasítással nem frissíthetik a $from_id peremhálózatok oszlopait és $to_id oszlopait. A peremhálózatok által hivatkozott csomópontok frissítéséhez a felhasználóknak új, új csomópontokra mutató élet kell beszúrni, és törölniük kell az előzőt.
  • A gráfobjektumokon lévő adatbázisközi lekérdezések nem támogatottak.
  • A gráf pszeudooszlopai (node_id$from_id$to_idés edge_id) nem használhatók rendezési oszlopokként a rendezett fürtözött oszlopcentrikus indexekhez. Ha a rendezett fürtözött oszloptár rendezési oszlopaként bármilyen gráf pszeudooszlopot próbál használni, az hibát eredményez Msg 102: Incorrect syntax .
  • A Fabric SQL-adatbázisban az SQL Graph engedélyezett, de a Node- és Edge-táblák nem fognak tükrözni a Fabric OneLake-be.

Lásd még

Következő lépések