以下是网学网为您推荐的数据库- 大型数据库设计方法的研究 ,希望本篇文章对您学习有所帮助。
1 逻辑数据库的设计在数据库逻辑设计过程中,为了保证数据库的一致性和完整性,数据库要按照关系数据库的规范化要求设计。以函数依赖为基础的关系模式的规范化等级主要有五种 : 1NF、2NF、3NF、BCNF 和 4NF, 满足这些范式条件的关系模式可以在不同程度上避免冗余、插入和更新异常问题。在基于表驱动的系统中 ,基本表的设计规范是第三范式 3NF。 但是,满足 3NF 的数据库设计,往往不是最好的设计。没有冗余的数据库可以设计出来,但是,没有冗余的数据库未必是最好的数据库。有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。合理使用冗余会为查询带来很大的好处,如经常被查询的汇总数据 , 可以在平时工作中就累加好, 不需要到查询时再使用如 sum 之类的函数。比如:一个学生管理系统中有成绩表,其字段有学号 SNO , 课程号 CNO , 成绩 GRADE,而进行平均成绩统计时,是用户经常要在查询和报表中用到的。 在表的记录量很大时,有必要把平均分作为一个独立的字段加入到表中,这里可以采用触发器以保持数据的一致性 ,从而提高数据库的执行效率。
2 索引设计索引即将表数据按索引要求而产生有序的数据副本。在关系数据库的表上建立合适的索引,可以提高数据库数据查询的速度,改善数据库的性能。除了聚集索引,每一索引的使用都以磁盘容量作为代价,当使用一个索引,数据库引擎必须执行两个数据读取,这两个数据读取是数据库记录所必需的,第一个数据被读取到实际数据指针的索引,第二个数据被读入到指针指定的位置。因此创建索引时必须要与实际应用系统的查询需求密切结合,在提高查询速度和节省存储空间之间寻求最佳的平衡点 :
2.1 在合适的列上建立索引 1)在经常用作过滤器或者查询频率较高字段上建立索引; 2)为包含了大量的空值列建立索引 ,使包含空值的记录集中排在表的末端 ,数据从无序变得有序, 可减少对这部分数据的遍历,提高查询效率。 3)有一列或多列经常被使用在 where 或 join 条件里,则为该列或多列建立简单或复合索引以提高查询效率。 4)在频繁进行排序(group by) 或分组(order by)的列上建立索引。
2.2 不需要创建索引的情况 1)如果表很小,包含的数据量很少,则无须建立索引。 2)列不经常被用在查询条件里, 无须建立索引。 3)不同值少的列,比如在学生表的“性别”列上只有“男”与“女”2 个不同值, 就无必要建立索引; 4)由文本、图像等数据类型定义的列。 5)表频繁被更新, 这样如果建立了索引,开销会很大,还会降低 DML(INSERT、UPDATE、DELETE)操作执行的效率, 所以此种情况无须建立索引。
2.3 聚集索引和非聚集索引聚集索引是指行的物理顺序与行的索引顺序相同的索引。 一个表只能有一个聚集索引。 非聚集索引是指定表的逻辑顺序索引,行的物理顺序与索引顺序不尽相同,每个表可以有多个非聚集索引。 缺省情况下建立的是非聚集索引,但是在一些特定的情况下建立非聚集索引会极大的缩短查询的时间。 建立索引时, 应考虑对两者的选择。对有大量重复值、且经常有范围查询(between,>,<,>=,<=)和 order by、group by 发生的列,可考虑建立聚集索引。对于频繁修改的列、或者返回小数目的不同值的情况应避免建立聚集索引。当以某字段作为查询条件 ,需要回传局部范围的大量数据时 ,应在此字段上建立聚集索引 ,而当查询所获得的数据量较少时,有必要在此字段上建立非聚集索引。比如:回传 2010 年 1 月 1 日到 2011 年 1 月 1 日这个时间段之间的数据,可考虑在日期字段上建聚集索引,那么数据本来就是按照日期的顺序排列的,只要找到开始和结尾日期的数据就可以了,可以极大的节省时间。 而如果使用非聚集索引,必须查到这个时间段中每个日期对应的位置,然后在根据位置存取数据,明显效率很低。在实际应用中 ,要综合各要素点具体分析,以达到系统的性能综合最优。