Jaa


Esimerkki GQL-skeemaa: Sosiaalinen verkosto

Note

Tämä ominaisuus on tällä hetkellä julkisessa esikatselussa. Tämä esikatselu tarjotaan ilman palvelutasosopimusta, eikä sitä suositella tuotantokuormituksiin. Tiettyjä ominaisuuksia ei ehkä tueta tai niiden ominaisuudet voivat olla rajoitettuja. Lisätietoja on artikkelissa Microsoft Azure -esiversioiden lisäkäyttöehdot.

Tämä artikkeli sisältää koko teknisen määrityksen yhteisöpalveluverkon kaaviotyypille, jota käytetään koko GQL-dokumentaatiossa. Tämä rakenne esittelee monimutkaisten kaavioiden monia yleisiä ominaisuuksia ja toimii perustana kaikille GQL-kielen dokumentaation kyselyesimerkeistä.

Note

Tässä esimerkissä yhteisöpalvelu on johdettu GDC:n (Graph Data Council) julkaisemasta LDBC SNB:stä (LDBC Social Network Benchmark). Lisätietoja on artikkelissa "LDBC Social Network Benchmark ". Katso sosiaalisen verkoston esimerkkikaavioaineisto , miten saat kopion johdetusta aineistosta.

Kaavio, joka näyttää yhteisöpalveluverkoston rakenteen.

Toimialuemääritys

Sosiaalisen verkoston verkkotunnus mallintaa kattavan sosiaalisen ympäristön, joka sisältää seuraavat entiteetit:

  • Henkilöt , joilla on demografisia ja käyttäytymisominaisuuksia
  • Organisaatiot , mukaan lukien oppilaitokset (yliopistot) ja työnantajat (yritykset)
  • Maantieteellinen hierarkia kaupungeista maiden/alueiden kautta mantereille
  • Sisältöjärjestelmä , jossa on keskustelupalstoja, julkaisuja ja säikeisiä kommentteja
  • Taksonomiajärjestelmä, jossa on tunnisteita ja tunnisteiden luokituksia
  • Sosiaaliset ja ammattimaiset suhteet ihmisten ja organisaatioiden välillä

Tarkempi esittely tämän toimialueen entiteeteistä on GQL-kielioppaassa.

Näytetyt rakenteen ominaisuudet

Tämä kaaviotyyppi esittelee GQL-edistyneitä ominaisuuksia:

  • Solmutyypin periytyminen abstrakteja perustyyppejä käyttäen (Message, Organization, Place)
  • Useat periytymismallit ja jaetut ominaisuuksien määritykset
  • Edge-tyypin perheet, joissa sama suhdetunniste yhdistää eri solmutyyppiyhdistelmät
  • Kattava rajoitejärjestelmä , joka varmistaa tietojen eheyden avainrajoitusten kautta
  • Ristiriitaisia suhdemalleja , kuten hierarkkinen eristäminen, sosiaaliset yhteydet ja sisällön vuorovaikutus

Täydellinen rakenteen määritys

Seuraava kaaviotyyppi tarjoaa täydellisen rakenteen määrityksen GQL-syntaksissa:

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

Rakenneanalyysi

Solmutyypin hierarkia

Rakenne määrittää kolme periytymishierarkiaa:

Maantieteellinen hierarkia:

  • Place (abstrakti) → City, , Country, Continent

Organisaation hierarkia:

  • Organization (abstrakti) → University, Company

Sisältöhierarkia:

  • Message (abstrakti) → Post, Comment

Edge-tyyppiset perheet

Useita reunaotsikoiden lomaketyyppiperheitä, jotka yhdistävät eri solmuyhdistelmiä:

Sijaintisuhteet (isPartOf):

  • Kaupungit kuuluvat maihin/alueisiin: (:City)-[:isPartOf]->(:Country)
  • Maat/alueet kuuluvat maanosiin: (:Country)-[:isPartOf]->(:Continent)

Sisällön vuorovaikutukset (likes):

  • Ihmiset, kuten viestit: (:Person)-[:likes]->(:Post)
  • Ihmiset pitävät kommenteista: (:Person)-[:likes]->(:Comment)
  • Ihmiset pitävät viesteistä: (:Person)-[:likes]->(<:Message)

Maantieteellinen sijainti (isLocatedIn):

  • Ihmiset elävät kaupungeissa: (:Person)-[:isLocatedIn]->(:City)
  • Yliopistot, jotka sijaitsevat kaupungeissa: (:University)-[:isLocatedIn]->(:City)
  • Maissa tai alueilla sijaitsevat yritykset: (:Company)-[:isLocatedIn]->(:Country)
  • Maissa/alueilla sijaitsevat tehtävät: (:Post)-[:isLocatedIn]->(:Country)
  • Kommentit maissa/alueilla: (:Comment)-[:isLocatedIn]->(:Country)

Avainrajoitteet

Jokaisella solmutyypillä on vastaava avaimen rajoite, joka varmistaa yksilöllisen tunnistuksen ominaisuuden perusteella id :

  • tag_class_pk, tag_pk, place_pk, organization_pkperson_pk, , forum_pkmessage_pk