在数据库中的规范设计

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 【5月更文挑战第16天】关系数据库规范化理论涉及函数依赖和超键概念。函数依赖如X->Y表示X能唯一确定Y。超键是能唯一标识元组的属性集合,候选键是最小超键,无冗余。主键是用户选定的候选键,外键关联不同表的主键。Armstrong公理用于推导函数依赖。数据库范式从1NF到5NF,消除部分和传递依赖,确保数据完整性。实际操作中,反规范化有时用于优化,如增加冗余列、派生列、重组表和分表策略,以提升查询效率和性能。

1 关系数据库规范化

函数依赖:

        定义:设R(U)是属性U的关系模式,X,Y是U的子集,
        对于R(U)的任意一个可能的关系r,r的任意两个元组在X上属性值相等,
        那么在Y上的属性值也相等,称“X函数确定Y” 或Y函数依赖X,记为 X->Y. 
        X称为这个函数依赖的决定属性组,也称为决定因素。

例如:关系式S(Sno,Sname,Ssex,Sage,Sdept)
F={Sno->Sname,Sno->Ssex,Sno->Sage,Sno->Sdept}
若Y没有函数依赖于X,则记为X !->Y.

例如: Ssex !-> Sage, Ssex !-> Sdept

    X -> Y, Y 不属于 X,则称 X -> Y 是 非平凡的 函数依赖
    X -> Y, 但 Y 属于 X, 则称 X -> Y 是 平凡的 函数依赖

平凡函数依赖

  • 超键

属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。

例如学生关系模式的 学号,身份证,学号-姓名,身份证号,性别等。

  • 候选键

不含多余属性,这些超键被称为 候选键,是超键的最小子集。 如 学号,身份证

  • 主键

用户挑选的做元组标识的一个候选键称为主键。

如,我们通常选择学号作为主键

  • 外键

如果关系模式R中的某些属性集不是R的主键,而是关系模式S的主键,这个属性集对模式R而言是外键。

例如,教师编号,是这个学生关系模式的外键

  • 主属性

包括在任何一个候选键中的属性称为主属性,否则称为非主属性。

  • Armstrong公理

Armstrong公理:从已知的一些函数依赖,可以推导出另外一些函数依赖,
这就需要一系列推理规则,这些规则常被称作“Armstrong 公理”.

设关系式R(U,F),U是关系模式R的属性集,F是U上一组函数依赖,则有以下

三条推理规则:

1) A1自反律:若Y⊆X⊆U,则X→Y为F所蕴含;
2) A2增广律:若X→Y为F所蕴含,且Z⊆U,则XZ→YZ为F所蕴含;
3) A3传递律:若X→Y,Y→Z为F所蕴含,则X→Z为F所蕴含。

根据上面三条推理规则,又可推出下面三条推理规则:

4) 合并规则:若X→Y,X→Z,则X→YZ为F所蕴含;
5) 伪传递规则:若X→Y,WY→Z,则XW→Z为F所蕴含;
6) 分解规则:若X→Y,Z⊆Y,则X→Z为F所蕴含。

例子:有两个关系模式:

1 学生(学号、姓名、性别、身份证号、教师编号)

2 教师(教师编号、姓名、工资)

数据库范式中判定设计属于哪一个类型,通常需要使用Armstrong公理传递性依赖是否存在,做为依据。
image.png

2 非平凡函数依赖

例如 关系式 Student Sno(学号),Sdept,Mname,Cno(课程号),Grade

名称              定义
完全函数依赖         Sno,Cno -> Grade 是完全函数依赖,
                必须要两个条件都知道才能确定Grade

部分函数依赖      (Sno,Cno) -> Sdept 是部分函数依赖
                只需要知道一个条件,就可以确定 Sdept

传递依赖          Sno->Sdept,Sdept->Mname,则称Mname传递依赖于Sno
                通过Sno 学号,可以间接查询出 Mname

3 数据库范式

共有 5个范式,也就是 1NF~5NF

1NF 范式

若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式。

2NF 范式

若关系模式 R 属于 1NF,且每一个非主属性完全依赖主键时,则关系式 R 是 2NF

例如 R 学号,姓名,班级,课程,成绩

函数依赖:

    学号 -> 姓名,学号 -> 班级,(学号,课程号)->成绩
    主键: 学号,课程号
    姓名,班级部分依赖于 主键,不属于2NF,需要将其分解为
            R1 学号,姓名,班级
            R2 学号,课程,成绩

3NF 范式

    当2NF消除了非主属性对主键的传递函数依赖,则称为3NF

也就说,全部非主属性都直接依赖于主键。

    SNo    Sname    Dno    Dname
    3001   张军      D01    计算机
    3002   李明      D01    计算机
    4003   王丽      D01    计算机
    0004   李红      D02    自动化
    0001   刘强      D02    自动化

    SNo    Sname   Dno
    3001   张军     D01
    3002   李明     D01
    4003   王丽     D01
    0004   李红     D02
    0001   刘强     D02

    Dno    Dname
    D01    计算机
    D01    计算机
    D01    计算机
    D02    自动化
    D02    自动化

谢谢.png

4 小结

实际工作中,规范化的应用不如反规范化普遍,为了优化数据库常用的反规范化方法如:

增加几余列:是指在多个表中具有相同的列,它常用来在查询时避免连接操作。

增加派生列:指增加的列可以通过表中其他数据计算生成。它的作用是在查询时减少计算量,从而加快查询速度。

重新组表:指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。

水平分表:按记录进行分割,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用。

垂直分表:对表进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中,在查询时减少 1/0 次数

我们在后面继续介绍。

目录
相关文章
|
1月前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
11天前
|
SQL 存储 关系型数据库
第11章‘数据库设计规范(2)
第11章‘数据库设计规范
17 0
|
11天前
|
存储 关系型数据库 数据挖掘
第11章‘数据库设计规范(1)
第11章‘数据库设计规范
10 0
|
26天前
|
关系型数据库 数据库
关系型数据库设计规范第三范式(3NF)
【5月更文挑战第14天】关系型数据库设计规范第三范式(3NF)
33 3
|
26天前
|
关系型数据库 数据库
关系型数据库设计规范第二范式(2NF)
【5月更文挑战第14天】关系型数据库设计规范第二范式(2NF)
38 7
|
26天前
|
存储 关系型数据库 数据库
关系型数据库设计规范第一范式(1NF)
【5月更文挑战第14天】关系型数据库设计规范第一范式(1NF
43 8
|
1月前
|
存储 SQL 关系型数据库
数据库设计规范
数据库设计规范
137 0
|
1月前
|
SQL 关系型数据库 MySQL
MySQL数据库设计规范总结
该文档是一份MySQL数据库设计和SQL编写规范,旨在帮助技术团队遵循最佳实践,确保数据库设计合理、高效。规范涵盖数据库命名、表结构、数据类型优化、索引设计、分库分表、字符集、DAO设计建议和SQL编写规则。其中强调了强制性要求,如使用InnoDB存储引擎,主键和索引设计,以及避免全表扫描和使用JOIN等。此外,还提供了SQL示例和性能优化建议,以确保数据库系统的稳定性和性能。
85 2
|
8月前
|
存储 关系型数据库 MySQL
Mysql(一) 数据库的设计与规范
假设,课程的学分发生了变更,那我们就需要把整表关于该课程的学分都要更新一次,但如果我们拆分出课程表,那我们就只需要把课程表中的课程信息更新就行。
158 0
|
1月前
|
存储 关系型数据库 MySQL
Mysql数据库设计规范和技巧
Mysql数据库设计规范和技巧