Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1023897
  • 博文数量: 185
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 3934
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-11 13:11
个人简介

iihero@ChinaUnix, ehero.[iihero] 数据库技术的痴迷爱好者. 您可以通过iihero AT qq.com联系到我 以下是我的三本图书: Sybase ASE in Action, Oracle Spatial及OCI高级编程, Java2网络协议内幕

文章分类

全部博文(185)

文章存档

2014年(4)

2013年(181)

分类: 项目管理

2013-07-25 10:47:08

如果转载本文,请注明出处以示尊重个人劳动, (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 模拟数据生成

(待续)

阅读(1004) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~