Sql server 三大范式 :

概念: 在设计数据库的时候应该遵循三大原则,这里的三大原则也就是我们经常说到的三大范式,三大范式是数据库实际所需要满足的规范。

我在百度了数据库的范式之后发现,其实数据库一共有个范式,第一范式、第二范式…第六范式,
但是我们在一般项目中,使用到第三范式就足够了,范式越高,反而会带来一定的麻烦:操作困难,性能越差。

下面我将用三个例子来分析这三大范式的特点以及他们之间的区别:

下面我将用三个例子来分析这三大范式的特点以及他们之间的区别:

第一范式:

定义:数据库表中的字段都是单一属性的,不可再分。

简单的说,每一个属性都是原子项,不可分割。

我们经常提到的数据库都是关系型数据库, 所以“第一范式”是关系模型应具备的最起码的条件,如果数据库不满足第一范式,那么就不能叫第一范式。

——-也就是说,关系数据库一定满足第一范式。

例子:

下面我将列举俩个表,我们可以先对比他们的不同,然后来分析哪个表满足”第一范式”
第一种表的设计

第二种表的设计:


分析:

第一种表是不满足”第一范式”的,因为我们的第一范式的特点是:

数据库表中的字段都是单一属性的,不可再分

我们可以看到第一种设计方式中的地址可以继续拆分,

可以继续拆分为省份,市区,和具体地址,所以不满足我们的 第一范式

第二范式:

定义: 要求数据库表中每列都与主键有关系,而不能只与主键的某部分有关系,主键与非主键应遵循完全函数依赖关系,也就是“完全依赖”

注:什么是函数依赖,详见百度百科(http://baike.baidu.com/view/40008.htm
<http://baike.baidu.com/view/40008.htm>)。

重点: 第二范式 是建立在第一范式的基础上的,所以必须要满足第一范式

而且表中的非主键信息不是由整个主键决定时也不能成立

下面俩个表,表示快递单号与商品编号为联合主键:
第一种设计方式:

第二种设计方式:


分析 :

我们要结合“第二范式”的特点:“完全依赖”并且观察上面的俩个表我们可以发现:

表中的快递单号 和 商品编号为联合主键, 但是在我们表一中商品名称,价格(单价) 只与“商品编号有关系”

所以这就产生了“部分依赖” ,所以不满足“第二范式”

第二个表是满足条件的。

第三范式:

定义:属性不能传递依赖于主键

不能存在传递依赖,除了主键外,其他字段必须依赖主键

(注:什么是传递依赖详细看百度:
https://baike.baidu.com/item/%E4%BC%A0%E9%80%92%E5%87%BD%E6%95%B0%E4%BE%9D%E8%B5%96/9816957?fr=aladdin

<https://baike.baidu.com/item/%E4%BC%A0%E9%80%92%E5%87%BD%E6%95%B0%E4%BE%9D%E8%B5%96/9816957?fr=aladdin>


具体的 示例:

第一种设计方式:

第二种设计方式:

分析:

我们观察这俩个表的设计方式,根据“第三范式”的特点:

“不能存在传递依赖”

我们可以发现: 宿舍依赖学号 费用依赖宿舍 所以有错

第二种表的设计是符合“第三范式”

现在应该对“三大范式”有了一个跟深的理解了吧?

如果哪里有不同见解,欢迎留言

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信