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

MySQL数据库设计三范式

1 第一范式

第一范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成;每个字段的值都只能是单一值。1971年埃德加·科德提出了第一范式。即表中所有字段都是不可再分的。

重复组通常会出现在会计账上,每一笔记录可能有不定个数的值。举例来说:

“数量”就是所谓的重复组了,而在这种情况下这份资料就不符合第一范式。想要消除重复组的话,只要把每笔记录都转化为单一记录即可:

如下联系方式是一个复合属性,就违反了该范式,在数据库中是无法分离出来的。

简单改动即可

即标准的二维表结构。

第二范式

前提

标准的二维表,即第一范式成立

表中必须存在业务主键,并且非主键依赖于业务主键

例如如下博客表实例

使用用户字段作为PK是否可行呢?

显然一个用户会对应多个博客记录,且章节标题也能为多个用户编辑,所以单列字段PK失效

使用的复合PK

然而用户积分字段也只和用户字段依赖,并不依赖于整体的PK,所以依旧不符合第二范式

拆分将依赖的字段单独成表

从上面,我们也可以发现:

若表的PK只有一个字段组成,那么它本就符合第二范式

若是多个字段组成,则需考量是否符合第二范式

3 第三范式

表中的非主键列之间不能相互依赖

依旧看看课程表

首先,一个字段的PK显然符合第二范式,大部分字段也只依赖于PK,然而对于讲师职称字段其实是依赖于讲师名的,所以不符合第三范式.

将不与PK形成依赖关系的字段直接提出单独成表即可

好文!点个好看!

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券