다음을 통해 공유


GQL 스키마 예제: 소셜 네트워크

비고

이 기능은 현재 공개 미리 보기로 제공됩니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며 프로덕션 워크로드에는 사용하지 않는 것이 좋습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

이 문서에서는 GQL 설명서 전체에서 사용되는 소셜 네트워크 그래프 유형에 대한 전체 기술 사양을 제공합니다. 이 스키마는 복잡한 그래프의 많은 일반적인 기능을 보여 줍니다. GQL 언어 설명서의 모든 쿼리 예제의 기초 역할을 합니다.

비고

소셜 네트워크는 GDC(그래프 데이터 위원회)가 게시한 LDBC SNB(LDBC 소셜 네트워크 벤치마크)에서 파생된 예제입니다. 자세한 내용은 "LDBC 소셜 네트워크 벤치마크" 문서를 참조하세요. 도출된 데이터셋의 복사본을 얻는 방법은 소셜 네트워크 그래프 데이터셋 을 참조하세요.

소셜 네트워크 스키마를 보여 주는 다이어그램

도메인 사양

소셜 네트워크 도메인은 다음 엔터티를 사용하여 포괄적인 소셜 플랫폼을 모델링합니다.

  • 인구 통계 및 행동 속성이 있는 사용자
  • 교육 기관(대학) 및 고용주(회사)를 포함한 조직
  • 도시에서 국가/지역을 거쳐 대륙으로의 지리적 계층 구조
  • 포럼, 게시물 및 스레드된 댓글이 있는 콘텐츠 시스템
  • 태그 및 태그 분류를 사용하는 분류 시스템
  • 사람과 조직 간의 사회적, 전문적인 관계

이 도메인의 엔터티에 대한 자세한 소개는 GQL 언어 가이드를 참조하세요.

설명된 스키마 기능

이 그래프 형식은 고급 GQL 기능을 보여 줍니다.

  • 추상 기본 형식을 사용하는 노드 형식 상속(Message, Organization, Place)
  • 공유 속성 정의가 있는 여러 상속 패턴
  • 동일한 관계 레이블이 서로 다른 노드 형식 조합을 연결하는 에지 형식 패밀리
  • 키 제약 조건을 통해 데이터 무결성을 보장하는 포괄적인 제약 조건 시스템
  • 계층적 포함, 소셜 연결 및 콘텐츠 상호 작용을 포함한 혼합 관계 패턴

전체 스키마 정의

다음 그래프 형식 은 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)

스키마 분석

노드 형식 계층 구조

스키마는 세 가지 상속 계층을 정의합니다.

지리적 계층 구조:

  • Place(abstract) → 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