แชร์ผ่าน


ตัวอย่างเค้าร่าง GQL: เครือข่ายทางสังคม

Note

คุณลักษณะนี้อยู่ในการแสดงตัวอย่างสาธารณะ การแสดงตัวอย่างนี้จะมีให้โดยไม่มีข้อตกลงระดับบริการ และไม่แนะนําสําหรับปริมาณงานการผลิต คุณลักษณะบางอย่างอาจไม่ได้รับการสนับสนุนหรืออาจมีความสามารถที่จํากัด สําหรับข้อมูลเพิ่มเติม ให้ดู เงื่อนไขเพิ่มเติมของการใช้สําหรับการแสดงตัวอย่าง Microsoft Azure

บทความนี้มีข้อกําหนดทางเทคนิคที่สมบูรณ์สําหรับกราฟประเภทเครือข่ายสังคมที่ใช้ตลอดทั้งเอกสารประกอบ GQL Schema นี้แสดงให้เห็นถึงคุณลักษณะทั่วไปจํานวนมากของกราฟที่ซับซ้อนและทําหน้าที่เป็นพื้นฐานสําหรับตัวอย่างคิวรีทั้งหมดในเอกสารภาษา GQL

Note

เครือข่ายสังคมเป็นตัวอย่างมาจาก LDBC SNB (LDBC Social Network Benchmark) ที่เผยแพร่โดย GDC (Graph Data Council) ดูบทความ "มาตรฐานเครือข่ายทางสังคมของ LDBC" สําหรับรายละเอียดเพิ่มเติม ดู ชุดข้อมูลกราฟตัวอย่างเครือข่ายสังคมสําหรับ วิธีการรับสําเนาของชุดข้อมูลที่ได้มา

แผนภาพที่แสดงเค้าร่างเครือข่ายสังคมออนไลน์

ข้อกําหนดโดเมน

แบบจําลองโดเมนเครือข่ายสังคมออนไลน์ที่ครอบคลุมแพลตฟอร์มโซเชียลด้วยเอนทิตีต่อไปนี้:

  • บุคคล ที่มีคุณสมบัติข้อมูลประชากรและพฤติกรรม
  • องค์กรต่าง ๆ รวมถึงสถาบันการศึกษา (มหาวิทยาลัย) และนายจ้าง (บริษัท)
  • ลําดับชั้นทางภูมิศาสตร์ จากเมืองผ่านประเทศ/ภูมิภาคไปยังทวีป
  • ระบบเนื้อหา ที่มีฟอรัม โพสต์ และข้อคิดเห็นแบบเธรด
  • ระบบการจัด หมวดหมู่ที่มีแท็กและการจัดประเภทแท็ก
  • ความสัมพันธ์ทางสังคมและระดับมืออาชีพ ระหว่างบุคคลและองค์กร

สําหรับคําแนะนําโดยละเอียดเพิ่มเติมเกี่ยวกับเอนทิตีของโดเมนนี้ ดูคู่มือภาษา GQL

สาธิตคุณลักษณะ Schema

กราฟชนิดนี้แสดงความสามารถ GQL ขั้นสูง:

  • การสืบทอดชนิดโหนด โดยใช้ชนิดฐานนามธรรม (Message, Organization, Place)
  • รูปแบบการสืบทอดหลายรายการ ที่มีข้อกําหนดคุณสมบัติที่ใช้ร่วมกัน
  • กลุ่มประเภทขอบ ที่ป้ายความสัมพันธ์เดียวกันเชื่อมต่อชุดประเภทของโหนดที่แตกต่างกัน
  • ระบบข้อจํากัดที่ครอบคลุม ทําให้เกิดความสมบูรณ์ของข้อมูลผ่านข้อจํากัดหลัก
  • รูปแบบความสัมพันธ์แบบผสม รวมถึงการจํากัดขอบเขตแบบลําดับชั้น การเชื่อมต่อทางสังคม และการโต้ตอบกับเนื้อหา

ทําข้อกําหนด Schema ให้เสร็จสมบูรณ์

ชนิดกราฟต่อไปนี้มีข้อกําหนด Schema ที่สมบูรณ์ในไวยากรณ์ 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)

การวิเคราะห์ Schema

ลําดับชั้นของชนิดโหนด

Schema จะกําหนดลําดับชั้นการสืบทอดสามรายการ:

ลําดับชั้นทางภูมิศาสตร์:

  • Place(บทคัดย่อ) → City, CountryContinent

ลําดับชั้นขององค์กร:

  • Organization (นามธรรม) → University, Company

ลําดับชั้นเนื้อหา:

  • Message (นามธรรม) → Post, Comment

กลุ่มประเภทขอบ

ป้ายขอบหลายประเภทกลุ่มรูปแบบการเชื่อมต่อชุดโหนดที่แตกต่างกัน:

ความสัมพันธ์ของตําแหน่งที่ตั้ง (isPartOf):

  • เมืองอยู่ในประเทศ/ภูมิภาค: (:City)-[:isPartOf]->(:Country)
  • ประเทศ/ภูมิภาคเป็นของทวีป: (:Country)-[:isPartOf]->(:Continent)

การโต้ตอบกับเนื้อหา (likes):

  • ผู้คนชอบโพสต์: (:Person)-[:likes]->(:Post)
  • บุคคลเช่นความคิดเห็น: (:Person)-[:likes]->(:Comment)
  • คนชอบข้อความ: (:Person)-[:likes]->(<:Message)

ตําแหน่งที่ตั้งทางภูมิศาสตร์ (isLocatedIn):

  • ผู้คนอาศัยอยู่ในเมือง: (:Person)-[:isLocatedIn]->(:City)
  • มหาวิทยาลัยในเมือง: (:University)-[:isLocatedIn]->(:City)
  • บริษัทที่อยู่ในประเทศ/ภูมิภาค: (:Company)-[:isLocatedIn]->(:Country)
  • โพสต์ที่ตั้งอยู่ในประเทศ/ภูมิภาค: (:Post)-[:isLocatedIn]->(:Country)
  • ความคิดเห็นที่อยู่ในประเทศ/ภูมิภาค: (:Comment)-[:isLocatedIn]->(:Country)

ข้อจํากัดหลัก

โหนดทุกชนิดมีข้อจํากัดคีย์ที่สอดคล้องกันเพื่อให้มั่นใจว่าการระบุที่ไม่ซ้ํากันตาม id คุณสมบัติ:

  • tag_class_pk, tag_pk, place_pk, organization_pk, person_pk, , forum_pkmessage_pk