在第一种模型中,可以将这笔转账的信息,比如金额,时间等,记录在节点 Order:o 的点属性中,如果 a 与 b 之间发生过多笔转账,则 a 与 b 之间将会存在多个 Order 节点
在第二种模型中,a 与 b 之间会有一条 transfer 边,可以将转账信息记录在边属性中。在 TigerGraph 中,两个节点之间相同类型的边只能有一条,也就是说,a 与 b 之间只能有一条 transfer 边,如果他们之间发生过多笔转账,可以将每次转账的信息记录用 list 的形式记录在 transfer:e 的边属性中。
不同的场景与分析需求,适合不同的设计,通过后续案例的学习,我们会更多体会到这一点
Schema 如下图:
本次案例使用 gsql 脚本来创建 Schema
create_graph.gsql
CREATE VERTEX Account (PRIMARY_ID id STRING, phone STRING, reg_time INT, reg_date STRING) WITH STATS="outdegree_by_edgetype"
CREATE VERTEX IMEI (PRIMARY_ID id STRING, imei STRING) WITH STATS="outdegree_by_edgetype"
CREATE VERTEX IP (PRIMARY_ID id STRING, ip STRING) WITH STATS="outdegree_by_edgetype"
CREATE VERTEX Subnet (PRIMARY_ID id STRING, subnet STRING) WITH STATS="outdegree_by_edgetype"
CREATE VERTEX BonusOrder (PRIMARY_ID id STRING, order_id STRING, order_date STRING)
CREATE VERTEX OneDay (PRIMARY_ID id STRING) WITH STATS="outdegree_by_edgetype"
CREATE UNDIRECTED EDGE use_imei (FROM Account, TO IMEI)
CREATE UNDIRECTED EDGE use_ip (FROM Account, TO IP)
CREATE UNDIRECTED EDGE accountReg_date (FROM Account, TO OneDay)
CREATE UNDIRECTED EDGE in_subnet (FROM IP, TO Subnet)
CREATE UNDIRECTED EDGE bonusOrder_date (FROM BonusOrder, TO OneDay)
CREATE DIRECTED EDGE send_bonus (FROM Account, TO BonusOrder)
CREATE DIRECTED EDGE recv_bonus (FROM BonusOrder, TO Account)
CREATE DIRECTED EDGE invite (FROM Account, TO Account) WITH REVERSE_EDGE="reverse_invite"
CREATE GRAPH MyGraph (*)