软件设计之 数据库设计
首先要搞清楚容易混淆的两个概念:“数据库系统”和“应用软件的数据库”。
数据库系统是指数据库厂商提供的数据库服务器,目前著名的大型数据库系统有Oracle、DB2、Informix、Sybase,中型数据库系统如Microsoft SQL Server。
而应用软件的数据库则是指开发者在数据库系统中创建的库,用于存储应用软件的数据。一般地,人们可以从上下文判断“数据库”究竟是指哪一个?
简而言之,数据库是存储和处理数据用的。数据库设计的主要工作是:
(1)设计数据库的表(数据就存在表里面),表的结构就是数据的存储结构。
(2)对这些表中的数据进行操作,常见操作如查询、插入、修改、删除等。
数据库设计的难易程度取决于两个要素:“数据关系的复杂程度”和“数据量的大小”。如果应用软件只涉及几张简单的表,并且数据量特别小,那么设计这样的数据库就非常容易(例如设计一个班级的学生成绩单数据库)。但是你绝对不能盲目乐观:以为所有的数据库设计都是那么简单。
-- 汝州有个地主,非常富有,但几代人都不识字。
一年,他请一位先生教儿子认字。先生先教他儿子握笔临帖,写了
一划,说:“这是‘一’字。”写两划,说:“这是‘二’字。”
写三划,又说:“这是‘三’字。”
那孩子便喜孜孜地甩下笔,告诉父亲说:“孩儿全会了,孩儿全会
了。不要再麻烦先生,多花学费了,把他辞退吧。”
地主高兴地照办。
不久,地主打算宴请一位姓万的朋友,就让儿子写请柬。可是过了
好长时间,也不见他
写完,便去催促。谁知孩子气愤地叫道:“天下的姓那么多,为啥
要姓万!苦得我从早晨写到现在,才写完500划!”
-- 软件开发人员学习数据库设计的特点是:入门很容易,但是成为高手非常难。大家千万不要学万公子写字噢。
◆.数据库设计的主要困难与对策
一、开发与平台无关的数据库应用程序
目前国际上应用最广泛的数据库系统有Oracle、DB2、Informix、Sybase和SQL Server。这些数据库系统之间的激烈竞争即有好处又有坏处。竞争的好处是使数据库系统不断发展和完善,并且避免价格垄断。竞争的最大坏处是逼迫数据库厂商不断开发出独特的功能以吸引更多的用户,所以各个数据库系统的独特功能无法形成统一标准,导致用户难以开发出与平台无关的数据库应用程序,因为用户很难抵御数据库系统独特功能的诱惑。
SQL是数据库系统的标准查询语言。可是数据库厂商提供了太多超出SQL标准的特色功能,使人们陷入了进退两难的境地:(1)如果你想使程序与数据库平台无
关,那么只能使用SQL,放弃各个数据库系统的独特功能。(2)如果你超越SQL,使用了某个数据库系统的独特功能,那么这样的程序就是与平台相关的。类似问题也存在于操作系统、Web浏览器这些领域。理论上讲,只有绝对垄断才能形成绝对统一的标准,但是人们既希望打破垄断又希望有统一的标准,这种矛盾无法彻底解决,只能折衷、妥协。
如果你开发的是通用的数据库应用软件,不想让应用软件与特定的数据库系统捆绑在一起,那么你就老老实实地用SQL语言写程序。
如果你开发的是行业专用的数据库应用软件,并且这个行业已经指定了数据库系统(这种局部垄断现象普遍存在),最近若干年都不会改变的话,那么你可以超越SQL使用该数据库系统的独特功能。(例如公安部采用Oracle,银行采用Informix)
二、数据库性能优化问题
数据库设计的主要挑战是“高速处理大容量的数据”。如何优化数据库的性能是设计人员经常面临的问题。数据库性能优化主要有两种途径:“优化表结构本身”和“优化数据库的环境参数”。这是笔者尚不清晰的地方,还需要更多的时间学习和实践!
三、数据库设计流程
数据库设计一般要经历“逻辑设计—>物理设计->安全性设计->性能优化”等步骤,通常要迭代进行。
[最后:其实,要学习和认识还有许多,学习是首要的 ... 2007年7月23日 晚]
◆.数据库性能优化问题
-- 数据库设计的主要挑战是“高速处理大容量的数据”。如何优化数据库的性能是设计人员经常面临的问题。数据库性能优化主要有两种途径:“优化表结构本身”和“优化数据库的环境参数”。
-- 在表的物理设计阶段,设计人员应当按照第三范式设计表结构(即规范化处理)。这样做的好处是:表中没有冗余数据,表结构很清晰,将来修改或者扩充非常方便。但是按第三范式设计也存在一些缺点:产生了许多表,每个表有相对较少的列,并且这些列必须使用“主健/外健”关联起来,因此某个查询操作可能会产生复杂的表链接,导致性能降低。
-- 反规范化处理是指对第三范式的表进行修改,通过合并一些表,或者在表中创建冗余的列,从而减少表链接操作代价,达到提高性能的目的。要注意的是反规范化处理存在很大的负面影响:管理冗余数据很麻烦,如果冗余数据不同步的话,那么会发生数据错误这种严重的问题。
-- 对表进行第三范式的规范化处理是第一重要的,而反规范化处理则需谨慎考虑、不宜过多使用。“规范化处理”以及“反规范化处理”不是自相矛盾之举,而是性能优化的策略。
-- 除了优化表结构之外,优化数据库的环境参数也能够提高数据库的性能。例如给服务器配置更快的CPU,增加内存。运行数据库是非常消耗内存的,内存对数据库性能影响比较大。由于现在市场上的内存条越来越便宜,所以为服务器配置足够多的内存恐怕是成本最低、难度最低、见效最快的性能优化方法。
-- 能否有效地优化应用软件数据库的性能,主要取决于开发者对数据库系统的熟悉程度以及开发经验。