数据库建模 (范式)

范式:判断所建表是否合理的规范方法

[1].第一范式(1NF)

错误的表:

学生表


姓名性别年龄班级
张三20二班
张三20二班


问题:相同姓名的张三的两条记录不能被计算机区别,计算机必须要能区别每一行?   
解决:添加标识属性,也就主键。

正确的表:
学生表

学号姓名性别年龄班级
1张三20二班
2张三20二班


错误的表:
学生表

学号学生信息
1张三丰,男,20
2李四,20,男


问题:如果查找男学生的信息,计算机需要分割记录,查找很吃力?
解决:每个行的每个列必须具有原子性,也就是每个列的信息不可再分。

正确的表:
学生表

学号姓名性别年龄
1张三丰20
2李四20


注意:每个列的信息不可再分,意思是要相对独立。
例如:地址可按下列两种方式存储
1.

地址
成都市XX区YY街99号

2.

成都XXYY99

如果只是简单记录地址的信息,地址不需分开。
如果要按市、区、街查询统计,地址则要分开。

问题:表中每个行的列数要一样?
解决:数据库中的表一定都满足此条件。

1NF小结:
1.不能将很多信息保存到一个字段。
2.必须要主键列。
3.每一行的属性必须相同。

[2].第二范式(2NF)

错误的表:
学生表

学号姓名性别年龄班级
1张三20一班
2张三20一班


PK列:主键列,如学号。
非PK列:非主键列,如姓名,性别,年龄,班级。

问题:非PK列必须依赖于PK列。
在上表中,PK列是学号,学号代表了一个实体(一个具体的学生对象),其属性必须是这个实体本身的属性,班级就不是学生本身的属性。解决:划分出实体与关系。
学生在那个班级,这不是在问实体,而是再问关系。

正确的表:
学生表

学号姓名性别年龄班级编号
1张三201
2张三201


班级表

班级编号名称开班日期
1一班2002-1-2
2二班2002-1-2


2NF小结:强迫划分出实体与关系。      

[3].第三范式(3NF

错误的表:
学生表

学号姓名性别年龄出生日期生肖
1张三20yy-mm-dd
2张三20yy-mm-dd


问题:非PK列之间必须相互独立,相互没有关系。
上表中生肖与出生日期有关。
解决:建立新表,通过外键引用主键。
建立生肖表。

正确的表:

生肖表
编号名称
1
2

学生表

学号姓名性别年龄出生日期生肖编号
1张三20yy-mm-dd1
2张三20yy-mm-dd1


范式总结:
共有5个范。       
常用以上3个范式。
1NF,2NF必须满足,3NF可以不满足,但尽量满足。    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值