Oracle数据库逻辑设计规范
1. 表设计
规范化和反规范化
A、数据库模型通常必须满足3NF;
B、如确实需要进行反规范化设计,必须明确说明性能或业务上的理由。
表命名设计
按照数据表类型的不同,数据表可以按以下类型命名:
系统数据表:ts(system)_<表标识>
基本编码表:tc(code)_<表标识>
属性数据表:ta(attribute)_<表标识>
业务数据表:tb(business)_<表标识>
决策数据表(包含报表):td(decision)_<表标识>
历史数据表:th(history)_<表标识>
2. 属性设计
数据类型
A、除char(1)外,不允许在属性中使用char类型;
B、对地址、电话等易变的业务数据,可以采用多个字段。
属性命名
A、属性一般的命名规则需符合《Oracle命名规范》;
B、id属性的命名规则为:<表名>_id
附加属性
除临时表外,系统中的每张物理表必须增加如下属性:
属性名 | 类型 | 取值 | 说明 |
status | Char(1) | Y/N Y为激活N为作废,默认为Y | 标识该行是否使用。用于软删除。 |
create_time | date | 默认为sysdate | 创建时间 |
create_by | varchar2(255) |
| 创建人 |
update_time | date | 默认为sysdate | 最后修改时间 |
update_by | varchar2(255) |
| 最后修改人 |
3. 数据完整性设计
实体完整性设计
A、除临时表外,物理表必须指定主键;
B、必须保证主键的无意义性,禁止给主键附加业务含义;
C、主键使用id字段标识,类型为number(10),可根据业务需要,调整长度;
D、主键id的取值禁止从1开始。通常应从1000000000开始,以保持主键长度的一致;
E、主键id的取值必须使用序列实现,禁止使用GUID或键表的方式。
参照完整性设计
A、以下类型的表必须建立参照完整性:
系统数据表;
基本编码表;
属性数据表;
业务数据表;
B、以下类型的表不建议建立参照完整性:
临时表;
决策数据表;
历史数据表。
C、建立参照完整性约束的父子表,需要满足以下级联操作要求:
父表中删除数据:受限删除。禁止级联删除子表数据。
父表中更新主键:把数据库设计人员拖出去打。
自定义完整性设计
A、检查约束必须设计;
B、非空约束必须设计。禁止除主键外,其他属性都允许为空的设计;
C、唯一约束必须设计。
4. 索引设计
A、 所有候选键必须建立唯一索引;
B、 外键属性必须建立索引;
C、 不建议索引常用的小型表;
D、 如需要建立位图索引,必须明确说明性能上的理由;
E、 如需要建立反向索引,必须明确说明性能上或部署环境上的理由;
F、 如需要建立函数索引,必须明确说明业务上的理由。