`
liwanchun_xd
  • 浏览: 123555 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

数据库设计的一些有效经验

阅读更多
1.是否使用联合主键?个人倾向于少采用联合主键。因为这样会降低索引的效率,联合主键一般都要用到至少一个业务字段,往往是字符串型的,而且理论上多字段的索引比单字段的索引要慢些。看上去似乎也不那么清爽。
在实际的设计中,我尽量避免使用联合主键,有些时候“不得不”使用联合主键。

2.PK采用无意义的字段(逻辑主键)还是有意义的字段(业务主键)?个人倾向于“逻辑主键”,理由是这样设计出的数据库模型结构清晰、关系脉络清楚,往往更符合“第三范式”(虽然不是故意的,呵呵)。而且更容易避开“联合主键”,而且可以使用索引效率高的字段类型,比如int、long、number。缺点是用无意义的字段建立表间的关系,使跨表查询增多,效率下降。(矛盾无处不在,前面刚说完可以提高效率,这里马上又降低效率)。“业务主键”可以提升查询编码的简洁度和效率。
个人使用实际状况,总体来说“逻辑主键”比“业务主键”执行效率低,但不会低到无法满足需求。采用“逻辑主键”比采用“业务主键”更利于数据库模型的结构、关系清晰,也更便于维护。
对于分析型数据库,如数据仓库,千万不要这样做。

3.不要使用多对多关系?个人倾向于少使用多对多关系。这个问题其实不是数据库设计的问题了,在数据库设计中,多对多关系也仅仅存在于概念模型(E-R)阶段,物理模型不在有多对多关系,实际数据库中也不会有“多对多”关系。这是使用ORM时的问题,比如使用Hibernate,多对多关系有时会使编码看起来灵活一些,代价是效率的明显降低。
个人实际使用中,设计时基本不考虑多对多关系,但编码时总会有小组成员使用一些多对多关系,自己建立多对多的ORM,使自己编码方便些,用在数据量小的地方,影响不大。大数据量,则“禁止使用”。

4.为每个表增加一个state字段?我习惯在设计时给每个表设一个state字段,取值0或1,默认值为1,具体业务意义或操作上的意义可以自定义。可以作为一个状态控制字段,如查询、更新、删除条件,单据是否有效(业务单据对应的表会有业务意义上的“有/无效”或“状态”字段,这种情况下,我还是会再加一个state字段),甚至仅仅是控制一条数据是否“有效”(有效的意义你自己定)。在数据迁移(如转入分析用的数据库)时也可能会发挥作用。

5.为每个表设置一些备用字段?没办法,我总是设计不出“完美”的数据表,给每个表加几个备用字段(我一般用字符串型,随你)可以应付“不时之需”,尤其是需要长期维护的、业务可能有临时性变动的系统。

6.尽量不要在一个表中存入其关联表的字段?建议不存!这样做确实可以提高查询效率,但在一个有很多表,并且关联表多的情况下,很难保持数据的一致性!数据库结构也比较糟糕。而且不存,也不会使效率十分低下。

7.不要去直接修改数据库?个人认为这点很重要,当需要修改时,应该先去修改模型,然后同步物理数据库,尤其是团队开发,否则要多做更多的事情来搞定,也可能会引入更多的错误。 
分享到:
评论

相关推荐

    数据库设计经验谈 数据库设计经验 数据库设计经验总结谈

    ### 数据库设计经验总结 #### 一、设计数据库之前的准备 **1.1 考察现有环境** 在设计新数据库之前,深入了解当前环境是非常重要的一步。这包括但不限于研究现有系统的架构、流程以及存在的问题。大多数情况下,...

    数据库设计经验谈,比较详细的数据库设计经验(doc文档),

    除了以上四部分,还有一些小技巧能优化数据库设计,如使用视图简化复杂查询,使用存储过程封装常用操作以提高效率,使用触发器确保数据的一致性。同时,保持数据库设计的灵活性,允许随着业务发展进行调整和扩展。 ...

    数据库设计经验.pdf

    ### 数据库设计经验知识点解析 #### 一、引言 在现代信息技术领域中,数据库设计是构建高效稳定的信息管理系统的核心环节之一。一个优秀的数据库不仅能够有效地存储和管理数据,还能提高系统的整体性能与稳定性。...

    公司数据库设计规范,提供数据库设计的项目经验

    本文将深入探讨"XX公司数据库设计规范",分享实际项目经验,帮助读者理解并掌握数据库设计的关键要点。 首先,规范化的数据库设计是确保数据一致性、完整性和可维护性的基础。在XX公司的实践中,遵循以下主要步骤:...

    数据库设计指南 数据库设计

    本文将深入探讨一系列由专业人士提供的宝贵经验和技巧,旨在帮助读者更好地理解并掌握数据库设计的核心理念。 #### 一、设计前的准备 1. **了解业务需求:** - 在开始设计数据库之前,首先要明确业务目标与需求,...

    数据库设计经验

    在数据库设计阶段,SQLDBA会参与数据库架构的设计,确保数据模型的有效性、可扩展性和性能。他们可能会使用SQL Server Management Studio(SSMS)进行数据库脚本编写,或者进行性能调优查询分析器(Profiler)的监控...

    浅谈数据库设计技巧经验

    数据库设计是软件开发中至关重要的环节,良好的数据库设计不仅能确保数据的有效存储与快速检索,还能为后续的应用扩展打下坚实的基础。根据“3分技术,7分经验”的原则,本文将通过分析不同水平的数据库设计者的特点...

    支付交易平台数据库设计文档

    数据库设计文档中所列出的一些术语和代码片段,如“BatchInfo”、“Channel_Settle_Cmd”、“Channel_Parm”等,可能是与特定业务逻辑相关的字段或代码命名约定。这表明数据库设计需要与业务流程紧密集成,满足各种...

    数据库设计指南-数据库设计教程

    这份"数据库设计指南-数据库设计教程"很可能包含了如何高效、有效地构建和优化数据库的宝贵信息。下面,我将根据标题和描述,以及可能包含在"db_design_tips.pdf"中的内容,为你详细阐述数据库设计的关键知识点。 1...

    mysql、pgsql自动生成数据库设计文档

    在IT行业中,数据库设计是开发过程中至关重要的一环。它涉及到数据结构、关系模型以及业务逻辑的规划,确保数据的有效存储和高效访问。`MySQL`和`PostgreSQL`(pgsql)是两种广泛使用的开源关系型数据库管理系统,它们...

    多级目录的数据库设计

    在数据库设计中,我们需要有效地映射这种层次结构到关系型数据库模型,以便于数据查询和操作。 在设计多级目录数据库时,有几种常见的方法: 1. **自连接表法**:创建一个单一的“目录”表,该表包含目录ID、目录...

    软件工程—数据库设计说明书

    ### 软件工程——数据库设计说明书知识点解析 #### 一、引言 - **编写目的**:本说明书旨在为数据库的设计与实现提供详细的指导,确保数据库满足软件系统的功能需求和性能需求。预期读者包括但不限于数据库设计师...

    系统设计规范和模板word+pdf版(架构设计、概要设计、详细设计和数据库设计)

    在IT行业中,系统设计是软件开发过程中的关键环节,它涉及到架构设计、概要设计、详细设计和数据库设计等多个步骤。这些步骤都是确保项目成功、高效且可维护的关键。以下是对这些知识点的详细阐述: 1. **架构设计*...

    数据库设计教程(第二版)pdf

    3. **数据库设计的目标**:确保数据库能够有效地支持所需的应用程序,并且具有较高的数据完整性、安全性和性能。 ### 数据库设计的过程 1. **需求分析**:确定数据库所要解决的问题,收集并分析用户的需求。 2. **...

    数据库设计文档 --软件开发中数据库设计

    通过以上步骤,我们可以创建一份详尽的数据库设计文档,确保软件开发团队能够按照设计有效地构建和维护数据库系统。在实际项目中,每个阶段都可能需要反复迭代和调整,以确保最终的数据库设计既满足业务需求,又能...

    超市数据库设计.pdf

    这也就要求数据库设计者具备专业的数据库设计知识和经验。 二、超市信息管理系统的功能需求 超市信息管理系统需要实现对商品信息、销售信息和员工信息的全面、动态、及时的管理。该系统应该包含以下几个模块:系统...

    数据库设计概论,介绍数据库设计的人物和特点、设计方法以及步骤

    学习并掌握数据库设计,意味着需要理解这些方法,灵活运用到实践中,利用适当的工具来辅助设计,从而能够有效地完成数据库的创建和实现。通过本章的学习,读者将能够按照规范化的步骤,运用各种设计技术,解决实际的...

    数据库设计系列:数据库设计5步骤.pdf

    本文将基于“数据库设计系列:数据库设计5步骤.pdf”文档,详细解析如何进行一个有效的数据库设计。 首先,设计一个数据库的第一步是确定数据库中的实体及它们之间的关系。这一步骤要求设计师首先明确数据库将承担...

    数据库设计教案.docx

    成功的数据库设计不仅要求设计者具备扎实的理论基础,还需要丰富的实践经验,以及能够遵循工程化的方法进行细致的工作。 本文主要介绍数据库设计的基本概念、任务、方法和过程,以及数据库的实施、维护和管理。通过...

Global site tag (gtag.js) - Google Analytics