Java教程

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

本文主要是介绍数据库知识学习,数据库设计优化攻略(四),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

5.数据库表优化

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

约束。

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

这篇关于数据库知识学习,数据库设计优化攻略(四)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!