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

转载 2006年06月13日 17:22:00

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

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

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

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

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

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

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

变换型设计与事务型设计

信息系统的数据流图通常也可分为两种典型的结构,即变换型结构和事务型结构。变换型结构由三部分组成:输入、数据加工(中心变换)和输出。在变换型结构中,信息沿输入通路进入系统,同时由外部形式变换成内部形式,...
  • u013288190
  • u013288190
  • 2016年09月25日 18:36
  • 544

数据库事务四种隔离级别

定义: 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(未授权读取、读未提交)、Read c...
  • zhangnana200
  • zhangnana200
  • 2016年08月10日 18:09
  • 1021

项目数据库设计小结

鉴于教务系统基础数据库的构建整整用了我们一个月时间,为了这一个月,也需要写篇博客总结一下。首先说一下教务系统现有部分,方便对下面内容的说明:教务系统包括四部分:基础系统、考试系统、评教系统、选课系统,...
  • lidaasky
  • lidaasky
  • 2013年03月04日 16:42
  • 1945

关系型数据库工作原理-事务管理(一)(翻译自Coding-Geek文章)

原文链接:http://coding-geek.com/how-databases-work/#Buffer-Replacement_strategies 紧接上一篇文章,本文翻译了如下章节: ...
  • ylforever
  • ylforever
  • 2016年04月03日 16:33
  • 5367

关系型数据库表结构的两个设计技巧

设计关系型数据库的表时,需要给表添加一个ID字段(自增字段,或者uuid字段)和一个version字段(数值类型)。ID字段作为物理主键,用于保证记录的不可重复性和用作外键关联。 ve...
  • shendl
  • shendl
  • 2015年08月12日 13:17
  • 5130

关系型数据库知识小结

一、基础术语 DML(data manipulation language): 如SELECT、UPDATE、INSERT、DELETE,主要用来对数据库里的数据进行操作的语言 DDL(data...
  • zffenger
  • zffenger
  • 2016年09月05日 22:25
  • 640

事务型开发(如何设计防重入接口)

半年前,自己从BD来到一个创业小公司,开始接触事务型开发的一些基本技术。自己的服务器开发技术最开始部分源于腾讯,主要是使用服务器的单线程异步IO模型+UDP+状态机来做一些事情。对于很多高并发的服务是...
  • dreamvyps
  • dreamvyps
  • 2015年12月03日 11:36
  • 3529

事务型数据库设计经验

以下是针对事务型数据库设计经验: 1.数据库设计经验之是否使用联合主键? 个人倾向于少采用联合主键。因为这样会降低索引的效率,联合主键一般都要用到至少一个业务字段,往往是字符串型的,而且理论上多字...
  • haofeng_xiaohai
  • haofeng_xiaohai
  • 2014年06月23日 17:25
  • 734

数据库事务解析及事务四个特性

    1.数据并发的问题      一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库。数据库中的相同数据可能同时被多个事务访问,如果没有采取必要的隔离措施,就会导致各种并...
  • lauray_
  • lauray_
  • 2016年01月20日 11:27
  • 1759

EJB学习笔记之八(通俗易懂数据库中的事务)

1.事务概念 事务是由一步或者几步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。 通俗的说的话,事务就是一件事情,要么成功执行到底,要么回到起点,什么都不做。 事物的特...
  • ZHOUCHAOQIANG
  • ZHOUCHAOQIANG
  • 2015年08月01日 08:04
  • 1356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:针对事务型数据库设计小结
举报原因:
原因补充:

(最多只允许输入30个字)