数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。
严格意义上来说,"数据库"不能被称之为"数据库",而是数据库管理系统,数据库管理系统是为了数据库而设计的计算机软件(通过数据库管理系统去操作数据库中的数据),一般具有存储, 截取,安全保障,备份等基础功能。 数据库与数据库管理系统类似于计算机中的 EXCEL 中的表格 和EXCEL 这个软件的关系
关系性数据库和非关系型数据库
关系型数据库:指采用了关系模型来组织数据的数据库,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
1.成本:
非关系数据库简单易部署,基本都是开源软件,不需要像使用关系型那样花费大量成本购买使用,非关系型数据库相比关系型数据库价格便宜。
2.查询速度:
非关系数据库将数据存储于缓存之中,而且不需要经过 SQL 层的解析,关系型数据库将数据存储在硬盘中,自然查询速度远不及非关系数据库。
3.存储数据的格式:
非关系的存储格式是 key,value 形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而关系型数据库则只支持基础类型。
4.扩展性:
关系型数据库有类似 join 这样的多表查询机制的限制导致扩展很艰难。非关系基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
5.持久存储:
非关系不使用于持久存储,海量数据的持久存储,还是需要关系型数据库
6.数据一致性:
非关系型数据库一般强调的是数据最终一致性,不像关系型数据库一样强调数据的强一致性,从非关系型数据库中读到的有可能还是处于一个中间态的数据,非关系不提供对事务的处理。
常见关系型数据库
Oracle
是 1983 年推出的世界上第一个开放式商品化关系型数据库管理系统 甲骨文
DB2
是美国 IBM 公司开发的一套关系型数据库管理系统
SQL Server
是 Microsoft 公司推出的关系型数据库管理系统
Access
是由微软发布的关系数据库管理系统
MySQL
是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle旗下产品。
sqlite3
轻量级的开源关系型数据库管理系统,很适合在嵌入式设备中使用
常见的非关系型数据库
键值数据库:Redis
、
Memcached
、
Riak
列族数据库:
Bigtable
、
HBase
、
Cassandra
文档数据库:
MongoDB
、
CouchDB
、
MarkLogic
图形数据库:
Neo4j
、
InfoGrid
关系型数据库的优缺点
优点:
1. 采用二维表结构非常贴近正常开发逻辑(关系型数据模型相对层次型数据模型和网状型数据模型等其他模型来说更容易理解);
2. 支持通用的
SQL
(结构化查询语言)语句;
3. 丰富的完整性大大减少了数据冗余和数据不一致的问题。并且全部由表结构组成,文件格式一致;
4. 可以用
SQL
句子多个表之间做非常繁杂的查询;
5. 关系型数据库提供对事务的支持,能保证系统中事务的正确执行,同时提供事务的恢复、回滚、并发控制和死锁问题的解决。
6. 数据存储在磁盘中,安全可靠。
缺点:
1. 高并发读写能力差:网站类用户的并发性访问非常高,而一台数据库的最大连接数有限,且硬盘 I/O
有限,不能满足很多人同时连接。
2. 海量数据情况下读写效率低:对大数据量的表进行读写操作时,需要等待较长的时间等待响应。
3. 可扩展性不足:不像
web server
和
app server
那样简单的添加硬件和服务节点来拓展性能和负荷工作能力。
4. 数据模型灵活度低:关系型数据库的数据模型定义严格,无法快速容纳新的数据类型(需要提前知道需要存储什么样类型的数据)。
简而言之:
优点:容易理解,使用方便,易于维护,缺点:并发高,效率低,扩展性不足
非关系型数据库的优缺点
优点:
1. 非关系型数据库存储数据的格式可以是
key-value
形式、文档形式、图片形式等。使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2. 速度快,效率高。非关系型数据库可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘。
3. 海量数据的维护和处理非常轻松,成本低。
4. 非关系型数据库具有扩展简单、高并发、高稳定性、成本低廉的优势。
5. 可以实现数据的分布式处理。
缺点:
1. 非关系型数据库暂时不提供
SQL
支持,学习和使用成本较高。
2. 非关系数据库没有事务处理,无法保证数据的完整性和安全性。适合处理海量数据,但是不一定安全。
3. 功能没有关系型数据库完善。
4. 复杂表关联查询不容易实现。
关系型数据库的六大范式
这里只要提及前三范式:
1.
第一范式:
数据库表中的字段都是单一属性的,不可再分。
(列不可再分)
2.
第二范式
:
数据库表汇总不存在非关键字段对任一后选关键字段的部分函数依赖。
(
不存在传递依赖
)
3.
第三范式:
数据表中不存在非关键字段对任一后选关键字段的传递函数依赖。(
表中其他列值必须唯一依赖于主键
)
什么是 ACID
数据库事务是指一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性
)属性
E-R 模型
E-R 模型又叫实体-关系模型,
全称为
实体联系模型
、
实体关系模型
或
实体联系模式图
,主要是用来描述现实世界中的概念模型的,具体来说就是使用一下三种东西来描述我们要存储的数据:
实体 客观存在的事物 在 E-R 图上用矩形表示
属性 实体所具有的某一种属性 在 E-R 图上用椭圆表示
联系 实体之间的相互关联 在 E-R 图上用菱形表示
一个实体一般就会对应一个表格,每一个属性对应表格中的一列,表格一般会根据实体关系模式去设计,如下就是 E-R 图模型
主键和外键
关系型数据库中的一条记录中拥有若干个属性,若其中某一个属性/属性组能够唯一的标识一条记录,该属性就可以是一个主键。
比如对于一个学生表(学号,姓名,性别,班级);
其中每一个学生的学号是唯一的,学号就是一个主键
对于课程表(课程编号,课程名,学分,任课老师,开课时间);
其中课程编号是唯一的,课程编号就是一个主键
对于成绩表(学号,课程号,分数);
其中单一的属性无法标识一条记录的,学号和课程号的组合才能唯一的标识一条记录,学号和课程号的组合是一个主键
成绩表中的学号不是成绩表的主键,但是它和学生表中的学号相互对应,并且学生表中的学号是学生表的主键,则称成绩表的学号是学生表的外键.(在本表中不是主键,但是在其他表中是主键)
同理,成绩表中的课程号是课程表的外键
主键和外键主要是为了维护关系型数据库的数据完整性
主键是能够确定一条记录的唯一标识,外键用于与另一张表关联,能够确定另一张表格的字段,用于保持数据的一致性.
注意在 sqlite3 数据库中的外键默认是关闭的。
数据库的安装
sqlite3 数据库的安装
方式 1:通过源代码安装
1.从
SQLite 下载页面
把源码包下载下来然后拷贝虚拟机目录(不要放到共享目录),例如:
cp sqlite-snapshot-201803271513.tar.gz /home/china/
2.解压源代码
tar -zxvf sqlite-snapshot-201803271513.tar.gz
3.进入源代码的目录
cd sqlite-snapshot-201803271513/
4. 自动配置生成 Makefile
./configure
5.自动编译源代码
make
6.安装数据库
sudo make install
方式 2:通过 APT 安装
命令如下:
sudo apt-get install sqlite3sudo apt-get install sqlite3-docsudo apt-get install sqlitebrowser