Poznámka
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete sa skúsiť prihlásiť alebo zmeniť adresáre.
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete skúsiť zmeniť adresáre.
Tento článok poskytuje úplnú technickú špecifikáciu pre typ grafu sociálnej siete, ktorý sa používa v celej dokumentácii GQL. Táto schéma zobrazuje množstvo bežných funkcií zložitých grafov a slúži ako základ pre všetky príklady dotazov v dokumentácii jazyka GQL.
Poznámka
Príklad sociálnej siete je odvodený od knižnice LDBC SNB (LDBC Social Network Benchmark), ktorú zverejnila GDC (Graph Data Council).
Ďalšie informácie nájdete v článku "LDBC Social Network Benchmark". Informácie o tom, ako získať kópiu odvodenej množiny údajov, nájdete v téme Graf množiny údajov v príklade sociálnej siete.
Špecifikácia domény
Doménové modely sociálnej siete sú komplexnou sociálnou platformou s nasledujúcimi entitami:
- Ľudia s demografickými vlastnosťami a vlastnosťami správania
- Organizácie vrátane vzdelávacích inštitúcií (univerzít) a zamestnávateľov (spoločnosti)
- Geografická hierarchia od miest cez krajiny alebo oblasti po kontinenty
- Obsahový systém s fórami, príspevkami a postupnými komentármi
- Systém taxonómie so značkami a klasifikáciami značiek
- Sociálne a profesionálne vzťahy medzi ľuďmi a organizáciami
Podrobnejšie úvodné informácie o entitách tejto domény nájdete v téme Príručka jazyka GQL.
Znázornené funkcie schémy
Tento typ grafu prezentuje pokročilé funkcie GQL:
-
Dedenie typu uzla pomocou abstraktných základných typov (
Message,Organization,Place) - Viaceré vzory dedenia so zdieľanými definíciami vlastností
- Skupiny typov prehliadača Edge , kde rovnaké označenie vzťahu spája rôzne kombinácie typov uzla
- Komplexný systém obmedzení, ktorý zabezpečuje integritu údajov prostredníctvom kľúčových obmedzení
- Vzory zmiešaných vzťahov vrátane hierarchickej izolácie, sociálnych prepojení a interakcií s obsahom
Dokončenie definície schémy
Nasledujúci typ grafu poskytuje úplnú definíciu schémy v syntaxi GQL:
(:TagClass => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
CONSTRAINT tag_class_pk
FOR (n:TagClass) REQUIRE (n.id) IS KEY,
(:TagClass)-[:isSubclassOf]->(:TagClass),
(:Tag => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
(:Tag)-[:hasType]->(:TagClass),
CONSTRAINT tag_pk
FOR (n:Tag) REQUIRE (n.id) IS KEY,
ABSTRACT
(:Place => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
(:City => :Place),
(:Country => :Place),
(:Continent => :Place),
CONSTRAINT place_pk
FOR (n:Place) REQUIRE (n.id) IS KEY,
(:City)-[:isPartOf]->(:Country),
(:Country)-[:isPartOf]->(:Continent),
ABSTRACT
(:Organization => { id :: UINT64 NOT NULL, name :: STRING, url :: STRING }),
(:University => :Organization),
(:Company => :Organization),
CONSTRAINT organization_pk
FOR (n:Organization) REQUIRE (n.id) IS KEY,
(:University)-[:isLocatedIn]->(:City),
(:Company)-[:isLocatedIn]->(:Country),
(:Person => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
firstName :: STRING,
lastName :: STRING,
gender :: STRING,
birthday :: UINT64,
browserUsed :: STRING,
locationIP :: STRING
}),
CONSTRAINT person_pk
FOR (n:Person) REQUIRE (n.id) IS KEY,
(:Person)-[:hasInterest]->(:Tag),
(:Person)-[:isLocatedIn]->(:City),
(:Person)-[:studyAt { classYear :: UINT64 }]->(:University),
(:Person)-[:workAt { workFrom :: UINT64 }]->(:Company),
(:Person)-[:knows { creationDate :: ZONED DATETIME }]->(:Person),
(:Forum => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
title :: STRING
}),
CONSTRAINT forum_pk
FOR (n:Forum) REQUIRE (n.id) IS KEY,
(:Forum)-[:hasTag]->(:Tag),
(:Forum)-[:hasMember { creationDate :: ZONED DATETIME, joinDate :: UINT64 }]->(:Person),
(:Forum)-[:hasModerator]->(:Person),
ABSTRACT (:Message => {
id :: UINT64 NOT NULL,
creationDate :: ZONED DATETIME,
browserUsed :: STRING,
locationIP :: STRING,
content :: STRING,
length :: UINT64
}),
CONSTRAINT message_pk
FOR (n:Message) REQUIRE (n.id) IS KEY,
(:Post => :Message += {
language :: STRING,
imageFile :: STRING
}),
(:Person)-[:likes { creationDate :: ZONED DATETIME }]->(:Post),
(:Post)-[:hasCreator]->(:Person),
(:Post)-[:isLocatedIn]->(:Country),
(:Forum)-[:containerOf]->(:Post),
(:Comment => :Message),
(:Person)-[:likes { creationDate :: ZONED DATETIME }]->(:Comment),
(:Comment)-[:hasCreator]->(:Person),
(:Comment)-[:isLocatedIn]->(:Country),
(:Comment)-[:replyOf]->(<:Message),
(:Person)-[:likes { creationDate :: ZONED DATETIME }]->(<:Message),
(<:Message)-[:hasCreator]->(:Person),
(<:Message)-[:isLocatedIn]->(:Country),
(<:Message)-[:hasTag]->(:Tag)
Analýza schémy
Hierarchia typov uzla
Schéma definuje tri hierarchie dedenia:
Geografická hierarchia:
-
Place(abstrakt) →City, ,CountryContinent
Hierarchia organizácie:
-
Organization(abstrakt) →University,Company
Hierarchia obsahu:
-
Message(abstrakt) →Post,Comment
Skupiny typov prehliadača Edge
Viacero skupín typov formulárov okrajových označení, ktoré sa pripájajú k rôznym kombináciám uzla:
Vzťahy medzi miestami (isPartOf):
- Mestá patria do krajín alebo oblastí:
(:City)-[:isPartOf]->(:Country) - Krajiny alebo oblasti patria na kontinenty:
(:Country)-[:isPartOf]->(:Continent)
Interakcie s obsahom (likes):
- Ľudia majú radi príspevky:
(:Person)-[:likes]->(:Post) - Ľudia majú radi komentáre:
(:Person)-[:likes]->(:Comment) - Ľuďom sa páčia správy:
(:Person)-[:likes]->(<:Message)
Geografická poloha (isLocatedIn):
- Ľudia žijú v mestách:
(:Person)-[:isLocatedIn]->(:City) - Univerzity v mestách:
(:University)-[:isLocatedIn]->(:City) - Spoločnosti nachádzajúci sa v krajinách alebo oblastiach:
(:Company)-[:isLocatedIn]->(:Country) - Príspevky umiestnené v krajinách/regiónoch:
(:Post)-[:isLocatedIn]->(:Country) - Komentáre umiestnené v krajinách/regiónoch:
(:Comment)-[:isLocatedIn]->(:Country)
Kľúčové obmedzenia
Každý typ uzla má zodpovedajúce obmedzenie kľúča, ktorým sa zabezpečuje jedinečná identifikácia podľa id vlastnosti:
-
tag_class_pk,tag_pk,place_pk,organization_pk,person_pk,forum_pk, ,message_pk