Mysql入门之数据库设计三范式(面试)【Mysql数据库基础】

7.1 设计范式:

 设计表的依据,按照这个三范式设计的表不会出现数据冗余。

7.2 三范式

第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分。

第二范式:建立在一范式之上,所有非主键字段完全依赖主键,不能产生部分依赖。

案例:

学生编号(pk)老师编号(pk)学生姓名老师姓名
1001001张三王老师

以上表采用复合主键,学生姓名字段和老师姓名字段部分依赖于主键

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

 t_student 学生表
 sno(pk)   sname
 -----------------
    1      张三
    2      李四
    3      王五

 t_teacher 讲师表
 tno(pk)    tname
 -------------------
   1        王老师
   2        张老师
   3        李老师

t_student_teacher_relation 学生讲师关系表
id(pk)    sno(fk)      tno(fk)
-------------------------------
  1         1            3
  2         1            1 
  3         2            2
  4         2            3
  5         3            1
  6         3            3
   
   

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

第三范式要求数据表的每一列都与主键直接相关,而不是间接相关。
就比如说:

学号姓名性别班主任姓名班主任性别班主任年龄
2001李一陈毅35

从上表可以看出,所有属性都完全依赖于学号,故符合第三范式,但是班主任性别和班主任年龄直接依赖于班主任姓名,而不是主键学号,故不符合第三范式。

口诀: 一对多,两张表,多的表加外键

班级 t_class
cno(pk)      cname
-------------------
1             班级1
2             班级2

学生 t_student
sno(pk)    sname    classno(fk)
-------------------------------
 1011       1
 1022       1
 1033       2
 1044       2

反三范式

在实际开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度。

7.3 一对一设计

第一种方案:主键共享

 t_user_login 用户登录表
 id(pk)   username   password
 -------------------------------
 1          zs        123
 2          ls        456
 
 t_user_detail 用户详细信息表
 id(pk+fk)  realname      tel    ...
 ----------------------------------
 1           张三       11111111
 2           李四       22222222

弟二种方案:外键唯一

 t_user_login 用户登录表
 id(pk)   username   password
 -------------------------------
 1          zs        123
 2          ls        456
 
 t_user_detail 用户详细信息表
 id(pk)    realname       tel     userid(fk+unique)    ...     
 ------------------------------------------
 1           张三       11111111     2
 2           李四       22222222     1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值