`

数据库表的设计方法和原则

 
阅读更多

在目前的企业信息系统中,数据库还是最佳的数据存储方式,虽然已经有很多的书籍在指导我们进行数据库设计,但应该那种方式是设计数据库的表结构的最好方法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思考和总结的问题,下文是我针对这几个问题根据自己的设计经历准备总结的一篇文章的提纲,欢迎大家一块进行探讨,集思广益。其中提到了领域建模的概念,但未作详细解释,希望以后能够有时间我们针对这个命题进行深入探讨。

1)不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之间的关联应尽可能减少,如果不同组件间的表需要外键关联也尽量不要创建外键关联,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统或表结构的重构提供可能性。

2)采用领域模型驱动的方式和自顶向下的思路进行数据库设计,首先分析系统业务,根据职责定义对象。对象要符合封装的特性,确保与职责相关的数据项被定义在一个对象之内,这些数据项能够完整描述该职责,不会出现职责描述缺失。并且一个对象有且只有一项职责,如果一个对象要负责两个或两个以上的职责,应进行分拆。

3)根据建立的领域模型进行数据库表的映射,此时应参考数据库设计第二范式:一个表中的所有非关键字属性都依赖于整个关键字。关键字可以是一个属性,也可以是多个属性的集合,不论那种方式,都应确保关键字能够保证唯一性。在确定关键字时,应保证关键字不会参与业务且不会出现更新异常,这时,最优解决方案为采用一个自增数值型属性或一个随机字符串作为表的关键字。

4)由于第一点所述的领域模型驱动的方式设计数据库表结构,领域模型中的每一个对象只有一项职责,所以对象中的数据项不存在传递依赖,所以,这种思路的数据库表结构设计从一开始即满足第三范式:一个表应满足第二范式,且属性间不存在传递依赖。

5)同样,由于对象职责的单一性以及对象之间的关系反映的是业务逻辑之间的关系,所以在领域模型中的对象存在主对象和从对象之分,从对象是从1-N或N-N的角度进一步主对象的业务逻辑,所以从对象及对象关系映射为的表及表关联关系不存在删除和插入异常。

6)在映射后得出的数据库表结构中,应再根据第四范式进行进一步修改,确保不存在多值依赖。这时,应根据反向工程的思路反馈给领域模型。如果表结构中存在多值依赖,则证明领域模型中的对象具有至少两个以上的职责,应根据第一条进行设计修正。第四范式:一个表如果满足BCNF,不应存在多值依赖。

7)在经过分析后确认所有的表都满足二、三、四范式的情况下,表和表之间的关联尽量采用弱关联以便于对表字段和表结构的调整和重构。并且,我认为数据库中的表是用来持久化一个对象实例在特定时间及特定条件下的状态的,只是一个存储介质,所以,表和表之间也不应用强关联来表述业务(数据间的一致性),这一职责应由系统的逻辑层来保证,这种方式也确保了系统对于不正确数据(脏数据)的兼容性。当然,从整个系统的角度来说我们还是要尽最大努力确保系统不会产生脏数据,单从另一个角度来说,脏数据的产生在一定程度上也是不可避免的,我们也要保证系统对这种情况的容错性。这是一个折中的方案。

8)应针对所有表的主键和外键建立索引,有针对性的(针对一些大数据量和常用检索方式)建立组合属性的索引,提高检索效率。虽然建立索引会消耗部分系统资源,但比较起在检索时搜索整张表中的数据尤其时表中的数据量较大时所带来的性能影响,以及无索引时的排序操作所带来的性能影响,这种方式仍然是值得提倡的。

9)尽量少采用存储过程,目前已经有很多技术可以替代存储过程的功能如“对象/关系映射”等,将数据一致性的保证放在数据库中,无论对于版本控制、开发和部署、以及数据库的迁移都会带来很大的影响。但不可否认,存储过程具有性能上的优势,所以,当系统可使用的硬件不会得到提升而性能又是非常重要的质量属性时,可经过平衡考虑选用存储过程。

10)当处理表间的关联约束所付出的代价(常常是使用性上的代价)超过了保证不会出现修改、删除、更改异常所付出的代价,并且数据冗余也不是主要的问题时,表设计可以不符合四个范式。四个范式确保了不会出现异常,但也可能由此导致过于纯洁的设计,使得表结构难于使用,所以在设计时需要进行综合判断,但首先确保符合四个范式,然后再进行精化修正是刚刚进入数据库设计领域时可以采用的最好办法。

11)设计出的表要具有较好的使用性,主要体现在查询时是否需要关联多张表且还需使用复杂的SQL技巧。

12)设计出的表要尽可能减少数据冗余,确保数据的准确性,有效的控制冗余有助于提高数据库的性能
分享到:
评论

相关推荐

    经典数据库设计14个原则

    ### 经典数据库设计14个原则 #### 1. 实体关系的一对一、一对多、多对多关系 - **定义与解释**:在数据库设计中,实体之间的关系通常分为一对一(1:1)、一对多(1:N)或多对多(N:M)。一对一指的是两个实体之间...

    数据库表设计工具

    2. **表设计**:在数据库设计中,表设计是核心环节,它定义了数据如何组织和存储。这涉及到以下几个方面: - 字段定义:每个表由多个字段组成,每个字段都有特定的数据类型(如整数、文本、日期等)和属性(如是否...

    数据库表设计数据库表设计.doc

    数据库表设计知识点总结 数据库表设计是数据库设计的重要组成部分,对于构建高效、可靠、可扩展的数据库...遵循数据库表设计原则和步骤,使用数据库表设计技术和工具,可以确保设计的数据库表结构合理、可靠、可扩展。

    数据库索引设计原则.

    数据库索引设计原则是 Oracle 数据库管理系统中的一项重要技术,旨在提高数据库的查询效率和性能。以下是数据库索引设计原则的详细解释。 一、基本原则 数据库索引设计原则的基本原则是确保数据库的查询效率和性能...

    数据库设计原则优化数据库的设计

    数据库设计是构建高效、稳定、易维护的信息系统的关键环节。本文将探讨一些核心的设计原则,旨在优化数据库的设计,...遵循这些原则,可以显著优化数据库设计,确保系统的稳定性和扩展性,降低维护成本,提高开发效率。

    DB2数据库设计和最高性能原则

    在讨论性能原则和方法学时,强调了在应用程序和数据库设计初期就应考虑性能特征,以便在开发过程中做出正确的设计决策。关注点应集中在关键的DB2数据和程序上,特别是那些处理大量数据、有高响应时间需求、复杂逻辑...

    数据库设计准则及方法论.pdf

    本文将从数据库设计的角度,讨论数据库设计的准则和方法论。 一、数据库设计准则 数据库设计的准则是指在设计数据库时需要遵循的一些基本原则,这些原则旨在确保数据库的正确性、完整性和可扩展性。以下是数据库...

    数据库设计原则与技巧

    ### 数据库设计原则与技巧详解 #### 一、数据库设计原则概述 数据库设计是构建高效、稳定、可扩展数据存储系统的关键步骤。优秀的数据库设计不仅能提高数据管理的效率,还能确保数据的一致性和完整性,降低后期...

    为数据库表设计可扩展的字段

    在数据库设计中,确保表结构具有良好的扩展性是至关重要的,因为这直接影响到系统的灵活性、维护性和性能。本文将深入探讨如何为数据库表设计可扩展的字段,以便在未来的需求变化或业务扩展时能够轻松应对。 首先,...

    动态树形菜单数据库表设计

    在传统的数据库设计中,通常遵循第三范式的原则,即数据表应该只包含直接关联于主键的信息,避免出现非主键字段之间的依赖关系。这种方式可以有效减少数据冗余,但是也带来了一些问题: 1. **查询效率低:** 如果...

    数据库中表的主键设计原则收藏.doc

    "数据库中表的主键设计原则收藏" 在设计数据库表时,主键的设计是非常重要的一步。一个好的主键设计可以提高数据库的性能和可维护性,而一个糟糕的主键设计可能会带来一系列的问题。本文将讨论数据库中表的主键设计...

    数据库设计原则总结

    数据库设计原则总结 本文总结了数据库设计的重要原则,包括原始单据与实体之间的关系、主键与外键的设计、基本表的性质、范式标准、通俗地理解三个范式、要善于识别与正确处理多对多的关系、主键PK的取值方法等七个...

    【最新编排】数据库表结构设计方法及原则.doc

    【最新编排】数据库表结构设计方法及原则

    c06数据库表设计设计设计

    V200R001C12数据库表设计(动漫游戏基地).doc”、“SAG_V200R001C12数据库表设计.doc”和“SGP数据库表设计.doc”中可能会有更深入的阐述,包括特定行业如动漫游戏领域的数据库设计方案和最佳实践。这些文档是深入...

    数据库表设计数据库表设计

    数据库表设计是构建高效、稳定、可扩展的数据库系统的核心环节。它涉及到多个关键知识点,包括...在实际应用中,如交友网站的设计,我们需要综合运用各种数据库设计原则和技术,以满足功能需求并提供良好的用户体验。

    数据库 表 设计规范及命名规范

    数据库设计规范的设计原则主要包括总体原则和具体要求两部分。总体原则包括: * 数据库设计应满足业务需求,确保数据的一致性和完整性。 * 数据库设计应遵循软件公司的技术架构和标准。 * 数据库设计应考虑到数据的...

    1数据库设计文档.doc

    数据库设计原则 6 1.2.1. 数据库SID 6 1.2.2. 数据库全局名 6 1.2.3. 数据库类型选择 6 1.2.4. 数据库连接类型选择 7 1.2.5. 数据库SGA配置 7 1.2.6. 数据库字符集选择 8 1.2.7. 数据库其他参数配置 9 1.2.8. ...

    数据库课程设计-链表的简单操作

    数据库课程设计是学习数据库管理与应用的重要...总的来说,数据库课程设计通过链表的简单操作,让学生实践数据库设计的基本原则,掌握SQL Server的使用,理解数据库设计的各个阶段,为未来从事相关工作打下坚实基础。

Global site tag (gtag.js) - Google Analytics