diff --git "a/07 \345\210\230\346\226\207\351\224\213/20230907\347\254\224\350\256\260\344\270\211.md" "b/07 \345\210\230\346\226\207\351\224\213/20230907\347\254\224\350\256\260\344\270\211.md" new file mode 100644 index 0000000000000000000000000000000000000000..043a8b11f650b379b759443de61f77a8a09063df --- /dev/null +++ "b/07 \345\210\230\346\226\207\351\224\213/20230907\347\254\224\350\256\260\344\270\211.md" @@ -0,0 +1,40 @@ +### 数据库的范式 + +### 第一范式 + +要求字段的内容,不可再分割,为的是保证数据的原子性 + +例如:淘宝的地址信息,一个地址可以拆分为很多,省、市、区、街道和详细地址。 + +### 第二范式 + +要求在满足第一范式的基础上,还要满足数据表里的每一条数据记录,都是可唯一标识的,要求非主键字段要完全依赖主键(非主键要依赖整个联合主键)而不能只依赖部分 + +例如:你的诞生一定离不开你爸妈。 + +举例1:成绩表(学号,课程,成绩)学号和课程合在一起才能构成主键,才能知道成绩多少。 + +举例2:比赛表(球员编号、姓名、年龄、比赛编号、比赛时间、比赛场地、得分) + +姓名和年龄只依赖球员编号 + +比赛时间和比赛场地只依赖比赛编号 + +得分依赖于球员编号和比赛编号 + +所以按照第二范式要分成三个表 + +### 第三范式 + +满足第二范式的前提下,要求非主键属性要直接依赖于主键 + +举例:(学号、姓名、班级、班主任)这个表中,学号是主键,它可以确认姓名、班级、班主任,符合了第二范式,但是在非主键字段中,我们也可以通过班级推导出该班级的班主任,所以它是不符合第三范式的 + +拆分成两个表 + +学号、姓名、班级 + +班级、班主任 + +通过把班级与班主任的映射关系另外做成一张映射表,我们就成功地消除了表中的传递依赖了 +