规范地设计关系数据库必须遵照的三大范式!

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

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

1、规范化的目的数据库设计

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

2、基本概念函数

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

例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 系主任传递函数依赖于学号。

3、主键的选择spa

一、人工键:实体的非天然属性
二、天然键:实体自己的属性

clipboard.png

4、表结构设计的原则设计

天然二维表code

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

第一范式(1NF)blog

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

clipboard.png
第二范式(2NF)ip

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

clipboard.png
第三范式(3NF)get

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

clipboard.png
BC范式*产品

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

第四范式(4NF)

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

第五范式(5NF)

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

5、常见疑虑

一、每一个表均可以设置惟一且不可更改的自增id为主键,为何还要费劲选主键?
  • 若是表中已经存在惟一且不可更改的字段,就不必再使用一个自增主键,浪费存储空间
  • 导入旧数据时,可能会ID重复,致使导入失败
  • 防止注入式攻击(get请求)
相关文章
相关标签/搜索