3. 钻孔数据库需求分析

钻孔数据库的需求分析不是先画表结构,而是先把“业务上到底有哪些对象、每个对象要记住什么、对象之间靠什么发生联系”这三件事说清楚。地质调查、矿山勘查和工程勘察三类任务对钻孔数据的关注点并不相同:区域地质调查更关心地层分层、岩性与采样位置,矿山勘查更关心品位、矿体圈定与见矿段,工程勘察则更关心孔口高程、土层物理力学指标与地下水位。需求分析的第一步,是把这些任务中反复出现的名词提取为实体,把描述实体的数据项提取为属性,把实体之间的业务约束提取为联系,最后用E-R图表达结构、用数据字典固化字段定义。

一、从任务反推实体:先列业务清单,再收敛为实体

以某矿区补充勘查为例,实际工作会产生钻孔设计书、钻孔班报表、岩芯编录表、采样登记表、化验报告和测井曲线。把这些材料摊开逐项标注名词,可以得到候选实体:钻孔、开孔与终孔信息、测斜记录、地层分层、岩性段、矿化段、样品、化验结果、水位观测、钻孔柱状图。候选实体往往存在粒度混杂的问题,例如“开孔与终孔信息”其实是钻孔的属性而不是独立实体,“矿化段”与“地层分层”都是沿孔深划分的区间,但划分依据不同,应作为两个独立实体分别建模,否则一个钻孔内不同依据的区间会互相干扰。

收敛实体的常用判据有三条:一是具有独立标识,例如钻孔以“矿区代码+孔号”唯一确定;二是具有独立生命周期,样品从登记到化验到审核状态会变化,而钻孔终孔后基本稳定;三是被多个业务过程引用,地层分层既被柱状图引用,也被储量估算引用。按此判据,可将候选实体收敛为六个核心实体:钻孔(HOLE)、测斜记录(SURVEY)、地层分层(STRATUM)、岩性段(LITHO)、样品(SAMPLE)、化验结果(ASSAY),另设水位观测(WATER)作为工程勘察与水文观测共用的实体。

二、属性梳理:区分标识属性、描述属性与派生属性

属性梳理要避免“一张表装下所有字段”的诱惑。以钻孔实体为例,孔号、矿区代码属于标识属性,必须唯一且稳定;孔口坐标X、Y、H、开孔日期、终孔日期、终孔深度、钻孔倾角与方位角属于描述属性;而“见矿厚度”“煤层总厚”这类由分层或样品区间计算得到的量属于派生属性,原则上不存入钻孔主表,避免与明细数据不一致。测斜记录需要“测点深度、倾角、方位角”三个属性,其主键由孔号与测点深度联合构成,这正是联系实体与属性边界需要一起考虑的地方。

地层分层与岩性段的属性设计最能体现专业差异。地层分层应包含层序号、顶深、底深、地层代号、接触关系;岩性段应包含段序号、顶深、底深、岩性名称、岩性描述、颜色、结构构造。二者都以“顶深、底深”表达区间,因此必须约定深度参照:本文统一采用孔口为零点、向下为正的孔深坐标,单位为米,保留两位小数;若使用海拔高程,须在字段名中显式标注,不得与孔深混用。样品实体则需记录样号、采样顶深、采样底深、样品类型(岩芯样、刻槽样、土样)、采样方法与采样日期,化验结果记录样号、化验项目、品位值、计量单位与检测单位,二者通过样号形成一对多联系。

三、联系与基数:把业务约束画进E-R图

实体之间的联系不是随意连线,而要能回答业务问题。一个钻孔有多条测斜记录,是一对多;一个钻孔有多层地层分层,是一对多;一个钻孔有多个岩性段,是一对多;一个样品只属于一个钻孔,但一个钻孔可以有多个样品,是一对多;一个样品可送检多个化验项目,化验结果与样品是一对多。需要特别注意的是地层分层与样品之间并非直接联系,样品通过“采样顶深、采样底深”落在某个分层区间内,这是一种由区间包含关系隐含的联系,在E-R图中可用带条件说明的联系线表达,并在数据字典中写明“样品区间应落于某一分层区间内”的完整性约束。

钻孔数据库核心实体—联系结构(E-R 示意) 钻孔 HOLE 孔号 · 矿区代码 · X/Y/H 终孔深度 · 倾角 · 方位角 测斜记录 SURVEY 测点深度 · 倾角 · 方位角 主键:孔号 + 测点深度 地层分层 STRATUM 层序号 · 顶深 · 底深 地层代号 · 接触关系 岩性段 LITHO 段序号 · 顶深 · 底深 岩性名称 · 颜色 · 构造 样品 SAMPLE 样号 · 采样顶深 · 采样底深 样品类型 · 采样方法 化验结果 ASSAY 样号 · 化验项目 品位值 · 单位 · 检测单位 水位观测 WATER 观测日期 · 初见水位 稳定水位 · 观测方法 1 : N 1 : N 1 : N 1 : N 1 : N 1 : N 区间包含约束:样品顶/底深须落于某一分层区间内 深度约定:孔口为零点、向下为正,单位 m;派生量(见矿厚度等)不落入主表

四、数据字典:把E-R图落成可执行的字段约定

E-R图解决结构问题,数据字典解决“字段到底怎么填”的问题。数据字典至少应包含字段名、中文名、数据类型、长度或精度、是否必填、取值范围或枚举、主外键与约束说明。以下给出本节可直接参考的示例片段,字段与取值均为教学示例,实际项目应按矿区规范调整。

实体字段名中文名类型/精度必填约束与说明
HOLEhole_id孔号VARCHAR(20)是主键,矿区代码+孔号,全局唯一
HOLEcollar_x孔口X坐标DECIMAL(12,3)是与collar_y同坐标系,须注明投影带
HOLEfinal_depth终孔深度DECIMAL(8,2)是>0,单位m,孔深坐标
SURVEYsurvey_depth测点深度DECIMAL(8,2)是联合主键之一,≤final_depth
STRATUMtop_depth / bot_depth顶深/底深DECIMAL(8,2)是bot_depth > top_depth,同孔内区间不重叠
SAMPLEsample_id样号VARCHAR(24)是主键,外键hole_id引用HOLE
ASSAYitem_code化验项目VARCHAR(16)是枚举如Cu、Pb、Zn、Au,与sample_id联合主键
ASSAYgrade_value品位值DECIMAL(10,4)是≥0,单位随item_code约定

五、需求分析中的常见陷阱与检查要点

第一是深度口径不统一:有的班报表按钻具长度记录,有的按测井曲线校正后记录,若不在字典中写明“以校正后孔深为准”,后续分层与样品区间会对不上。第二是区间重叠与空隙:地层分层要求同孔内首尾相接、不重叠,而岩性段允许按岩性变化细分,二者不能共用同一套区间校验规则。第三是派生量误入库:见矿厚度、平均品位应由查询或视图计算,若直接写入钻孔表,一旦样品数据修订就会产生矛盾。第四是坐标系与高程基准缺失:孔口X、Y必须注明投影带与中央子午线,H须注明是1985国家高程基准还是地方基准,否则多矿区数据合并时会出现系统性偏移。

需求分析阶段的验收标准可以概括为三句话:每个实体都能回答“它由谁产生、被谁引用”;每个属性都能回答“类型、精度、取值范围、是否必填”;每条联系都能回答“基数是多少、有无完整性约束”。三者齐备,E-R图与数据字典才具备直接转化为建表语句和查询设计的条件。

完成上述梳理后,需求分析的成果应形成两份可直接交付的材料:一份是标注了基数与约束说明的E-R图,一份是覆盖全部实体与关键字段的数据字典表。它们既是后续表结构设计与索引设计的依据,也是编写钻孔柱状图查询、见矿段统计查询和样品化验追溯查询时的需求基线。