为什么要使用数据库

  • 持久化:把数据保存到可掉电式存储设备中以供之后使用。数据持久化意味着将内存中的数据保存到硬盘上加以固化,而持久化的实现过程大多通过各种关系数据库来完成
  • 持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中

    数据库的相关概念

  • DB:数据库(Database)

即存储数据的仓库,本质是一个文件系统

  • DBMS:数据库管理系统(Database Management System)

是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据

  • SQL:结构化查询语言(Structured Query Language)

专门用来与数据库通信的语言

  • 数据库与数据库管理系统的关系:

数据库管理系统用于管理多个数据库,一般开发人员会针对每一个应用创建一个数据库,每个数据库中创建多个表,用来保存程序中实体用户的数据

常见的数据库

  • Oracle
    • 1979年,Oracle 2诞生,它是第一个商用的RDBMS(关系型数据库管理系统)。随着Oracle软件的名气越来越大,公司也改名为Oracle公司
    • 2009年,总计74亿美元收购SUN,此前的2008年,SUN以10亿美元收购MySQL
    • 2013年,甲骨文超越IBM,成为继Microsoft后的全球第二大软件公司
  • MySQL
    • 是一个开放源代码的关系型数据库管理系统
    • MySQL使用标准的SQL数据语言格式
    • MySQL支持大型的数据库,可以处理拥有上千万条记录的大型数据库
    • MySQL可以运行在多个系统上,并且支持多种语言
  • SQL Server

是微软开发的大型商业数据库,可以很好地与Microsoft BackOffice产品集成

  • Oracle VS MySQL

    • Oracle更适合大型跨国企业使用,因为他们对费用不敏感,但是对性能要求以及安全性有更高的要求
    • MySQL由于其体积小、速度快、成本低、可处理上千万条记录,尤其是开放源代码这一特点,成为了很多公司的主要选择

      RDBMS和非RDBMS

      RDBMS

      关系型数据库是把复杂的数据结构归结为简单的二元关系(即二维表格形式)
      关系型数据库以行和列的形式存储数据,以便于用户理解
      优势:
  • 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询

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

    非RDBMS

    可以看出传统关系型数据库的功能阉割版本,不需要经过SQL层的解析,性能非常高。同时,通过减少不常用的功能,进一步提高性能

  • 键值型数据库

通过key-value键值的方式来存储数据,其中的key和value可以是简单的对象,也可以是复杂的对象。key作为唯一的标识符,优点是查找速度快,缺点是无法像关系型数据库一样使用条件过滤。如果你不知道去哪里找数据,就要遍历所有的键,这就会消耗大量的计算。键值型数据库典型的使用场景是作为内存缓存,Redis是最流行的键值型数据库

  • 文档型数据库

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

  • 搜索引擎数据库

搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。核心原理是“倒排索引”,典型产品有Elasticsearch等

  • 列式数据库

列式数据库是相对于行式存储的数据库,是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的I/O,适合于分布式文件系统,不足在于功能相对有限。典型产品有HBase等

关系型数据库设计规则

表、记录、字段

ER(entity-relationship)模型中有三个主要概念是:实体集、属性、联系集

  • 一个实体集对应于数据库中的一个表
  • 一个实体对应于数据库表中的一行,也称为一条记录
  • 一个属性对应于数据库表中的一列,也称为一个字段
  • ORM(Object Relational Mapping)思想体现:

    • 数据库中的一个表 <—-> 一个类
    • 表中的一条数据 <—-> 类中的一个对象
    • 表中的一个列 <—-> 类中的一个字段、属性

      表的关联关系

  • 一对一关系

  • 一对多关系:在从表创建一个字段,作为外键作为主表的主键
  • 多对多关系:必须创建第三个表,称为联接表,它将多对多关系划分为两个一对多关系,将这两个表的主键都插入到第三个表中
  • 自我引用,如:

image.png