您可能已有一个正在运行的关系型数据库项目,想将其转换为图模型。或许您想新建一个图项目,但更熟悉关系型模型。无论哪种情况,本文都将引导您将关系型数据模型轻松转换为图模型。
数据表简介
假设零售业务有三张表:Customer
,Merchant
和Transaction
。Transaction
表用于记录顾客与商户间的交易行为。
cust_no (Primary Key) |
name | level |
---|---|---|
C100250090 | John Doe | 2 |
C100250091 | Alice Carter | 3 |
C100250092 | David Miller | 1 |
merch_no (Primary Key) |
name | type |
---|---|---|
RS00JF1DF | Fay's Shop | IV |
RT67KNH2R | SunnyMart | V |
trans_no (Primary Key) |
cust_no (Foreign Key) |
merch_no (Foreign Key) |
time | amount |
---|---|---|---|---|
TR58542 | C100250090 | RS00JF1DF | 2025-01-21 09:12:56 | 123.45 |
TR58543 | C100250091 | RT67KNH2R | 2025-01-21 10:03:23 | 87.0 |
TR58544 | C100250090 | RT67KNH2R | 2025-01-22 13:08:10 | 255.8 |
TR58545 | C100250092 | RS00JF1DF | 2025-01-22 13:52:12 | 85.4 |
TR58546 | C100250090 | RS00JF1DF | 2025-01-22 14:00:52 | 88.3 |
将数据建模成图
图数据库与关系型数据库不同,并不需要使用外键在实体间建立连接。相反,您可直接将数据间的关系建模成图中的边。
基于此前介绍的图结构,数据转换过程如下:
- 实体表转换成点类型数据:将代表实体的
Customer
表和Merchant
表映射为点类型Customer
和Merchant
。 - 实体表各列转换成点属性:将实体表中的各列转换成对应的点属性。使用实体表主键作为点的唯一标识符
_id
。 - 关系表转换成边类型数据:将定义连接关系的
Transaction
表映射为边类型TransfersTo
。可以用动词为边类型数据命名,从而更好地描述动作及边的方向。 - 关系表各列转换成边属性:将关系表中的各列转换成对应的边属性。使用关系表外键
cust_no
和merch_no
作为边属性_from
和_to
(对应属性值分别为起、终点的_id
)。 - 各行数据转换成点和边:将表中的各行数据映射为图中的点或边。
经过转换,关系型数据模型成功映射为下图中的图结构:
生成如下图集:
您可参阅将数据导入嬴图数据库来了解如何将数据导入图数据库。
自定义图结构
图结构具有高度灵活性,可根据特定的分析或操作需求进行调整。您可调整图结构,让图模型与使用场景的重点保持一致。
例如,某些场景将交易作为主要实体,此时需将其建模为点而非边。图结构可做调整如下:将Trasaction
表映射为Transaction
点,通过边hasPayer
和边hasPayee
与点User
和点Merchant
相连:
若需分析商户类型,您可将Merchant
表中的type
列提取出来,将其转换为一个单独的点类型数据。改善后的图结构将点Type
与点Merchant
相连,而非将其作为点Merchant
的属性信息存储入图。
将type
列转换为Type
点前,需先对其去重。