工作日志【 SQL内部规范-ETL银行项目 】
一、表结构设计
- 建表时,首先要确定表的业务唯一键,即该表的唯一索引由哪些字段构成,不建议创建没有唯一索引的表;
如果要修改表的唯一索引,一定要严格评审;
前台:表结构变更:F层的表需要通知JAVA开发。前台缺字段,新需求发现B层提前跟后台说。
后台:表结构变更通知前台,看有没有其他下游用。 - 对于已存在的相同中文含义的英文字母字段,尽量复用,即同一个中文含义字段,英文字段最好一个;
- 表字段类型,可以分几类:
(1)单字符型的,用CHAR(1);
(2)编码含义的(即对应数据字段码值),视码值长度,可以用CHAR(1),VARCHAR(2),VARCHAR(4),VARCHAR(8)等;
(3)涉及姓名,地址等字段,建议VARCHAR(128),VARCHAR(256),VARCHAR(512)等;
(4)涉及数量(个数、支数、人数等)用INT或decimal(10,0)等,长度视具体情况定;
(5)对于金额,份额,发生额等字段用decimal(26,4);
(6)对于价格、净值字段,用decimal(18,12);
(7)对于增长率,占比等于百分比字段,建议用decimal(18,12); - 建表时,字段中文含义都要写全,字段建议都设置不能为空,设置好默认值。
- 维度表设计,建议维度都是码值类的字段,而不是中文含义字段;或者每个维度都是两个字段,一个码值,一个中文含义;
- 对于日期类的字段,建议用整型,若要用日期型,那所有的表建议统一日期格式:yyyymmdd
- 建表时,如果字段有对应的数据字典,做最好的中文备注里标明字典号;
- 建表前,先要确认有没有类似的表,避免重复建表;
- 表命名和存储过程命最好有一套规范;
二、存储过程编写(不遵守增加说明注释)
- 中文备注一定要详细,以便其他人理解;
- 如果关联,建议都用左关联,尽量不使用右关联和内关联
- 用左关联时,主表和从表不能一对多,即关联字段和条件,能确定从表的唯一性;
- 用左关联时,如果select出的字段有从表的字段,一定要用ifnull保护,因为可能关联不上,取出的就是空值;
- 写SQL里,如果涉及除法,一定要保护下分母为0的情况;----只要sql中遇到函数操作,需要考虑到不支持的值导致的异常;
- 总结sql编写里的一些关联字段,评估一下是否需要再对应的表上增加索引,提高sql效率;
- 写的sql,除了保证逻辑处理的正确性,还要多考虑一下sql的效率;
- 对于一些计算日数据的过程,最好是两个输入参数(开始日期,结束日期),支持多天的数据处理;
- 对于一些需要用大多天的数据sql,如计算年初到当天的交易量,年初至今的最大规模等,可以先把截止上一天的数据存下来,
每天基于上一天的数据来计算,提高效率;(如果数据量很小就无所谓了) - 每个过程都需要用到的表,涉及的结果或者要处理的表,最好在开始的备注里写清楚。