• 规范化的目的
  • 基本概念
  • 主键的选择
  • 表结构设计的原则
  • 常见疑虑

*数据库就是产品的地基,地基打不好,这个产品时刻都有潜在的危险。

一、规范化的目的

  • 良好的数据库设计:
    节省数据的存储空间
    能够保证数据的完整性
  • 糟糕的数据库设计:
    数据冗余、存储空间浪费
    数据删除、更新和插入的异常
    带来系统软bug

二、基本概念

主码:也叫主键,能唯一地确定一条记录;是表中的属性或属性组;(唯一且不可更改【如:身份证号】)
候选码:也叫候选键,可以作为主码的码;
主属性:包含在任一候选键中的属性;
实体:客观存在的可以被描述的事物(用户,课程等)。

例1:设有关系模式SC(Sno,Sname,Cno(课程号),Credit(学分),Grade),其中主键为(Sno,Cno)
Sno -> Sname 姓名完全函数依赖于学号;
(Sno,Cno)->Sname 姓名部分函数依赖于学号和课程号;
(Sno,Cno)-> Grade 成绩完全函数依赖于学号和课程号。

例2:设有关系模式S(Sno,Sname,Sdept(所在系),Dep_master(系主任)),主键为Sno
Sno->Sdept 所在系完全函数依赖于学号;
Sdept->Dept_master 系主任完全函数依赖于所在系;
因此:Sno->Dept_master 系主任传递函数依赖于学号。

三、主键的选择

1、人工键:实体的非自然属性
2、自然键:实体本身的属性

clipboard.png

四、表结构设计的原则

自然二维表

首先,经过一系列对需求的提炼,整理出来的表,称为自然二维表。

第一范式(1NF)

消除自然表中属性的非原子性后,就满足1NF。    

clipboard.png
第二范式(2NF)

消除非主属性对码的部分函数依赖。    

clipboard.png
第三范式(3NF)

消除非主属性对码的传递函数依赖。    

clipboard.png
BC范式*

消除主属性对码的部分和传递函数依赖。

第四范式(4NF)

消除不是由候选码蕴含的非平凡的多值依赖。

第五范式(5NF)

 消除不是由候选码蕴含的连接依赖。

五、常见疑虑

1、每个表都可以设置唯一且不可更改的自增id为主键,为什么还要费劲选主键?

  • 如果表中已经存在唯一且不可更改的字段,就没必要再使用一个自增主键,浪费存储空间
  • 导入旧数据时,可能会ID重复,导致导入失败
  • 防止注入式攻击(get请求)

姚星如
16 声望3 粉丝