MySql-范式

范式

第一范式

最核心,最重要的范式,所有表的设计都需要满足,必须有主键并且每一个字段都是原子性不可再分。

    学生编号 学生姓名 联系方式
    ------------------------------------------
    1001        张三      zs@gmail.com,1359999999
    1002        李四      ls@gmail.com,13699999999
    1001        王五      ww@163.net,13488888888

    以上是学生表,满足第一范式吗? 
    不满足,第一:没有主键。第二:联系方式可以分为邮箱地址和电话

    学生编号(pk) 学生姓名   邮箱地址            联系电话
    ----------------------------------------------------
    1001                张三      zs@gmail.com    1359999999
    1002                李四      ls@gmail.com    13699999999
    1003                王五      ww@163.net      13488888888

第二范式

建立在第一范式的基础之上,要求所有非主键字段必须完全依赖主键,不要产生部分依赖。

    学生编号 	   学生姓名  教师编号  教师姓名
    ----------------------------------------------------
    1001            张三      001     王老师
    1002            李四      002     赵老师
    1003            王五      001     王老师
    1001            张三      002     赵老师
	
	- 这张表描述了学生和老师的关系:(1个学生可能有多个老师,
	1个老师有多个学  生),这是非常典型的:多对多关系!

	- 分析以上的表是否满足第一范式?
		不满足(没有主键),如何修改?
		- 修改: 学生编号和教师编号联合做主键

	 学生编号+教师编号(pk)           学生姓名      教师姓名
    ----------------------------------------------------
    1001            001             张三          王老师
    1002            002             李四          赵老师
    1003            001             王五          王老师
    1001            002             张三          赵老师

	- 修改后,学生编号 教师编号,两个字段联合做主键,
	  复合主键(PK: 学生编号+教师编号)
	- 经过修改之后,以上的表满足了第一范式。但是满足第二范式吗?
		不满足,第二范式要求非主键字段完全依赖于主键字段
		“张三”依赖1001,“王老师”依赖001,显然产生了部分依赖。
	- 产生部分依赖有什么缺点?
		数据冗余了。空间浪费了。“张三”重复了,“王老师”重复了。
	- 如何设计满足第二范式
	    **使用三张表来表示多对多的关系!!!!**
--------------------------------------------------------------------------------------
    学生表
    学生编号(pk)        学生名字
    ------------------------------------
    1001                    张三
    1002                    李四
    1003                    王五
     
    教师表
    教师编号(pk)        教师姓名
    --------------------------------------
    001                 王老师
    002                 赵老师

    学生教师关系表
    id(pk)          学生编号(fk)            教师编号(fk)
    ------------------------------------------------------
    1                       1001                        001
    2                       1002                        002
    3                       1003                        001
    4                       1001                        002

	口诀:多对多,三张表,关系表两个外键

第三范式

第三范式建立在第二范式的基础之上,要求所有非主键字段必须直接依赖主键,不要产生传递依赖

      学生编号(PK)        学生姓名 班级编号       班级名称
    ---------------------------------------------------------
        1001                张三      01          一年一班
        1002                李四      02          一年二班
        1003                王五      03          一年三班
        1004                赵六      03          一年三班

	- 以上表的设计是描述:班级和学生的关系。很显然是1对多关系!一个教室中有多个学生。
	- 以上表足一二范式:
		满足第一范式,有主键。
		满足第二范式,因为主键不是复合主键,没有产生部分依赖。主键是单一主键。
	- 分析以上表是否满足第三范式?
	    第三范式要求:不要产生传递依赖!一年一班依赖0101依赖1001,产生了传递依赖。不符合第三范式的要
	    求。产生了数据的冗余。
	- 那么应该怎么设计一对多呢?
	    
	班级表:一
    班级编号(pk)                     班级名称
    ----------------------------------------
    01                              一年一班
    02                              一年二班
    03                              一年三班

    学生表:多
    学生编号(PK)     学生姓名     班级编号(fk)
    -------------------------------------------
    1001                张三          01          
    1002                李四          02          
    1003                王五          03          
    1004                赵六          03    
    
	口诀:  一对多,两张表,多的表加外键
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值