一、编写目的
规范数据库设计。
二、概述
从数据库的设计原则 命名规范几方面论述数据库设计的规范思想及命名规则。
三、数据库设计原则
· 所有名称都采用英文,且准确无误,单词之间用下划线分隔。
· 每个表必须有主键,一般的主键都是自动编号的。
· 主键与对应的外键名字要一致。
· 表与表之间的关联默认采用id实现。
· 一般情况,不使用数据库提供的表与表之间的关系与约束 ,而应使用程序来判别关系。如删除一行会同时牵涉到两个表,就按照顺序使用代码来完成。
· 如果没有特殊要求文本默认情况大文本采用varchar2(255),因为varchar2是可变长度的,不会浪费。
· 表与表的关联是发生在一对多或多对多的情况下,一对一就用一个表。 尽量在数据库的设计中把多对多拆分成一对多。
· 所有的SQL语句字段都要写全,不使用星号来代替;
· 缩写的原则:1.通用的缩写,例如PWD,就一定要缩写 ;2.太长了,如有多个单词可以用缩写,缩写一定要用单词的前4个字母,单词直接用下划线相连。3.尽量少的使用缩写。
· 所有表(Table)、列(Column)、视图(View)、存储过程(Stored Procedure)、函数 (Function)、约束(Constraint)、触发器(Trigger)、索引(Index)都应该有对应的注释。
四、数据库命名规则
4.1 数据库涉及字符规则
采用26个英文字母(区分大小写)和0 -9这十个自然数,加上下划线_组成,共63个字符。不能出现其他字符(注释除外)。
4.2 数据库对象命名规则
数据库对象包括表、视图(查询)、存储过程(参数查询)、函数、约束。对象名字由前缀和实际名字组成,长度不超过30。前缀:使用小写字母。
4.2.1表命名原则
数据库所有表的命名都要加上系统的前缀,比如干教网中的表都要以XX_来开头。
标明的定义:可以根据业务名称的英文单词来命名,比如用户表XX_USER。
4.2.2视图命名原则
视图前缀:XX_V_...
4.2.3列命名规则
1、所有数字类型全部采用NUMBER
2、字符串都采用VARCHAR2,VARCHAR2是一个UTF-8的可变长度的类型
3、字段排列顺序要注意,可读性强些。
4、备注采用:VARCHAR2(255)
5、所有能够缩写的尽量缩写,如Password->PWD,但是必须是大家一眼就能看明白缩写所代表的意义。
4.2.4索引命名规则
索引前缀:INX_U_...,U表示唯一索引,,,
建议索引的命名:
1、普通索引:前缀为IDX_,索引名称是 前缀+表名+构成的主键字段名,如果复合索引的构成字段较多,则只包含第一个字段,并添加序号。表名可以去掉前缀。
2、主键索引:前缀为IDX_PK_,索引名称应是 前缀+表名+构成的主键字段名。
3、唯一索引:前缀为IDX_UK_,索引名称应是 前缀+表名+构成的字段名。
4、外键索引:前缀为IDX_FK_,索引名称应是 前缀+表名+构成的外键字段名。
5、函数索引:前缀为IDX_FUNC_,索引名称应是 前缀+表名+构成的特征表达字符。
6、蔟索引:前缀为IDX_CLU_,索引名称应是 前缀+表名+构成的簇字段。
4.2.5序列命名规则
序列前缀:SEQ_...
前缀为SEQ_,序列名称是:前缀+业务名(表名)
如:BJCE_USER(用户表)
主键自增序列:SEQ_XX_USER
序列命名应当是SEQ_+序列的字段名
4.2.6存储过程命名原则
存储过程前缀:XX_PROC_...
4.2.7函数命名原则
函数前缀:XX_FUN_...
4.2.8触发器命名原则
触发器前缀:XX_TRI_...
4.2.9主键命名原则
主键不使用前缀PK_...,统一使用表名前缀+ID。就是说所有表都以ID 作为主键字名。
但是在添加主键约束时,约束命名为 PK前缀+表名缩写+ID。如果复合主键的构成字段较多,则只包含第一个字段。表名可以去掉前缀。
主键是不需要创建索引的,但主键建立时,会自的创建索引。
4.2.10外键命名原则
统一不使用前缀为FK_,但是在添加外键约束时,约束命名为 FK前缀+表名缩写+ID+字段名。
外键名称应是 外键表名 + ID + 外键表构成的字段名。表名可以去掉前缀。
4.2.11自定义数据类型、默认、规则命名原则
五、注释部分
5.1 概述
一定要养成写注释的习惯,这样可以加强相互直接的沟通。
5.2 注释规则
1、注释需用中文正确书写,注意错别字,以免造成误解。
2、每个自定义过程、函数的末行都需要写注释,标明这些自定义过程、函数的功能。
3、每个用缩写命名的变量(所有类型),或者其他缩写,均需要在本行注释全称。
4、若编写程序段结构较为复杂,则需要在段尾对于程序段结构做相关注释。
5、当整个项目完成之后,需将所有注释部分删除。但是必须删除之前,必须有相应的文档说明。
6、common中文要写完整。
六、SQL优化
6.1 SQL优化调整的方向
1.去掉不必要的大型表的全表扫描
2.缓存小型表的全表扫描
3.检验优化索引的使用
4.检验优化的连接技术
5.尽可能减少执行计划的Cost
6.2 SQL优化具体方法
1、常量的计算是在语句被优化时一次性完成,而不是在每次执行时。下面是检索月薪大于2000的的表达式:
sal > 24000/12
sal > 2000
sal*12 > 24000
如果SQL语句包括第一种情况,优化器会简单地把它转变成第二种。
优化器不会简化跨越比较符的表达式,例如第三条语句,鉴于此,应尽量写用常量跟字段比较检索的表达式,而不要将字段置于表达式当中。否则没有办法优化,比如如果sal上有索引,第一和第二就可以使用,第三就难以使用。
2、操作符优化:
优化器把使用LIKE操作符和一个没有通配符的表达式组成的检索表达式转换为一个“=”操作符表达式。
例如:优化器会把表达式ename LIKE 'SMITH'转换为ename = 'SMITH'
优化器只能转换涉及到可变长数据类型的表达式,前一个例子中,如果ENAME字段的类型是CHAR(10), 那么优化器将不做任何转换。
一般来讲LIKE比较难以优化。所有在开发中尽量少使用LIKE
3、合理的索引设计
4、避免使用不兼容的数据类型
5、IS NULL 与IS NOT NULL
不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排 除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。任何在WHERE子句中使用is null或is not null的语句优化器是不允 许使用索引的。
6、IN、OR子句常会使用工作表,使索引失效
7、避免或简化排序
8、尽量多使用COMMIT
9、通过内部函数提高SQL效率
10、用EXISTS替代IN、用NOT EXISTS替代NOT IN
11、用>=替代>
SQL优化的方法很多,随便写了一些,大家可以补充。