图片

RDBMS和非RDBMS

我们看数据库的排名,有些数据库有关系型(RDBMS)和非关系型,他们有什么区别呢?

图片

关系型数据库


这种类型的数据库是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。


关系型数据库以行(row)和列(column)的形式存储数据,以便于用户理解。

图片

而每张表又有关系,比如:班级表和学生表。我们通过关系数据库的查询语言SQL,就可以查出这些多表关系的信息。


优势:


复杂查询可以用SQL语句方便地在一个表以及多个表之间做非常复杂的数据查询。


事务支持,使得安全性能很高的数据访问要求得以实现。


非关系型数据库:


可以看成传统关系型数据库的阉割版。不需要通过SQL层的解析,性能非常的高。


相比SQL,NoSQL泛指非关系型数据库,常见的非关系型数据库包括:


键值型数据库:使用场景可作为内存的缓存,Redis是最流行的键值型数据库


文档型数据库:此类型数据库可存放并获取文档,可以是XML、JSON等格式。在数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录。文档数据库所存放的文档,就相当于键值数据库所存放的值。MongoDB是最流行的文档型数据库。


搜索引擎数据库:虽然关系型数据库采用了索引提升效率,但是针对全文索引效率却较低。搜索引擎是应用在搜索引擎领域的数据库存储形式。这样检索的时候才能保证性能最优。典型数据库有:Solr、Elasticsearch、Splunk等。


列式数据库:Oracle、Mysql都是采用行式存储方法,一行就是一个记录。而列式数据库是将数据库按照列存储数据到数据库中。这样做的好处,可以降低I/O,比如你用行数据库,你只要显示4个列,就要把这行20列都加载到内存中,但是用列数据库只需要加载特定的列。典型产品:HBase等。


图形数据库:一种存储图形关系的数据库,一些复杂关系的数据关系,还是可以用图数据库。典型的产品:Neo4j、InfoGird等。

NoSQL的分类很多,即便如此,在DBMS排名中,还是SQL阵营的比重更大,影响力前五的DBMS,有4个是关系型数据库,排名前20的数据库,有12个也是关系型数据库。所以掌握SQL是非常有必要的。

关系数据库设计原则

表、记录、字段:

数据库中的一个表对应Java的一个类。

表中的一条数据(记录)对应Java的一个对象。

表中的一个列,表示类中 的一个字段、属性。

表的关联关系:

一对一关联关系

在实际开发中应用不多,因为一对一可以创建为一张表。但有时候,一张表字段太多了,有些是常用的比如学生基本信息,有些是不常用的比如学生的档案信息。这个时候可以拆分成两个表。

图片


一对多关联关系表:


分为主表和从表,一为主表,多为从表。比如班级与学生的关系、部门与员工的关系。这些都是一对多的关系。

图片

多对多关联关系:


表示多对多的关系,必须创建第三张表,该表被称为连接表。它将多对多关系划分为两个一对多关系。将这两个表的主键都插入到第三张表中。

图片

比如学生和课程的关系,一个学生可以选多个课程,一个课程也可以被多个学生选。


比如角色与用户的关系,一个角色可以有多个用户,但是一个用户又可以有多个角色。


自我引用关系:


自己引用自己,员工编号103,的主管编号就是自己。

图片