数据库设计与建模最佳实践 摘要:本文针对数据库设计中可读性、易维护性及性能的要求,在数据库对象命名、主键的设计、字段类型及长度设计等方面,总结出数据库设计和建模最佳实践。 关键词:数据库对象命名,主键的设计,字段类型及长度设计,最佳实践范例 1. 引言 在企业级应用中,数据库是重要的组成部分。同样,数据库设计也是设计工作的重中之重。好的数据库设计可以简化开发、降低维护成本,更可以提高系统性能。 在这篇文章里,我针对可读性、易维护性及性能等方面,总结出以下数据库设计和建模最佳实践。 2. 数据库对象命名 为对象命名并非一件轻松随意的工作,下面的指导有利于构建一个规范的命名体系。 2.1 中文拼音还是英文单词 中文拼音gzzbh是什么意思呢?如果改成worker_code即可一目了然。因为英文单词语意比较精确,可读性比中文拼音好,所以推荐用英文单词给对象命名。 2.2 单词间分隔 用下划线分隔多个单词。 由于Oracle等数据库的对象名称默认不区分大小写(可以用双引号来区分,但是会给开发造成不必要的麻烦),所以在编程开发中常用的驼式命名风格如:tableName不太适合给数据库对象命名,因为对象的名称是以TABLENAME形式存储的。为了增强可读性,单词之间最好用下划线分隔,如:tableName 最好书写为 table_name。 2.3 避免使用关键字 用关键字命名对象会造成冲突。 如果一定用关键字命名对象,需要用双引号,如:id 命名为 "id"。 避免关键字冲突的较好方案是增加前缀或者后缀, 这也是所有对象命名的推荐方案,如:“用户编号”由"id" 改为更明确的user_id。 2.4 单数还是复数 用user还是users? 用child还是children? 英文名词有单数和复数之分,那对象命名时怎么考虑呢? 几乎所有的表都存储1条以上的记录,按这个事实,表名称应该全用复数才对,考虑到英文名词的复数变化比较复杂, 全用复数会加大设计者的负担,并且容易出错,从简化工作考虑,对象命名统一用单数即可。 2.5 用简写还是全称 dept_id, u_id分别代表什么意思呢? 对dept这个简写,一般情况下它是department的简写,而u_id的含义就不明确了。如果设计者把u_id改为user_id意义就明确了。 所以,除非是众所周知的简称,一般情况下最好用更明确的全称,不要让别人猜测命名的含义,因为可读性对系统的可维护性影响很大。 |