理论篇: 基本概念和术语整理
一, 关系数据库
关系数据库是目前应用最为广泛的数据库系统, 它采用关系数据模型作为数据的组织方式, 关系数据模型由关系的数据结构, 关系的操作集合和关系的完整性约束三部分组成.
二, 关系数据库中的一些基本术语和定义
1, 关系数据模型
关系数据模型是建立在严格的数学概念的基础上, 由一组关系组成, 每个关系的数据结构是一张严格规范化的二维表, 简单说关系数据模型就是用二维表的形式来表示实体和实体间联系的数据模型.
二维表:
简单说关系数据库中数据的主要存储形式是二维表, 这种二维表具有严格的规则要求, 表中每一列代表着关系数据库中的一个属性, 每一列的名字就是一个属性名; 每一行代表一个记录, 即对应现实中的一个物理实体. 其中, 列称为属性或者字段, 行被称为元组或者记录.
用户编号 | 用户名 | 密码 | 性别 | 年龄 |
001 | url123 | 12345789 | 男 | 34 |
002 | adm336 | abcdefg | 女 | 26 |
关系: 一般说某个关系, 即是指某张表. 一个关系对应一张表.
元组: 表中的某一行成为一个元组, 一行即对应一个物理实体, 元组就是物理实体的抽象.
属性: 表中的一列即为一个属性, 给每一列的命名即为属性名: 如例表中的 用户名一列.
域: 即是指某一个属性的取值范围, 属性的取值范围成为该属性的域, 如: 性别的取值为男 / 女; 用户编号的域为一个三位数的整数.
关键字或者码(key): 也称作码键, 表中的某个属性组(多个属性组成, 也可以为单个属性构成), 它可以唯一确定一个元组, 例表中用户编号可以唯一确定一个用户(即整个表中不存在与这行数据相同的另一行), 关系数据库中通常称为主码或者主键. 有时也会遇到不止一个属性能唯一确定一个元组的时候, 所有可以唯一确定一个元组的属性统称为候选码, 而主码是在候选码中选出, 候选码包含主码.
分量: 元组中某一个属性的属性值
关系模式: 一般的具体书面表示时, 一个关系模式的表示形式为 : 关系名 (属性 1, 属性 2, 属性 3......), 简记为: R(U) 或者 R(A1,A2,A3......)
R(U,D, dom ,F),R 为关系名(表名),U 是组成该关系的属性集合, D 为属性的域, dom 为属性向域的映像的集合.
关系术语 | 表格称谓 |
关系名 | 表格名 |
关系 | 二维表(具体的一张) |
元组 | 一条记录 / 表中的一行 |
属性 | 表中的列 |
属性名 | 列名 |
属性值 | 列中的取值 |
分量 | 一行中某个列的列值 |
非规范关系 | 表中表(表的嵌套) |
2, 关系数据模型的特点
关系必须规范化: 关系模式中每个关系都必须满足一定的要求.
模型概念单一: 关系数据模型的优点就是模型概念单一, 无论具体的实体还是实体间的联系, 都用简单的二维表来描述和表示, 对数据的检索和操作结果也是关系(表), 其数据结构简单清晰, 便于理解 和操作.
操作集合: 在关系数据模式中, 操作的对象和结果都是元组的集合, 即关系(表)
总结:
关系数据模式建立在严格的数学概念基础上, 其数据模型的概念单一(即表). 关系数据模型的存取路径对用户透明, 从而具有更高的数据独立性, 更好的安全保密性, 简化了专业人士的开发建立工作.
3, 关系操作
关系操作的对象和结果都是集合, 称为一次一集合的方式, 而非关系数据模型的一次一记录数据操作方式. 关系数据库中常用的数据操作包括: 查询操作 (Query) 和插入操作(Insert), 删除操作(Delete), 修改操作两大部分. 具体见下图:
以上关系操作均为逻辑理论操作, 在实际的数据库系统中, 为了实现这些关系操作, 我们可以使用一种关系代数和关系演算之间的语言 SQL(结构化查询语言),SQL 具有丰富的查询, 数据定义, 数据控制功能. Oracle 中主要使用 SQL*plus.
4, 关系的完整性
实体完整性: 若属性(一个或者一组)A 为关系 B 的主属性, 则 A 不能为空. 简单的解释就是, 一个表中的主键不能为空值, 这里的主键包括单一属性的主键非空, 和组合主键的属性组中属性均不能为空.
实体完整性是针对基本关系的, 即一个表中的元组对应现实中的物理实体, 而现实中的物理实体是可区分的, 每个都是独立唯一的. 而主键 (主属性) 则作为整个唯一的标识, 主键为空, 则表示存在不可标识的实体, 这与理论矛盾, 所以主键不能为空.
参照完整性: 若属性(或属性组)F 是基本关系 R 的外键, 它与基本关系 S 的主键 K 相对应(即关系 R 引用关系 S 的主键为外键, 其中 S 和 R 不一定是不同关系), 则对于 R 中每个元组在 F 上的值必须为如下两种情况之一: 空值(F 中所有属性为空), 等于 S 中某元组的主键.
外键: 现实世界中, 实体之间往往存在着某种联系, 这些联系在关系数据库中都用关系来描述, 这就存在着关系与关系间的引用: 如果 F 是基本关系 R 的一个或一组属性, 但不是 R 关系的主键, 而 K 是基本关系 S 的主键, 如果 F 与 K 相对应, 则称 F 是 R 的外键(Foreign Key), 并称基本关系 R 为参照关系(Referencing Relation), 基本关系 S 被称为被参照关系或目标关系.
用户名(主键) | 密码 | 年龄 |
GMM123 | 123456 | 35 |
SST789 | admin22 | 45 |
Id(主键) | 用户名 | 职务 |
001 | GMM123 | 老师 |
002 | SST789 | 老师 |
例如上面两表, 关系 S 中的用户名为关系 S 的主键, 与 R 中的用户名属性对应, 则用户名为关系 R 的外键.
用户自定义完整性: 实体完整性和参照完整性是任何关系数据库都必须遵守的, 除此以外, 根据具体不同的情况和问题, 往往需要一些额外的约束条件, 具体为用户在定义关系时自己定义的.
5, 关系数据库中的规范化理论
函数依赖: 设 R(U)是属性集合 U 上的一个关系模式, X,Y 是 U 的子集, 若对于 R(U)的任意一个可能的关系 r,r 中不可能存在两个元组在 X 上的属性值相等而在 Y 上的属性值不等, 则称 X 函数确定 Y 或者 Y 依 赖于 X, 记作 XY.
函数依赖的分类:
平凡函数依赖与非平凡函数依赖
完全函数依赖与部分函数依赖
传递函数依赖
范式理论:
第一范式(1NF): 如果关系模式 R 中每一个属性值都是一个不可分解的数据项, 则称该关系模式满足第一范式, 记为 R1NF.(不可分割意思为单一属性, 属性值必须为 "原子" 的)
第二范式(2NF): 在满足第一范式的前提下(即 R1NF), 且它的所有非主属性都完全函数依赖与 R 的任一候选键, 则称该关系满足第二范式, 即 R2NF.
第三范式(3NF): 在满足 R2NF 的前提下, 且所有非主属性, 都不传递函数依赖于任何候选键, 则 R 满足第三范式, 即 R3NF.
BCNF 范式(BCNF): 对于一个关系模式 R, 如果对于每一个函数依赖 XY, 其中的决定因素 X 都含有键, 则称关系模式 R 满足 BCNF 范式, 即 RBCNF.
通常认为 BC 范式是对第三范式的修正和扩展, BCNF 的本质意义在于: 其中每一个决定因素都是一个主键. 或者说, 在 BCNF 中除了候选键决定其所有属性或主键决定其所有属性之外, 绝不会存在其他的非平凡函数依赖.
范式在数据库的设计中占有很大的比重, 通过它可以优化数据库设计, 避免一些问题, 例如: 减少数据的冗余, 改进数据库整体组织, 增强数据的一致性, 增加数据库设计的灵活性. 因此在数据库设计时, 应根据实际情况, 使关系模式满足适当的范式, 使数据库设计更加规范
三, 数据库设计
1, 实体 - 关系模型(E - R)
实际具体设计中, 我们需要将现实生活中的实际物体进行抽象化, 转变成数学模型, 进而转化为关系模型.
实体(Entity): 是 E-R 模型的基本对象, 是现实世界中各种事务的抽象. 简单点说就是对应着现实生活中确实存在的事务, 例如: 张三, 李四具体的某个人, 也可以是学生这个现实中的群体.
属性(Attribute): 实体的若干特征, 即为实体的属性. 例如, 现实生活中学生会有学号这个特征, 转化为关系中的学号属性.
联系(Relationship): 实体之间会存在各种各样的关系与联系, 例如老师和学生存在师生关系, 一个语文老师可能是一个班所有学生的共同语文老师, 而对于具体某个学生而言, 他们只有一个语文老师, 即一对多, 和一对一.
一对一联系(1:1): 对于实体集 A 和 B 来说, A 中任意一个实体 a,B 中至多有一个实体 b 与之联系, 反过来也是如此, 则 A 与 B 就是一对一联系.
一对多联系(1:N): 在实体集 A 中每一个实体 a,B 中有 N 个实体与之联系, 对于实体集 B 中的每一个实体 b, 实体集 A 中至多有一个实体 a 与之联系, 则 A 与 B 为一对多联系.
多对多联系(M:N): 如果对于实体集 A 中每一个实体 a,B 中有 N 个实体与之对应, 而且对于 B 中每个实体 b,A 中有 M 个实体与之对应, 则 A 和 B 是多对多联系.
2,E-R 图绘制
来源: https://www.cnblogs.com/TheGCC/p/8916573.html