数据库设计在一个项目总占有非常大的比重,如果设计的不好、不合理,在后面开发过程中做改动会对项目产生非常大的影响,会浪花很多时间,一下是在开发过程中总结出的一些小经验:
1、对于一对一关系的实体,用一张表表示。
2、对于一对多的实体,用两张表表示,而且“多”的那张表中做一个指向“一”表中主键的外键。
3、对于多对多的实体,在两张表中间加一个关系表,建两个外键字段,分别指向两个“多”的表,这两个外键可以联合在一起作为关系表的主键,也可单独加一个字段,用于主键。
4、几个字符的长度,可以采用char;几十、几百或上千的字符串可以用varchar,同时建议用nvarchar(nvarchar不考虑中英文,长度1就是一,二就是2,在程序限制最大长度时,方便);大文本时用text(少用)。现实问题:①、注意oracle同一种数据类型比如varchar2,在不同“字符集”的数据库中,能存储的内容长度是不一样的,一个汉字占两个长度、、四个长度都是有可能,需要注意,不然开发时正常,上线内容就超出字段存储长度而存不进去。
5、对于有限值的字段(如性别),可以用数字和英文,不建议用中文,防止乱码(程序或数据库)后很难恢复、为后期维护带来不必要的麻烦。现实问题:①、如果没有特殊需要,直接用对应的汉字名称也是不错的选择,这样在编辑、保存、展示等等的地方都不需要做额外的转换。
6、尽量少用数据库的约束(主键要用,其他:如外键、非空、唯一建议不用),转而采用程序来控制,过多的约束影响数据库性能和数据的转储。
7、数据库主键可以使用本身有意义的字段,也可单独建一个主键字段,但是建议单独建立主键字段,并采用UUID等各种主键生产策略,通过程序产生存入进去,而不是用数据库的自增策略产生。现实问题:①、这样在后期如果存在换库、移植到其他数据库方便(如从MSSQL到Oracle等),另外当移植到一个新的数据库时(换机子、库挂了重新创建等)存在自增主键与现有主键冲突(自增又从0开始,这样新自增值会与已有的主键值重复),③、用单独的主键值不需要考虑具体业务,特别是在表中没有唯一性字段时,可避免组合主键带来的操作不便和性能下降(不过需要牺牲部分空间存储无实际意义的主键值),④、主键值生成策略除了UUID外,还有一个好的建议:yyMMddHHmmssSSS+随机数(根据系统具体需要:年可选1到4为,一般2位足够,随机数:可自定位数),这样使用数字可提高查询性能(数据库擅长处理数字),比UUID长度短,还有可存储有意义的当前记录创建时间信息。
8、数据库表名、字段名尽量使用有意义的英文或中文拼音(或其缩写)来表示,多个单词组成时,应该使用下划线分隔,而不应该采用java方法名的命名规则(第一个单词首字母小写,其他单词首字母大写)。现实问题:①、因为有的数据库、程序、存储过程区分大小写,而有的不区分大小写,②、有的数据库将所有字母改为大写,比如oracle。
9、切记不要使用数据库的关键字或保留关键字作为数据库表名、字段名,如果系统后期可能跨库,则要多种数据库考虑,否则只需考虑当前数据库,加下划线是一个不错的选择,现实问题:①、有的数据库sql中带关键字报错,特别是oracle。
10、同库中的表字段尽量少出现同名,现实问题:①、查询时为区分需要起别名,②、系统代码中不好辨认,有时二字段同时存在在一个业务中时处理麻烦。
11、数据库中尽量使用数字或者不是很长的字符串作为主键,防止大数据量处理时,速度过慢。
12、每一张表总留几个备用字段,最好留一个数字类型的,留几个字符串类型的,防止以后维护时要扩充字段,而客户已经使用的数据库中又没有可用的备用字段时,此时修改客户数据库结构,比较麻烦。
13、多表之间的关联查询,必要时考虑用视图,但视图尽量不要嵌套。现实问题:①、sql太长充斥在代码中难维护。
14、涉及多表直接的关联计算、插入可以考虑使用存储过程(数据量大时),以提高性能,尽量避免使用存储过程,以方便后期的数据库移植。
15、尽量少使用某一种数据库独有的功能,如(MSSQL的top等),以方便后期系统移库。
16、在不能完全确定某一个字段的取值就是数字时,请使用字符串(如机构代码,有的就直接用数字,但是后期如果客户机构编码中出现了字符串,则要修改字段类型,而机构表如果与系统中其他模块关联比较多,则都得改,数据库一改,意味着程序的大量修正,你会疯的)。
17、尽量不要使用某一数据库独有的数据类型,如boolean,在实际当中也不建议使用boolean类型,必要时请换成数据类型或字符串类型。
18、如果数据库表关联比较复杂,设计时要考虑存储一些重复的冗余字段,减少查询时的关联操作。
相关推荐
在数据库设计过程中,有许多经验和技巧需要掌握。以下是对给定文件内容的详细解读: 1. **设计数据库之前** 在设计数据库之前,首先要对业务需求进行深入理解,确保能够准确反映业务流程。同时,对现有系统进行...
### 数据库设计经验总结 #### 一、设计数据库之前的准备 **1.1 考察现有环境** 在设计新数据库之前,深入了解当前环境是非常重要的一步。这包括但不限于研究现有系统的架构、流程以及存在的问题。大多数情况下,...
小区物业管理系统数据库设计 小区物业管理系统数据库设计是指为小区物业管理提供的一种信息化管理系统的数据库设计。...小区物业管理系统数据库设计的缺点是需要小组成员具备团队协作的精神和数据库设计的经验。
- 尽管有许多理论知识和书籍可供学习,但数据库设计的真正精髓在于实践,通过不断尝试和迭代,才能积累宝贵的经验。 数据库设计不仅是一项技术活,更是一种艺术。理解业务、制定规范、选择合适的工具、学习经典...
### 数据库设计技巧经验浅析 #### 一、引言 数据库设计是软件开发中至关重要的环节,良好的数据库设计不仅能确保数据的有效存储与快速检索,还能为后续的应用扩展打下坚实的基础。根据“3分技术,7分经验”的原则...
### 多年的数据库设计经验总结 #### 一、设计数据库之前的基本技巧 1. **考察现有环境**:在设计新数据库之前,深入了解当前系统是非常重要的。这有助于识别现有系统的优点和缺点,从而避免重复相同的错误并借鉴...
### 数据库设计经验知识点解析 #### 一、引言 在现代信息技术领域中,数据库设计是构建高效稳定的信息管理系统的核心环节之一。一个优秀的数据库不仅能够有效地存储和管理数据,还能提高系统的整体性能与稳定性。...
开发高效数据库的经验 详细叙述了数据库设计的步骤及细节
本篇文章将深入探讨数据库设计的经验与技巧,帮助你更好地理解和应用这些知识。 首先,我们要明白数据库设计的基础——概念模型设计。这通常采用实体关系(ER)模型,通过识别系统中的实体、属性和关系来构建数据...
以下是对SQL数据库设计经验的深入探讨: 1. 考察现有环境:在开始设计新的数据库之前,务必理解当前的业务流程和已存在的系统。这有助于识别潜在的问题和需求,避免重复劳动,并能从现有系统中汲取经验教训。 2. ...
总的来说,这份课程设计论文全面地涵盖了小型超市管理系统数据库设计的各个环节,从需求分析到系统实现,不仅展示了数据库在实际业务中的应用,也为学习者提供了宝贵的实践经验。通过这个项目,学生们能够深入理解...
本文将深入探讨"XX公司数据库设计规范",分享实际项目经验,帮助读者理解并掌握数据库设计的关键要点。 首先,规范化的数据库设计是确保数据一致性、完整性和可维护性的基础。在XX公司的实践中,遵循以下主要步骤:...
【数据库设计概述】 关系数据库设计是构建高效、稳定和可扩展的信息系统的关键步骤。它涉及到对业务需求的深入理解,...这些经验和技巧是数据库设计者不断积累和提炼的宝贵财富,能够为信息系统建设提供坚实的基础。
所以我们最近找了些对数据库设计颇有造诣的专业人士给大家传授一些设 计数据库的技巧和经验。我们的编辑从收到的130 个反馈中精选了其中的60 个最佳技巧,并把这些 技巧编写成了本文,为了方便索引其内容划分为5 个...
数据库设计说明书是针对网站开发中数据库设计...综上所述,数据库设计说明书不仅为BroCMS项目的设计和开发提供了详细的指南,也为后续的数据库维护和系统升级提供了重要参考,同时为其他项目提供了宝贵的经验和方法论。
数据库设计是IT行业中至关重要的一个环节,它直接影响到系统性能、数据一致性以及应用程序的开发效率。这份"数据库设计教案自制"资源,显然是一份详细的教学资料,旨在教授如何结合理论与实践,运用PowerDesigner...
在本项目中,我们关注的是一个小型C++设计的数据库系统,这为我们提供了一个深入了解数据库管理系统(DBMS)内部工作原理的机会。通过实际动手构建这样一个系统,我们可以将理论知识与实践经验相结合,掌握软件开发...
### 数据库设计之——数据库设计经验谈 在当今数字化时代,数据成为了企业运营的重要组成部分,而数据库则是管理和存储这些数据的核心工具。一个优秀的数据库设计能够极大地提升系统的性能、可靠性和可扩展性。本文...