数据库概述
为什么要使用数据库
什么是数据持久化?
数据持久化就是把数据保存到可掉电式存储设备中供以后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。
持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。
为什么用数据库来存储数据?
- 数据库的特点:
- 数据库存储的数据量非常庞大。以单表来说,我们可以存储几千万甚至上亿条数据。与文件存储相比,当数据量特别庞大的时候,数据库查询数据的效率更高。
- 数据库存储数据的类型更更富。例如整数类型、浮点类型、字符串类型,甚至是图片,大文本等等。
- 文件存储的弊端:有些文件需要特定的程序才可以打开。例如,excel。
数据库和数据库管理系统
数据库、数据库管理系统、结构化查询语言
- 数据库(Database,DB):DB是存储数据的“仓库”,其本质是一个文件系统。
- 数据库管理系统(Database Management System,DBMS):DBMS是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中数据表的数据。
- 结构化查询语言(Structured Query Language,SQL):SQL是专本用来与数据库通信的语言。
数据库与数据库管理系统的关系
数据库管理系统可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为了保证应用中实体的数据,一般会在数据库创建多个数据表,以保证程序中实体用户的数据。
客户通过Web服务器访问数据库管理系统,数据库管理系统通过SQL访问数据库中的数据表。
常见的数据库管理系统
常见的DBMS有Oracle、MySQL、SQL server、Db2、PostgreSQL等。
MySQL介绍
RDMBS与非RDBMS
RDBMS
关系型数据库(RDBMS):RDBMS是最古老的数据库类型,它把复杂的数据结构归结为简单的二元关系(二维表格形式)。
- RDBMS以行(row)和列(column)的形式存储数据,以便于用户理解。一些列的行和列被称为表(table),一组表组成一个库(database)。
- 表和表之间存在关系。关系型数据库就是建立在关系模型基础上的数据库。
- SQL就是关系型数据库的查询语言。
关系型数据库的优势:
- 便于复杂查询:可以使用SQL语句方便在一个或多个表之间进行复杂的查询。
- 支持事务:使得对于安全性能要求很高的数据访问要求得以实现。
非RDBMS
非关系型数据库(非RDBMS):可以看成是传统关系型数据库的功能阉割版本,基于键值对存储数据,不需要SQL层的解析,性能非常高。同时,通过减少不常用的功能,进一步提高性能。
目前基本大部分主流的非RDBMS都是免费的。
非关系型数据库的分类:
- 键值型数据库:键值型数据库通过Key-Value键值的方式来存储数据。在查找速度上优于关系型数据库;但是无法像关系型数据库一样使用条件过滤。键值型数据库常在内存缓存中使用。Redis是代表性的键值型数据库。
- 文档型数据库:文档型数据库可以存放并获取文档,可以是XML、JSON等格式。一个文档相当于一条记录。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。MongoDB是最主流的文档型数据库。
- 搜索引擎数据库:虽然关系型数据库采用了索引提高检索效率,但是针对全文索引的效率却较低。搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。核心原理是“倒排索引”。Elasticsearch是最主流的搜索引擎数据库。
- 列式数据库:可以大量降低系统的I/O,适合于分布式文件系统。典型的列式数据库:HBase。
- 图形数据库:典型的图形数据库:Neo4J等。
关系型数据库设计规则
E-R(实体-联系)模型
E-R(实体-联系)模型:
- 实体集
- 属性
- 联系集
一个实体集对应一个表;一个实体对应一行,也叫一条记录;一个属性对应一列,也叫字段。
表的关联关系
一对一关系
- 在实际开发中应用不多,因为一对一可以创建一张表。
- 举例:设计学生表:学号、姓名、手机号、班级、系别、身份证号码、家庭住址、籍贯、紧急联系人、...
- 拆分成两个表:两个表的记录是一一对应关系。
- 基础信息表(常用信息):学号、姓名、手机号码、班级、系别
- 档案信息表(不常用信息):学号、身份证号码、家庭住址、籍贯、紧急联系人、...
- 两种建表原则:
- 外键唯一:
- 外键是主键:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一。
- 外键是主键:主表的主键和从表的主键,形成主外键关系。
一对多关系
- 常见实例场景: 客户表和订单表 , 分类表和商品表 , 部门表和员工表 。
- 举例:
- 员工表:编号、姓名、...、所属部门
- 部门表:编号、名称、简介
- 一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键
多对多关系
要表示多对多关系,必须创建第三个表,该表通常称为联接表,它将多对多关系划分为两个一对多关系。将这两个表的主键都插入到第三个表中。
- 举例1:学生-课程
- 学生信息表 :一行代表一个学生的信息(学号、姓名、手机号码、班级、系别...)
- 课程信息表 :一行代表一个课程的信息(课程编号、授课老师、简介...)
- 选课信息表 :一个学生可以选多门课,一门课可以被多个学生选择
-
举例2:产品-订单
“订单”表和“产品”表有一种多对多的关系,这种关系是通过与“订单明细”表建立两个一对多关系来定义的。一个订单可以有多个产品,每个产品可以出现在多个订单中。
- 产品表 :“产品”表中的每条记录表示一个产品。
- 订单表 :“订单”表中的每条记录表示一个订单。
- 订单明细表 :每个产品可以与“订单”表中的多条记录对应,即出现在多个订单中。一个订单可以与“产品”表中的多条记录对应,即包含多个产品。
-
举例3:用户-角色
多对多关系建表原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。
文章评论