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

转载 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:每个表加 创建记录时间,创建记录人,修改记录时间,修改记录人 四个字段的

相关文章推荐

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

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

变换型设计与事务型设计

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

项目小结---数据库设计

数据库表的设计,可以按对象和按功能载体划分。如记录该对象哪些属性,然后就需要哪些字段。但是表的设计不能只考虑对象的单一性,因为表中肯定需要存储多个该对象,所以需要考虑附加属性,如时间,时间一般包括录入...

Storm事务型(transactional)spout介绍(二)

接下来再介绍一下IOpaquePartitionedTransactionalSpout。前面说到IPartitionedTransactionalSpout在极罕见的情况下会卡住。而IOpaqueP...

Storm事务型(transactional)spout介绍(一)

针对目前主流的消息中间件都有分区的概念,Storm专门提供了backtype.storm.transactional.partitioned包。这里主要介绍一下IPartitionedTransact...

MySQL第三章-查询事务、视图、索引、数据库设计

数学函数          Floor ceiling round rand() 系统函数   注意:MD5对字符串加密. 事务 ...

软件工程 数据流图(DFD)变换型与事务型的分析

在系统分析阶段,我们采用结构化分析方法得到了由数据流图、数据字典和加工说明等组成的系统的逻辑模型。现在,可根据一些规则从数据流图导出系统初始的模块结构图。 管理信息系统的数据流图通常也可分为两种...

BPM中常见子流程使用场景介绍二(内嵌型、事务型、事件型)

接上篇《BPM中常见子流程使用场景介绍(一:复用型、集成型)》,本文将对另外几种类型进行介绍。分别是“内嵌型”、“事务型”、“事件型”, 本质上“事务型”与“事件型”也是属于内嵌型,但后两种类型在内嵌...

关系型数据库设计原则与注意事项

字段尽量设置为Not Null认真规范字段大小,越小越好;数据类型越简单越好表中不应该有重复值和字段表中记录应有唯一标志符表名规范前缀一个表尽量存储一个对象本身小数空间占用可能比整数大,精度高时会消耗...
  • xundh
  • xundh
  • 2015年03月20日 09:44
  • 2671

[ mongoDB ] - 文档型数据库设计模式-如何存储树形数据

在数据库中存储树形结构的数据,这是一个非常普遍的需求,典型的比如论坛系统的版块关系。在传统的关系型数据库中,就已经产生了各种解决方案。 此文以存储树形结构数据为需求,分别描述了利用关系型数据库和文档...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:针对事务型数据库设计小结
举报原因:
原因补充:

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