规范地设计关系数据库必须遵守的三大范式!
- 规范化的目的
- 基本概念
- 主键的选择
- 表结构设计的原则
- 常见疑虑
*数据库就是产品的地基,地基打不好,这个产品时刻都有潜在的危险。
一、规范化的目的
- 良好的数据库设计:
节省数据的存储空间
能够保证数据的完整性 - 糟糕的数据库设计:
数据冗余、存储空间浪费
数据删除、更新和插入的异常
带来系统软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、自然键:实体本身的属性
四、表结构设计的原则
自然二维表
首先,经过一系列对需求的提炼,整理出来的表,称为自然二维表。
第一范式(1NF)
消除自然表中属性的非原子性后,就满足1NF。
第二范式(2NF)
消除非主属性对码的部分函数依赖。
第三范式(3NF)
消除非主属性对码的传递函数依赖。
BC范式*
消除主属性对码的部分和传递函数依赖。
第四范式(4NF)
消除不是由候选码蕴含的非平凡的多值依赖。
第五范式(5NF)
消除不是由候选码蕴含的连接依赖。
五、常见疑虑
1、每个表都可以设置唯一且不可更改的自增id为主键,为什么还要费劲选主键?
- 如果表中已经存在唯一且不可更改的字段,就没必要再使用一个自增主键,浪费存储空间
- 导入旧数据时,可能会ID重复,导致导入失败
- 防止注入式攻击(get请求)
相关推荐
xiaoxiangyu 2020-06-28
timewind 2020-06-13
fengdos 2020-02-10
DAV数据库 2020-01-23
CharlesYooSky 2020-01-07
chenjiazhu 2020-01-03
imacoder 2019-12-30
happinessaflower 2019-12-23
zbcaicai 2019-12-12
Dennist 2019-12-08
lxypeter 2019-11-07
zbcaicai 2019-10-31
景泽元的编程 2019-10-24
点滴技术生活 2019-10-20
AscaryBird 2019-10-21
狗蛋的窝 2019-10-21
Enn的数据库 2013-03-12
WilliamLin 2011-08-01
欢子 2019-06-30