2026-10-22 08:54:43
14个实用的数据库设计技巧如下:
明确原始单据与实体的对应关系:原始单据与实体间存在一对一、一对多、多对多关系。一般是一对一,特殊情况为一对多或多对一。明确此关系利于设计录入界面,如员工履历资料对应员工基本情况、社会关系、工作简历三个基本表,是“一张原始单证对应多个实体”的例子。
合理设计主键与外键:实体一般不能既无主键又无外键。叶子部位实体可无主键但必须有外键。主键是实体高度抽象,主键与外键配对表示实体连接,在全局数据库设计中地位重要。
把握基本表的性质:基本表具有原子性(字段不可再分解)、原始性(记录是原始数据)、演绎性(可派生所有输出数据)、稳定性(结构相对稳定,记录长期保存)四个特性,设计时要与中间表、临时表区分开。
灵活运用范式标准:基本表及其字段关系尽量满足第三范式,但满足第三范式的数据库设计不一定最好。为提高运行效率,常降低范式标准,适当增加冗余以空间换时间,如商品基本表中增加“金额”冗余字段可提高查询统计速度。
通俗理解三个范式:第一范式(1NF)要求属性具有原子性,不可再分解;第二范式(2NF)要求记录有唯一标识,即实体唯一性;第三范式(3NF)要求字段无冗余,不能由其他字段派生。但有时为提高效率需降低范式标准,概念设计时遵守第三范式,物理设计时考虑降低。
正确处理多对多关系:若两个实体存在多对多关系,应消除它,在两者间增加第三个实体,将原来多对多关系变为两个一对多关系,并合理分配属性。如图书馆信息系统中“图书”和“读者”的多对多关系,增加“借还书”实体。
选择合适的主键PK取值方法:PK是表间连接工具,可为一无物理意义的数字串(由程序自动加1实现),也可为有物理意义的字段名或字段名组合,前者更好。当PK是字段名组合时,字段个数不宜过多。
正确认识数据冗余:主键与外键在多表中的重复出现不属于数据冗余,非键字段的重复出现才是低级冗余,字段的派生出现是高级冗余。提倡高级冗余,反对低级冗余,冗余目的是提高处理速度。
设计合理的E - R图:信息系统的E - R图没有标准答案,只要覆盖系统需求业务范围和功能内容即可。好的E - R图应结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。
利用视图技术:视图是一种虚表,依赖数据源实表存在,是供程序员使用数据库的窗口,是基表数据综合形式、数据处理方法、用户数据保密手段。视图定义深度一般不超过三层,若不够用可在视图上定义临时表,再在临时表上定义视图。某些重要信息系统,基本表完成物理设计后立即建立第一层视图,程序员只能在视图上操作,数据库管理员带“安全钥匙”才能直接在基本表上操作。
区分中间表、报表和临时表:中间表存放统计数据,为数据仓库、输出报表或查询结果设计,有时无主键与外键(数据仓库除外);临时表是程序员个人设计,存放临时记录,供个人所用;基表和中间表由DBA维护,临时表由程序员用程序自动维护。
完善完整性约束:完整性约束表现在三个方面,域的完整性用Check实现约束,对字段取值范围进行定义;参照完整性用PK、FK、表级触发器实现;用户定义完整性是一些业务规则,用存储过程和触发器实现。
遵循“三少原则”防止数据库设计打补丁:“三少原则”即一个数据库中表的个数越少越好、一个表中组合主键的字段个数越少越好、一个表中的字段个数越少越好。“三少”是整体概念,相对而非绝对,目的是防止利用打补丁技术对数据库增删改,导致数据库杂乱无章无法维护。提倡“三少”原则是进行系统数据集成,集成程度越高,数据共享性越强,信息孤岛现象越少。
提高数据库运行效率:在给定系统硬件和软件条件下,提高数据库系统运行效率的方法有:物理设计时降低范式,增加冗余,少用触发器,多用存储过程;计算复杂且记录条数巨大时,先在数据库外面以文件系统方式用C++语言计算处理后再入库;表记录太多时进行水平分割,表字段太多时进行垂直分割;对DBMS进行系统优化,优化各种系统参数;使用面向数据的SQL语言进行程序设计时,尽量采取优化算法。提高数据库运行效率需从数据库系统级优化、数据库设计级优化、程序实现级优化三个层次同时下功夫。