概览
本指南用于在
导入前
演进中
,提供一致的建模规范、反模式提醒与可执行流程。
概念与基础
图数据模型(Property Graph)
  • 节点(Node):实体/事物,如 PersonCompany
  • 关系(Relationship):带方向,表达语义,如 (:Person)-[:WORKS_AT]->(:Company)
  • 属性(Properties):键值对,挂在节点或关系上(如 sincetitle)。
  • 标签/类型:节点 Label 与关系 Type 用于分类与索引。
建模原则
  1. 语义清晰:节点是名词、边是动词;方向代表语义(WORKS_AT 而非 RELATES)。
  2. 稳定主键:每个 Label 设置业务主键(如 externalId)+ 唯一约束。
  3. 属性最小充分:仅保留检索/分析所需;大文本/半结构化外置或拆分子实体。
命名规范(统一风格)
  • 标签/关系名称PascalCase;属性:camelCase
  • 布尔:肯定式(isActivehasSpouse)。时间:*_At/*_On;百分比:*_Pct(0–1)。
  • 多语言:中文用于AI分析与生产内容, 以及界面显示(titleZh/descZh)。
  • 关系 Type 用动词短语WORKS_ATSUPPLIES)。
数据类型规范
推断策略:
多数投票优先
(且
string≥50%
保护);并列兜底优先序:string > int > float > boolean > date/time/datetime > duration > point > list
  • 数值:整数 int,含小数 float;ID 建议 string(避免前导零丢失)。
  • 时间date/time/datetime;时区采用 ISO 8601。
  • 数组T[](如 string[]);导入注意分隔与转义。
  • 空间point;批量导入先校验再构造。
方法与步骤
  1. 领域建模:收敛实体与关键关系;标注方向、主键、关键/稀疏属性。
  2. 草图验证:手工样本 + 关键查询(3–5个)验证表达力与性能。
  3. 属性设计:列出必填/可选、数据类型、单位、默认、唯一/存在性约束。
  4. 样本导入:抽样 1–5%,类型推断与冲突比对(追加导入需与库一致)。
  5. 一致性校验:唯一约束、孤儿关系、端点不匹配、类型冲突、高基数未索引。
关系设计(方向、属性)
方向与稀疏性
  • 方向表达语义(WORKS_ATSUPPLIES);不确定时用 -[]-
  • 避免无谓反向冗余;确需反向时评估写入/存储成本与可视化复杂度。
关系属性
  • 时间:since/startedAtuntil/endedAt;权重/置信度:weightconfidencePct(0–1)。
  • 关系节点(reification):当边上属性过多或需多对象关联时,用“中间节点”。
数据导入(两类场景)
  1. 追加导入(已有数据)
    • 列类型必须与库一致;模糊匹配列名 → 人工确认。
    • MERGE 脚本锚定主键;
      可开关
      类型强转。
  2. 空库导入
    • 推断列类型(多数投票 + string≥50% 保护),允许用户修改。
    • 先导入节点,再导入关系(用外键/自然键关联)。
反模式清单(避免这些坑)
  • 缺少唯一约束导致重复节点。
  • 把宽表原样塞进单节点;缺少关系语义,查询爆炸。
  • 滥建双向平行边,造成可视化噪音与维护复杂度。
  • 时间戳存为字符串且格式不一,跨时区混乱。
示例模型
雇佣关系(People & Company)
(:Person { id, name, email, createdAt })
-[:WORKS_AT { since, title }]->
(:Company { id, name, domain })
供应链(Supplier & Product)
(:Supplier { externalId, name })
-[:SUPPLIES { leadDays:int, price:float }]->
(:Product { sku, name, category })
术语与参考
  • 类型:string | boolean | int | float | date | time | datetime | duration | point | T[]
  • 模式:关系节点(reification)、角色节点(role)、时间版本化(bitemporal)
数智谱