数据库设计常见问题、基本惯用法及规范(总结)

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

(待续)

<script type="text/javascript"><!-- google_ad_client = "ca-pub-7104628658411459"; /* wide2 */ google_ad_slot = "5922063526"; google_ad_width = 468; google_ad_height = 60; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值