数据库的相关介绍
文件管理系统的缺点:
编写应用程序不方便
数据冗余不可避免
应用程序依赖性
不支持对文件的并发访问
数据间联系弱
难以按用户视图表示数据
数据库管理系统的优点:
相互关联的数据的集合
较少的数据冗余
程序与数据相互独立
保证数据的安全、可靠
最大限度地保证数据的正确性
数据可以并发使用并能同时保证一致性
数据库管理系统
数据库是数据的汇集,它以一定的组织形式存于存储介质上。
DBMS是管理数据库的系统软件,它实现数据库系统的各种功能,是数据库系统的核心。
DBA负责数据库的规划、设计、协调、维护和管理等工作。
应用程序:指以数据库为基础的应用程序
数据库管理系统的基本功能
数据定义
数据处理
数据安全
数据备份
数据库系统的架构
单机架构
大型主机/终端架构
主从式架构(C/S)
分布式架构
实体- 联系模型E-R
实体Entity:
客观存在并可以相互区分的客观事物或抽象事件称为实体。
在E-R 图中用矩形框表示实体,把实体名写在框内
属性:
实体所具有的特征或性质
联系:
联系是数据之间的关联集合,是客观存在的应用语义链
实体内部的联系:指组成实体的各属性之间的联系。如职工,实体中职工号和部门经理号之间有一种关联关系
实体之间的联系:指不同实体之间联系。例学生选课实体和学生基本信息实体之间
联系的类型:
一对一联系(1:1)
一对多联系(1:n)
多对多联系(m:n)
数据三要素
数据结构:
一类是与数据类型、内容、性质有关的对象,比如关系模型中的域、属性和关系等;
另一类是与数据之间联系有关的对象,它从数据组织层表达数据记录与字段的结构
数据的操作:
数据提取:在数据集合中提取感兴趣的内容。(SELECT)
数据更新:变更数据库中的数据。(INSERT 、DELETE、UPDATE)
数据的约束条件:是一组完整性规则的集合
实体(行)完整性 Entity integrity
域(列)完整性 Domain Integrity
参考完整性 Referential Integrity
简易数据规划流程
第一阶段:
集数据,得到字段
收集必要且完整的数据项
转换成数据表的字段
第二阶段:
把字段分类,归入表,建立表的关联
关联:表和表间的关系
分割数据表并建立关联的优点
节省空间
减少输入错误
方便数据修改
第三阶段:
规范化数据库
数据库的正规化分析
RDMBS设计范式基础概念
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:
第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF ,又称完美范式)。
满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF ),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)
范式:
1NF:每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。除去同类型的字段,就是无重复的列
2NF:第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分。通常为表加上一个列,以存储各个实例的唯一标识PK。非PK 的字段需要与整个PK 有直接相关性
3NF:满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,非PK
SQL 概念
SQL: Structure Query Language
结构化查询语言
SQL解释器
数据存储协议:应用层协议,C/S
S :server, 监听于套接字,接收并处理客户端的应用请求
C :Client
程序接口
CLI
GUI
应用编程接口
ODBC :Open Database Connectivity
JDBC :Java Data Base Connectivity
约束
约束:constraint,表中的数据要遵守的限制
主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即NOT NULL ,一个表只能存在一个
唯一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL ,一个表可以存在多个
外键:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据
检查:字段值在一定范围内
索引
将表中的一个或多个字段中的数据复制一份另存,并且此些需要按特定次序排序存储
索引是特殊数据结构,定义在查找时作为查找条件的字段
优点:提高查询速度
缺点:占用额外空间,影响插入速度
创建索引必须要有索引名称
关系运算:
选择:挑选出符合条件的行
投影:挑选出需要的字段
连接:表间字段的关联
数据模型
数据抽象:
物理层:决定数据的存储格式,即RDBMS 在磁盘上如何组织文件
逻辑层:描述存储什么数据,以及数据间存在什么样的关系
视图层:描述DB中的部分数据
关系模型的分类:
基于对象的关系模型
半结构化的关系模型:XML
数据库对象的命名规则
必须以字母开头
可包括数字和三个特殊字符(#,_ ,$)
不要使用MySQL的保留字
同一Schema下的对象不能同名
数据库基本概念
1)数据:记录的信息
2)表:记录信息被组织在一起的形式
3)数据库:表的集合,是个存储相互有关数据的仓库
4)数据库管理系统(database management system,DBMS):实现对数据库有效管理的系统软件。
5)数据库系统(database system ,DBS):是一个交互系统,有硬件、操作系统、数据库、DBMS、应用软件和数据库用户组成。
关系型数据库
1)关系型数据库是基于关系模型的数据库,基本概念来自于关系模型。
关系就是二维表,并满足性质是,表中的行、列次序并不重要。
关系模型建立在关系代数的理论基础上,数据结构使用简易的二维数据表,可用简单的“实体-关系(E-R)”图来直接表示。
E-R图包含了实体(数据对象)、关系和属性三个要素。
2)关系数据库存储结构是二维表格,反映事物及其相关联数据是以表格形式保存。
在每个二维表中,每行(row)称为一条记录,用来描述一个对象的信息,每列(column)称为一个字段,用来描述对象的一个属性。
3)关系型数据库的主键、域和事务。
主键(Primary key)是用于唯一确定一个记录的字段。
域(domain)是属性的取值范围,如性别只能是‘男’和‘女’两个值。
事务(transaction)是多个操作被当作一个整体对待。
4)关系型数据库的常见组件
数据库:database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure ,过程无返回值
存储函数:function ,过程有返回值
触发器:trigger
事件调度器:event scheduler ,任务计划
5)当今主流的关系型数据库
1》SQLServer(微软的):面向window系统,简单易用。
2》oracle:面向所有主流平台,安全、完善但操作复杂。
3》DB2(IBM公司的):面向所有主流平台,大型、安全和完善的
4》MySQL(甲骨文收购):免费、开源、体积小
非关系数据库
1)非关系数据库被称为NoSQL(not only SQL),存储数据不以关系模型为依据,不需要固定的表格式。
它是作为关系数据库的一个补充,发挥着高效率和高性能。
2)非关系型数据库的优点
1》可满足数据库高并发读写的需求
2》满足对海量数据高效率存储与访问
3》满足数据库高扩展性与高可用性的需求
3)非关系型数据库的存储方式
1》键-值方式,以键为依据存储、删除、更改数据
2》列存储(column-oriented),将关系的数据存储在列族中
3》文档方式,数据库有一些列数据项组成,每个数据项都有对应的值
4》图形方式,实体为顶点,关系为变,数据保存为一个图形。
4)非关系数据库产品
1》memcached:
是一个缓存系统,以key-value方式存储数据,可以缓存数据以减轻数据库压力并能加快访问速度,加速动态web应用,缓存的内容存储在内存中。
2》redis
也是一个以key-value方式存储数据,数据也保存在内存中,但定期会将数据写入磁盘中。
特点有:支持内存缓存,支持持久化,数据类型更多,支持集群和分布式,支持队列。
应用示例有:数据库前端缓存,session共享,用于需要缓存除了key-value之外的更多数据的时候,用于缓存的数据需要长久保存的时候。
RDBMS
DBMS ---> RDBMS
范式:
第一范式、第二范式、第三范式
表:
row(行), column(列);
关系运算:
选择
投影
数据库:
表、索引、视图(虚表)、sql、存储过程、存储函数、触发器、事件调度器;
约束:
主键约束:唯一、非空;一张表只能有一个;
唯一键约束:唯一,可以存在多个;
外键约束:参考性约束;
检查性约束:check;
三层模型:
物理层 --> sa
逻辑层 --> dba
视图层 --> coder
实现:
oracle, db2, sybase, infomix, sql server;
mysql, mariadb, postgresql, sqlite;
脏读、不可重复读、幻读
脏读 :
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
不可重复读 :
是指在一个事务内,多次读同一数据。
在这个事务还没有结束时,另外一个事务也访问该同一数据。
那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。
这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不 可重复读。
例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。
不可重复读的重点是修改 :
同样的条件 , 你读取过的数据 , 再次读取出来发现值不一样了
幻读 :
是指当事务不是独立执行时发生的一种现象。
例如,第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。
例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。 如果在编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。
幻读的重点在于新增或者删除
同样的条件 , 第 1 次和第 2 次读出来的记录数不一样
Isolation 属性一共支持五种事务设置,具体介绍如下:
DEFAULT 使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别 .
READ_UNCOMMITTED 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )
READ_COMMITTED 会出现不可重复读、幻读问题(锁定正在读取的行)
REPEATABLE_READ 会出幻读(锁定所读取的所有行)
SERIALIZABLE 保证所有的情况不会发生(锁表)