数据库范式

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

数据库范式     

        第一范式1NF每列字段都是原子性的不可分解

eg:用户信息表中地址信息        

编号姓名年龄地址
1张三30重庆市xxx区xxx街道xxxx号1-1

针对地址列是不可分割的但是如果需要省市区信息的时候就需要针对表设计进行调整。

注上述地址无法精确地获取到地址中的省市区用户填写时可能会存在不规范。

编号姓名年龄省份城市区县详细地址
1张三30重庆市重庆市xxx区xxx号1-1


        第二范式2NF非主键字段与全部主键必须全部依赖

eg:学生信息表

学生编号课程编号学生名称课程名称所在班级班主任
11张三计算机3班X老师

 此处设计就可以看出问题学生编号和课程编号作为主键时学生名称、所在班级等信息跟课程编号没有关系不满足全部依赖对上表进行调整。

注上述表设计存在的问题是单新增学生时还未定义课程的时候就会出现新增异常。

学生表

学生编号学生名称所在班级班主任
1张三3班X老师
2李四1班Y老师

课程表

课程编号课程名称
1计算机
2语文

学生课程关系表

学生编号课程编号
11
12
21

        第三范式3NF非主键字段之间不存在间接依赖关系

eg: 学生信息表

学生编号学生名称班级编号班级名字
1张三1语文1班

此处表设计存在问题是若学生表存在大量数据这时班级编号1需要改名就需要将大量的数据进行update操作不满足非主键字段之间不存在间接依赖关系班级编号和班级名称存在依赖如下进行调整。

学生表

学生编号学生名称班级编号
1张三1

班级表

班级编号班级名称
1语文1班

  

        第四范式4NF消除多值依赖

eg: 客户联系方式

客户编号固定电话移动电话
122-123131xxxxxxxx
211-123133xxxxxxxx

        此处表设计看似问题不大当用户存在多个移动电话时固定电话为空字段就冗余了同时不便查询与统计如下进行调整。        

客户电话表

客户编号电话号码电话类型
111-123固定电话
12131xxxxxxxx移动电话


        第五范式5NF消除传递依赖

        当多个字段存在相互关系时如字段A->B->C这时只有当ABC都为主键时才能确认一条数据这种情况就不满足条件可考虑将AB作为一个表AC作为一个表BC作为一个表虽然对表的维护性增强了但是逻辑更清晰。


        巴斯科德范式主属性之间不存在部分或传递依赖。

        当非主键字段之间不存在依赖但是若主键A与字段B存在A->B->A的传递依赖时则不满足该范式条件。

        具体情况场景如已存在车辆信息表针对驾驶信息进行填充若在一张表内则会产生传递依赖可能会出现大量冗余数据不同驾驶员驾驶同一个车。这时就会产生两个表一个车辆表一个驾驶信息表。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 数据库