关系型数据库是一种基于关系模型的数据库,它使用表格来存储和管理数据。每个表格都是由一组列和行组成,列表示数据的属性,行表示数据的实例。关系型数据库通常使用 SQL(Structured Query Language)来查询和管理数据。简单一点就是,你能把数据整理成表格的形式,这样的表格形式的数据,就可以称之为关系型数据。最常见的就是我们excel里面的表格,或者word里面的表格
此类数据库都是使用SQL语句来进行管理,例如
select * from userinfo where name = '张三'
常见的关系型数据库有:
@Getter
@AllArgsConstructor
public enum DbType {
MYSQL("mysql", "MySql数据库"),
MARIADB("mariadb", "MariaDB数据库"),
ORACLE("oracle", "Oracle11g及以下数据库(高版本推荐使用ORACLE_NEW)"),
ORACLE_12C("oracle12c", "Oracle12c+数据库"),
DB2("db2", "DB2数据库"),
H2("h2", "H2数据库"),
HSQL("hsql", "HSQL数据库"),
SQLITE("sqlite", "SQLite数据库"),
POSTGRE_SQL("postgresql", "Postgre数据库"),
SQL_SERVER2005("sqlserver2005", "SQLServer2005数据库"),
SQL_SERVER("sqlserver", "SQLServer数据库"),
DM("dm", "达梦数据库"),
XU_GU("xugu", "虚谷数据库"),
KINGBASE_ES("kingbasees", "人大金仓数据库"),
PHOENIX("phoenix", "Phoenix HBase数据库"),
GAUSS("zenith", "Gauss 数据库"),
CLICK_HOUSE("clickhouse", "clickhouse 数据库"),
GBASE("gbase", "南大通用(华库)数据库"),
GBASEDBT("gbasedbt", "南大通用数据库"),
OSCAR("oscar", "神通数据库"),
SYBASE("sybase", "Sybase ASE 数据库"),
OCEAN_BASE("oceanbase", "OceanBase 数据库"),
FIREBIRD("Firebird", "Firebird 数据库"),
HIGH_GO("highgo", "瀚高数据库"),
CUBRID("cubrid", "CUBRID数据库"),
GOLDILOCKS("goldilocks", "GOLDILOCKS数据库"),
CSIIDB("csiidb", "CSIIDB数据库"),
SAP_HANA("hana", "SAP_HANA数据库"),
IMPALA("impala", "impala数据库"),
OTHER("other", "其他数据库");
}
尽管关系型数据库具有很多优点,例如数据结构清晰、数据一致性高、支持 SQL 等,但是也存在一些缺陷,以下是一些常见的缺陷:
随着大数据、云计算、物联网等新兴技术的发展,NoSQL 数据库和分布式数据库等新型数据库也逐渐崭露头角,成为了关系型数据库的有力补充。
非关系型数据库(NoSQL)相对于传统的关系型数据库(SQL)具有以下优点,有助于解决关系型数据库的一些短板:
灵活的数据模型设计:NoSQL 数据库不需要遵循严格的表结构和键值关系,可以根据具体应用场景进行灵活的数据模型设计和调整,更加符合实际的业务需求。
常见的 NoSQL 数据库包括以下几种:
在选择 NoSQL 数据库时,需要根据具体业务需求和数据特点来进行选择。例如,如果需要存储半结构化的数据,可以选择文档型数据库;如果需要快速地读写键值对,可以选择键值型数据库;如果需要存储大规模的结构化数据,可以选择列族型数据库;如果需要存储复杂的图形数据,可以选择图形数据库。
图数据库是一种专门用于存储图形数据的 NoSQL 数据库。与传统的关系型数据库和其他 NoSQL 数据库不同,图数据库利用图形数据模型来存储和管理数据。图形数据模型由节点和边组成,节点代表实体,边代表实体之间的关系。例如,在社交网络中,用户可以表示为节点,朋友关系可以表示为边。
图数据库具有以下特点:
图数据库在以下领域有广泛的应用场景:
用户访问菜单是我们目前所有的软件中最常见的一个功能了,本文将基于用户访问菜单来介绍这个图数据库的概念。
在用户访问菜单中,我们的信息主体有如下三个
信息关联有如下两个
张三这个用户登录系统以后,能访问那些菜单?
本文将使用neo4j来开始介绍图数据库。
图数据库的数据模型中,我们将信息分为三类,分别为节点、关系、属性
本文为了简单介绍,使用一个用户访问菜单的功能来进行介绍。
将诸如人物、电影、书籍或其他具体事物称之为节点,那么在我们上面的案例中
那么用户、角色、菜单,都是节点。
用户节点
角色节点
菜单节点
节点是图中的实体。
关系就是连接节点的概念、事件或事物。在关系数据库中,这些关系通常存储在具有链接字段的数据库行中。简单一点说就是,一条线把两个节点连起来,这条线就是关系。
如下所示,例如小芳和配置员、业务员中间被一根有向箭头连起来了,这个有向箭头就是关系,这个关系叫做拥有角色。
同理角色和菜单,角色可以看到访问那些菜单的这个箭头《可以访问》,就是关系
关系在两个节点实体(用户——拥有角色——> 角色)之间提供定向的命名连接。
节点和边都可以拥有可搜索的属性。例如,如果你的节点代表人,他们可能拥有名字、性别、出生日期、身高等属性。而边的属性可能描述了两个人之间的关系何时建立,见面的情况或关系的性质。
例如我们在Neo4J中,查看《审计员》这个节点,我们发现它有三个属性,有id,roleName、roleDes。
同理,当我们查看《可以访问》这个关系时,我们也能发现它有两个属性,分别是id和name。
这是我们用neo4j构建的一个图谱关系,我们可以非常清晰的看到每个用户所拥有的角色,以及每个角色所能访问的菜单。
对于关系型数据库有专门的SQL语言来帮我对数据进行操作,同样的图数据库也会有专门的语言来帮我们对数据库进行操作。
如下的语言是cypher编写,用来帮助我们对数据进行操作,例如我们现在想查询小红这个用户可以访问那些菜单,那就是小红->角色->菜单的逻辑
MATCH (u:User{userName: '小红'})-[:USER_ROLE]->(r:Role)-[:ROLE_MENU]->(m:Menu)
RETURN u,r,m
使用Neo4j进行开发,下面是一些我们常用的工具。本文中,我使用的就是Neo4j Browser和Cypher。
• Neo4j Desktop — 用于使用 Neo4j 的本地开发环境,无论是使用本地数据库实例还是位于远程服务器上的数据库。免费下载包括 Neo4j 企业版许可证。
• Neo4j Browser — 在线浏览器界面,用于查询和查看数据库中的数据。使用 Cypher 查询语言的基本可视化功能。
• Neo4j Operations Manager (NOM) — 一种基于 UI 的工具,使数据库管理员能够监视、管理和操作企业版中的所有 Neo4j 数据库管理系统。
视频系列:NOM Bytes介绍了该产品并提供了一些实用技巧。有关详细信息,
请参阅Neo4j Ops Manager文档。
• Data Impourer — 一种无代码工具,允许您从平面文件 (.csv和.tsv) 加载数据,定义图形模型,将数据映射到它,并将其导入 Neo4j 数据库。
• Neo4j Bloom — 面向业务用户的可视化工具,无需任何代码或编程技能即可查看和分析数据。有关详细信息,请参阅文档。
• Cypher是一种开放数据查询语言,基于openCypher 计划。它是用于属性图的最成熟和直观的查询语言
• Neo4j 驱动程序 ——官方支持的驱动程序和社区驱动程序。
• Neo4j 连接器 — 一组连接器,用于将您的常规工作环境与 Neo4j 集成。
• GraphQL Library是一个灵活的、低代码的开源 JavaScript 库,通过利用连接数据的力量,可以为跨平台和移动应用程序快速开发 API。
• OGM — Neo4j 的对象图映射库。
本文中,选择windows社区版本的4.4.21。
下载地址:https://neo4j.com/download-center/
将下载的压缩包解压即可
cmd中,在bin目录下输入neo4j console即可启动neo4j。(快捷方式:电脑进入bin目录,在地址栏输入cmd)即可在该目录下打开cmd。