数据库
定义
长期存放在外存上的有组织,可共享的相关数据集合
数据库是很大的,因此不可能存放在内存中,而且,如果存放在内存中,那么断电就丢失了,会有用户找你麻烦的。
同时,数据库也是可以共享的,因为管理者也能看到其他数据库里的数据
数据库基础
特点
- 数据结构化
- 数据共享性高
- 冗余度低(零冗余做不到)
- 数据独立性强
- 数据统一管理和控制
- 数据的结构化,就是让数据彼此之间产生联系,发生关系。例如,我想让我同学知道谁才是他爹,这就是让彼此间产生联系
- 数据共享已经讲过
- 冗余度,写过代码的话,其实就是重复的代码不断在一个程序中出现,我们可以做到减少冗余,但是数据库零冗余是做不到的.就好比一点错误都不犯,人无完人,这是不可能的.
- 数据独立性可分为物理独立性和数据的逻辑独立性。物理独立性就是数据与外存不依赖。就是儿子不依赖爹。逻辑独立性就是逻辑上也不相同,就是我叫我同学儿子,实际上并不是。
- 数据统一通过DBMS管理,由它进行统一管理和控制
数据库系统四大组成
- DBS
- DB
- DBA
- DBMS
DBS就是数据库系统,DB是数据库,DBA是数据库管理员,而DBMS为数据库管理系统,也是数据库中的核心。这里也可以再解释下上面说的独立性和管理控制问题,物理独立性就是因为有DBMS来管理你该存在硬盘上哪个位置的,使得用户与数据库相对独立。而管理控制也自然是通过数据库管理系统来控制的了,常见的DBMS有SQL Server,Mysql等
数据库系统体系
- 集中式数据库系统
- 分布式数据库
- 浏览器/服务器结构B/S
- 客户/服务器结构C/S
集中式数据库系统实际上就相当于是一个大爹四个辅助,大爹一死全都要G,分布式就是反之.也可以理解为网络拓扑结构中的星形型拓扑。
B/S模式和C/S还是有差别的,它的客户端使用浏览器,并在其中加入了一个web服务器,同服务器通信。而这两个当中的S指的就是web服务器和数据库服务器
关系模型数据库
数据模型三大类——层次模型,网状模型,关系数据模型
其中,我们现在最常用的也就属关系数据模型了。它其实就是一种二维表
关键术语
- 属性
- 元组
- 主键
- 关系模型
- 关系模式
- 关系
- 其中属性就是我们看到的列,而元组就是其中的行。 而主键是一种属性,也就是列,是能够唯一表示二维表且最常用的属性或属性组.就是像一把LOL里的英雄,你唯一与别人与众不同的地方,就是你的ID了,在这里,你的ID就是主键,它能唯一区别你和别人.
- 而关系模型就是定义你是二维表的结构,而不是别的
关系模式就是定义了二维表的表头,因为是表头,所以是不太会变的,因此反映了二维表的静态结构
关系就是定义二维表的内容,因为是内容,所以是经常变的,反映了二维表的动态内容,有内容就是一张二维表,所以一个关系就是一张二维表
关系模型三要素
- 结构
- 完整性
- 实体完整性
- 参照(引用)完整性
- 用户定义完整性
- 运算
- 关系模型中结构只有一种,就是关系,也就是二维表
- 完整性是由三大约束控制的。其中实体完整性也就是主键不能为空,参照完整性就是你取得数据不能为空,不能找不到。而用户定义完整性就是设定一个数据的范围,比如你玩蛮子的暴击几率,它总得有个范围吧。不然刀刀暴击谁顶的住呢
关系模型限制
- 每一个属性都是不可再分的原子数据
- 不允许相同属性名或是元组名
- 元组个数可以为0
- 对二维表的操作结果也是二维表
- 属性不可再分就是说你的学号不可再分,不像英雄可以分为上路中路下路打野辅助,还能根据别的再做区分等。
- 属性名或元组名不能重复,就是你的名字不能和别人重复,你打排位也不能和别人选一个英雄一样。
- 元组的个数可以为0,就是你可以选择不打LOL,但这个游戏依旧存在。二维表也依旧存在。
- 你对LOL不管怎么玩,你玩的都是LOL,你不管怎么操作二维表,那出来的也一定是二维表
实体集联系分类
- 1对1
- 1对多
- 多对多
- 1对1-身份证对应人
- 1对多-班级和学生
- 多对多-学生对应课程
关系数据库语言-SQL
非过程结构查询语言——用户只需指明做什么,无需指明如何做
分类
- DML-数据控制
- grant
- deny
- DDL-数据定义
- create
- alter
- drop
- DCL-数据操作
- select
- insert
- update
- delete
SQL是常用的数据库查询语言,我们在DBMS中使用SQL语句就可以对数据库进行操作了。而它分为三大类,数据定义和数据操作是我们用的最多的。
DML面向权限和用户身份——知道你是哪位召唤师,ID是什么
DDL面向表的操作——知道你要玩哪一个模式
DCL面向表中数据的操作——知道你要玩哪个英雄
数据库基本操作-关系操作
集合操作
- 并∪,A∪B,新元组由A和B的元组共同组成
- 交∩,A∩B,新元组由既属于A又属于B的元组组成
- 差,A×B,新元组为属于A但不属于B的元组组成
- 广义笛卡尔积-行相乘,列相加
这些集合操作都要求两个关系是相同模式
关系专用操作
- 选择-where
- 投影-select
- 连接-from
关系操作就是DCL中的,选择选的是行,而投影选的是列
数据库的三级体系结构
- 用户模式(外模式,子模式)
- 逻辑模式(概念模式,模式)
- 存储模式(内模式)
全局关系模式对应着基本表
面向用户的局部关系模式对应于视图或部分基本表
- 存储模式也就是内模式,在内部,存储的方式,用户是看不到的。就像打职业比赛的讨论的战术,这就是内模式。
概念模式仅仅只是有一个概念,比如是我们要玩哪几个英雄,但却没说是谁去玩,去哪一路。这仅仅就是一个模式,只是规定我们要玩哪几个英雄。
外模式就是真正给用户看到的模式,所以也叫用户模式。这对应到比赛就是知道谁玩哪个英雄,哪个英雄又走哪一路等。它又叫子模式,是因为我们谁去玩,去哪一路都是在要玩哪几个英雄,也就是概念模式的基础上的,也可以说是它的子类。 - 全局关系模式自然是主力全部上场,这就对应了一个战队,也就是一个基本表
- 局部关系模式就是主力替补都有参与,只能说不是完全状态下的一个战队,也就只能是部分表了。
数据库系统设计
任务
- 根据一个单位或部门的需求,处理需求和数据库的支持环境,设计出相应的数据模式以及相应的应用程序
步骤
- 系统规划
- 系统分析
- 系统设计
- 分类
- 概念结构设计
- 逻辑结构设计
- 物理结构设计
- 系统规划是最重要,最基础的部分,因为如果你打LOL职业比赛一开始不分路,比如三个人打中单,两个人打上单等,这你就更别提下面的步骤了,根本不可能。
- 系统分析就是做什么,就是教练会或者队长会告诉你你要做什么,每一路的定位都不同,所以要做的也不同。
- 而系统设计就是怎么做,这就是要看你个人的操作了,比如theshy能一个打五个,而某上单闪现清兵。概念逻辑结果都是虚的东西,只有物理才是实在的,比如你想着怎么操作,和你实际打出来是两码事
基本术语对照
关系模型 | 程序员(文件系统) | 用户 |
关系模式 | 文件结构 | 二维表 |
关系 | 文件 | 表 |
元组 | 记录 | 行 |
属性 | 数据项(字段) | 列 |
这就是关系模式在用户看来,在这里其实就是二维表,关系也就是我们看到的表,元组就是行,而属性就是列。在计算机,文件系统看来,关系模式就是一种结构,关系就是文件,文件中又包含了元组,也就是记录,也包含了属性,也就是数据项