炫“库”行动-人大金仓有奖征文—谈谈oracle建表规范

简介: 今天突然想把工作几年在oracle建表相关的知识整理成一个像样的文档分享给大家,为达到数据库开发规范、后期维护方便等目的编写此篇文章,希望大家能重视数据库建表这个“小小的问题”,从小处见大学问,欢迎大家一起讨论。

前言:



今天突然想把工作几年在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约束,一般为主键约束

这套通用建表的思路,是个人结合自己的工作经验和查阅相关资料总结而成。总得来说这套通用语法语句有快准狠的效果,兼顾了建表需要的方方面面,尤其我们在日常中容易忽视的对表和字段的注释,大大降低了表的可读性。相关组合索引的建立可提供查询表的速度,相关时间戳和修改触发器的相关记录可作为审计功能。


创作不易,希望大家多多鼓励!


相关文章
|
Oracle 关系型数据库 流计算
Flink CDC不支持直接连接到Oracle ADG备库进行数据同步
Flink CDC不支持直接连接到Oracle ADG备库进行数据同步
310 1
|
6月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之和Oracle数据同步必须是使用主库吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用合集之和Oracle数据同步必须是使用主库吗
|
1月前
|
Oracle 关系型数据库 MySQL
shell获取多个oracle库mysql库所有的表
请注意,此脚本假设你有足够的权限访问所有提到的数据库。在实际部署前,请确保对脚本中的数据库凭据、主机名和端口进行适当的修改和验证。此外,处理数据库操作时,务必谨慎操作,避免因错误的脚本执行造成数据损坏或服务中断。
40 0
|
4月前
|
Oracle 关系型数据库 Linux
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
通过这一连串的步骤,可以专业且有效地在Linux下为Qt编译Oracle驱动库 `libqsqloci.so`,使得Qt应用能够通过OCI与Oracle数据库进行交互。这些步骤适用于具备一定Linux和Qt经验的开发者,并且能够为需要使用Qt开发数据库应用的专业人士提供指导。
149 1
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
|
6月前
|
Oracle Java 关系型数据库
实时计算 Flink版产品使用合集之支持 Oracle 整库同步吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
SQL 消息中间件 Oracle
实时计算 Flink版产品使用合集之怎么同步Oracle备库
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
Oracle 关系型数据库 数据库
Flink CDC中oracle dataguard模式下,有没有cdc备库的方案?
Flink CDC中oracle dataguard模式下,有没有cdc备库的方案?
186 1
|
Oracle 关系型数据库 Apache
一键实现 Oracle 数据整库同步至 Apache Doris
极大降低数据同步门槛,使数据同步变得更加简单高效
一键实现 Oracle 数据整库同步至 Apache Doris
|
存储 XML SQL
Oracle 数据库自动诊断库 ADR(Automatic Diagnostic Repository)简介 发表在 数据和云
Oracle 数据库如果出现故障,我们的第一个反应是查看数据库的 alert log,但一些工程师对 alert log 不熟悉,实际上 alert log 位于Oracle 数据库自动诊断库(Automatic Diagnostic Repository,以下简称 ADR) 中,要熟悉 alert log,我们必需全面了解 ADR 的概念。
285 0
|
Oracle 关系型数据库 数据库
Oracle 不使用DBCA在Oracle 11中删除数据库
Oracle 不使用DBCA在Oracle 11中删除数据库
72 0

推荐镜像

更多