概览
本指南用于在
导入前
与 演进中
,提供一致的建模规范、反模式提醒与可执行流程。概念与基础
图数据模型(Property Graph)
- 节点(Node):实体/事物,如
Person、Company。 - 关系(Relationship):带方向,表达语义,如
(:Person)-[:WORKS_AT]->(:Company)。 - 属性(Properties):键值对,挂在节点或关系上(如
since、title)。 - 标签/类型:节点 Label 与关系 Type 用于分类与索引。
建模原则
- 语义清晰:节点是名词、边是动词;方向代表语义(
WORKS_AT而非RELATES)。 - 稳定主键:每个 Label 设置业务主键(如
externalId)+ 唯一约束。 - 属性最小充分:仅保留检索/分析所需;大文本/半结构化外置或拆分子实体。
命名规范(统一风格)
- 标签/关系名称:
PascalCase;属性:camelCase。 - 布尔:肯定式(
isActive、hasSpouse)。时间:*_At/*_On;百分比:*_Pct(0–1)。 - 多语言:中文用于AI分析与生产内容, 以及界面显示(
titleZh/descZh)。 - 关系 Type 用动词短语(
WORKS_AT、SUPPLIES)。
数据类型规范
推断策略:
多数投票优先
(且 string≥50%
保护);并列兜底优先序:string > int > float > boolean > date/time/datetime > duration > point > list。- 数值:整数
int,含小数float;ID 建议string(避免前导零丢失)。 - 时间:
date/time/datetime;时区采用 ISO 8601。 - 数组:
T[](如string[]);导入注意分隔与转义。 - 空间:
point;批量导入先校验再构造。
方法与步骤
- 领域建模:收敛实体与关键关系;标注方向、主键、关键/稀疏属性。
- 草图验证:手工样本 + 关键查询(3–5个)验证表达力与性能。
- 属性设计:列出必填/可选、数据类型、单位、默认、唯一/存在性约束。
- 样本导入:抽样 1–5%,类型推断与冲突比对(追加导入需与库一致)。
- 一致性校验:唯一约束、孤儿关系、端点不匹配、类型冲突、高基数未索引。
关系设计(方向、属性)
方向与稀疏性
- 方向表达语义(
WORKS_AT、SUPPLIES);不确定时用-[]-。 - 避免无谓反向冗余;确需反向时评估写入/存储成本与可视化复杂度。
关系属性
- 时间:
since/startedAt、until/endedAt;权重/置信度:weight、confidencePct(0–1)。 - 关系节点(reification):当边上属性过多或需多对象关联时,用“中间节点”。
数据导入(两类场景)
- 追加导入(已有数据)
- 列类型必须与库一致;模糊匹配列名 → 人工确认。
- MERGE 脚本锚定主键;可开关类型强转。
- 空库导入
- 推断列类型(多数投票 + 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)