组织学习
学习管理系统 (LMS) 通常部署在大型组织中,以支持与业务目标保持一致的学习流程。这些系统将员工、组织、认证、课程和工作联系在一起,以补充业务战略。此图 Gist 模拟了此生态系统的一部分 - 认证路径以及职位对认证的依赖关系。
领域
一个认证有一个或多个学习路径。学习路径是必须按顺序完成的项目,以便获得认证。学习项目可以通过参加课程或证明工作经验来完成。课程有交付方式 - 可以是网络课程或课堂课程。工作经验指定了完成它所需的小时数。要获得认证,员工可以参加任何学习路径并完成其中的所有项目。
员工持有认证并完成课程和工作经验。员工可能会担任需要拥有特定认证的职位。
排除项
职业路径、员工技能、课程定价、目标、重新认证等。还缺少机构和讲师(参见:https://gist.neo4j.org/?8021580 )
目标
该模型将帮助我们回答以下问题
-
作为一名员工,获得某项认证的先决条件是什么?
-
作为一名员工,我可以走哪些认证路径来获得 X 认证?
-
作为一名员工,如果我目标是职位 Y,我缺少哪些认证?
-
作为一家组织,我组织中哪些人没有获得他们职位所需的认证?
-
作为一家组织,员工有哪些潜在职位可供选择?
模型
实体
-
具有属性名称的认证
-
具有属性名称的学习项目
-
具有属性名称和交付方式的课程
-
具有属性小时数的工作经验
-
具有属性名称的职位
-
具有属性名称的人员
每个实体将根据其类型进行标记。此外,课程的交付方式将被建模为标签。对于我们想要回答的上述查询,这已经足够了,无需将交付方式也建模为属性。
关系
-
一个认证有一个或多个学习路径。
-
一个认证是另一个认证的先决条件。
-
学习路径包含一个有序的学习项目列表。
-
学习项目由课程或工作经验来满足。
-
一个职位需要一个或多个认证。
-
员工担任职位。
-
员工持有一个或多个认证。
-
员工完成一个或多个课程。
-
员工完成一个或多个工作经验。
认证路径包含一个或多个有序的学习项目。由于一个认证可能有多条路径,并且路径上的项目可能是共用的,我们需要一种方法来识别构成一条学习路径的项目。因此,认证路径被建模为一条链,其中每个“next”关系都由学习路径名称进行限定。
请注意,从认证到其学习项目的关联使用相同的关联类型进行建模:NEXT_LEARNING
。这样可以更方便地查询从认证开始的整个路径。
这源于一个模型,其中以下情况为真
(certification)-[:HAS_LEARNING_PATH]->(learningItem)-[:NEXT]->(learningItem)-[:NEXT]->(learningItem)
两个关系没有增加直接价值,并且增加了查询类型的复杂性,因此它被重新建模为单个关系。
其他关系不言自明。
图的无模式属性的一个很好的优势是能够附加任何类型的实体来满足学习项目,并且仍然可以运行与使用上面的简化模型时相同的查询类型。
查询
获得认证 3 的先决条件是什么?
MATCH (c:Certification {name:"Cert3"})<-[:IS_PREREQUISITE]-(prereq)
RETURN prereq.name
Cert1 有哪些学习路径?
MATCH p=(c:Certification {name:"Cert1"})-[lp:NEXT_LEARNING*]->(li)-[:FULFILLED_BY]->(f)
WITH head(lp).path as startPath,lp,p,f
WHERE ALL (x in lp where x.path=startPath)
RETURN p
要获得 Cert1 认证,我可以走哪些只包含网络课程的路径?
MATCH p=(cert:Certification {name:"Cert1"})-[lp:NEXT_LEARNING*]->(li)
WITH (last(nodes(p))) as lastItem,li,p,lp
WHERE ((li)-[:FULFILLED_BY]->(:Web)) and (not(lastItem)-[:NEXT_LEARNING]->())
WITH head(lp).path as startPath,lp,p
WHERE ALL (x in lp where x.path=startPath)
RETURN p
Person1 需要哪些认证才能升任 Position2?
MATCH (position:Position {name:"Position2"})-[:REQUIRES]->(cert)
WITH cert
MATCH (person:Person {name:"Person1"})
WITH cert,person
WHERE NOT((person)-[:HAS_CERTIFICATION]->(cert))
RETURN cert.name as missingCert
哪些人没有持有他们职位所需的认证?
MATCH (person:Person)-[:HOLDS_POSITION]->(position:Position)-[:REQUIRES]->(cert)
WHERE NOT((person)-[:HAS_CERTIFICATION]->(cert))
RETURN person.name, COLLECT(cert.name) as missingCerts
根据他目前的认证,Person2 的潜在职位有哪些?
MATCH (person:Person)-[:HAS_CERTIFICATION]->(cert)
WITH COLLECT(cert) as heldCerts,person
MATCH (position:Position)-[:REQUIRES]->(requiredCert)
WHERE NOT((person)-[:HOLDS_POSITION]->(position))
WITH COLLECT(requiredCert) as requiredCerts,heldCerts,position
WHERE ALL(rc in requiredCerts where rc in heldCerts)
RETURN position.name
由 Luanne Misquitta 创建
此页面是否有用?