数据库设计:规则与变通
数据库设计的基础理念
在处理数据库中的数据时,我们需要调整思考方式。相较于使用电子表格,将数据存储和使用在实际的数据库中具有更多优势。数据库能让我们更好地控制数据的完整性、一致性和有效性,还提供了几乎无限的数据检索方式,使我们能够获取各种各样的信息。
避免基于RDBMS软件进行设计
许多人在设计数据库时,会不知不觉地陷入仅基于RDBMS软件进行设计的陷阱。他们这么做往往是因为对特定的RDBMS软件比较熟悉且有一定的使用技能。然而,这种方法并不明智,原因如下:
1.
基于RDBMS能力的错误决策
:可能会根据对RDBMS能做或不能做的感知来做出设计决策。例如,因为认为RDBMS无法实现,就决定不对给定关系施加参与度。
2.
RDBMS主导设计
:会让RDBMS无意中主导数据库的设计,而不是严格根据组织的信息需求来设计。当发现RDBMS对数据库的某些方面(如字段规格和关系特征)支持有限时,这种情况就容易发生。
3.
知识限制设计
:设计会受到对RDBMS知识的限制。比如,因为不知道如何实现,就不实施关系特征。
4.
技能限制设计
:设计会受到使用RDBMS技能水平的限制。技能水平会影响数据库各个方面(如字段规格和业务规则)的实施效率和效果。
5.
设计质量问题
:这种设计方法通常会导致结构设计不当、数据完整性不足、数据不一致和信息不准确等问题。在RDBMS中定义数据库看似容易,但很可能在不知不觉中设计出糟糕的数据库。
6.
不适合组织需求
:最后,你熟悉和喜爱的RDBMS可能并不适合组织的数据库需求。
正确的设计流程
我们应该始终在不考虑任何RDBMS的情况下设计数据库的逻辑结构。这样做能让我们专注于组织的信息需求,更有可能设计出合理的结构。设计完成后,再明确如何实现数据库(如单用户应用程序、客户端/服务器、基于Web等)以及使用哪种RDBMS来促进实现。
数据库设计知识的重要性
熟悉正确数据库设计基本原则的人,比那些对数据库设计知之甚少的人,能更好地理解RDBMS及其提供的工具。这是因为了解数据库设计的人能够理解RDBMS提供某些工具的原因,以及如何使用这些工具。因此,学习和掌握良好的数据库设计技术对我们非常有好处。
数据库设计规则的变通情况
虽然我们倡导遵循正确的数据库设计技术,但在某些特定情况下,可以考虑变通规则。
可变通规则的情况
- 设计分析型数据库 :分析型数据库用于存储和跟踪历史及与时间相关的数据。这种数据库的表结构中通常包含计算字段,这些字段的表达式用于记录特定时刻一组数据的状态,其他字段则存储聚合函数的结果。虽然这种设计违反了正常的数据库设计规则,但由于数据的使用方式,这种违反是可以接受的。不过,建议先正确设计数据库,然后经过慎重考虑后再打破规则,要明确打破规则的原因。
- 提高处理性能 :这是人们最常想要打破规则的原因。当RDBMS处理多表查询或复杂报告花费过长时间时,很多人会认为修改底层表结构是解决问题的方法。例如,修改表使其包含查询或报告所需的所有字段。虽然这样做确实能提高处理速度,但会引入新问题,如不必要的重复字段和冗余数据,违反了正确的数据库设计原则。
打破规则的代价
打破规则以提高性能实际上是关于数据完整性的问题。任何为了性能(或其他原因)而打破规则的行为,都会引入数据完整性问题。我们需要思考,处理性能的提升是否值得以降低数据完整性为代价。打破规则可能会带来以下问题:
1.
数据不一致
:引入不必要的重复字段会导致数据不一致。需要确保这些字段中的数据同步,如果修改了某个重复字段的值,必须对其他重复字段进行相同的修改。
2.
数据冗余
:重复字段也会导致数据冗余。编辑包含冗余数据的字段时,必须对每个实例进行相同的修改。
3.
数据完整性受损
:打破规则通常会违反整体数据完整性的一个或多个组件,如表级完整性和关系级完整性。需要尽力弥补这种完整性的缺失。
4.
信息不准确
:如果数据库存在上述问题,就无法提供准确的信息。
提高性能的其他方法
如果想通过打破规则来提高处理性能,应将其作为最后手段。在此之前,可以尝试以下方法:
1.
增强或升级计算机硬件
:尽管成本较高,但这是提高处理性能最简单的方法。更快的CPU、更多的内存和更符合需求的打印机,都能大大减少RDBMS处理复杂查询或报告的时间。使用更大的硬盘也有助于提高磁盘密集型查询的检索速度。
2.
优化操作系统软件
:确保计算机的操作系统针对性能进行了优化,这对于联网计算机尤为重要。通过调整网络配置选项的设置,可以显著提高整体处理性能。具体的修改类型取决于所使用的操作系统软件,需要参考软件文档来确定。
3.
审查数据库结构
:确保数据库设计正确,设计不佳的数据库会导致处理性能下降。
4.
审查数据库实现
:检查数据库在RDBMS中的当前实现方式,确保充分利用了RDBMS的功能,并尽可能高效、完整地定义数据库。
5.
审查应用程序
:仔细检查用于处理数据库的应用程序。应用程序是否编写良好?是否充分利用了RDBMS提供的工具?组件是否定义明确?在某些情况下,报告打印缓慢可能是因为设计不佳,查询运行缓慢可能是因为定义不当。要确保每个查询都定义正确且高效。
记录打破规则的操作
如果经过全面考虑后,认为必须打破规则,那么必须记录每一个打破的规则和采取的每一个行动。记录这些信息很重要,因为它能让我们思考即将采取行动的后果,同时也为数据库结构的更改提供记录。如果后来发现修改没有显著提高处理性能,可以根据记录来恢复修改。需要记录的内容如下:
1.
打破规则的原因
:如提高处理性能、减少复杂报告的打印时间等,要详细清晰地说明原因。
2.
违反的设计原则
:记录对数据库设计的更改,以便在性能没有显著改善时能够恢复更改。例如,指出正在更改表的结构。
3.
修改的数据库方面
:指明要修改的具体字段、表、关系或视图。这些信息在决定恢复修改时会很有价值。
4.
具体修改内容
:确定要修改的项目后,记录对该项目所做的具体修改。例如,如果需要修改关系,记录对其特征所做的准确更改。
5.
对数据库和应用程序的预期影响
:对数据库的任何修改都会影响所有相关的终端用户应用程序。例如,更改特定表的结构可能会影响数据完整性、视图结构、基于该表构建的数据输入表单和报告(部分或全部),以及引用该表的宏或编程代码。必须列出所有影响。
将这些记录添加到数据库文档中。即使后来恢复了更改,这些记录也能防止未来再次冲动地尝试相同类型的更改。
总之,数据库设计需要我们在遵循规则和变通规则之间找到平衡。在大多数情况下,遵循正确的设计技术是确保数据库完整性的关键,但在特定情况下,经过深思熟虑的变通也是可以接受的。同时,不断学习和掌握数据库设计技术,将有助于我们更好地应对各种数据库设计挑战。
数据库设计规则变通的决策流程
为了更清晰地展示在什么情况下可以变通数据库设计规则,我们可以通过一个流程图来进行说明。
graph TD
A[遇到性能或设计问题] --> B{是否为分析型数据库设计}
B -- 是 --> C[可考虑打破规则,但先正确设计]
B -- 否 --> D{是否可通过其他方式提高性能}
D -- 是 --> E[采用其他方式提高性能]
D -- 否 --> F[慎重考虑打破规则]
C --> G[记录打破规则的操作]
F --> G
E --> H[持续监测性能和数据完整性]
G --> H
H -- 性能未显著提升 --> I[根据记录恢复修改]
H -- 性能提升且数据完整 --> J[维持修改]
这个流程图展示了一个决策过程,当我们在数据库设计或使用中遇到问题时,首先判断是否是分析型数据库设计,如果是,可以考虑打破规则,但要先正确设计数据库。如果不是分析型数据库设计,则考虑是否可以通过其他方式提高性能。如果可以,就采用其他方式;如果不行,则需要慎重考虑打破规则。无论哪种情况,只要打破规则,都需要记录操作。最后,持续监测性能和数据完整性,如果性能未显著提升,就根据记录恢复修改;如果性能提升且数据完整,则维持修改。
打破规则操作记录示例表格
| 记录项目 | 详细说明 | 示例 |
|---|---|---|
| 打破规则的原因 | 详细清晰地说明打破规则的原因 | 提高RDBMS处理多表查询的速度 |
| 违反的设计原则 | 记录对数据库设计的更改,便于后续恢复 | 修改表结构以包含冗余字段,违反了数据冗余控制原则 |
| 修改的数据库方面 | 指明要修改的具体字段、表、关系或视图 |
修改
Orders
表中的
CustomerID
字段和
OrderDate
字段
|
| 具体修改内容 | 记录对项目所做的准确修改 |
将
CustomerID
字段的数据类型从
INT
改为
VARCHAR(10)
,在
OrderDate
字段后添加
DeliveryDate
字段
|
| 对数据库和应用程序的预期影响 | 列出所有可能受到影响的方面 |
影响
Orders
表的数据完整性,可能需要修改相关的数据输入表单和查询语句
|
这个表格可以帮助我们更规范地记录打破规则的操作,确保在后续需要时能够准确地了解和恢复修改。
总结与展望
数据库设计是一个需要综合考虑多方面因素的过程。我们既要遵循正确的设计原则,确保数据库的结构合理、数据完整,又要在特定情况下灵活变通,以满足实际需求。在面对性能问题时,不能轻易打破规则,而应优先考虑其他可行的方法。如果确实需要打破规则,一定要做好记录,以便后续的调整和维护。
学习数据库设计是一个持续的过程,随着技术的不断发展和业务需求的不断变化,我们需要不断更新知识和技能。通过掌握良好的数据库设计技术,我们能够更好地应对各种挑战,设计出高效、可靠的数据库系统。希望大家在今后的数据库设计实践中,能够灵活运用所学知识,在规则与变通之间找到最佳的平衡点。
数据库设计:规则遵循与变通之道
超级会员免费看
80

被折叠的 条评论
为什么被折叠?



