最近发现自己的表设计能力不行,所以转篇文章看看:
在目前的企业信息系统中,数据库还是最佳的数据存储方式,虽然已经有很多的书籍在指导我们进行数据库设计,但应该那种方式是设计数据库的表结构的最好方法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思考和总结的问题,下文是我针对这几个问题根据自己的设计经历准备总结的一篇文章的提纲,欢迎大家一块进行探讨,集思广益。其中提到了领域建模的概念,但未作详细解释,希望以后能够有时间我们针对这个命题进行深入探讨。
1)不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之间的关联应尽可能减少,如果不同组件间的表需要外键关联也尽量不要创建外键关联,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统或表结构的重构提供可能性。
2)采用领域模型驱动的方式和自顶向下的思路进行数据库设计,首先分析系统业务,根据职责定义对象。对象要符合封装的特性,确保与职责相关的数据项被定义在一个对象之内,这些数据项能够完整描述该职责,不会出现职责描述缺失。并且一个对象有且只有一项职责,如果一个对象要负责两个或两个以上的职责,应进行分拆。
3)根据建立的领域模型进行数据库表的映射,此时应参考数据库设计第二范式:一个表中的所有非关键字属性都依赖于整个关键字。关键字可以是一个属性,也可以是多个属性的集合,不论那种方式,都应确保关键字能够保证唯一性。在确定关键字时,应保证关键字不会参与业务且不会出现更新异常,这时,最优解决方案为采用一个自增数值型属性或一个随机字符串作为表的关键字。
4)由于第一点所述的领域模型驱动的方式设计数据库表结构,领域模型中的每一个对象只有一项职责,所以对象中的数据项不存在传递依赖,所以,这种思路的数据库表结构设计从一开始即满足第三范式:一个表应满足第二范式,且属性间不存在传递依赖。
5)同样,由于对象职责的单一性以及对象之间的关系反映的是业务逻辑之间的关系,所以在领域模型中的对象存在主对象和从对象之分,从对象是从1-N或N-N的角度进一步主对象的业务逻辑,所以从对象及对象关系映射为的表及表关联关系不存在删除和插入异常。
6)在映射后得出的数据库表结构中,应再根据第四范式进行进一步修改,确保不存在多值依赖。这时,应根据反向工程的思路反馈给领域模型。如果表结构中存在多值依赖,则证明领域模型中的对象具有至少两个以上的职责,应根据第一条进行设计修正。第四范式:一个表如果满足BCNF,不应存在多值依赖。
7)在经过分析后确认所有的表都满足二、三、四范式的情况下,表和表之间的关联尽量采用弱关联以便于对表字段和表结构的调整和重构。并且,我认为数据库中的表是用来持久化一个对象实例在特定时间及特定条件下的状态的,只是一个存储介质,所以,表和表之间也不应用强关联来表述业务(数据间的一致性),这一职责应由系统的逻辑层来保证,这种方式也确保了系统对于不正确数据(脏数据)的兼容性。当然,从整个系统的角度来说我们还是要尽最大努力确保系统不会产生脏数据,单从另一个角度来说,脏数据的产生在一定程度上也是不可避免的,我们也要保证系统对这种情况的容错性。这是一个折中的方案。
8)应针对所有表的主键和外键建立索引,有针对性的(针对一些大数据量和常用检索方式)建立组合属性的索引,提高检索效率。虽然建立索引会消耗部分系统资源,但比较起在检索时搜索整张表中的数据尤其时表中的数据量较大时所带来的性能影响,以及无索引时的排序操作所带来的性能影响,这种方式仍然是值得提倡的。
9)尽量少采用存储过程,目前已经有很多技术可以替代存储过程的功能如“对象/关系映射”等,将数据一致性的保证放在数据库中,无论对于版本控制、开发和部署、以及数据库的迁移都会带来很大的影响。但不可否认,存储过程具有性能上的优势,所以,当系统可使用的硬件不会得到提升而性能又是非常重要的质量属性时,可经过平衡考虑选用存储过程。
10)当处理表间的关联约束所付出的代价(常常是使用性上的代价)超过了保证不会出现修改、删除、更改异常所付出的代价,并且数据冗余也不是主要的问题时,表设计可以不符合四个范式。四个范式确保了不会出现异常,但也可能由此导致过于纯洁的设计,使得表结构难于使用,所以在设计时需要进行综合判断,但首先确保符合四个范式,然后再进行精化修正是刚刚进入数据库设计领域时可以采用的最好办法。
11)设计出的表要具有较好的使用性,主要体现在查询时是否需要关联多张表且还需使用复杂的SQL技巧。
12)设计出的表要尽可能减少数据冗余,确保数据的准确性,有效的控制冗余有助于提高数据库的性能。
分享到:
相关推荐
【最新编排】数据库表结构设计方法及原则
数据库表结构设计是软件开发中的核心环节,良好的设计不仅能确保项目的顺利进行,还能显著降低开发工作量。在设计过程中,我们需要关注以下几个关键知识点: 1. 原始单据与实体的关系:通常,原始单据与实体之间...
在深入研究速达数据库表结构时,还需要注意数据库的规范化程度,即是否遵循了第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等设计原则,这将影响到数据的一致性、完整性和查询效率。同时,数据库的索引设置也...
数据库表结构设计是本标准的核心内容之一。它将数据库中的数据按照13大类信息进行划分,包括降水、蒸发、河道、水库、闸坝、泵站、潮汐、沙情、冰情、地下水、墒情、特殊水情和水文预报等。每种类型的信息又可以细分...
本资源集合了日常使用中的经验总结和部分软件使用说明,旨在为用户提供一个全面了解金碟数据库表结构的指南。以下是针对工业数据库表和商业数据库表的字段说明,以及常用数据单的详细解析。 首先,我们来看“金碟...
"基础水文数据库表结构及标识符标准"文档着重阐述了如何构建一个有效、规范化的数据库系统,以确保数据的一致性、完整性和可访问性。以下是对这个主题的详细解释: 一、表结构设计 1. 主表与子表:在基础水文...
数据库表结构是该系统的核心组成部分,它决定了数据的组织方式和存储逻辑,对系统的性能、稳定性和可维护性具有深远影响。 1. **质量管理系统**: 质量管理系统中的数据库表结构可能包括产品信息表、检验标准表、...
1. 数据库表结构设计:数据库表是存储数据的主要容器,对于实时雨水情信息,可能包含如降雨量、水位、流量等关键指标。表格设计应遵循规范化原则,避免数据冗余和不一致性。表间关系可能涉及一对一、一对多或多对多...
数据库表设计知识点总结 数据库表设计是数据库设计的重要组成部分,对于构建高效、可靠、可扩展的数据库...遵循数据库表设计原则和步骤,使用数据库表设计技术和工具,可以确保设计的数据库表结构合理、可靠、可扩展。
【数据库表结构设计】 在设计数据库表结构时,首要任务是理解原始单据与实体之间的关系。这通常涉及一对一、一对多以及多对多的关系。一对一关系是最常见的情况,即一张原始单据对应唯一实体。然而,特殊情况下可能...
- **应用场景**:当业务需求发生变化或技术进步时,可能需要调整数据库的表结构或字段类型等。 #### 4. 规范化原则 - **规范化的作用**:通过规范化过程减少数据冗余并提高数据完整性。 - **规范化的级别**: - ...
- 界面友好:提供直观的图形用户界面,使得数据库表结构的设计过程变得简单。 - 快速建模:能够快速创建和修改表结构,包括字段定义、键约束、索引等。 - 免费使用:对于个人或小型项目,EZDML提供免费版本,降低...
以上各模块的数据库表结构设计都需要遵循规范化原则,避免数据冗余和异常,同时考虑性能优化,如合理使用索引和分区策略。在实际操作中,还应结合具体的业务需求和技术环境进行调整和优化,确保泛微Ecology8.0系统的...
K3数据库表结构遵循了关系型数据库的基本设计原则,如规范化、数据完整性和事务一致性。规范化减少了数据冗余,提高了数据一致性;数据完整性保证了数据的准确无误;事务一致性确保了在并发操作下的数据一致性,为...
### 数据库表设计原则技巧详解 #### 一、原始单据与实体之间的关系 在数据库设计过程中,理解和处理原始单据与实体之间的关系至关重要。原始单据与实体之间的关系可以是一对一、一对多或者多对多的形式。通常情况...
在IT行业中,数据库管理和API接口设计是两个至关重要的...总的来说,从MySQL数据库表结构生成接口文档的过程包括理解数据库模型、定义HTTP操作、设计请求和响应格式,并确保文档清晰易懂,方便团队协作和API的使用。
在数据库标识符设计方面,标准明确了标识符的设计原则和方法,确保了数据库标识符的一致性与唯一性。标识符的命名规则、结构和格式等规范对于维护数据库系统的完整性和一致性有着至关重要的作用。例如,采用标准化的...
数据库设计准则及方法论.pdf 数据库设计是数据库开发的关键步骤,对于数据库的设计直接影响到系统的性能和可扩展性。本文将从数据库设计的角度,讨论数据库设计的准则和方法论。 一、数据库设计准则 数据库设计的...