前言:
今天突然想把工作几年在oracle建表相关的知识整理成一个像样的文档分享给大家,为达到数据库开发规范、后期维护方便等目的编写此篇文章,希望大家能重视数据库建表这个“小小的问题”,从小处见大学问,欢迎大家一起讨论。
一、通用oracle建表思路(谁用谁爽)
1、建表语句,赋值默认值,主要赋值删除标记与TS的时间戳与非空标记,ID、创建人、创建时间、修改人、修改时间、删除标记、时间戳为一般建表通用字段可根据实际情况增删
create table def_cwzx_cbfx
(id varchar2(100) not null primary key,
creator varchar2(100),
creatorname varchar2(100),
createtime varchar2(100) default to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),
modifiedtime varchar2(100),
modifier varchar2(100),
dr varchar2(10) default 0,
base varchar2(500),
factory varchar2(500),
workshop varchar2(500),
product varchar2(500),
L1Project varchar2(500),
L2Project varchar2(500),
Company varchar2(500),
yyear varchar2(100),
mmonth varchar2(100),
vaule varchar2(500)); --第一步建表
2、给表及每个字段做comment说明
comment on table def_cwzx_cbfx is '财务成本分析底表'
comment on column def_cwzx_cbfx.id is '主键';
comment on column def_cwzx_cbfx.creator is '创建人账号';
comment on column def_cwzx_cbfx.creatorname is '创建人姓名';
comment on column def_cwzx_cbfx.createtime is '创建时间';
comment on column def_cwzx_cbfx.modifiedtime is '修改时间';
comment on column def_cwzx_cbfx. modifier is '修改人姓名';
comment on column def_cwzx_cbfx.dr is '删除标记'; ----通用字段的注释
comment on column def_cwzx_cbfx. base is '基地';
comment on column DEF_CWZX_CBFX.factory is '工厂';
comment on column DEF_CWZX_CBFX.workshop is '车间';
comment on column DEF_CWZX_CBFX.product is '产品';
comment on column DEF_CWZX_CBFX.l1project is '一级项目';
comment on column DEF_CWZX_CBFX.l2project is '二级项目';
comment on column DEF_CWZX_CBFX.company is '单位';
comment on column DEF_CWZX_CBFX.yyear is '年份';
comment on column DEF_CWZX_CBFX.mmonth is '日期';
comment on column DEF_CWZX_CBFX.vaule is '数值';
/*注释查看方法:
查看表注释:
select *
from user_tab_comments
where table_name='表名' --表名以实际创建表名为准
查看字段注释:
select *
from user_col_comments
where table_name='表名' --表名以实际创建表名为准
*/
3、建自动生成id的序列与触发器
CREATE SEQUENCE SEQ_DEF_CWZX_CBFX
INCREMENT BY 1
START WITH 1
NOMAXvalue
NOCYCLE; --建与表相关的序列,命名规范为SQE_表名
CREATE OR REPLACE TRIGGER tr_DEF_CWZX_CBFX
BEFORE INSERT ON DEF_CWZX_CBFX FOR EACH ROW WHEN (new.id is null)
begin
select SEQ_DEF_CWZX_CBFX.nextval into:new.id from dual;
end; --建立插入触发器,当新增数据行时自动生成自增ID
4、建记录操作时间触发器,当用户新增或者修改数据时记录修改时间与创建时间
CREATE OR REPLACE TRIGGER tr_DEF_CWZX_CBFX_ct
BEFORE INSERT ON DEF_CWZX_CBFX FOR EACH ROW WHEN (new.createtime is null)
begin
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') into:new.createtime from dual;
end;--插入新纪录时记录创建时间
CREATE OR REPLACE TRIGGER tr_DEF_CWZX_CBFX_xg
BEFORE update ON DEF_CWZX_CBFX FOR EACH ROW
begin
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') into:new.modifiedtime from dual;
end;--更新数据时记录修改时间
5、增加联合索引与单个索引
create index I_CBFX_1 on DEF_CWZX_CBFX (factory, workshop); --增加组合索引,如果在查询中需要匹配多个字段的条件,可以把这几个字段做个联合索引,效率要比在每个字段上加索引高多了
create index I_CBFX_2 on DEF_CWZX_CBFX (product);--产品单个索引
create index I_CBFX_TS on DEF_CWZX_CBFX (TS);--时间戳的单个索引
alter table DEF_CWZX_CBFX add constraint PK_BD_CBFX primary key (ID);--建立主键约束,可在建表时就指定主键
二、总结:
建表步骤包括:
1、建表语句,赋值默认值,主要赋值删除标记与TS的时间戳与非空标记
2、给表及每个字段做comment说明
3、建自动生成id的序列与触发器
4、建修改触发器,当用户修改数据时记录更新时间与修改人
5、增加联合索引与单个索引
6、增加constraint约束,一般为主键约束
这套通用建表的思路,是个人结合自己的工作经验和查阅相关资料总结而成。总得来说这套通用语法语句有快准狠的效果,兼顾了建表需要的方方面面,尤其我们在日常中容易忽视的对表和字段的注释,大大降低了表的可读性。相关组合索引的建立可提供查询表的速度,相关时间戳和修改触发器的相关记录可作为审计功能。
创作不易,希望大家多多鼓励!