宽表的思考

本文探讨了宽表在CRM系统中的应用,详细分析了其带来的一览全貌、查询速度提升等优点,同时也揭示了在ETL过程中遇到的脚本维护困难和字段增删复杂等问题。文章提出了一套宽表使用原则,旨在帮助开发者优雅地利用宽表,并提供了在不同场景下选择宽表或窄表的指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一 宽表的优点

1.      宽表浅意上的好处

在当前这个项目中,大量使用了宽表,字段超过一百五十个字段的宽表有五张,分别是客户机构级信息表、客户客户经理级信息表、客户经理信息表、集团客户信息表、战略客户信息表。

从上面的表名中可以猜到,这是个CRM项目,我这里能列举出来的优点也是在项目中体现出来的优点。

大量使用宽表究竟给我们带来了什么好处?


  •  窥一表知全貌
  •  查询速度快(此处我一直保留疑问)


窥一表知全貌:这个好处很明显,尤其是收到报表开发人员的欢迎,他们不关心数据如何存储,只关心这张报表是不是很方便,很快的能开发出来。还有一个就是数据分析人员,银行业大部分数据分析人员很讨厌做表关联,他们喜欢一条记录看到客户的全貌。

查询速度快:大多数情况确实如此,大部分SQL慢都是由于表关联造成的,所以大家都在思考不关联出结果。于是,出现了将一些常用的信息都做成了大宽表,此处让我这种范式强迫症患者很是头疼……

二 宽表的不便

从一个ETL人员角度讲,使用宽表带给我的痛苦远远大于它带给我的快乐,此处描述一下我们目前面对的系统,从系统出发解释宽表带来的问题。

项目是一个CRM系统,以仓库数据(TD)为基础,进行建模、数据加工,作为仓库的一个集市落地后,在将这部分数据,同步到查询服务器(DB2)上,每日从TD到DB2的数据量约为16G,同步数据的方式为TD导出数据生成txt,上传到FTP服务器后在通过SHELL加载到DB2。

了解了项目的背景,就可以列举出在使用宽表时有如下不便

  •  脚本过长,不易维护
  • 字段的增删过于复杂



因为要在两个系统中同步两张表一份数据,增删字段时一定要考虑一致性,同时要考虑历史数据如何处理。每次都需要经过如下步骤:

1.        修改TD表结构

2.        修改TD脚本

3.        修改导出数据脚本

4.        修改DB2表结构

5.        修改DB2加载数据的Shell脚本

每次变动都伴随这大量的工作,同时还需要因为这个字段加载新的历史数据或更新这个字段的内容,此处在项目后期维护中带来了很大的工作量。

三 如何优雅的使用宽表

宽表在仓库的汇总层大量使用,如客户、存款、贷款等通用的实体都被设计为宽表。这些宽表会面临我上面提到的问题吗?

显然不会,仓库的表很少因为个人需求而增减字段,同时仓库大多只负责原始数据的存储,不会涉及到太复杂的字段加工逻辑,故大多数汇总层的表都被设计为宽表。

要想优雅的使用宽表,我认为需要注意以下这一点:

字段是否会频繁增减

对于不涉及到事务的表且字段不会频繁增加,建议设计为宽表,尤其对于BI系统。

当然,这只是一个最简单粗暴的原则,真正做的时候,你要考虑对于不同的数据库产品,宽表中很多字段是否为空等。

针对不用的场景做不同的选择,这句话,听起来很虚,其实很实。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24816552/viewspace-1735638/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24816552/viewspace-1735638/

### 与低代码平台结合的设计方案及最佳实践 #### 设计背景 是一种数据结构形式,通常用于数据分析领域,特是列数较多、维度丰富,能够在一个格中展示尽可能多的信息。低代码平台则提供了一种可视化的开发方式,降低了传统软件开发的技术门槛。两者的结合旨在利用低代码平台的优势,快速构建基于的数据处理和分析应用。 --- #### 方案概述 为了有效结合和低代码平台进行设计,可以从以下几个方面入手: 1. **数据建模** 数据模型是整个设计方案的核心部分。对于而言,要将其复杂的字段结构映射到低代码平台支持的数据对象中。可以通过定义实体关系图(ERD),将拆分为多个逻辑关联的子[^1]。这种做法不仅便于管理复杂的数据结构,还能提高系统的可维护性和性能。 2. **界面设计** 使用低代码平台提供的拖拽组件创建用户友好的交互界面。针对的特,在界面上重突出筛选条件设置、分页显示以及导出功能等功能模块。例如,可以配置高级过滤器允许用户按查询特定记录集;同时加入图控件直观呈现统计结果[^3]。 3. **业务逻辑实现** 借助低代码平台内置的工作流引擎或者脚本编辑器编写必要的业务规则。考虑到可能涉及大量计算指标的情况,建议采用插件化的方式扩展核心算法库,这样既能满足定制化求又不会增加基础框架负担[^4]。 4. **集成与部署** 利用API网关连接外部系统获取实时更新后的源数据填充至本地数据库对应的实例里。另外还要考虑容器编排技术如Kubernetes来自动化完成服务上线过程并保障高可用性水平[^2]。 5. **安全性考量** 不论是在前端还是后端都要严格控制访问权限防止敏感信息泄露风险发生 。比如通过角色分配机制限定不同岗位人员所能查看的内容范围 。 --- #### 最佳实践总结 - 明确项目目标:在启动之前就确立清楚期望达成的效果是什么样的 ,以便后续各个环节围绕此主线展开行动。 - 迭代式开发方法论运用 :鉴于此类项目的规模较大且存在不确定性因素干扰 ,推荐采取敏捷开发策略逐步完善最终成果物形态 。 - 注重用户体验优化 :始终把终端用户的实际操作感受放在首位位置思考每一个细节之处该如何改进使之更加便捷易懂友好型态展现出来给大众群体所接受认可喜爱追捧向往追求渴望得到拥有占有享受乐趣无穷尽也 ! ```python # 示例代码片段:Python 实现简单加载逻辑 import pandas as pd def load_wide_table(file_path): """从CSV文件加载""" df = pd.read_csv(file_path) return df if __name__ == "__main__": wide_data = load_wide_table('wide_table.csv') print(wide_data.head()) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值