日期:2014-05-16  浏览次数:20444 次

数据库设计常见问题、基本惯用法及规范(总结)
如果转载本文,请注明出处以示尊重个人劳动, (iihero@CSDN):http://blog.csdn.net/iihero/article/details/8210516, 谢谢。

1. 概述

近几年,在各数据库论坛以及别的场合,有很多人问起这类问题或是遇到此类问题。有命名方面的,有表结构设计方面的,有针对关系范式争论的,有是否要求使用约束、触发器和存储过程的,当然,也有基于建模工具来建模的,如此种种。本文试图对其中的重点问题进行归纳总结。设计规范和惯用法,最终是为了数据库应用系统具备良好的稳定性、可扩展以及可维护服务的,如果不能或者不容易达到此目的,那就形同虚设。


2. 问题及解决方案

2.1 数据库对象的命令规则

对于数据库对象的命名,根本宗旨是要使得它有意义并且可维护性可迁移性好。可能与我们在面向对象语言中的对象命名规则有所区别,在OO编程当中,经常采用camel(驼峰)式命名规则,首字母大写进行间隔区分。然而,在这里行不通,也不被推荐,推荐的方式是使用"_"拼接,并且使用英文全小写

原因: 大小写混合,容易导致数据库迁移问题,比如A商家的数据库,当你create table Abc,最终建的表名就是Abc,可是到了B商家的数据库,建的表名,内部就是ABC了。甚至有的数据库当中,表名对应的就是文件名,在不同平台下是区分大小写的。至于不推荐中文表名,理由更充分,中文对象名的支持,并不是各个数据库都完美支持的,并且还涉及到字符集问题。

表名示例:

比如:订单: sales order, 使用sales_order,而不是SalesOrder

总结起来:

1. "_"拼接,全小写英文
2. 提供一致的缩写, 不要有的地方用缩写,有的地方又改成另外一种形式
3. 针对各个表结构,有相应的完整的中文字典说明(相对于中文用户)
4. 极力避免采用某数据库的关键字作为表名,如 (role,  users, user, object, relation, link等), 作为DBA,尤其是开发性的DBA而言,应该在设计阶段就协调好此事
5. 作为DBA而言,还应该调研清楚目标数据库对象名(表,字段,索引等)的名字能允许的最大长度
5. 索引名,推荐:{table_name}_{column_names}_{suffix后缀}, 前两者按照实际长度酌情缩写, 常见后缀有:
     pkey, 主键  (不常使用,因为有primary key定义)
     ukey, 唯一键 (不常使用,因为有unique定义)
     cons, 约束 (constraint)
     idx, 普通索引    

6. 显示序列名, 以seq_作前缀,这在Oracle, DB2, PostgreSQL中比较常见,其它数据库中大都有identity, auto_increment标识定义,无此要求
7. 触发器名, {table_name}_{action}_{after|before|..}_trig, 这里action可以是insert, after, delete等。



2.2 SQL代码段编写规则

2.3 模拟数据生成

(待续)