Neo4j数据模型设计

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

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

用户访问控制数据模型

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

购物网站数据模型

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

相关文章
|
1月前
|
存储 NoSQL API
使用Py2neo进行Neo4j图数据库的增删改查操作
使用Py2neo进行Neo4j图数据库的增删改查操作
60 5
|
3月前
|
存储 SQL NoSQL
探索数据存储的多样性:深入比较Entity Framework Core与NoSQL数据库MongoDB的特性与应用
【8月更文挑战第31天】在现代软件开发中,选择合适的数据存储方案对应用性能至关重要。本文通过对比Entity Framework Core(EF Core)和MongoDB,探讨两者的特点及适用场景。EF Core作为.NET生态中的ORM,简化了SQL数据库的交互;MongoDB则是一种灵活的NoSQL文档数据库,适合处理大量非结构化数据。两者在数据模型、查询方式及性能上各有优势,选择时需根据具体应用需求决定。理解这些差异有助于做出更合理的技术选型。
77 0
|
5月前
|
XML NoSQL 数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 概念 + 数据模型
【6月更文挑战第5天】本文探讨了数据模型的分析,关注点包括数据元素、关系及不同类型的模型(关系、文档、图)与Schema模式。查询语言的考量涉及与数据模型的关联及声明式与命令式编程。数据模型从应用开发者到硬件工程师的各抽象层次中起着简化复杂性的关键作用,理想模型应具备简洁直观和可组合性。
39 2
|
6月前
|
存储 SQL 数据挖掘
数据模型概述与数据库基础
数据模型是描述现实世界数据对象结构的形式化、真实和易理解的表示。分为概念模型(信息模型)和数据模型,前者面向用户,后者关注计算机实现。数据库是结构化、共享、低冗余的数据集合,提供数据独立性。数据库管理系统(DBMS)负责数据的存储、访问和管理,而数据库系统(DBS)包括数据库、DBMS、应用系统、DBA和用户。数据库系统开发涉及需求分析、系统设计(概念设计、逻辑设计、物理设计)、系统实现和运行维护(数据更新、备份、分析等)。
46 0
|
6月前
|
存储 NoSQL MongoDB
MongoDB数据模型与文档结构详解
【4月更文挑战第30天】MongoDB是一个基于文档的NoSQL数据库,其数据模型由文档(类似键值对集合,支持嵌套和数组)、集合(无需预定义结构的文档组)和数据库(包含集合的组织单元)构成。文档使用BSON格式,支持多种数据类型。在设计数据模型时,应注意避免过度嵌套,利用索引优化查询,并考虑数据生命周期。MongoDB通过引用处理文档间关系,提供灵活性以适应复杂数据结构。
|
6月前
|
存储 大数据 数据管理
数据模型设计
数据模型设计
|
XML JSON 算法
Neo4j-APOC扩展与使用(上)
Neo4j-APOC扩展与使用 1.APOC简介与安装 1.1 APOC简介 1.2安装APOC
Neo4j-APOC扩展与使用(上)
|
算法 搜索推荐
Neo4j-APOC扩展与使用(下)
Neo4j-APOC扩展与使用 1.APOC简介与安装 1.1 APOC简介 1.2安装APOC
Neo4j-APOC扩展与使用(下)
|
存储 SQL NoSQL
知识图谱与数据库技术:RDF三元组库和Neo4j图数据库
知识图谱与数据库技术:RDF三元组库和Neo4j图数据库
1278 0
|
NoSQL 数据库 数据安全/隐私保护
Neo4j图数据库的安装与基本增删改查
Neo4j图数据库的安装与基本增删改查
282 0
Neo4j图数据库的安装与基本增删改查