Neo4j数据模型设计

标签: 数据模型 全栈 Neo4j
1078人阅读 评论(0) 收藏 举报

摘要: 数据模型设计是数据建模的第一步,因为Neo4j不需要模式结构定义,所以使用简单框图就可以为一个项目或应用设计数据模型。创建数据模型之后,就可以使用SDN进行数据实体建模和一些数据访问的设计。 本文选自《Neo4j全栈开发》。

  开始数据模型设计,一般通过分析业务需求就可以提取出需要建立的节点和关系,然后使用节点和关系画出框图,即可完成数据模型的设计。下面通过两个实例来简要说明数据模型的设计过程。

用户访问控制数据模型

  在一个访问控制系统中,它的业务需求可以简单地描述为:怎样控制一个用户的访问权限。即一个用户登录系统后,他对系统的哪些资源具有访问权限。通过分析和结合以往的经验,我们可能需要四个节点,分别是用户、部门、角色和资源;三个关系,分别是隶属、拥有和权限。这样,我们就可以画出下图的用户访问控制数据模型。
             图片描述
  这个数据模型是否合理、是否符合业务需求?我们可以用这个简单框图模拟一下业务流程,简单地测试一下它的合理性。首先看看从这个框图中能不能读出类似这样的信息:隶属于一个部门的一个用户拥有哪些角色就能对哪些资源具有访问权限。如果可以,就可以说明这个模型设计是可行的。
  很明显,这个数据模型设计的业务流程是通顺的。因为对于这个框图,我们可以这样读出它的流程:部门具有一些隶属用户,用户拥有一些角色,角色对一些资源具有访问权限。
  有了这个数据模型之后,就可以对节点和关系进行建模了。在建模中再来确定节点和关系的属性,例如,用户节点可能需要用户名、密码、性别、邮箱、创建日期等属性,同时还要确定关系的对等方式,例如,是一对一、一对多还是多对多等。对于这个实例来说,用户与部门的隶属关系是多对一关系,用户与角色的拥有关系和角色与资源的权限关系都是多对多关系。

购物网站数据模型

  如果觉得上面的数据模型简单了一点,那么接下来我们使用一个业务需求比较复杂的实例来试一试,比如一个购物网站。购物网站的业务需求大概具有这样的流程:首先商家上架了商品,然后顾客浏览或查找商品,顾客找到自己需要的商品之后,确定购买,接着使用他的账户支付款项,商家收到货款后,将商品快递给顾客,从而完成一笔交易。根据这个业务流程,我们画出下图的数据模型。
            图片描述
  使用这个数据模型,我们同样也可以先测试一下,即看一看它能不能通顺地读出一个购物网站的基本流程。比如完成一个完整的购物流程,首先是商家的库存要上架商品,然后是顾客购买商品,即商品出售形成订单;接下来是顾客结算订单,使用账户付款,形成支付记录,同时商家账户收到款项,并且订单进入发货状态,同时生成物流记录;这时候,商家的库存办理商品出库,这样商品就通过快递进入送货过程之中;最后顾客从收货地址收到商品,并对订单执行确认收货操作,同时对商品进行评价,至此完成一次购物流程。这就可以说明,这个数据模型所表现的业务流程是通顺的,所以它的设计是合理的。
  一般的购物网站还有购物车这一项,以满足顾客一次选购多个商品的需求,所以还必须设计一个购物车,即在上述流程中插入一个挑选商品到购物车的过程。其中购物车只是顾客与商品的一个关联关系。
           图片描述
  这下应该很完整了吧?这个模型的整个流程可以通过数据库来表示。下图是一个网上书店的模拟数据。
           图片描述
  其中“顾客1”挑选了两本书到他的购物车中,“顾客2”购买了一本小说,完成了一个完整的购物流程。
  不过,如果再仔细想想,则可能会发现,上面的流程还需要更多的细化。比如,上面的数据模型虽然可以表现一个正常交易的流程,但是如果出现不正常的交易情况,那这个数据模型就走不通了。例如,顾客下单后,有可能又不要了,所以,这就需要有撤销订单流程。又如,顾客收到商品之后,可能因为质量问题需要退货和退款,所以,还需要增加相应的退货和退款处理流程。另外,商家售卖的一种商品中还有可能具有型号、颜色、价格和库存数量等不同分类,所以,对于商品节点还有必要进行细分。
  不难看出,对上面的数据模型还必须再进行加工和细化。当然,除了这些,还可能有其他各种各样的情况。不过,不管是什么情况,都可以通过简单框图对数据模型进行细化和加工。至于最终怎么建立起一个完整的购物网站数据模型,这里就不再深入探索了。
  本文选自《Neo4j全栈开发》,点此链接可在博文视点官网查看此书。
                      图片描述
  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                         图片描述

查看评论

图形数据库之王 Neo4j从入门到精通(含Neo4j+D3.js完整实战项目开发)

本课程涉及Neo4j概念、原理、实战、综合完整项目(Neo4j+D3.js可视化)全方位深入讲解,深入讲解图数据库查询语言Cyther,可帮助学员快速掌握Cyther开发技能。深入讲解Neo4j Java API,并在Neo4j+D3.js完整Web项目中手把手编写代码,代码可略微调整即可应用到企业项目或商业中。
  • 2018年01月08日 13:33

Neo4j实战

2、图形数据结构建模 3、使用Neo4j API       创建节点       创建关系       为节点添加属性       节点类型策略       为关系添加属性  ...
  • QFire
  • QFire
  • 2017-12-25 14:33:25
  • 204

Neo4j数据建模优化:标签 VS 索引

原文链接:http://graphaware.com/neo4j/2015/01/16/neo4j-graph-model-design-labels-versus-indexed-propertie...
  • hwz2311245
  • hwz2311245
  • 2017-01-17 17:16:12
  • 2291

Neo4j数据建模优化:双向关系

我们通常会将现实生活中的关系型数据,通过一定的方式,转化为图形化的结构存储起来。尽管图形化的结构相比于表结构更加直观,但也存在一些常见的误区。在这篇博文中,我们来讨论其中的一个容易让人混淆的概念:双向...
  • hwz2311245
  • hwz2311245
  • 2017-01-18 16:52:50
  • 2888

neo4j使用指南

目前neo4j文档只限于官方文档,将neo4j官方主要的文档按点整理了一下,供需要的人参考,内容也会不断更新!...
  • gtuu0123
  • gtuu0123
  • 2011-05-02 13:23:00
  • 29613

Neo4j的存储结构

Neo4j作为图形数据库,有其独特的数据存储结构。 数据存储主要分为节点、关系、节点或关系上属性这三类数据存储,这些数据也可以通过Lucene进行存储检索。 一个节点共占9个byte,,格式  in_...
  • huaishu
  • huaishu
  • 2013-09-15 21:15:11
  • 6898

neo4j 图数据库

作为一款强健的,可伸缩的高性能数据库,Neo4j最适合完整的企业部署或者用于一个轻量级项目中完整服务器的一个子集存在。 它包括如下几个显著特点: 完整的ACID支持 高可用性 ...
  • u010801439
  • u010801439
  • 2017-08-16 16:19:24
  • 341

图形数据库 Neo4j 开发实战

Neo4j 简介 数据存储一般是应用开发中不可或缺的组成部分。应用运行中产生的和所需要的数据被以特定的格式持久化下来。应用开发中很常见的一项任务是在应用本身的领域对象模型与数据存储格式之间进行相互转换...
  • micwing
  • micwing
  • 2017-04-17 18:13:03
  • 1103

图数据库Neo4j实现人脉推荐——二度人脉

“吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非...
  • LoveJavaYDJ
  • LoveJavaYDJ
  • 2016-12-06 19:11:30
  • 5645

neo4j画关系图

neo4j画关系图
  • lk7688535
  • lk7688535
  • 2016-09-14 11:26:12
  • 1180
    个人资料
    持之以恒
    等级:
    访问量: 400万+
    积分: 5万+
    排名: 56
    博客专栏
    文章存档
    最新评论