首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数据库范式系列之一——NF1

数据库设计是一项看似简单但是门道儿很深的工作。

简单:数据库设计就是设计表,设计表的字段。

门道儿:数据库设计的四(六)个阶段、三(五)种范式等等。

本系列以某学校的学生成绩数据为例,介绍数据库的六种范式。

1、范式

范式(Normal Form)就是前人通过理论和实践总结出来的标准形式,是数据库设计的基本依据。

公认的五种范式包括1NF、2NF、3NF、4NF、5NF,还有名称比较特殊的

Boyce-Codd范式,简称BCNF,可以看作3NF的升级版(3.5NF)。

五种范式的关系是层层递进的,一层比一层更严格,满足NF2的一定满足NF1,满足NF3的一定满足NF2,依次类推。

2、NOSQL

某学校需要“存储”各院系学生的成绩,小A设计了一张表STUDENT,只包括一个字段INFO,字段中包含院系、姓名、成绩三种信息,用冒号标识,用逗号隔开。

这样的设计已经满足了学校“存储”学生成绩的需求,每个人的信息都按一定格式准确的保存在STUDENT表中。

这样的数据库设计中属于key-value型的NOSQL数据库设计,这里不展开。

3、1NF

在成绩存储好后,张三要查询自己的成绩,他需要:

(1)select info from student where info like '%张三%'

(2)得到INFO字段——“院系:日文系,姓名:张三,成绩:98”

(3)在INFO字段中找到成绩对应的数字——98

显然这非常不方便,因为所有的信息都混到一起了。

小B说:为什么不把院系、姓名和成绩分开呢?于是小B设计了下表:

这样张三查成绩可以直接这样:

这张表就符合了上述1NF范式的定义:每个属性都不可再分。

4、关系型数据库

通俗的理解:每个字段都包含单一数据,而非多类数据。DEPART只存储院系名称,STUDENT只存储学生姓名,SCORE只存储学生成绩。

进一步的理解:所谓的“不可再分”是相对的概念。在这个例子中,STUDENT存储的是学生的全名,可以满足查询需求。但如果有新的需求,例如要查找所有姓氏为“张”的学生成绩,学生姓名就是“可再分”的:

分成FIRSTNAME和LASTNAME两部分,对应的,“张三”也要以“张”和“三”分别存储。

深层的理解:符合1NF范式的,才是关系型数据库(二维表数据库),而类似key-value形式的数据库属于非关系型数据库(NOSQL)。

5、总结

本文简要介绍了数据库范式,并以实例介绍了1NF范式。

1NF,非常简单的概念,简直不值一提。

但是数学大厦也是在1+1=2之上建立起来的。

数据库范式系列之二——NF2!敬请期待。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180222G1019H00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券