为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
三范式和反范式是空间和时间的关系。三范式是为了降低空间;反范式是通过增加空间来提升运行效率。
(1)目的:减少空间占用。 (2)内容:列不可分、依赖主键(联合索引)、在依赖主键(联合索引)的基础上直接依赖。
确保每列保持原子性;数据库表中的所有字段都是不可分解的原子值。 例如:某表中有一个地址字段,如果经常需要访问地址字段中的城市属性,则需要将该字段拆分为多个字段,省份、城市、详细地址等。
姓名 | 地址 |
---|---|
fly1 | 广西壮族自治区南宁市越秀区繁华东路66号8栋8楼8号 |
fly2 | 广东省深圳市福田区繁华东路66号8栋8楼8号 |
fly3 | 湖南省长沙市岳麓区繁华东路66号8栋8楼8号 |
可以分为:
姓名 | 省份 | 市 | 区 | 路 | 牌 | 详细信息 |
---|---|---|---|---|---|---|
fly1 | 广西壮族自治区 | 南宁市 | 越秀区 | 繁华东路 | 66号 | 8栋8楼8号 |
fly2 | 广东省 | 深圳市 | 福田区 | 繁华东路 | 66号 | 8栋8楼8号 |
fly3 | 湖南省 | 长沙市 | 岳麓区 | 繁华东路 | 66号 | 8栋8楼8号 |
确保表中的每列都和主键相关,而不能只与主键的某一部分相关(组合索引)。
订单编号 | 商品编号 | 商品名称 | 数量 | 单位 | 价格 | 客户 | 所属单位 | 联系方式 |
---|---|---|---|---|---|---|---|---|
1 | 1 | 电脑 | 1 | 台 | 10000 | fly1 | FLY | 13788888888 |
1 | 2 | 手机 | 2 | 部 | 6000 | fly1 | FLY | 13788888888 |
2 | 3 | ipad | 3 | 部 | 3000 | fly2 | BAT | 13799999999 |
因为订单编号与客户的信息相关,订单编号和商品编号一起唯一确定数量,商品编号和商品信息相关;所以可以拆分成三个表:
订单编号 | 客户 | 所属单位 | 联系方式 |
---|---|---|---|
1 | fly1 | FLY | 13788888888 |
2 | fly2 | BAT | 13799999999 |
订单编号 | 商品编号 | 数量 |
---|---|---|
1 | 1 | 1 |
1 | 2 | 2 |
2 | 3 | 3 |
商品编号 | 商品名称 | 单位 | 商品价格 |
---|---|---|---|
1 | 电脑 | 台 | 10000 |
2 | 手机 | 部 | 6000 |
3 | ipad | 部 | 3000 |
确保每列都和主键直接相关,而不是间接相关;减少数据冗余。
例如
订单编号 | 订单项目 | 负责人 | 业务员 | 订单数量 | 客户编号 |
---|---|---|---|---|---|
1 | 电脑 | fly1 | alice | 10 | 1 |
2 | 手机 | fly2 | molic | 20 | 2 |
3 | ipad | fly3 | selia | 30 | 1 |
可以拆分为:
订单编号 | 订单项目 | 负责人 | 业务员 | 订单数量 | 客户编号 | 客户名称 | 所属公司 | 联系方式 |
---|---|---|---|---|---|---|---|---|
1 | 电脑 | fly1 | alice | 10 | 1 | vico | 0voice1 | 13766666666 |
2 | 手机 | fly2 | molic | 20 | 2 | milo | 0voice2 | 13799999999 |
3 | ipad | fly3 | selia | 30 | 1 | vico | 0voice1 | 13766666666 |
客户编号 | 客户名称 | 所属公司 | 联系方式 |
---|---|---|---|
1 | vico | 0voice1 | 13766666666 |
2 | milo | 0voice2 | 13799999999 |
反范式是经常使用的设计。比如用户表采用的就是反范式,因为如果用户表不采用反范式设计,将会产生很多的关联关系表,这就会涉及到联表查询,非常影响效率,特别对登录来说,是不可容忍的。
因此,反范式允许冗余存储,为了提升查询效率。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。