`
daweiangel
  • 浏览: 327325 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

针对事务型数据库设计小结

阅读更多
以下是针对事务型数据库:

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

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

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

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

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

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

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

相关推荐

    数据库知识小结

    数据库三范式是设计关系型数据库时遵循的规则,旨在减少数据冗余和提高数据的一致性。第一范式(1NF)要求数据库中的每一列都是不可分割的基本数据项,避免多值依赖;第二范式(2NF)在满足1NF的基础上,要求消除非...

    ldap开发小结

    ### LDAP开发小结 #### 一、LDAP简介 LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是一种开放的互联网标准协议,主要用于管理和访问分布在目录服务中的信息。相较于传统的关系型数据库,...

    简单的SQL server2000+access数据库管理系统

    首先,SQL Server 2000是微软公司开发的一款关系型数据库管理系统(RDBMS),它提供了强大的数据存储、处理和安全功能。SQL Server支持标准的SQL语言,用户可以通过结构化查询语言来创建、更新和查询数据。它的事务...

    SQL Server2005基础教程

    作者 迪尤逊 出版社 人民邮电出版社 本书重点阐述了SQL Server 2005的基础知识,前半部分以建立一个金融数据库系统为主线,从最基础的收集信息入手,一步步地引导读者学会如何保证数据库的安全,创建表... 14.6 小结

    20数据库的备份与还原内.docx

    课堂小结强调了实践的重要性,只有通过不断的练习,才能真正掌握数据库的备份与恢复技巧。作业部分让学生根据实际情况设计备份方案,旨在培养他们的独立思考和解决问题的能力。 总的来说,数据库的备份与恢复是一个...

    JAVA 模块知识小结

    MySQL是一个流行的开源关系型数据库管理系统,广泛应用于Web应用的数据库解决方案。 11. JAVA EE和JAVA ME JAVA EE(Java Platform, Enterprise Edition)是Java的一个平台标准,专注于企业级应用程序的开发。...

    Oracle9i 数据库管理基础

    - **小结**:总结了本章介绍的工具及其用途。 #### 六、管理Oracle实例 - **目标**:讲解如何管理Oracle9i数据库实例,包括配置初始化参数、启动和关闭实例等。 - **初始化参数文件**:初始化参数文件包含了配置...

    软件测试知识小结

    ### 软件测试知识小结 #### 测试理论知识 **什么是软件测试?** 软件测试是为了寻找软件中的错误而运行软件的过程。一个成功的测试意味着发现了迄今为止尚未发现的错误。软件测试的根本目的是发现软件缺陷、提升...

    超越MySQL 对流行数据库进行分支的知识小结

    MySQL作为开源数据库的先驱,因其免费、高效和易于使用的特点,成为众多网站和应用程序的首选。然而,随着技术的发展和不同用户需求的多样化,MySQL的某些局限性逐渐显现,这催生了多个针对MySQL核心产品的高端衍生...

    javaSE与javaEE基础部分小结

    ### JavaSE与JavaEE基础部分小结 #### JavaSE 基础知识点 ##### Java语言特点 1. **跨平台性**:Java的核心优势之一在于它的可移植性,即“一次编写,处处运行”。这意味着Java程序可以在任何安装了Java运行环境...

    亮剑.NET深入体验与实战精要2

    本章小结 77 第2章 细节决定成败 79 2.1 Equals()和运算符==的区别 80 2.2 const和readonly的区别 82 2.3 private、protected、public和internal的区别 86 2.4 sealed、new、virtual、abstract与override 87 2.5 ...

    亮剑.NET深入体验与实战精要3

    本章小结 77 第2章 细节决定成败 79 2.1 Equals()和运算符==的区别 80 2.2 const和readonly的区别 82 2.3 private、protected、public和internal的区别 86 2.4 sealed、new、virtual、abstract与override 87 2.5 ...

    iBATIS实战

    1.5 小结 24 第2章 iBATIS是什么 26 2.1 映射SQL语句 27 2.2 iBATIS如何工作 29 2.2.1 iBATIS之于小型、简单系统 30 2.2.2 iBATIS之于大型、企业级系统 31 2.3 为何使用iBATIS 31 2.3.1 简单性 32 2.3.2 生产效率 ...

    Teradata基础教程(第一版中文).doc

    Teradata是一个高度并行处理(MPP)的关系型数据库管理系统,广泛应用于大型企业的数据仓库解决方案中。 在数据仓库领域,Teradata教程首先介绍了基本概念。背景介绍部分阐述了数据仓库的起源和发展,它作为一种...

    Advanced Data Management: NewSQL systems and F1

    NewSQL(新一代SQL)系统是一类结合了传统关系型数据库的优点与NoSQL系统的可扩展性及性能优势的新一代数据库管理系统。NewSQL系统旨在解决大规模分布式环境下的高性能事务处理需求,同时保持对SQL语言的支持以及...

    ADO.NET本质论.pdf

    1.7 小结 第2章 ado.net基础 2.1 数据访问和.net体系结构 2.2 两种数据访问模式 .2.3 连接模式 2.3.1 oledb和sqlclient数据提供程序 2.3.2 使用ado.net数据提供程序编写泛型数据访问代码 ...

    第12章_第12章数据仓库技术.pptx

    12.7 小结:本章总结了数据仓库技术的关键点,强调了从数据库到数据仓库的转变原因,以及数据仓库的核心特点和构建过程。数据仓库是企业决策支持的关键组成部分,它提供了一个高效、集中、专门针对分析处理的数据...

    Teradata基础教程

    4. **详细数据与小结数据**:详细数据包含所有原始交易细节,适合深度分析;小结数据是经过汇总和聚合的数据,用于快速报告和概览。 5. **数据仓库与数据集市**:数据仓库是整个企业的数据存储,而数据集市是针对...

Global site tag (gtag.js) - Google Analytics