轻松

记述我学习java的里程

常用链接

统计

积分与排名

友情链接

最新评论

给新人的建议:Db设计的常见问题的解决

第一次做数据库设计的开发人员,难免会碰到一些问题,根据自己的经验简单的总结一下这些问题在没有更好的解决方法前的一种可能的备选方案。

Ø 从技术上对表进行分组

我们在做业务数据库设计的时候,个人认为首先要从技术上对表进行分组,下面是个人的标准:

1)      流程和交易相关的表:它的特点是记录数保持最小,以便快速响应交易需求,并且相关交易主题对象的生命周期比较短;比如纳税申报表。或者可以称为操作数据库。

2)      归档后的查询表:它的特点就是记录数很大,有足够多的索引,关键保持查询速度;它的特点就是查的多,改的少;比如车辆档案表。或者可以称为查询数据库。

3)      提供给分析使用的汇总表:它的特点就是表中存储了很多计算后的数据并且是冗余数据。如果使用BI,这一部分就不用了;如果自己设计为了出报表方便还是需要的;比如纳税情况归集表。或者可以称为查询分析表

4)      支持类的表:这一类是对业务的支持,包括代码表、配置表、规则表等。

特别是12在设计时最好分别进行处理,不要将交易数据和查询数据混在一块;如果后续要分别部署交易服务器和查询服务器就麻烦了。

Ø 主键策略

个人建议在客户没有要求的情况下全部使用替代健而不是自然键,自然键是指业务本身的唯一区别,比如员工工号等。而替代健建议使用GUID,这样在有离线业务处理时也能应付。

Ø 替代健中的冗余问题

在使用替代健后,有一个问题就是需要频繁的查找自然健,个人建议增加冗余字段将自然健也加入关联表中。

Ø 代码管理策略

在客户没有特别要求的情况下,使用整数来表达代码。并确定代码表的建表策略,是建一个表统一管理还是分别建表管理?个人建议使用一个表管就行了。具体表设计后续可以和大家分享。

Ø 字符串字典管理策略

我们经常碰到一个问题,内部一些状态和它的名称的管理;比如审批流程中的审核、批准等等,建议使用字符串字典表统一管理。具体表设计后续可以和大家分享。

Ø 大字段管理策略

当碰到大字段时,建议尽量集中管理,并建在一个表空间(Oracle)或文件组(Sqlserver)上。后续和大家分享一下关于附件管理的表设计。

Ø 使用视图

个人很少使用视图,原因就是Powerdesign对视图设计支持不好,但是有几个方面给大家建议,所有的Select查询最好从视图检索,视图中将相应需要的中文信息统一带出来(比如:代码相对的名称或一个流程的状态名称等);这样统一处理前台需要的显示问题;在业务层构建对象模型时增加状态名称的属性以保持它;这样做的另一个好处就是减少和物理表的耦合性,毕竟一般系统中查询远比修改要多。

Ø 使用标量函数

我们有时有这样的需求,要查今天的收入,要查最近7天的收入;这时我们可以使用标量函数来完成这个工作,并能保证时间以数据库服务器一致;当然还有很多其他用途,大家去发现。

下面是一个标量函数的声明来去给定日期当月的第一天:

Create function [dbo].[fn_BeginOfMonth](

 @DayUTC         datetime

)

returns datetime

Ø 使用模版表

用户需要做相似又有微小差别的录入或配置,可以使用模版表来增强用户体验。

Ø 和业务相关的表都包含下列字段

CreatedBy 创建人

CreatedOn 创建时间

ModifiedBy 最后修改人

ModifiedOn 最后修改时间

VersionNumber版本号

特别是VersionNumber作为开放式锁的必要字段;在修改记录时可以通过它来判断用户提交数据时,是否其他人做过改动,以便后续处理。

暂写这么多,希望大家补充。


声明:此文章并非本人原创,转自公司的内部论坛,是公司一的位同事也是我的领导所写,觉得不错转出来与大家共勉。

posted on 2010-10-22 17:32 轻松 阅读(2811) 评论(1)  编辑  收藏 所属分类: 其他文章

评论

# re: 给新人的建议:Db设计的常见问题的解决 2010-10-25 14:02 StevenF-nate

讲的很实用,期待楼主下文  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: