数据库 第一天
一、理解并口述 (技术点和面试点)
1.数据库的简介
【口述1】 什么是数据(Data)?
-
日常生活中,数据无处不在,如: 体检的报告数据, 实验得出数据, 一串数字,一段文字,一个图表,一张图片,甚至一种感觉等,这些都是数据。
计算机在处理数据时,会将与事务特征相关的标记组成一个记录来描述。 -
例如:
1、学生信息(学号,姓名,出生日期,班级等)用一组记录来表示。
2、学生表里有很多条学生记录。
3、表中的记录就是数据。
【口述2】 数据存储方式的变迁
- 数据存储方式的变迁:
1、结绳记事
2、刻石记事
3、文字记事
4、Excel 表格
5、数据库
【口述3】 什么是数据库(DataBase) ?
- 数据库就是用户存放数据、访问数据、操作数据的存储仓库,它是按照数据结构来组织、存储和管理数据的仓库。
- 数据库中存储的基本对象是数据表,数据库中存放的是一堆数据表。
【口述4】 什么是数据库管理系统(DBMS)?
- 数据库管理系统(Database Management System,DBMS)就是管理一个数据库的软件。
【口述5】 数据库的数据存储原理
- 数据库的数据存储方式:一条记录 ———>表 — ——>数据库
【口述6】数据库的分类有哪些?
-
按规模分类
1、小型数据库:Access
2、中型数据库:SQL Server、MySQL、informix
3、大型数据库:Sybase、Oracle、DB2 -
按数据结构类型分类
1、网状型数据库(Network Database):以网状模型来组织、存储和管理数据的数据库。例如:DBTG是网状型数据库。
2、树状型数据库(Hierarchical Database):树状型数据库就是层次型数据库,它是以层次树状模型来组织、存储和管理数据的仓库。例如:IMS 就是属于层次型数据库。
3、非关系型数据库NOSQL:
- 非关系型数据库分类:
1)、键值(Key-Value)存储数据库
2)、列存储数据库
3)、文档型数据库
4)、图形(Graph)数据库 - NoSQL数据库在以下的这几种情况下比较适用:
1)、数据模型比较简单;
2)、需要灵活性更强的IT系统;
3)、对数据库性能要求较高;
4)、不需要高度的数据一致性;
5)、对于给定key,比较容易映射复杂值的环境。 - 代表:
1)、Membase
2)、MongoDB
3)、Hypertable
4)、CouchDB
注意:Redis也是非关系型数据库
4、面向对象数据库(Object-oriented Database):
- 用面向对象的思想去组织、存储和管理数据的数据库。
- 面向对象数据库是一种数据库模式,数据库中的表和字段当成对象来使用。
- 面向对象数据库也被称为对象数据管理系统。对象数据库存储面向对象编程语言(如Smalltalk,C++,Java等)中的对象而不仅仅像关系数据库那样存储整数,字符串和实数等。
- 非关系型数据库分类:
【口述7】 关系数据库
RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。
1、关系型数据库介绍:
- 关系型数据库是当今最为成熟的数据库模型。它是以关系型结构来组织、存储和管理数据的仓库。
- 关系型将现实世界的实体作为独立的个体存储,而各个体之间的关系,则通过属性进行连接。
- 这样在最大程度上保证了数据的独立性,数据之间的关系通过属性进行连接则提供了极大的灵活性。当然,这也使得程序员设计数据库更加容易。
2、常见的关系型数据库有哪些?
- Microsoft SQL Server(微软公司)
- MySQL (MySQL公司)
- Oracle(甲骨文公司)
- Sybase (SyBase公司)
- IBM DB2 (IBM公司)
3、优缺点比较:
1)Sybase数据库具有较高的性能和极高的安全性,并且具有跨平台的能力,可运行于Unix、Windows及Novell Netware环境。
2)DB2支持面向对象编程,并有强大的开发和管理工具。
3)SQL Sever 在性能及安全性能上稍差,但是其占用系统资源较少,微软公司提供的开发和管理工具也比较简单易用。
4)MySQL数据库使用简单、操作方便,性能也较高。MySQL是一款开源的免费数据库软件。
5)Oracle 是目前比较流行的大型关系数据库,是应用最广泛的客户端/服务器(Client/Sever)体系结构的数据库。
【口述8】 主流数据库产品
- 主流数据库产品:
微软公司:SQL Server、Access
Oracle 公司:Oracle、MySQL
IBM公司:DB2、informix
Sybase 公司:Sybase
NOSQL
2.数据库中的基本概念
【口述9】 什么是实体?
- 数据库实体就是数据库管理系统中的不同管理对象。
- 实体是一个带有描述特性的可以辨别的对象。
- 实体在数据库里面就是数据表。
【口述10】 如何寻找实体?
- 从哪里寻找实体,通过需求分析说明书寻找实体,实体(Entity)是名词,找出与系统相关的实体。
例如:
1、学生管理系统中的学生是我们管理的对象,学生就是实体,班级是我们管理的对象,班级就是实体。
2、员工管理系统中的员工是管理的对象,员工就是实体部门是管理的对象,部门就是实体。
【口述11】 什么是实体属性?
- 实体属性是指实体的特征,所包含的信息,是附加到实体上的数据项。
例如:学生的学号和姓名就是学生实体的属性。
【口述12】 如何确定实体属性?
从实体的特征和与他相关的信息中去找:如:
- 一个学生的属性就有学号,姓名,所在班级,成绩等等。
- 一个员工的属性就有工号,姓名,所在部门,职务,薪水等
【口述13】 什么是实体的标识?
- 标识符是能够唯一标识实体的每条记录的一个实体属性或实体属性的集合,CDM中的标识符等同于PDM中的主键(Primary Key)或候选键(ALternate Key)。每个实体至少要有一个标识符,若一个实体中只存在一个标识符,它就自动被默认指派为该实体的主标识符(Primary Identifier)。
【口述14】 什么是实体之间的关系?
- 实体之间的关系是实体间的连接。
关系数据库中的实体与实体之间的联系实际上就是表与表之间的关系,是通过它们的公共属性连接起来的。 - 一对一关系(1:1):一个实体对应一个实体。
举例:
1、 班级与班长之间的联系:一个班级只有一个正班长,一个班长只在一个班中任职 - 一对多关系(1:n):一个实体对应多个实体,也就是一个实体与多个实体有联系。
举例:
2、班级与学生之间的联系:一个班级中有若干名学生,每个学生只在一个班级中学习 - 多对多的关系(m:n):一个实体对应多个实体,而它所对应的实体也与多个实体有联系。
举例:
3、课程与学生之间的联系:一门课程同时有若干个学生选修,一个学生可以同时选修多门课程
4、老师与学生之间的联系:一个学生可以有多个老师,一个老师也教多个学生。
【口述15】 如何确定实体之间的关系?
- 根据实体与另一个实体之间的联系来确定。但要注意避免实体关系中的不良关系。
【口述16】 E-R图
- E-R图中有三大主要元素:
1、实体,属性和联系
2、画E-R图时用长方形表示实体,用椭圆表示属性,用菱形表示关系。
3.数据库设计的核心思想
【口述17】 三范式(规范化)
规范化:
- 把数据库组织成在保持数据完整性的基础上,最小化冗余数据的一个过程。
- 数据不仅完整,并且占用资源最小。
总结三范式的核心思想:不要出现冗余数据,除了三范式,还有第四范式4NF,第五范式5NF,第六范式6NF,BCNF范式。
BCNF范式:在满足3NF的基础上:不允许出现有主键的一部分被主键另一部分或者其他部分决定。
第一范式:1NF
- 1NF:基础范式
- 原则:原子列,一个列不能再被拆分,一个列中不能有多个信息。如果有的列包含多种信息, 可以把它抽取出来成为一个单独的表。例如:学生表中的所属班级
- 数据中的某个字段不能有多个值(不能被拆分)或者不能有重复的字段出现,关系看上去像一张二维表
关系的域(属性的取值范围)为一组原子值(不可再分割的值)
第二范式:2NF
- 2NF:每个实体可以唯一的被区分(每一条记录可以唯一的被区分),当且仅当实体E满足第一范式,且每一个非主键属性完全依赖主键时,满足第二范式.
- 即数据表中的每一行,都应该有唯一的标识(即每一行都应该有主键区分) (不要出现冗余行)
- 每条数据都必须有唯一确定自身的标识——id“主键”PRIMARY KEY
第三范式:3NF
- 3NF:表中不包含已在其他表中的非主键列, 当且仅当实体E是第二范式(2NF),且E中没有非主键属性传递依赖时,满足第三范式
数据表中的所有非关键字段,必须依赖于主键(不要出现冗余列) - 表中不能包含其他非主键列, 任何字段也不能由其他字段派生出来,它要求字段没有冗余。fk“外键”FOREIGN KEY
- 没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高查询效率和运行效率,就必须降低范式标准,适当保留冗余数据。
- 冗余分类:
高级冗余,低级冗余
低级冗余:字段的重复出现。
高级冗余:字段的派生出现。 - 例如:商品订单中的“单价、数量、金额”三个字段,“金额”就是由“单价”乘以“数量”派生出来的,它就是冗余, 而且是一种高级冗余。冗余的目的是为了提高处理速度。
我们提倡高级冗余(派生性冗余),反对低级冗余(重复性冗余)。
【口述18】 反范式设计的核心思想及常用手段
- 1、反范式设计的核心思想:通过增加冗余数据,以达到提高查询速度的目的。
- 2、反范式常用手段:横向切割表;纵向切割表;增加冗余列;增加附加列。
a)、横向切割表:例如:把一个表按着时间段切割成两个表
b)、纵向切割表:例如:把一个表的几个常用的列切割出来成为一个表,剩下的列成为一个表,这样,一个表 被切成两个表。
c)、增加冗余列:例如:如果要查经常查看学生信息和班级名称,为了避免多表查询带来查询效率的问题,所以可以把一个学生表里增加一列班级名称,这样就变成了单表查询了。
d)、增加附加列:例如:如果知道一个产品表里有单价,数量,可以增加一列金额,便于查询
【口述19】 如何设计数据表
- 1)、满足三范式
- 2)、主键设计最好采用单一主键,最好不要使用没有业务语义的字段作为主键,(如:Oracle中Sequence来维护一个主键),主键一般建议使用数值型,会提高检索效率。
- 3)、关于冗余字段的问题,应该根据需求的具体情况是否加入
- 4)、最好加入外键约束(在开发阶段最好不要加入外键约束,在运行阶段加入外键约束)
- 5)、如果数据量非常大,并且频繁的根据相关字段查询,最好建立索引。
4.数据库设计的基本过程
【步骤一】 需求收集与分析:了解收集并分析用户需求。
- 在需求分析阶段,设计数据库的一般步骤为:
- 收集信息
- 标识对象
- 标识每个对象的属性
- 标识对象之间的关系
【步骤二】 概念结构设计:按用户的观点来对数据和信息建模。
【步骤三】 选择合适的DBMS:选择什么数据库来进行数据存储及管理。
【步骤四】 逻辑结构设计:关系型数据库要设计E- R图,进行逻辑结构设计,确定实体,实体属性,实体之间的关系。
【步骤五】 物理结构设计:
- 选择具体数据库进行物理实现数据在具体DBMS产品中的物理储存方式
- 将E-R图转换为多张表,并应用数据表设计的三大范式进行审核。
【步骤六】 数据库实施:按着用户需求进行代码编写。
【步骤七】 数据库运行和维护:运营维护数据库。
关系型数据库设计方法
第一:需求分析说明书
第二:E-R图
- E-R图中有三大主要元素:
实体,属性和联系 - E-R图手工画法:
画E-R图时用长方形表示实体,用椭圆表示属性,用菱形表示关系。 - E-R图 PD工具
第三:使用Power Designer工具
- PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库模型设计的全过程。 利用PowerDesigner可以制作数据流程图、概念数据模型、逻辑数据模型(CDM),物理数据模型(PDM),可以生成多种客户端开发工具的应用程序,还可为数据仓库制作结构模型,也能对团队设备模型进行控制。 它可与许多流行的数据库设计软件,例如:PowerBuilder,Delphi,VB等相配合使用来缩短开发时间和使系统设计更优化。
第四:逻辑设计
- 寻找(确定)系统实体
从哪里寻找实体,通过需求分析说明书寻找实体,实体(Entity)是名词,找出与系统相关的实体。 - 确定实体属性
实体属性是指实体的特征,所包含的信息,是附加到实体上的数据项。与实体相关的信息。 - 确定实体关系
逻辑设计中可以有多对多关系,但是到物理设计中是无法表示多对多关系的。只能借助中间表转换成两个一对多或多对一的关系。
第五:物理设计
- 通过逻辑数据模型CDM转换成物理数据模型PDM
- 针对数据表应用三范式 :
1NF 第一范式:原子列
每个实体的属性不能包含其他实体,每个属性也不能再分解。一个列不能再被拆分 ,一个列中不能有多个信息,消除冗余数据。
2NF 第二范式:
每个实体可以唯一的被区分(每一条记录可以唯一的被区分)
3NF 第三范式:
表中不包含已在其他表中的非主键列。例如:学生中不可以包含班级名称,只能包含主键列
第六:用PD绘制逻辑数据模型CDM
第七:物理数据模型PDM的生成与分析
第八:生成SQL语句
第九:制作模拟数据(仿真数据)
- 可以在PD中制作导入模拟数据。
第十:数据表生成
- 执行SQL语句也能够生成数据表。但是刚开始学习时必须自己会手写SQL语句
二、动手做
【任务1】如何根据需求进行逻辑设计CDM?
- 用PD绘制逻辑数据模型CDM
【任务2】 如何将CDM转换成PDM及PDM分析?
- CDM 设计好后,点“tool”选择“Generate Physical Data Model”, 点"Generate new Physical Data Model" ,DBMS选择Oracle 11g, 点“确定”即可。
- 注意:
1、强制与非强制关系决定以后外键的取值能不能为空。
2、一个实体会对应一张表。多对多关系的两个实体中间会产生一个中间表。多对多关系会变成两个一对多关系。很可能表的个数会多于实体个数。
3、逻辑模型中的“列”在数据表中称为“字段”。物理模型中的”数据类型“与数据库类型相关。逻辑模型中的标识就是PK(PRIMARY KEY),PK 就是主键 ,唯一标识表里的一条记录。主键不可以重复也不可以为空。FK(FOREIGN KEY)是外键,外键可以为空,也可以重复。外键出现在多的那边。
4、以学生表与课程表的中间表为例,S_ID与C_ID既是主键又是外键,它们一起被称为联合主键或复合主键,联合主键记录不能重复。
【任务3】 如何生成SQL语句?
- PDM生成后,点“database”的第四个选项“Generate Database”,选择好保存的目录Directory,选择“Generate Type”的“Script Generate”,把”Check Model“的勾去掉,不检查模型,直接点”确定“, 生成建表sql语句。
如果“Generate Type”选择“Direct Generate”,就直接连接数据库,表就在数据库里建好了。
【任务4】 制作模拟数据(仿真数据)
三、课后任务
【任务1】 根据教务管理系统的需求说明书设计数据库,使用PD设计出逻辑数据模型CDM与物理数据模型PDM,生成SQL语句。
【任务2】 写好数据库设计报告