`
daweiangel
  • 浏览: 326429 次
  • 性别: 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的基础上,要求消除非...

    简单的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 ...

    redis设计与实现原理及运作机制

    **小结** 简单动态字符串(SDS)是Redis中一种重要的基础数据结构,它在保证字符串操作高效的同时,也为Redis提供了灵活的内存管理机制。 ##### 1.2 双端链表 (Doubly Linked List) **双端链表的应用** 双端链表在...

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

Global site tag (gtag.js) - Google Analytics