数据库设计三大范式
1.第一范式:(1NF)无重复的列(确保每列保持原子性)
所有字段值都是不可分解的原子值
如:表中若有“地址"列。则地址还可以拆分为:国家、省份、城市等这些列
2、第二范式:(2NF)属性完全依赖于主键(确保表中的每列都和主键相关)
在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
如:一张表是描述学员的;有学员编号,学校名称;其中学校名称和学员编号没有依赖关系。应把学校名称放在学校表中
3、第三范式:(3NF)属性不依赖于其它非主属性,基于第二范式。即不能存在:非主键列 A 依赖于非主键列 B(确保每列都和主键列直接相关,而不是间接相关)
数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。
像:a-->b-->c 属性之间含有这样的关系,是不符合第三范式的。
比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)
这样一个表结构,就存在上述关系。 学号--> 所在院校 --> (院校地址,院校电话)
这样的表结构,我们应该拆开来,如下。
(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)
三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。
其他见:数据库的三大范式