oracle表设计小结

如题,工作中总结的一些,不全,日后继续补充。

一:尽量不要给oracle字段留有null值的机会 ,因为如果我们以某字段为null作为查询条件的话,引擎会放弃索引 从而进行全文检索  ,故 我们可以将该字段进行默认值设置,  没有Null ,比如只有0。

例:

select * from user  where age is null;  //这种写法非常错误的 会放弃索引 

设置默认值后的优化语句  select * from user where age = 0;

附://给info表的browsingnum字段设置默认值为0

alter table info modify browsingnum default(0);


二:在需要别人调取webService取数据的表中,尽量用版本号代替时间戳。

原因:时间戳固然精准,然是如果数据来源不统一,etl有慢有快,数据量大的话,比如用odi之类的etl工具的话,时间戳的时间差距还是很大的,虽然可以采取一些补偿机制,但是往往控制的不够精准。而版本号就没有这种问题,在别人调用接口取该表数据时,可以根据版本号取只最新更新的数据,这样是最高效的。

这里说一下今天做的接口的思路,事情是我们有一张表,组织机构表,需要做一个结构让别人取数据,事情其实很简单,但是思路需要清晰,需要想的大概四个方面:

(1)表怎么设计,就比如上面的版本号。

(2)需要对方传入什么参数,比如什么都不传代表将数据全量给对方,传一个整型数字0表示将最新版本号的数据给对方,传整型数字代表将相应版本号以及比该版本号大的数据给对方。

(3)是否需要对方验证身份,频繁的调用接口,如果出问题或者压力太大我们也要知道是谁弄得不是?所以可以需要对方传入一个身份标识,并记入日志。

(4)给对方返回什么格式的数据,json? xml? 建议返回json,没别的,就是我们拼接json方便,对方解析也方便。


三:适当选择字段类型

如varchar2和nvarchar2,varchar2和nvarchar2都是长度可变的类型,比如设置的是varchar2(4000),但是只存了1000长度的数据,没关系的,不会浪费空间,会自动按照数据长度分配空间。区别是nvarchar2在计算长度时会根据字符集的不同而分别计算,所以对汉字的兼容性好,但是varchar2更节省空间,比如一个gbk编的汉字,在nvarchar2中占两个长度,在varchar2只占一个长度,所以,如果数据是汉字以及其他特殊符号的话,为了兼容性,建议nvarchar2,否则,varchar2更适合。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值