转载:http://www.blogjava.net/relax/archive/2010/10/22/335905.html
第一次做数据库设计的开发人员,难免会碰到一些问题,根据自己的经验简单的总结一下这些问题,在没有更好的解决方法前的一种可能的备选方案。
一、 从技术上对表进行分组
我们在做业务数据库设计的时候,个人认为首先要从技术上对表进行分组,下面是个人的标准:
1、 流程和交易相关的表:它的特点是记录数保持最小,以便快速响应交易需求,并且相关交易主题对象的生命周期比较短;比如纳税申报表。或者可以称为操作数据库。
2、归档后的查询表:它的特点就是记录数很大,有足够多的索引,关键保持查询速度;它的特点就是查的多,改的少;比如车辆档案表。或者可以称为查询数据库。
3、 提供给分析使用的汇总表:它的特点就是表中存储了很多计算后的数据并且是冗余数据。如果使用BI,这一部分就不用了;如果自己设计为了出报表方便还是需要的;比如纳税情况归集表。或者可以称为查询分析表
4、支持类的表:这一类是对业务的支持,包括代码表、配置表、规则表等。
特别是1和2在设计时最好分别进行处理,不要将交易数据和查询数据混在一块;如果后续要分别部署交易服务器和查询服务器就麻烦了。
二、主键策略
个人建议在客户没有要求的情况下全部使用替代健而不是自然键,自然键是指业务本身的唯一区别,比如员工工号等。而替代健建议使用GUID,这样在有离线业务处理时也能应付。
1、替代健中的冗余问题
在使用替代健后,有一个问题就是需要频繁的查找自然健,个人建议增加冗余字段将自然健也加入关联表中。
2、代码管理策略
在客户没有特别要求的情况下,使用整数来表达代码。并确定代码表的建表策略,是建一个表统一管理还是分别建表管理?个人建议使用一个表管就行了。具体表设计后续可以和大家分享。
3、 字符串字典管理策略
我们经常碰到一个问题,内部一些状态和它的名称的管理;比如审批流程中的审核、批准等等,建议使用字符串字典表统一管理。具体表设计后续可以和大家分享。
4、 大字段管理策略
当碰到大字段时,建议尽量集中管理,并建在一个表空间(Oracle)或文件组(Sqlserver)上。后续和大家分享一下关于附件管理的表设计。
5、使用视图
个人很少使用视图,原因就是Powerdesign对视图设计支持不好,但是有几个方面给大家建议,所有的Select查询最好从视图检索,视图中将相应需要的中文信息统一带出来(比如:代码相对的名称或一个流程的状态名称等);这样统一处理前台需要的显示问题;在业务层构建对象模型时增加状态名称的属性以保持它;这样做的另一个好处就是减少和物理表的耦合性,毕竟一般系统中查询远比修改要多。
三、 使用标量函数
我们有时有这样的需求,要查今天的收入,要查最近7天的收入;这时我们可以使用标量函数来完成这个工作,并能保证时间以数据库服务器一致;当然还有很多其他用途,大家去发现。
下面是一个标量函数的声明来去给定日期当月的第一天:
Create function [dbo].[fn_BeginOfMonth](
@DayUTC datetime
)
returns datetime
1、使用模版表
用户需要做相似又有微小差别的录入或配置,可以使用模版表来增强用户体验。
2、 和业务相关的表都包含下列字段
CreatedBy 创建人
CreatedOn 创建时间
ModifiedBy 最后修改人
ModifiedOn 最后修改时间
VersionNumber版本号
特别是VersionNumber作为开放式锁的必要字段;在修改记录时可以通过它来判断用户提交数据时,是否其他人做过改动,以便后续处理。
分享到:
相关推荐
标准DB块的大小可以根据数据库的需要在1KB到32KB之间设置,但最常见的配置是8KB。这种设计使得数据库能够高效地利用磁盘空间,并通过缓冲区缓存来减少I/O操作。 1. 数据行存储:标准DB块将多个数据行存储在同一块中...
DB9接口RS232转TTL电平单片机烧写下载器是电子工程领域中常见的设备,用于将电脑上的编程数据通过串行通信方式传输到单片机内部进行程序烧录。这个设计通常涉及到RS232通信标准、TTL电平转换以及电路设计等方面的...
"Readme-说明.htm"通常包含了关于软件的详细安装步骤、使用指南和常见问题解答,对于首次使用的用户来说,这是一个非常重要的参考资料。"新建文本文档.txt"可能包含了额外的说明或开发者留下的笔记,用户应当查看以...
直接使用 MySQL 函数来访问数据库是一个常见问题。这种方法存在很多问题,例如 SQL 注入攻击和数据库连接字符串的硬编码。使用 PEAR DB 模块或 PHP Data Objects (PDO) 类可以避免这些问题。这些类提供了抽象层,...
DB44封装是电子设计领域中一种常见的连接器接口,主要应用于音频、视频以及数据通信等系统。在PCB(印制电路板)设计中,理解并正确使用DB44封装至关重要,因为它确保了电路板上的元件与外部设备之间稳定、可靠的...
DB9是RS232标准下最常见的一种物理连接器,而尺寸则是DB9接口最为关键的物理特性之一。 在提供的部分内容中,我们可以看到有关DB9接口一些具体的电性能参数和物理特性描述,尽管OCR扫描技术导致某些文字识别有误,...
5. **文档**:详细说明如何使用和部署DB-GPT,包括安装指南、API参考和常见问题解答。 6. **脚本**:用于数据处理、模型训练、评估和推理的Python脚本。 DB-GPT的应用场景广泛,例如: - **智能问答系统**:用户用...
DB系列封装是一种在电子工程领域常见的连接器封装形式,主要用于计算机和外围设备之间的数据通信接口。DB代表“D-subminiature”,意味着这种接口具有较小的体积。DB系列封装按照针脚数目可以分为多个子类,如DB9、...
8. **备份恢复与故障排查**:学习GaussDB的备份策略,如何进行数据恢复,以及常见问题的诊断和解决方法。 9. **安全性与权限管理**:掌握GaussDB的用户权限设置、角色管理和审计功能,确保数据库系统的安全运行。 ...
这些封装库包括了DB9、DB15、DB25、DB37以及DB50等不同接口类型,它们都是90度弯针型孔型设计,便于实际安装和连接。 首先,DB9是常见的串行接口,通常用于RS-232通信,常见于鼠标、键盘和串口打印机等设备。DB9...
- **常见问题**:使用 C++ API 访问 Berkeley DB XML 数据库时可能遇到的问题。 - **解决方法**:提供针对这些问题的解决方法和建议。 #### 19. XQuery 使用入门 - **19.1 XQuery 使用入门(一)** - **基础语法...
10. 数据库设计模式:了解并应用常见的数据库设计模式,如读写分离、主从复制等。 除了"db.pdf","www.pudn.com.txt"可能是下载来源的记录或者补充资料,它可能包含了更多关于数据库设计资源的链接或说明,进一步...
"D-sub DB25面板开孔尺寸.dwg"文件的提供,意味着设计者或工程师可以直接利用这个精确的CAD文件,确保在生产制造过程中,DB25接口能完美地嵌入设备面板,从而保证整个系统的正常运行和高效通信。
在EF中,DBFirst设计模式是一种常见的开发策略,尤其适合已经存在数据库结构的情况。这个实例项目将引导你了解如何使用EF DBFirst方法进行开发。 **1. EF DBFirst 基本概念** DBFirst意味着从现有的数据库开始。你...
### 射频(RF)电路设计中的常见问题及设计原则 #### 引言 射频(RF)电路设计,特别是微波以上频段的电路设计,因其高度的技术复杂性和不确定性,常被视为电子工程领域的一门“黑色艺术”。设计者不仅需要深入...
标题中的“db db2 dba”暗示了我们讨论的核心是关于数据库管理,特别是IBM的DB2数据库管理系统,以及与之相关的数据库管理员(DBA)工作。DB2是一款强大的关系型数据库系统,广泛应用于企业级数据存储和处理。DBA则...
- 在设计原理图时,若客户需用一段射频(RF)线与天线连接,或在客户板上设计连接器,推荐使用微带线,并且长度尽可能短,以减少衰减(控制在0.2dB以内),同时阻抗要控制在50欧姆。 - 在无线通信模块和天线连接器...
- **常见问题解答**:列出并解答关于Berkeley DB复制机制的一些常见问题。 #### 14. BDB读、写、删除、更新事物的简单例子 - **基本操作**:提供示例代码展示如何在Berkeley DB中执行基本的读写操作。 - **事务...
"DB接口(AD软件封装库)"的描述暗示了这是一个专为AD(可能是Application Development,应用程序开发)设计的,集成了数据库访问功能的软件组件或库。这个库通过封装数据库操作,使开发者能够更高效、更安全地在AD...
本篇主要讨论的是在使用DTS过程中遇到的一些常见设计问题。 首先,当尝试通过向导传输大量表(如几千个)的数据时,可能会遇到失败的情况。这是因为向导构建的数据流设计不适合处理如此庞大的数据量。设计上的限制...