常被告知出错的事务应显式地回退整个事务,但用户也可不管被锁住的资源直接提交或等会儿再重新做。
数据库会自动检测到死锁并恢复。在应用中,为避免死锁,应在事务的开始加尽量强的锁。在应用系统中,存取同一张表的各种程序应使用相同的次序,这会避免死锁。
3.5.4 读一致性
读一致性是数据库事务处理的重要特性,其含义为:
一事务对数据库的任何更新都在本事务内见到,数据库的数据对本事务是一致的。
其它事务未提交的更新,在本事务内见不到。即其它事务的任何更新,只要还没提交,则对本事务而言,就好象不存在一样。
3.6 序号生成器
在很多应用系统要用到序号。由于序号是连续生成的,在大型系统中,会有多个用户同时申请下一个序号,序号生成便成了应用系统的瓶颈问题。
为了解决这个问题,大型数据库都增加了序号对象。通过序号对象可以自动生成序号,多个用户可以并发读取,无须互相等待。
3.7 视图
视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成一个移动的窗口,通过它可以看到感兴趣的数据。
视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些
用于产生视图的表叫做视图的基表。一个视图也可从另一视图中产生。
视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。
视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些视图可以修改对应的基表,有些则不能(仅仅能查询)。
视图有以下的作用:
? 简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以
简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
? 安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其
它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库的行和特定的列上。通过视图,用户可被限制在数据的不同子集上: ? 基表的行的子集上。 ? 基表的列的子集上。 ? 基表的行和列的子集上。 ? 多个基表的连接所限定的行上。 ? 基表的数据的统计汇总上。
? 另一行视图的一个子集上,或是一些视图和基表合并后的子集上。 ? 逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。
3.7.3 安全性
视图的安全性可以防止未授权的用户查看特定的行或列。使用户只能看到表中特定行的方法如下:
1. 在表中增加一个标志用户的列;
2. 建立视图,使用户只能看到标有自己用户名的列; 3. 把视图授权给其他用户。
3.7.4 逻辑数据独立性
视图可以在以下几个方面使程序与数据独立:
1. 如果应用建立在数据库表上,当数据库表发生变化时,可以在表上建立视图,
通过视图屏蔽表的变化,从而应用程序可以不动。
2. 如果应用建立在数据库表上,当应用发生变化时,可以在表上建立视图,通
过视图屏蔽应用的变化,从而使数据库表不动。
3. 如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通
过视图屏蔽表的变化,从而应用程序可以不动。
4. 如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视
图屏蔽应用的变化,从而使数据库表不动。
4. 调整数据库设计以提高系统性能
4.1 建立有用的性能标准
需遵循下列标准:
? 单条记录的更新应当在1秒钟之内。 ? 多条记录的更新不超过10秒钟。
? 对于少于4个表的、数据有一定限度的查询,响应时间应在5秒钟之内。 ? 对于其它的数据有一定限度的多表查询应在10秒钟之内。 ? 整个表的查询时间应在30秒钟之内。
但是,不要盲目地接受性能标准,有些极端可除外。
4.2 数据库的规范化
从关系模型的角度来看,标准的表应当满足第三范式(3NF)。这样的表结构最容易维护,而且最具有可维护性。
对数据库进行规范化处理具有以下的优点:
? 因为表的列数减少了,所以搜索、排序、创建索引的速度可以加快。 ? 因为表减小了,所以按照索引查询的速度加快了。 ? 可以更好地使用段来控制数据的物理存储。
? 每个表可以只有很少的索引,因此可以加快更新速度。 ? 可以减少空值和冗余,使数据库更紧凑。
? 因为减少了冗余的数据,可以使触发器的执行速度更快。
? 减少数据的不规则性。
? 规范化使数据库的维护和修改变得更容易。
数据库经过规范化后,数据的查询虽然需要更多的连接操作,但对于具有索引的列,连接的速度是比较快的。
然而,全部采用规范化的设计可能达不到最佳的性能。因此,虽然推荐尽量采用第三范式的设计,但是在性能得不到满足的情况下,需要非规范化的方法提高性能。
4.3 通过非规范化设计提高数据库的效率 4.3.3 非规范化的原因
在进行数据库的设计时,出于对数据库执行效率的考虑,可以采用非规范化的方法。所谓非规范化的方法,就是在数据库的设计中适当地降低数据库的范式。在下列情况下,通常要考虑进行非规范化处理: ? 大量频繁的查询过程所涉及的表都需要进行连接。 ? 主要的应用程序在执行时要将表连接起来进行查询。 ? 对数据库的计算需要临时表或进行复杂的查询。
4.3.4 非规范化技术
对数据库进行非规范化的目的在于提高应用程序的效率,但非规范化处理毕竟会增加数据冗余,会带来相应的数据完整性问题。因此,在考虑非规范化处理时,要慎重考虑下面的几个问题:
? 哪些是比较紧急的事务,哪些事务对响应时间有要求。
数据库设计规范标准



