Aracılığıyla paylaş


GQL şema örneği: Sosyal ağ

Uyarı

Bu özellik şu anda genel önizlemededir. Bu önizleme, hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için önerilmez. Bazı özellikler desteklenmiyor olabileceği gibi özellikleri sınırlandırılmış da olabilir. Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

Bu makale, GQL belgelerinde kullanılan sosyal ağ grafı türü için tam teknik belirtim sağlar. Bu şema, karmaşık grafiklerin birçok ortak özelliğini gösterir ve GQL dil belgelerindeki tüm sorgu örneklerinin temelini oluşturur.

Uyarı

Sosyal ağ, GDC (Graph Veri Konseyi) tarafından yayımlanan LDBC SNB'sinden (LDBC Sosyal Ağ Karşılaştırması) türetilmiştir. Diğer ayrıntılar için "LDBC Sosyal Ağ Karşılaştırması" makalesine bakın. Türetilmiş veri setinin bir kopyasını nasıl elde edeceğiniz için sosyal ağ örnek grafik veri setine bakınız.

Sosyal ağ şemasını gösteren diyagram.

Etki alanı belirtimi

Sosyal ağ etki alanı, aşağıdaki varlıklarla kapsamlı bir sosyal platform modeller:

  • Demografik ve davranış özelliklerine sahip kişiler
  • Eğitim kurumları (üniversiteler) ve işverenler (şirketler) dahil kuruluşlar
  • Şehirlerden ülkelere/bölgelere ve kıtalara coğrafi hiyerarşi
  • Forumlar, gönderiler ve yazışma açıklamaları içeren içerik sistemi
  • Etiketler ve etiket sınıflandırmaları ile taksonomi sistemi
  • İnsanlar ve kuruluşlar arasındaki sosyal ve profesyonel ilişkiler

Bu etki alanının varlıklarına daha ayrıntılı bir giriş için bkz. GQL dil kılavuzu.

Şema özellikleri gösterildi

Bu grafik türü gelişmiş GQL özelliklerini gösterir:

  • Soyut temel türleri (, Message, Organization) kullanarak Place
  • Paylaşılan özellik tanımlarıyla birden çok devralma deseni
  • Aynı ilişki etiketinin farklı düğüm türü birleşimlerini bağladığı kenar türü aileleri
  • Temel kısıtlamalar aracılığıyla veri bütünlüğünü sağlayan kapsamlı kısıtlama sistemi
  • Hiyerarşik kapsama, sosyal bağlantılar ve içerik etkileşimleri dahil karma ilişki desenleri

Şema tanımını tamamlama

Aşağıdaki grafik türü , GQL söz diziminde tam bir şema tanımı sağlar:

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

Şema analizi

Düğüm türü hiyerarşisi

Şema üç devralma hiyerarşisi tanımlar:

Coğrafi hiyerarşi:

  • Place(soyut) →City, , CountryContinent

Kuruluş hiyerarşisi:

  • Organization (soyut) → University, Company

İçerik hiyerarşisi:

  • Message (soyut) → Post, Comment

Kenar türü aileleri

Çeşitli kenar etiketleri, farklı düğüm birleşimlerini bağlayan tür aileleri oluşturur:

Konum ilişkileri (isPartOf):

  • Şehirler ülkelere/bölgelere aittir: (:City)-[:isPartOf]->(:Country)
  • Ülkeler/bölgeler kıtalara aittir: (:Country)-[:isPartOf]->(:Continent)

İçerik etkileşimleri (likes):

  • Gönderileri beğenen kişiler: (:Person)-[:likes]->(:Post)
  • İnsanlar yorumları sever: (:Person)-[:likes]->(:Comment)
  • İletileri beğenen kişiler: (:Person)-[:likes]->(<:Message)

Coğrafi konum (isLocatedIn):

  • İnsanlar şehirlerde yaşıyor: (:Person)-[:isLocatedIn]->(:City)
  • Şehirlerde bulunan üniversiteler: (:University)-[:isLocatedIn]->(:City)
  • Ülkelerde/bölgelerde bulunan şirketler: (:Company)-[:isLocatedIn]->(:Country)
  • Ülkelerde/bölgelerde bulunan gönderiler: (:Post)-[:isLocatedIn]->(:Country)
  • Ülkelerde/bölgelerde bulunan yorumlar: (:Comment)-[:isLocatedIn]->(:Country)

Anahtar kısıtlamaları

Her düğüm türünün, özelliğe göre benzersiz tanımlamayı id sağlayan karşılık gelen bir anahtar kısıtlaması vardır:

  • tag_class_pk, tag_pk, place_pk, , organization_pk, person_pk, forum_pk, message_pk