Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview wordt geleverd zonder een service level agreement en wordt niet aanbevolen voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Voor meer informatie, zie Aanvullende Gebruiksvoorwaarden voor Microsoft Azure Previews.
Een grafiektype beschrijft de structuur van uw grafiek door te definiëren welke knooppunten en randen kunnen bestaan. U kunt het zien als een blauwdruk of schema. Hiermee geeft u de vorm van knooppunten en randen in de grafiek op in termen van hun labels en eigenschappen. Voor randen (de verbindingen tussen knooppunten) wordt ook aangegeven welke soorten randen verbinding kunnen maken met welke soorten knooppunten. Als u bekend bent met relationele databases, werken grafiektypen op dezelfde manier als er-diagrammen tabellen en relaties met refererende sleutels beschrijven.
Belangrijk
Dit artikel gebruikt uitsluitend de voorbeeldgrafiekdataset van sociale netwerken.
Grafiektypen bieden verschillende belangrijke voordelen:
- Gegevensvalidatie: Zorg ervoor dat uw grafiek alleen geldige combinaties van knooppunten en randen bevat.
- Queryoptimalisatie: Help de query-engine inzicht te krijgen in uw gegevensstructuur voor betere prestaties.
- Documentatie: Fungeren als een duidelijke specificatie van de structuur van uw grafiek voor ontwikkelaars en analisten.
Opmerking
In dit artikel worden grafiektypen conceptueel geïntroduceerd en wordt hun definitie geïllustreerd met behulp van de syntaxis die is gedefinieerd in de GQL-standaard. Deze syntaxis wordt momenteel echter niet rechtstreeks ondersteund voor grafieken in Microsoft Fabric.
Structureel definieert een grafiektype toegestane knooppunttypen en randtypen van grafieken van het grafiektype, evenals aanvullende beperkingen die deze grafieken verder beperken.
Opmerking
Grafiektypen worden gedefinieerd door een set knooppunttypen, edge-typen en beperkingsdefinities te geven. Als u de volgorde van deze definities wijzigt, wordt het grafiektype dat wordt gedefinieerd, niet gewijzigd.
Knooppunttypen definiëren
Een knooppunttype geeft aan welke labels en eigenschapstypen uw knooppunten kunnen hebben. U kunt als volgt een basisknooppunttype opgeven:
(:Organization => {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
})
In dit voorbeeld wordt een knooppunttype gemaakt waarmee knooppunten worden gedefinieerd met:
- Het label
Organization. - Een
ideigenschap met niet-ondertekende gehele getallen en kan niet null zijn. - Een
nameeigenschap die tekenreekswaarden bevat (kan null zijn). - Een
urleigenschap die tekenreekswaarden bevat (kan null zijn).
De :: operator geeft het gegevenstype voor elke eigenschap op, terwijl NOT NULL wordt aangegeven dat de eigenschap altijd een waarde moet hebben.
Opmerking
NOT NULL wordt beschouwd als onderdeel van het type in GQL, wat verschilt van SQL.
Knooppunttypen kunnen ook complexer zijn, met meer eigenschappen en gegevenstypen:
(:Person => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
firstName :: STRING,
lastName :: STRING,
gender :: STRING,
birthday :: UINT64,
browserUsed :: STRING,
locationIP :: STRING
})
Knooppunttypen met meerdere labels
Knooppunten kunnen meerdere labels hebben ter ondersteuning van overname en categorisatie. U kunt meerdere labels opgeven voor een knooppunttype, maar één label (het 'sleutellabel') moet het knooppunttype uniek identificeren (als er slechts één label is opgegeven, wordt dit het sleutellabel van het knooppunttype genoemd).
Denk bijvoorbeeld aan:
(:University => :Organization),
(:Company => :Organization)
University Dit zijn de Company belangrijkste labels van de twee knooppunttypen die zijn gedefinieerd, terwijl Organization dit een secundair label is dat door beide typen wordt gedeeld. U ziet hoe het sleutellabel en de secundaire labels worden gescheiden door => elk knooppunttype. Met deze aanpak wordt een typehiërarchie gemaakt waarbij zowel universiteiten als bedrijven typen organisaties zijn.
Omdat sleutellabels knooppunttypen identificeren, worden de eigenschappen van knooppunttypen die worden geïdentificeerd door secundaire labels, automatisch overgenomen wanneer u deze syntaxis gebruikt. Daarom kan de vorige syntaxis worden begrepen om effectief de volgende knooppunttypen te definiëren:
(:University => :Organization {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
}),
(:Company => :Organization {
id :: UINT64 NOT NULL,
name :: STRING,
url :: STRING
})
Opmerking
Sleutellabels zijn essentieel wanneer u hiërarchieën van knooppunttypen definieert. Ze helpen het systeem te begrijpen naar welk knooppunttype u verwijst wanneer meerdere typen dezelfde labels delen.
Tijd besparen met overnamesneltoetsen
Herhalende labels en eigenschappen van bovenliggende knooppunttypen worden tijdrovend en foutgevoelig. Graph in Microsoft Fabric biedt de += operator, zodat u alleen de extra labels en eigenschapstypen kunt opgeven (niet-geactiveerd):
(:Post => :Message += {
language :: STRING,
imageFile :: STRING
})
Wanneer er geen extra eigenschappen zijn opgegeven, neemt de grafiek alle vereiste eigenschappen van het bovenliggende type over:
(:Comment => :Message) -- Same as: (:Comment => :Message += {})
Abstracte knooppunttypen gebruiken
U kunt knooppunttypen alleen definiëren voor het bouwen van hiërarchieën, zelfs als uw grafiek geen concrete knooppunten van dat type bevat. Abstracte knooppunttypen zijn handig voor het maken van conceptuele groeperingen en gedeelde eigenschappensets. Voor dit doel kunt u een knooppunttype definiëren als ABSTRACT in grafiek in Microsoft Fabric:
ABSTRACT (:Message => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
browserUsed :: STRING,
locationIP :: STRING,
content :: STRING,
length :: UINT64
})
Abstracte knooppunttypen zijn niet beschikbaar voor het laden van directe grafieken. Ze bestaan alleen om uw hiërarchie te structuren en gedeelde eigenschappen te definiëren. Concrete knooppunttypen die overnemen van abstracte typen kunnen worden geladen met gegevens.
Edge-typen en -families definiëren
Een edge-type definieert het sleutellabel, eigenschapstypen en eindpuntknooppunttypen voor randen. In grafiekdatabases vertegenwoordigen randen verbindingen tussen knooppunten. De edge-definitie vertelt het systeem welke relaties zijn toegestaan in uw grafiek:
(:Person)-[:knows { creationDate :: ZONED DATETIME }]->(:Person)
Met dit randtype worden alle randen gedefinieerd met:
- Het label (sleutel).
knows - Een
creationDateeigenschap die waarden bevatZONED DATETIME(tijdstempels samen met een tijdzone-offset). - Bron- en doeleindpunten die beide knooppunten moeten zijn
Person.
De pijl -> geeft de richting van de rand aan, van bron naar bestemming. Deze directionele informatie is van cruciaal belang voor het begrijpen van de semantiek van uw grafiek.
Hier volgen meer voorbeelden van randtypen:
(:Person)-[:studyAt { classYear :: UINT64 }]->(:University)
(:Person)-[:workAt { workFrom :: UINT64 }]->(:Company)
U hoeft alleen de sleutellabels (Person, Universityof Company) op te geven voor eindpuntknooppunttypen. U hoeft de volledige definitie van het knooppunttype niet te herhalen. Het systeem lost deze verwijzingen op naar de volledige knooppunttypedefinities.
Graph Edge-typefamilies
Graph Edge-sleutellabels werken anders dan knooppuntsleutellabels. U kunt meerdere randtypen met hetzelfde sleutellabel in een grafiektype hebben, zolang ze dezelfde labels en eigenschapstypen hebben. Twee randtypen met hetzelfde sleutellabel moeten echter verschillen in ten minste één eindpuntknooppunttype. We noemen een set randtypen met hetzelfde sleutellabel een edge-typefamilie.
Met dit concept kunt u hetzelfde type relatie tussen verschillende typen entiteiten modelleren.
Example:
(:City)-[:isPartOf]->(:Country),
(:Country)-[:isPartOf]->(:Continent)
Beide randtypen gebruiken het isPartOf label, maar ze verbinden verschillende typen knooppunten, die een randtypefamilie vormen die hiërarchische insluitingsrelaties vertegenwoordigt.
Gebruik node-subtyping in edge type-definities
Het uitleggen van elk mogelijk edge-type kan wat tijdrovend zijn. Om het te vereenvoudigen, is het ook mogelijk om randtypefamilies te definiëren die overeenkomen met de hiërarchie van knooppunttypes die door hun eindpunten wordt geïmpliceerd.
Voorbeeld:
-- Node types
ABSTRACT (:Message { ... }),
(:Post => :Message { ... }),
(:Comment => :Message { ... }),
-- All edge types (x)-[:hasTag]->(:Tag) where x is at least a (:Message)
(<:Message)-[:hasTag]->(:Tag)
Dit definieert impliciet de volgende randtypes:
(:Post)-[:hasTag]->(:Tag)
(:Comment)-[:hasTag]->(:Tag)
Ondersteunde eigenschapstypen
Wanneer u een eigenschapstype definieert, moet het eigenschapswaardetype een type zijn dat door Microsoft Fabric wordt ondersteund. Het kiezen van de juiste gegevenstypen is belangrijk voor opslagefficiëntie en queryprestaties.
Dit zijn de gegevenstypen die u kunt gebruiken voor eigenschapswaarden:
-
INT(ook:INT64) -
UINT(ook:UINT64) STRING-
BOOL(ook:BOOLEAN) -
DOUBLE(ook:FLOAT64,FLOAT) -
T NOT NULL, waarbijTeen van de voorgaande gegevenstypen is. -
LIST<T>enLIST<T> NOT NULL, waarTis een van de voorgaande gegevenstypen.
Zie GQL-waarden en waardetypen voor volledige informatie over waardetypen.
Belangrijk
Alle eigenschapstypen met dezelfde naam die voorkomen in een knooppunttype of edge-type van een bepaald grafiektype moeten hetzelfde eigenschapswaardetype opgeven.
De enige uitzondering: ze kunnen verschillen in of ze de null-waarde bevatten.
Volgens deze regel zou een grafiektype (:A { id :: STRING }), (:B { id :: STRING NOT NULL}) bijvoorbeeld geldig zijn, terwijl een grafiektype met (:A { id :: STRING }), (:B { id :: INT}) ongeldig zou zijn.
Beperkingen voor knooppuntsleutels instellen
Knooppuntsleutelbeperkingen bepalen hoe elk knooppunt in uw grafiek uniek wordt geïdentificeerd door een of meer eigenschapswaarden. Sleutelbeperkingen werken als primaire-sleutelbeperkingen in relationele databases en zorgen voor gegevensintegriteit. Met een knooppuntsleutelbeperking kunt u knooppunten richten op meerdere knooppunttypen, waarmee u knooppuntsleutels kunt definiëren voor volledige conceptuele hiërarchieën.
Het is van cruciaal belang om belangrijke beperkingen te begrijpen, omdat ze:
- Zorg voor uniekheid: voorkom dubbele knooppunten op basis van uw bedrijfslogica.
- Efficiënte zoekacties inschakelen: hiermee staat u toe dat het systeem query's optimaliseert die zoeken naar specifieke knooppunten.
- Ondersteuning voor gegevensintegratie: Een stabiele manier bieden om te verwijzen naar knooppunten in verschillende gegevensbronnen.
Belangrijk
Voor grafiek in Microsoft Fabric moet precies één sleutelbeperking elk knooppunt beperken.
Hoe beperkingen voor knooppuntsleutels werken
U kunt beperkingen voor knooppuntsleutels opgeven in uw grafiektype. Elke knooppuntsleutelbeperking heeft specifieke kenmerken waardoor deze effectief werkt:
Onderdelen van een knooppuntsleutelbeperking:
- Heeft een unieke naam binnen het grafiektype voor eenvoudige referentie.
- Definieert doelknooppunten met behulp van een eenvoudig beperkingspatroon dat aangeeft op welke knooppunten de beperking van toepassing is.
- Definieert de eigenschappen die de unieke sleutelwaarde vormen.
Example:
CONSTRAINT person_pk
FOR (n:Person) REQUIRE n.id IS KEY
Met deze syntaxis maakt u een knooppuntsleutelbeperking die wordt aangeroepen person_pk voor alle knooppunten met ten minste het Person label. De beperking zorgt ervoor dat elk knooppunt in de grafiek uniek wordt geïdentificeerd door de id eigenschap. Er kunnen geen twee knooppunten met het Person label dezelfde id waarde hebben.
U kunt ook samengestelde sleutels definiëren die meerdere eigenschappen samen gebruiken om de uniekheid te garanderen met behulp van de CONSTRAINT ... FOR ... REQUIRE (n.prop1, n.prop2) IS KEY syntaxis.
Belangrijk
Eigenschappen die worden gebruikt in belangrijke beperkingen:
- Kan niet null zijn
- Moet worden gedeclareerd als
NOT NULLin de knooppunttypen en edge-typen waarop de sleutelbeperking is gericht