前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库知识学习,数据库设计优化攻略(八)

数据库知识学习,数据库设计优化攻略(八)

作者头像
用户1289394
发布2021-12-16 14:18:41
2700
发布2021-12-16 14:18:41
举报
文章被收录于专栏:Java学习网Java学习网

3.2 数据库表优化

3.2.1 设计规范化表,消除数据冗余

数据库范式是确保数据库结构合理,满足各种查询需要、避免数据库操作异常的数据库设计方式。满足范式要求的表,

称为规范化表,范式产生于 20 世纪 70 年代初,一般表设计满足前三范式就可以,在这里简单介绍一下前三范式

先给大家看一下百度百科给出的定义:

第一范式(1NF)无重复的列

所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。

第二范式(2NF)属性

在 1NF 的基础上,非码属性必须完全依赖于码[在 1NF 基础上消除非主属性对主码的部分函数依赖]

第三范式(3NF)属性

在 1NF 基础上,任何非主属性不依赖于其它非主属性[在 2NF 基础上消除传递依赖] 通俗的给大家解释一下(可能不是最科学、最准确的理解)

第一范式:属性(字段)的原子性约束,要求属性具有原子性,不可再分割;

第二范式:记录的惟一性约束,要求记录有惟一标识,每条记录需要有一个属性来做为实体的唯一标识。

第三范式:属性(字段)冗余性的约束,即任何字段不能由其他字段派生出来,在通俗点就是:主键没有直接关系的数据列必须消除(消除的办法就是再创建一个表来存放他们,当然外键除外)

如果数据库设计达到了完全的标准化,则把所有的表通过关键字连接在一起时,不会出现任何数据的复(repetition)。

标准化的优点是明显的,它避免了数据冗余,自然就节省了空间,也对数据的一致性(consistency)提供了根本的障,杜绝了数据不一致的现象,同时也提高了效率。

3.2.2 适当的冗余,增加计算列

数据库设计的实用原则是:在数据冗余和处理速度之间找到合适的平衡点

满足范式的表一定是规范化的表,但不一定是最佳的设计。很多情况下会为了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余,达到以空间换时间的目的。比如我们有一个表,产品名称,单价,库存量,总价值。这个表是不满足第三范式的,因为“总价值”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“总价值”这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。合理的冗余可以分散数据量大的表的并发压力,也可以加快特殊查询的速度,冗余字段可以有效减少数据库表的连接,提高效率。其中"总价值"就是一个计算列,在数据库中有两种类型:数据列和计算列,数据列就是需要我们手动或者程序给予赋值的列,

计算列是源于表中其他的数据计算得来,比如这里的"总价值"在 SQL 中创建计算列:

create table table1( number decimal(18,4),price money,Amount as number*price --这里就是计算列)

如果是'否',说明这列是虚拟列,每次查询的时候计算一次,而且那么它是不可以用来做 check,foreign key 或 not null约束。

如果是'是',就是真实的列,不需要每次都计算,可以再此列上创建索引等等。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档