PG-Schema: Schemas for Property Graphs

Proc. ACM Manag. Data, 2023

DOI: 10.1145/3589778

这篇论文讨论的不是图查询优化或执行引擎,而是 property graph 更基础的一层:如何为 property graph 设计一个正式、可验证、可被工具使用的 schema language

作者认为,property graph 已经在数据库系统和应用中广泛使用,GQL 标准也在推进,但现有系统对 schema 的支持仍然比较弱。很多系统允许用户直接使用 label 和 property 建图,这带来了很高的灵活性,但也导致数据约束、查询辅助、图探索工具、静态检查和数据验证都缺少统一基础。

PG-Schema 的核心可以概括为:

PG-Schema = PG-Types + PG-Keys

其中 PG-Types 描述节点、边和图的局部结构;PG-Keys 描述 key、foreign key、participation constraint 等全局约束。论文刻意把 type 和 constraint 分开:type 更偏局部性质,可以更容易做静态检查和赋型;constraint 更偏全局性质,需要对图实例进行验证。

Motivation

Property graph 的一个核心矛盾是:系统通常很灵活,但用户在真实场景里又需要 schema。论文特别强调三类需求:

  • Schema-first:先定义图结构和约束,再写入数据。
  • Flexible schema:允许图结构持续演进,不能强行要求所有数据都完全固定。
  • Partial schema:只对稳定或关键部分施加 schema,其余部分继续保持开放。

schema 不只是用于拒绝非法数据。它还可以服务于 tooling:例如图浏览器可以基于 schema 自动生成搜索表单,限制属性输入类型,提示可能的连接路径,辅助构造更可靠的探索查询。

Design Requirements

论文把 property graph schema 的基本需求拆成几类:

  • Node types:定义节点类型,说明节点应具有哪些 label 和 properties。
  • Edge types:定义边类型,除了边自己的 label 和 properties,还要说明边连接哪些类型的源点和终点。
  • Content types:属性值需要有实用的数据类型系统。
  • Key constraints:支持节点或边上的 key。
  • Participation constraints:表达某类节点必须或至多参与某类关系。

这个目标并不是试图一次性覆盖所有业务规则,而是先为 property graph 补上最通用、最基础、也最适合标准化的 schema 能力。

PG-Types

PG-Types 是 PG-Schema 的类型部分,包含三层:

  • Node type:描述节点允许的 label 组合和属性内容。
  • Edge type:描述边允许的 label、属性,以及源点/终点类型。
  • Graph type:把一组 node types 和 edge types 组织成图级 schema。

论文给出了一套接近 DDL 的语法,例如 CREATE NODE TYPECREATE EDGE TYPECREATE GRAPH TYPE

边类型中的 endpoint type 很重要。它把 property graph 中“关系连接哪些实体”正式纳入 schema,而不只是检查边本身有没有某些属性。

PG-Types 支持几个很有 property graph 特征的设计:

  • Multi-inheritance:一个 type 可以继承多个 type,适合表达多角色、多 label 的实体。
  • Label expressions:label 规格可以使用并、交、可选等组合,适配 multi-label graph。
  • Open / closed types:closed type 禁止未声明内容,open type 允许额外内容。
  • Strict / loose graph types:strict schema 要求图元素被 schema 覆盖;loose schema 支持 partial schema 和渐进式数据治理。

这些设计说明 PG-Schema 并不想把 property graph 强行变成关系数据库的表结构,而是在保留图数据灵活性的前提下增加正式约束。

Formal Semantics

论文不是只提出一套语法,而是给出正式语义。它先把 schema 编译或解释为 formal graph type,再定义节点、边、图相对于类型的 conformance。

formal graph type 大致包含:

  • 节点类型名集合;
  • 边类型名集合;
  • 节点类型到 formal base types 的映射;
  • 边类型到三元组的映射,三元组描述源节点类型、边自身类型和目标节点类型。

在此基础上,论文定义了:

  • node conforms to a node type;
  • edge conforms to an edge type;
  • graph conforms to a formal graph type;
  • graph 相对于 schema 的 typing。

这里一个关键点是 conformancetyping 的区分。特别是在 loose schema 或 partial schema 场景中,图里可能存在 schema 没覆盖的元素;系统仍然可以给被 schema 命中的部分赋型,并对这部分进行验证。

PG-Keys

PG-Keys 是 PG-Schema 的约束部分。虽然名字里是 keys,但它的表达能力不只 key。论文基于早期 PG-Keys 工作做扩展,使约束不仅能引用 label,也能引用 type name。

它可以表达:

  • primary key / unique key;
  • foreign key;
  • participation constraint;
  • 类 SQL 的 check constraint;
  • denial constraint。

PG-Types 和 PG-Keys 的分工很清晰:前者描述“元素允许长什么样”,后者描述“整个图必须满足什么一致性条件”。例如,personType.id 可以声明为 key;customerType.id 可以要求引用 personType.id,这就类似 foreign key;还可以表达某个人至多有一个 best friend 之类的 cardinality/participation 约束。

Validation

论文指出,图相对于 graph type 的 typing 可以高效计算;得到 typing 后,再按 PG-Keys 的语义验证约束。

更有意思的是 partial validation。在真实图系统中,数据常常不是从一开始就完全符合 schema,而是逐步清洗和治理。因此 schema validation 不应只有“全量通过”和“全量失败”两种结果。PG-Schema 允许系统识别:

  • 哪些元素成功赋型;
  • 哪些部分不符合 schema;
  • 哪些约束在已赋型部分上成立或失败。

这使它更适合已有图数据集、半结构化图和演进中的图应用。

Comparison

论文将 PG-Schema 与多类 schema 或建模方式比较,包括 ER 模型、RDF graph schema、XML/JSON schema 以及现有 graph database systems。

作者认为 PG-Schema 的优势主要来自两方面:

  • PG-Types 支持组合性、抽象类型、类型层次、多继承、open/closed types、edge properties 等 property graph 需要的类型能力。
  • PG-Keys 支持更丰富的 key、foreign key 和 participation constraints。

这种组合让它既能描述 property graph 的结构,又能表达较强的数据完整性约束。

Takeaways

这篇论文最重要的价值在于给 property graph 补上关系数据库长期拥有、但图数据库生态长期较弱的一层:正式 schema。

几个值得记住的点:

  • property graph schema 不应只描述节点属性,还应描述 edge endpoint types。
  • schema 不只是数据校验,也能支撑图工具、交互式探索、查询构造和静态检查。
  • strict / loose graph types 让 schema 同时支持强约束建模和渐进式治理。
  • type 与 constraint 的分层非常关键:局部结构交给 PG-Types,全局一致性交给 PG-Keys。
  • 对查询优化或图 IR 来说,schema 可以提供静态推理信息,例如某些 pattern 是否类型上不可能、某些 expand 是否可为空、属性访问是否类型正确。

Limitations

PG-Schema 更像一个 formal DDL proposal,而不是完整系统实现论文。它主要解决 schema language 的表达能力和语义问题,不讨论查询执行、优化器设计、schema inference 或大规模 benchmark。

如果关注图查询优化,可以把这篇论文视为 schema 层的基础设施:它本身不是 optimizer paper,但它定义的类型和约束信息未来可以被 planner、rewriter、validator 和图探索工具使用。