减少填充
在大型机上常见的平面文件数据库将数据存储在定长字段中。一条典型记录如"JOHN SMITH 12343rd St"依赖于已知"JOHN"占用 8 个字符、"SMITH"占用 8 个字符等。这种刚性结构使得修改(例如添加中间名缩写)极为困难,通常要求创建新表、进行数据迁移,并更新所有消费该数据的软件。为缓解这一问题,聪明的开发人员引入了“填充(padding)”,即在记录中预留额外字符。例如,一条记录可能以 16 个未使用的字符结尾。当需要新增字段(如中间名缩写)时,可以通过缩减填充空间来插入该字段,从而避免更改记录的总长度。这种方法虽不优雅,但可避免昂贵的模式重构和数据重排。填充通常分布在记录的各个部分,允许新列消耗这些预留空间。尽管填充空间最终可能耗尽,但这一策略显著延长了平面文件模式的运行寿命,而无需进行大规模重构。Brenda 的团队支持一个使用此类 VSAM 平面文件的大型机系统,因此需要将数据提取到现代关系型数据库(RDBMS)中。为此创建了一个 ETL 流程,大型机团队提供了描述文件结构的“拷贝书(copybook)”。然而,ETL 开发人员错误地处理了填充,导致字段被拆分,使得部分填充被当作独立的数据元素。起初这似乎无害,因为报告中的填充字符会被剥离,且通过连接字段即可重建数据。关键错误在于仅针对生产环境的大型机进行了测试,而该环境当时没有正在运行的功能会消耗填充空间。当这些功能在生产环境的大型机上上线后,ETL 流程生成的报告便因混入了原本被占用的填充数据而遭到损坏。由于 ETL 开发人员是合同工,且其解决方案基于有限的测试“按设计运行”,他们拒绝重新处理。因此,大型机团队被迫寻找其他填充字段,以避免影响现有报告。