-

数据库中的表按定义和使用方式分为两类

物理表:以create table方式创建,长期保存数据
临时表:以declare方式创建,临时保存数据

范式原则

物理表

  • 优先考虑降低数据冗余度、消除二义性,在合理代价的前提下,以第三范式为目标进行表设计

  • 兼顾访问性能、可扩展性等因素,可以在适当范围内进行必要的降范式处理,但必须有配置机制保证数据一致性

临时表

  • 优先考虑程序访问性能和便捷性,通常不受范式化制约

表空间使用和分配原则

用户数据与系统数据分离

永久数据与临时数据分离

表数据与索引数据分离

大对象数据独立

物理表

必须显式指定表数据、索引数据、大对象数据(如果存在)的表空间
以上三类表空间应分别管理,每类表空间可根据实际情况进一步划分

临时表

必须显式指定表数据的表空间,且必须为用户临时表空间
索引数据可以和表数据合并存放,不强制要求独立表空间

字段

表宽度限制

字段数

 同一张表中字段总数不宜超过200个

单个字段长度

 表中任意单个字段的长度不宜超过4000字节

字段总长度

 同一张表中所有字段长度合计不宜超过8000字节

字段非空约束

物理表

 尽量对所有字段使用非空约束,并设置字段默认值
 特殊情况下,允许部分字段不使用非空约束,但必须保证这些字段不作为过滤条件、分组条件,且不参与表达式运算

临时表

 所有字段必须使用非空约束,非逻辑主键字段尽量设置字段默认值

字段数据类型

尽量精确选择数据类型大类,避免隐含数据类型转换

 用字符型字段存储数组、日期、时间、时间戳
 用数值型字段存储日期、时间、时间戳

同一数据类型大类中,尽量选择长度较短的数据类型

 在满足需求的前提下,能使用较小长度的数据类型则不使用较大长度
 能使用SMALLINT时不使用INTEGER
 能使用DECIMAL(9,4)时不使用DECIMAL(18,4)
 能使用TIME时不使用TIMESTAMP

CHAR与VARCHAR数据类型选择

 当字符型字段实际取值均为长度相同的字段时,使用CHAR
 当字符型字段最大长度非常小时,使用CHAR
 当字符型字段取值代表位图含义时,使用CHAR
 其余情况下均使用VARCHAR,且在保存数据时,需注意去除字符串尾部的空格
 主键字段和非描述类字段不建议使用Unicode字符集
 将对字符串长度获取和按位截取造成不便

VARCHAR与DECIMAL长度合理分档

 以系统为单位,同一系统中的VARCHAR和DECIMAL字段引用同一套分档机制
 合理分档可以使用同一系统内的VARCHAR和DECIMAL字段设置规范性更强,且保留一定的可扩展性

大对象字段

 将大对象保存在数据库中可能对后续应用和管理造成不便
 正常情况下,应尽量避免在表中设计大对象字段
 可用文件系统存储大对象,而在表中仅使用VARCHAR字段保存相对路径
 必须在表中设计大对象字段时,建议将其单独保存至附加表
 附加表中只保存原主表的逻辑主键和需要的大对象字段
 主表与附加表之间形成1:0~1关系或1:0~n关系
 临时表中禁止设计大对象字段

字段排序

通用原则

 表中字段排序依次为:A类技术字段、业务主键字段、B类技术字段、业务非主键字段、C类技术字段

业务主键字段排序原则

 业务主键字段为多个时,按访问频度和字段取值区分度由高到低排列

业务非主键字段排序原则

 根据业务含义分组,业务含义相近的字段排在一起;组间和组内再按访问频度由高到低排列,或按业务要素生成次序排列

技术字段

 按技术特征确定排列顺序
 A类技术字段:决定整张表数据分布的关键字段
 状态快照表的快照日期、流水表的数据日期
 B类技术字段:决定单行记录数据状态的关键字段
 状态拉链表的拉链起始日期
 C类技术字段:存放单行记录描述信息的字段
 记录生成日期、维护日期、维护用户

主键

物理主键

推荐对所有表均建立物理主键

物理主键通常与逻辑主键保持一致
存在多组逻辑主键时,建议将字段访问频度最高的一组作为物理主键,其它组建立唯一索引或唯一约束

特殊情况下,允许表中不建物理主键

对常用于大批量批处理的表,为兼顾处理性能,可以不建物理主键
必须有相应的机制保证表中的数据对该表的逻辑主键而言具有唯一性

外键及其它约束

外键

在设计阶段可以识别的外键关系必须在设计文档中体现

 外键关系可作为数据完整性、一致性判断的依据

外键关系通常不需要物理化

 将外键关系物理化会给后续的批量数据处理和数据管理带来一定程度的不便
 可通过应用程序或数据质量校验程序保证外键关系
 在某些对数据完整性要求极高的联机应用系统中,关键的外键关系可以物理化

其他约束

业务性约束必须在设计文档中体现,但通常无需物理化

 业务性约束可作为数据完整性、一致性判断的依据
 业务性约束通常由应用程序保证,可能随业务需求发生变化

技术性约束通常必须物理化

 如,为UNION ALL视图对物理表准确定位,需要在条件字段上显式增加约束

分区键

分区键设置原则:

  • 多分区数据库中的所有表均必须显式指定分区键

  • 单分区数据库中的表推荐在设计阶段指定备选分区键
    单分区数据库中的表指定分区键并不起实际作用,但可以作为数据迁移至多分区数据库时的参考依据

  • 物理表优先选择逻辑主键中区分度最高的单一字段
    当逻辑主键中所有字段区分度均较低时,选择能满足区分度要求的字段组合,字段组合中的字段数尽可能少,最多为逻辑主键中的全部字段

  • 临时表优先选择后续关联条件或分组条件中包含的区分度最高的单一字段

视图

视图创建原则

视图主要适用场景

 同构表的记录合并
 主表与附表的预关联
 简单的条件过滤和分组统计

视图通常不包含复杂或易变的业务逻辑

尽量避免视图嵌套定义

当视图访问效率较低时,应将其物理化为表

 视图设计时,应尽量保证其物理化为表后,应用可实现平滑切换

索引

索引创建原则

  • 索引应按需创建,同一张表的索引数量不宜过多

    1. 除物理主键所含唯一索引外,同一张表上的索引数量不宜超过三个

  • 索引字段选择及排序原则

    1. 当索引由多个字段组成时,除完全匹配外,使用其第一个字段开始的子集对访问效率也有提升作用

    2. 最优先考虑使用频度:使用频度较高的字段优先选择且排序靠前

    3. 次优先考虑字段区分度:区分度较高的字段排序靠前,区分度过低的字段不建议包含在索引中

    4. 同一个索引中包含的字段总数不宜超过四个

DB2数据库对象设计相关推荐

  1. 2011 DB2著作---舞动DB2系列之设计优化篇隆重问世!

    舞动DB2系列丛书简介: 舞动DB2系列丛书是王飞鹏等人编写的数据库系列著作,包括: 设计优化篇---<DB2设计与性能优化---原理.方法与实践> 应用开发篇---<从Oracle ...

  2. MySQL优化(三):优化数据库对象

    二.优化数据库对象 1.优化表的数据类型 应用设计的时候需要考虑字段的长度留有一定的冗余,但不推荐很多字段都留有大量的冗余,这样既浪费磁盘空间,也在应用操作时浪费物理内存. 在MySQL中,可以使用函 ...

  3. 数据库设计规范之对象设计使用规范

    对象设计使用规范 1. 常用数据类型 说明:以下为常用数据类型介绍,表设计时根据实际应用选用. (1)NUMBER(p,s):固定精度的精确数字类型,整数或定点数使用此类型. (2)NUMBER:不固 ...

  4. IBM DB2 学习笔记:关系模型、基本概念、数据库实例基本操作、数据库对象

    文章目录 1. 关系数据模型 1.1 什么是数据? 1.2 为什么使用数据库? 1.3 数据库管理系统(DBMS) 1.4 数据模型 1.5 关系数据模型 1.6 关系数据库 1.6.1 表 1.6. ...

  5. DB2数据库常用工具

    1解释工具 1.1 Visual Explain 之前都是explain就可以了昂 Visual Explain是一种GUI工具,他为数据库管理员和应用程序开发人员提供了查看为特定SQL语句选择的访问 ...

  6. 数据库表设计、 数据库分层、myslq水平拆分、oracle表分区

    数据库表设计 数据库表结构设计方法及原则(li)数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的 ...

  7. 用 JMeter 测量性能--测试您的 DB2 数据库

    为什么80%的码农都做不了架构师?>>>    级别: 初级 Kulvir Singh Bhogal, IBM 电子商务顾问, Austin, TX 2004 年 11 月 01 日 ...

  8. linux系统中db2创建表空间,为DB2数据库创建表空间

    数据库中的表空间(tablespace) 是一个逻辑层,一些数据库对象(比如表.视图和索引)驻留在这里.一个数据库可以有多个表空间.在首次创建数据库时,DB2 会自动地创建一组表空间. 在 Contr ...

  9. DB2数据库开发工具:DBVisualizer

    DB2数据库开发工具:DBVisualizer 介绍一款操作DB2数据库的工具,它虽不及PL/SQL Developer那样强大,但用于开发要比QuestCentralForDB2好,使用过PLSQL ...

  10. 分析DB2数据库的优势

    凭借着DB2数据库的优势,IBM在数据库市场争夺到了自己的一片天地,那么,DB2数据库的优势,究竟都有哪些呢? DB2是IBM的数据库产品,近年来Oracle.Sybase等数据库的大力发展曾使很多人 ...

最新文章

  1. 阿里雷卷:RSocket从入门到落地,RSocket让AJP换发青春
  2. winfrom保存图片,将文件夹中图片放入listview,与撤回操作
  3. 面试官 | Java中的注解是如何工作的?
  4. 没事研究下C#虚拟光驱,有所收获!
  5. jpg , png 图片转SVG格式(资源篇)
  6. mysql limit函数
  7. 御剑php字典,Newyujian1.5 御剑源码 主要用于扫描网站目录 - 下载 - 搜珍网
  8. QT出现“d:\Program Files (x86)\SogouInput\Components\”的错误分析
  9. 图像处理(十三)LBP特征提取
  10. 解决confuserEx混淆导致类名消失的问题
  11. Win10内置应用误卸载恢复方法
  12. winform 窗体设置成无边框、可拖拽、四周圆角
  13. 【云和恩墨大讲堂】黄宸宁 - 一次特殊的 ORA-04030 故障处理
  14. ER图向关系模型的转换
  15. android手机变微软手机号码,微软Your Phone未来将能让你用电脑远程控制拨打Android手机电话...
  16. 阿里云--短信服务---开通步骤
  17. 第四范式将亮相2021世界人工智能大会
  18. KY122 找出直系亲属
  19. 村淘是什么,农村淘宝有什么用?如何知道宝贝是否加入村淘
  20. Python多值函数

热门文章

  1. EXT2.0 多选下拉框
  2. 【博客管理】博客格式说明【置顶】
  3. Python设计一个游戏类
  4. ArcGIS 泛克里金插值
  5. 激光雷达(LiDAR)简介-森林资源调查应用
  6. 计算机网络-01-计算机网络体系结构
  7. JavaEE学习13--Jquery
  8. android 可拖拽View的简单实现
  9. java并发编程实战读书笔记2
  10. 缓冲区ByteBuffer简单说明