业务问题
项目管理中有些概念容易混淆,需要记录并辨析这些易混淆术语。
直观的想法是把术语作为节点,把它们之间的区别作为关系,比如“事业环境因素”和“组织过程资产”这两个节点之间的辨析作为两者之间的关系,类型为Difference。
代码如下,
create (n1:Item{name:"事业环境因素",definition:"事业环境因素的定义"})
create (n2:Item{name:"组织过程资产",definition:"组织过程资产的定义"})
create (n1)-[r:Difference{content:"两者的区别和联系如下..."}]->(n2)
return (n1)-[r]->(n2)
结果如下,可以接受。
1.png
缺点
如果要辨析3个或更多术语之间的区别就比较麻烦了,neo4j只能在两个节点之间建立关系,无法建立多节点之间的关系。比如“项目”、“项目集”和“项目组合”三个术语之间是需要进行辨析的,一种方式是分别辨析各术语两两之间的区别,按照上述方法分别辨析“项目”和“项目集”的区别、“项目组合”和“项目集”的区别、“项目”和“项目组合”的区别。这样工作量太大,而且不利于直接说明三个术语之间的关系。
如果要辨析的术语超过3个用这种方式就更麻烦了。
解决方法
最后决定把术语作为节点,类型为Item,把术语之间的辨析也作为节点,类型为DifferenceEntity,如果要辨析“项目”、“项目集”和“项目组合”之间的区别,分别定义三个Item和一个DifferenceEntity,把他们之间的辨析内容作为DifferenceEntity的属性,只需记录一次即可,代码如下:
create (n1:Item{name:"项目",definition:"项目的定义"})
create (n2:Item{name:"项目集",definition:"项目集的定义"})
create (n3:Item{name:"项目组合",definition:"项目组合的定义"})
create (d1:DifferenceEntity{name:"项目、项目集、项目组合的区别",definition:"内容blabla..."})
create (n1)-[r1:Difference]->(d1)
create (n2)-[r2:Difference]->(d1)
create (n3)-[r3:Difference]->(d1)
return n1,n2,n3,r1,r2,r3,d1
结果如下:
2.png
结论
知易行难,技术方案有了,把PMBOK指南中几百组容易混淆的术语整理成知识图谱也不容易啊!