博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql--数据库的设计(三范式)
阅读量:2392 次
发布时间:2019-05-10

本文共 914 字,大约阅读时间需要 3 分钟。

数据库设计三范式

设计数据库表的时候所依据的规范,共三个规范:
第一范式:要求有主键,并且要求每一个字段原子性不可再分
第二范式:要求所有非主键字段完全依赖主键,不能产生部分依赖,唯一性 一个表只说明一个事物; 
第三范式:所有非主键字段和主键字段之间不能产生传递依赖,直接依赖主键

第一范式

数据库表中不能出现重复记录,每个字段是
原子性
的不能再分
不符合第一范式的实例
存在问题:
(1)最后一条记录和第一条重复(不唯一,没有主键)
 
(2)联系方式字段可以再分,不是原子性的
关于第一范式,每一行必须唯一,也就是每个表必须有主键,这是数据库设计的最基本要求,主要采用数值型或定长字符串表示,关于列不可再分,应该根据具体的情况来决定。如联系方式,为了开发上的便利可能就采用一个字段。

第二范式

第二范式是建立在第一范式基础上的,另外要求所有非主键字段
完全依赖主键
,不能产生
部分依赖
实例:
确定主键:
(1)以上虽然确定了主键,但此表会出现大量的冗余,主要涉及到的冗余字段为“学生姓名”和“教师姓名”。
(2)出现冗余的原因在于,学生姓名部分依赖了主键的一个字段学生编号,而没有依赖教师编号。而
教师姓名
部分依赖了主键的一个字段
教师编号
,这就是第二范式部分依赖。
存在问题:
(1)数据冗余,每条记录都含有相同信息; 
(2)删除异常:删除所有学生编号,就把教师信息全删除了;(毕业后,学生信息没了,老师信息也没了)
(3)插入异常:学生未录入,老师信息无法录入数据库;                 
(4)更新异常:某个老师更换了,所有学生对应的信息都需要调整。 
解决
如果一个表是单一主键,那么它就是复合第二范式,部分依赖和主键有关系
以上是典型的“多对多”设计

第三范式

建立在第二范式基础上的,非主键字段不能传递依赖于主键字段(
不要产生传递依赖
上表中,班级名称字段存在冗余,因为班级名称字段没有直接依赖于主键,班级名称字段依赖于班级编号,班级编号依赖于学生编号,这就是传递依赖,解决的办法就是将冗余字段单独拿出来建立表:
以上设计是典型的一对多的设计,一存储在一张表中,多存储在一张表中,在多的那张表中添加外键指向一的一方

转载地址:http://xaeab.baihongyu.com/

你可能感兴趣的文章
NagVis实物监控工具
查看>>
nginx - low risk webdav destination bug
查看>>
Lessons Learned from Building and Running MHN, the World's Largest Crowdsourced Honeynet
查看>>
Logwatch Linux/Unix系统日志检测软件
查看>>
减少Linux下Squid服务器的TIME_WAIT套接字数量
查看>>
/etc/sudoers中的含义
查看>>
Five must-know open source SDN controllers
查看>>
Finding Bad Guys with 35 million Flows, 2 Analysts, 5 Minutes and 0 Dollars
查看>>
SANS FOR572 Logstash
查看>>
List of Windows Auto Start Locations
查看>>
/proc filesystem allows bypassing directory permissions on Linux
查看>>
nginx dos
查看>>
RASP解决方案包括开源方案
查看>>
Linux下共享文件系统文件传输的简单设计(转载)
查看>>
点评Ubuntu下的文件安全删除工具
查看>>
数据可视化
查看>>
Security Ressources Sites
查看>>
mysql的比较运算
查看>>
Data Breach Report
查看>>
再探偏移注射
查看>>