iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕
分类: 项目管理
2013-07-25 10:47:08
如果转载本文,请注明出处以示尊重个人劳动, (iihero@CSDN):http://blog.csdn.net/iihero/article/details/8210516, 谢谢。
近几年,在各数据库论坛以及别的场合,有很多人问起这类问题或是遇到此类问题。有命名方面的,有表结构设计方面的,有针对关系范式争论的,有是否要求使用约束、触发器和存储过程的,当然,也有基于建模工具来建模的,如此种种。本文试图对其中的重点问题进行归纳总结。设计规范和惯用法,最终是为了数据库应用系统具备良好的稳定性、可扩展以及可维护服务的,如果不能或者不容易达到此目的,那就形同虚设。
对于数据库对象的命名,根本宗旨是要使得它有意义并且可维护性可迁移性好。可能与我们在面向对象语言中的对象命名规则有所区别,在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等。
(待续)