数据库设计规范之对象设计使用规范
2013-02-05 11:50
176 查看
对象设计使用规范
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. 约束使用约定
(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。
**********本博客所有内容均为原创,如有转载请注明作者和出处!!!**********
Name: guoyJoe
QQ: 252803295
Email: oracledba_cn@hotmail.com
Blog: http://blog.csdn.net/guoyJoe
ITPUB: http://www.itpub.net/space-uid-28460966.html
OCM: http://education.oracle.com/education/otn/YGuo.HTM _____________________________________________________________
加群验证问题:哪些SGA结构是必需的,哪些是可选的?否则拒绝申请!!!
答案在:http://blog.csdn.net/guoyjoe/article/details/8624392
Oracle@Paradise 总群:127149411
Oracle@Paradise No.1群:177089463(已满)
Oracle@Paradise No.2群:121341761
Oracle@Paradise No.3群:140856036
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. 约束使用约定
(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。
**********本博客所有内容均为原创,如有转载请注明作者和出处!!!**********
Name: guoyJoe
QQ: 252803295
Email: oracledba_cn@hotmail.com
Blog: http://blog.csdn.net/guoyJoe
ITPUB: http://www.itpub.net/space-uid-28460966.html
OCM: http://education.oracle.com/education/otn/YGuo.HTM _____________________________________________________________
加群验证问题:哪些SGA结构是必需的,哪些是可选的?否则拒绝申请!!!
答案在:http://blog.csdn.net/guoyjoe/article/details/8624392
Oracle@Paradise 总群:127149411
Oracle@Paradise No.1群:177089463(已满)
Oracle@Paradise No.2群:121341761
Oracle@Paradise No.3群:140856036
相关文章推荐
- 数据库设计规范之对象设计使用规范
- SQL数据库设计规范参考之数据库对象命名详细文档
- MySQL数据库设计架构使用规范(其他数据库也使用)
- 企业数据库三层结构模型,MVC模式,设计模式,面向对象设计,接口规范及其他
- SQL数据库设计规范参考之数据库对象命名详细文档
- 数据库设计及日常使用规范-高效SQL
- SQL数据库设计规范参考之数据库对象命名详细文档
- SQL数据库设计规范参考之数据库对象命名详细文档
- 数据库设计及日常使用规范-数据库设计
- 数据库设计规范与技巧系列二
- 使用Hibernate时数据库的设计问题
- plsqldev工具数据库对象比较使用
- 使用 Rational XDE Data Modeler 建模和设计数据库
- 使用ADO.NET设计数据库应用程序
- 使用E-R图设计数据库(任务四)
- MYSQL 数据库命名与设计规范
- 使用POWERDESIGNER设计数据库的20条技巧
- 使用PowerDesigner 设计SQL Server 数据库
- 面向对象的设计法则(1)——优先使用(对象)组合,而非(类)继承
- hibernate 使用注解 查询和添加对象到数据库没有反应