首页 > 编程知识 正文

mysql数据库的三大范式,MySQL三范式

时间:2023-05-03 23:22:55 阅读:168152 作者:2279

1、数据库命名约定

设计一个项目组内所有数据库的程序员应该遵循统一的“数据库命名规则”。 本书的附录b提供了“数据库命名规则”的示例以供参考。

2、数据库设计范式

设计关系数据库时必须遵守一定的规则。 特别是关于数据库设计范式,接下来简单介绍1NF (第一范式)、2NF )、3NF )第三范式)、BCNF。 另外,还有第四范式和第五范式。 当你设计数据库时,如果能符合这些范式,你就是数据库设计的踏实夕阳。

)1)第一范式(1NF ) ) ) ) ) ) ) ) )。

数据库表中的所有字段都是单个属性,不能再细分。 该单一属性由基本类型构成,有整数型、实数型、字符型、逻辑型、日期型等。

例如,电话字段可能不符合最初的规范化。 因为每个人都需要记录一个以上的电话。 在这种情况下,最简单的方法是不使用电话作为字段名,而是使用家庭电话、移动电话、办公室电话、分机、宿舍电话等。

)2)第二范式(2NF ) ) )。

规则遵循第一个规范化,这是一种主键功能的一部分不决定其他属性的现象。 这意味着除主键以外的其他属性完全依赖于主键。

因为选择关系表为SelectCourse (学号、姓名、年龄、课程名、成绩、单位),关键词为组合关键词)学号、课程名()、姓名、年龄、成绩、单位)等决定关系

此数据库表不满足第二种模式,因为它具有以下决策关系:

(课程名称) (单位),也就是说,如果你知道课程,你就知道该课程的单位。

(学校号码) )姓名、年龄),也就是说只要知道学校号码,就知道那个学生的名字和年龄。

数据冗馀化

如果n名学生选修同一课程,“学分”会重复n吗? 一次; 因为同一个学生修了m科目,所以名字和年龄重复的m? 一场。

更新异常

如果调整了课程的单位,数据表中所有行的“单位”值都会更新。 否则,同一课程的单位可能会不同。

插入异常

如果开设新课程的话,还没有人选择。 这样,由于没有“学校号码”的关键字,所以课程名称和学分也不能记录在数据库中。

删除异常

假设一组学生完成了课程选择,则必须从数据库表中删除这些选择记录。 但是,与此同时,课程名称和学分信息也被删除了。 很明显,这也会导致插入异常。

将选择关系表SelectCourse更改为以下三个表。

学生: Student (学校号码、姓名、年龄) )。

课程:课程名称,单位)。

选择关系: SelectCourse (学号、课程名称、成绩) ) ) ) ) ) ) ) )。

这些数据库表遵循第二范式,消除了数据冗馀、更新异常、插入异常和删除异常。

)3)第三范式(3NF ) ) )。

基于第二模式,如果数据表中没有非关键字段,则任何关键字段候选的传输函数依赖关系符合第三模式。

传递函数依赖是指,如果存在“ABC”的决定关系,则c传递函数依赖于a。 因此,满足第三模式的数据库表应该不存在关键字段-非关键字段x -非关键字段y相关性。

将学生关系表作为Student (学校号码、姓名、年龄、所属学院、学院地点、学院电话),将关键词作为单一关键词“学校号码”,是因为关系决定如下。

(学校号码)(姓名、年龄、所属学院、学院地点、学院电话) )。

该数据库符合2NF标准,但由于存在以下决策关系,因此不符合3NF标准

(学校编号) )所在学院) )、学院地点、学院电话)。

学生关系表分为以下两个表。

学生:(学号、姓名、年龄、所属学院);

学院:(学院、地点、电话。

)4) BCNF范式

BCNF范式(Boyce/Codd Normal Form )是R.F.Boycy和E.F. Codd共同提出的,可以计算为第三正则化的补充。 规则符合第三正则化原则,且没有非主键属性在功能上可以决定主键的一部分的现象。

假设有一个具有属性a、b、c、d、e的表r。 假设a和b是复合主键,R={A,b,c,d,E}。 如果存在非主键属性,例如c可以在功能上决定b、CB,b是主键的一部分。 在这种情况下,第三正则化无法分辨这样的错误。 制作新的相关表R1并放入CB,R1={C,B},但原表r还是以(a,b )为复合主键,以b为外键与新的表相关联,保存原信息。

R={A,b,d,E},R1={C,B},R.B=R1.B

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。