数据库设计规范:对象设计使用规范

时间:2014-12-05

老葡京网站娱乐 www.sdguanhua.com 对象设计使用规范

1. 常用数据类型

说明:以下为常用数据类型介绍,表设计时根据实际应用选用。

(1)NUMBER(p,s):固定精度的精确数字类型,整数或定点数使用此类型。

(2)NUMBER:不固定精度的精确数字类型,不确定数值精度,主键或浮点数使用此类型。

(3)DATE:仅需要精确到秒时,选择DATE而不是TIMESTAMP类型。

(4)TIMESTAMP:扩展日期类型,仅当需要更高时间精度时使用此类型。

(5)VARCHAR2:变长字符串,最长4000个字节。

(6)CHAR:定长字符串,只允许使用CHAR(1)。

(7)CLOB:当超过4000字节时使用,CLOB字段必须拆分到一张独立的表中,用主键与主表关联。

clob字段,建议不要使用,而用多个varchar2(4000)代替,因为clob字段更新时,空间不重用。

(8)BLOB,RAW,LONG:不允许使用。

MySQL中,仅可以使用下文提及的数据类型,所有表、字段必须添加能够清楚表示其含义的注释。状态类字段的注释中必须明确列出各状态值的说明。

(1) DECIMAL(M,D): 当表示定点小数的情况下使用该类型。定点数在MySQL内部以字符串形式存储,比浮点数更精确,适合用来表示货币等精度高的数据。

(2)INT系列: 所有整数类型字段使用INT(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT),根据所存放的数据大小选择合适的子类型,且所有INT类型都不使用长度限制。

(3)CHAR: 当且仅当字段存储单个字符的情况下,可使用CHAR(1)类型。超过一个字符的字段,使用可变长度类型。

(4)VARCHAR: 所有可变长度的字段均使用VARCHAR类型,对于有限类别的字段(如性别、状态等),均使用VARCHAR类型存储能明显表现其意义的字符串。当VARCHAR字段长度超过4000时,须和原表进行分拆,与原表主键组成新表存储。

(5)TEXT系列: 仅当需存储的字节数可能超过20000时,使用TEXT系列类型(TEXT、MEDIUMTEXT、LONGTEXT)。并和原表进行分拆,与原表主键组成新表存储。因为所有MySQL数据库都会使用UTF8字符集,而VARCHAR最大只能存放64K数据。

(6)DATE: 只需要精确到天的字段使用DATE类型。精确到“天”的取当前时期的操作使用CURDATE()函数实现。

(7)DATETIME: 需要精确到时间(时、分、秒)的字段使用DATETIME类型。精确到“秒”的取当前时间的操作使用NOW()函数实现。

2. 表设计约定

(1)规则1:表必须要有主键。

(2)规则2:一个字段只表示一个含义。

(3)规则3:总是包含两个日期字段:ll_create(创建日期),ll_modified(修改日期),且这两个字段不应该包含有额外的业务逻辑。

(4)规则4:MySQL中,ll_create、ll_modified使用DATETIME类型。

(5)规则5:禁止使用复杂数据类型(数组,自定义类型等)。

(6)规则6: MySQL中,附属表拆分后,附属表id与主表id保持一致。不允许在附属表新增主键字段。

(7)规则7: MySQL中,存在过期概念的表,在其设计之初就必须有过期机制,且有明确的过期时间。过期数据必须迁移至历史表中。

(8)规则8: MySQL中,不再使用的表,必须通知DBA予以更名归档。

(9)规则9: MySQL中,线上表中若有不再使用的字段,为保证数据完整,禁止删除。

3. 约束使用约定

更多精彩内容:http://www.sdguanhua.com/database/basis/

(1)规则1:主键必须是无意义的,由序列或主键生成器(MySQL中,主键由主键生成器或自增长字段产生)产生,禁止使用组合主键。

(2)规则2:表中除主键以外还存在唯一约束的,必须在数据库中创建唯一约束。

(3)规则3:主键字段不允许更新。

(4)规则4:不创建外键约束,外键约束由应用控制。

4. 索引设计约定

(1)规则1:不使用Bitmap类型的索引。

(2)规则2:不创建unique类型的索引。

(3)规则3:索引字段选择注意事项:

①选择在where子句中出现,且选择性和过滤性高的字段创建索引。

②用来和其他表关联的字段,如果使用nest loop join,建议创建索引。

③索引的首字段,必须在where条件中。

④复合索引,将选择性高的字段放在前面。

(4)规则4:索引使用注意事项:

①考虑DML操作(insert,delete,update)导致索引维护成本。

②在索引字段上施加函数或者隐式类型转换会导致索引失效。

③查询结果集(Cardinality)比较小的情况下,适用索引查询。

④索引不能用来判断is null或者is not null。

5. 过程,触发器,视图使用原则

(1)规则1:避免将业务逻辑封装在数据库procedure/function中,不允许应用调用数据库中的procedure和function,业务逻辑应该用程序实现。

(2)规则2:不允许使用trigger实现业务逻辑。增量数据同步和记录数据变化除外,比如搜索引擎增量build,易百米同步等。

(3)规则3: 不允许view与table关联。

(4)规则4:MySQL,禁止任何业务逻辑通过封装在数据库中的procedure或function或trigger实现。

(5)规则5:MySQL, 禁止应用程序使用view。

(6)规则6: MySQL,禁止业务逻辑使用计划任。

(7)规则7: 使用SVN来管理这些脚本。

6. DB_LINK使用规范

(1)规则1:只有DBA拥有dblink使用权限,不允许应用调用dblink 。

(2)规则2:DB_LINK只读,不允许通过DB_LINK修改数据。数据仓库同步除外。

7. 物化视图使用规范

(1)规则1 因oracle内部bug,故规定物化视图内不允许使用多表join。

作者:csdn博客 guoyJoe