Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Notat
Denne funktion er i øjeblikket tilgængelig som offentlig prøveversion. Denne prøveversion leveres uden en serviceniveauaftale og anbefales ikke til produktionsarbejdsbelastninger. Visse funktioner understøttes muligvis ikke eller kan have begrænsede funktioner. Du kan få flere oplysninger under Supplemental Vilkår for anvendelse af Microsoft Azure prøveversioner.
En graftype definerer strukturen af en graf ved at angive, hvilke noder og kanter der kan findes, deres mærkater og egenskaber, og hvordan de opretter forbindelse til hinanden. Tænk på en graftype som et skema eller en kursusplan – på samme måde som et ER-diagram (objektrelation) beskriver tabeller og relationer med fremmede nøgler i en relationsdatabase.
I denne artikel forklares det, hvordan du definerer graftyper ved hjælp af GQL-syntaks, herunder nodetyper, kanttyper, begrænsninger og nedarvning.
Vigtigt
Denne artikel bruger udelukkende datasættet for eksempelgrafer på sociale netværk.
Graftyper giver flere vigtige fordele:
- Datavalidering: Sørg for, at grafen kun indeholder gyldige node- og kantkombinationer.
- Forespørgselsoptimering: Hjælp forespørgselsprogrammet med at forstå din datastruktur for at opnå en bedre ydeevne.
- Dokumentation: Fungerer som en klar specifikation af din grafs struktur for udviklere og analytikere.
Notat
Denne artikel introducerer graftyper konceptuelt og illustrerer deres definition ved hjælp af den syntaks, der er defineret i GQL-standarden. Denne syntaks understøttes dog ikke direkte for grafen i øjeblikket.
Strukturelt definerer en graftype tilladte nodetyper og kanttyper af grafer af graftypen samt yderligere begrænsninger, der yderligere begrænser disse grafer.
Notat
Definer graftyper ved hjælp af et sæt nodetype-, kanttype- og begrænsningsdefinitioner. Ændring af rækkefølgen af disse definitioner ændrer ikke den graftype, du definerer.
Definer nodetyper
En nodetype angiver, hvilke navne og egenskabstyper dine noder kan have. Sådan angiver du en grundlæggende nodetype:
(:Organization => {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
})
I dette eksempel oprettes en nodetype, der definerer noder med:
- Navnet
Organization. - En
idegenskab, der indeholder heltalsværdier, der ikke er signeret, og som ikke kan være null. - En
nameegenskab, der indeholder strengværdier (kan være null). - En
urlegenskab, der indeholder strengværdier (kan være null).
Brug operatoren :: til at angive datatypen for hver egenskab. Bruges NOT NULL til at angive, at egenskaben altid skal have en værdi.
Notat
I GQL NOT NULL er en del af typen , som adskiller sig fra SQL.
Nodetyper kan også være mere komplekse med flere egenskaber og datatyper:
(:Person => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
firstName :: STRING,
lastName :: STRING,
gender :: STRING,
birthday :: UINT64,
browserUsed :: STRING,
locationIP :: STRING
})
Nodetyper med flere navne
Noder kan have flere mærkater, der understøtter nedarvning og kategorisering. Du kan angive flere navne for en nodetype, men én etiket ("nøglemærkaten") skal entydigt identificere nodetypen (Hvis der kun er angivet én etiket, anses dette for at være nodetypens nøglenavn).
Som et eksempel kan du overveje:
(:University => :Organization),
(:Company => :Organization)
University Her og Company er nøglenavnene for de to nodetyper defineret, mens Organization er en sekundær etiket, der deles af begge typer. Bemærk, hvordan nøglemærkaten og de sekundære navne adskilles af => i hver nodetype. Denne fremgangsmåde opretter et typehierarki, hvor både universiteter og virksomheder er typer af organisationer.
Da nøglemærkater identificerer nodetyper, nedarves egenskaberne for nodetyper, der identificeres af sekundære mærkater, automatisk, når du bruger denne syntaks. Derfor kan den forrige syntaks forstås for effektivt at definere følgende nodetyper:
(:University => :Organization {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
}),
(:Company => :Organization {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
})
Notat
Nøglemærkater er vigtige, når du definerer nodetypehierarkier. De hjælper systemet med at forstå, hvilken nodetype du refererer til, når flere typer deler de samme navne.
Spar tid med nedarvningsgenveje
Gentagne navne og egenskaber fra overordnede nodetyper bliver kedelige og fejlbehæftede. Graph leverer operatoren, += så du kun kan angive de ekstra (ikke-heriterede) navne og egenskabstyper:
(:Post => :Message += {
language :: STRING,
imageFile :: STRING
})
Når der ikke er angivet ekstra egenskaber, arver grafen alle påkrævede egenskaber fra den overordnede type:
(:Comment => :Message) -- Same as: (:Comment => :Message += {})
Brug abstrakte nodetyper
Du kan definere nodetyper udelukkende til oprettelse af hierarkier, også selvom grafen ikke indeholder konkrete noder af denne type. Abstrakte nodetyper er nyttige til oprettelse af konceptuelle grupperinger og delte egenskabssæt. Til dette formål kan du definere en nodetype som ABSTRACT i grafen:
ABSTRACT (:Message => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
browserUsed :: STRING,
locationIP :: STRING,
content :: STRING,
length :: UINT64
})
Abstrakte nodetyper er ikke tilgængelige til direkte indlæsning af grafer. De findes kun for at strukturere dit hierarki og definere delte egenskaber. Konkrete nodetyper, der arver fra abstrakte typer, kan indlæses med data.
Definer kanttyper og -familier
En kanttype definerer nøglenavne, egenskabstyper og slutpunktsnodetyper for kanter. I grafdatabaser repræsenterer kanter forbindelser mellem noder. Edge-definitionen fortæller systemet, hvilke relationer der er tilladt i din graf:
(:Person)-[:knows { creationDate :: ZONED DATETIME }]->(:Person)
Denne kanttype definerer alle kanter med:
- Navnet (nøgle)
knows. - En
creationDateegenskab, der indeholderZONED DATETIMEværdier (tidsstempel sammen med en tidszoneforskydning). - Kilde- og destinationsslutpunkter, der begge skal være
Personnoder.
Pilen -> angiver retningen af kanten fra kilde til destination. Denne retningsbestemt information er afgørende for at forstå din grafs semantik.
Her er flere eksempler på kanttyper:
(:Person)-[:studyAt { classYear :: UINT64 }]->(:University)
(:Person)-[:workAt { workFrom :: UINT64 }]->(:Company)
Du skal kun angive nøglenavnene (Person, Universityeller Company) for slutpunktsnodetyper – du behøver ikke at gentage definitionen af den komplette nodetype. Systemet fortolker disse referencer til definitioner af komplette nodetyper.
Grafkanttypefamilier
Diagramkantnøglenavne fungerer anderledes end nodenøglenavne. Du kan have flere kanttyper med samme nøglenavn i en graftype, så længe de har de samme navne og egenskabstyper. To kanttyper med samme nøglenavn skal dog variere i mindst én slutpunktsnodetype. Et sæt kanttyper med samme nøglenavn er en kanttypefamilie.
Dette koncept giver dig mulighed for at modellere den samme type relation mellem forskellige typer objekter.
Eksempel:
(:City)-[:isPartOf]->(:Country),
(:Country)-[:isPartOf]->(:Continent)
Begge kanttyper bruger mærkaten isPartOf , men de forbinder forskellige typer noder og danner en kanttypefamilie, der repræsenterer hierarkiske indeslutningsrelationer.
Brug node-subtyping i kanttypedefinitioner
Det kan være kedeligt at skulle præcisere hver mulige kanttype. For at forenkle skal du definere kanttypefamilier, der er i overensstemmelse med hierarkiet af nodetyper, der er underforstået af deres slutpunkter.
Eksempel:
-- Node types
ABSTRACT (:Message { ... }),
(:Post => :Message { ... }),
(:Comment => :Message { ... }),
-- All edge types (x)-[:hasTag]->(:Tag) where x is at least a (:Message)
(<:Message)-[:hasTag]->(:Tag)
Denne definition definerer implicit følgende kanttyper:
(:Post)-[:hasTag]->(:Tag)
(:Comment)-[:hasTag]->(:Tag)
Understøttede egenskabstyper
Når du definerer en egenskabstype, skal du bruge en egenskabsværditype, som grafen understøtter. Det er vigtigt at vælge de rigtige datatyper for at sikre lagereffektivitet og ydeevne af forespørgsler.
Brug følgende datatyper til egenskabsværdier:
-
INT(også:INT64) -
UINT(også:UINT64) STRING-
BOOL(også:BOOLEAN) -
DOUBLE(også:FLOAT64,FLOAT) -
T NOT NULL, hvorTer en af de foregående datatyper. -
LIST<T>ogLIST<T> NOT NULL, hvorTer en af de foregående datatyper.
Du kan få detaljerede oplysninger om værdityper under GQL-værdier og værdityper.
Vigtigt
Alle egenskabstyper med det samme navn, der forekommer i en nodetype eller kanttype af en given graftype, skal angive den samme egenskabsværditype.
Den eneste undtagelse: De kan variere, uanset om de indeholder null-værdien.
I henhold til denne regel er en graftype f.eks (:A { id :: STRING }), (:B { id :: STRING NOT NULL}) . gyldig, mens en graftype med (:A { id :: STRING }), (:B { id :: INT}) er ugyldig.
Konfigurer nodenøglebegrænsninger
Nodenøglebegrænsninger definerer, hvordan hver node i grafen identificeres entydigt af en eller flere af dens egenskabsværdier. Nøglebegrænsninger fungerer som primære nøglebegrænsninger i relationsdatabaser og sikrer dataintegritet. En nodenøglebegrænsning kan målrette noder på tværs af flere nodetyper, hvilket giver dig mulighed for at definere nodenøgler for hele konceptuelle hierarkier.
Det er afgørende at forstå vigtige begrænsninger, fordi de:
- Sørg for entydighed: Undgå dublerede noder baseret på din forretningslogik.
- Aktivér effektive opslag: Tillad, at systemet optimerer forespørgsler, der søger efter bestemte noder.
- Understøttelse af dataintegration: Gør det muligt at referere til noder på tværs af forskellige datakilder på en stabil måde.
Vigtigt
I forbindelse med grafen skal præcis én nøglebegrænsning begrænse hver node.
Sådan fungerer nodenøglebegrænsninger
Du kan angive begrænsninger for nodenøgler i graftypen. Hver nodenøglebegrænsning har specifikke egenskaber, der får den til at fungere effektivt:
Komponenter i en nodenøglebegrænsning:
- Har et entydigt navn i graftypen, som du nemt kan referere til.
- Definerer målrettede noder ved hjælp af et simpelt begrænsningsmønster , der angiver, hvilke noder begrænsningen gælder for.
- Definerer de egenskaber, der udgør den entydige nøgleværdi.
Eksempel:
CONSTRAINT person_pk
FOR (n:Person) REQUIRE n.id IS KEY
Denne syntaks opretter en nodenøglebegrænsning, der er navngivet person_pk for alle noder med mindst navnet Person . Begrænsningen sikrer, at hver node i grafen identificeres entydigt af dens id egenskab. Der kan ikke være to noder med Person etiketten, der har samme id værdi.
Du kan også definere sammensatte nøgler, der bruger flere egenskaber sammen for at sikre entydighed ved hjælp af syntaksen CONSTRAINT ... FOR ... REQUIRE (n.prop1, n.prop2) IS KEY .
Vigtigt
Egenskaber, der bruges i nøglebegrænsninger:
- Må ikke være null
- Skal erklæres som
NOT NULLi nodetyperne og kanttyperne, der er målrettet af nøglebegrænsningen