3. 钻孔数据库需求分析
钻孔数据库的需求分析不是先画表结构,而是先把“业务上到底有哪些对象、每个对象要记住什么、对象之间靠什么发生联系”这三件事说清楚。地质调查、矿山勘查和工程勘察三类任务对钻孔数据的关注点并不相同:区域地质调查更关心地层分层、岩性与采样位置,矿山勘查更关心品位、矿体圈定与见矿段,工程勘察则更关心孔口高程、土层物理力学指标与地下水位。需求分析的第一步,是把这些任务中反复出现的名词提取为实体,把描述实体的数据项提取为属性,把实体之间的业务约束提取为联系,最后用E-R图表达结构、用数据字典固化字段定义。
一、从任务反推实体:先列业务清单,再收敛为实体
以某矿区补充勘查为例,实际工作会产生钻孔设计书、钻孔班报表、岩芯编录表、采样登记表、化验报告和测井曲线。把这些材料摊开逐项标注名词,可以得到候选实体:钻孔、开孔与终孔信息、测斜记录、地层分层、岩性段、矿化段、样品、化验结果、水位观测、钻孔柱状图。候选实体往往存在粒度混杂的问题,例如“开孔与终孔信息”其实是钻孔的属性而不是独立实体,“矿化段”与“地层分层”都是沿孔深划分的区间,但划分依据不同,应作为两个独立实体分别建模,否则一个钻孔内不同依据的区间会互相干扰。
收敛实体的常用判据有三条:一是具有独立标识,例如钻孔以“矿区代码+孔号”唯一确定;二是具有独立生命周期,样品从登记到化验到审核状态会变化,而钻孔终孔后基本稳定;三是被多个业务过程引用,地层分层既被柱状图引用,也被储量估算引用。按此判据,可将候选实体收敛为六个核心实体:钻孔(HOLE)、测斜记录(SURVEY)、地层分层(STRATUM)、岩性段(LITHO)、样品(SAMPLE)、化验结果(ASSAY),另设水位观测(WATER)作为工程勘察与水文观测共用的实体。
二、属性梳理:区分标识属性、描述属性与派生属性
属性梳理要避免“一张表装下所有字段”的诱惑。以钻孔实体为例,孔号、矿区代码属于标识属性,必须唯一且稳定;孔口坐标X、Y、H、开孔日期、终孔日期、终孔深度、钻孔倾角与方位角属于描述属性;而“见矿厚度”“煤层总厚”这类由分层或样品区间计算得到的量属于派生属性,原则上不存入钻孔主表,避免与明细数据不一致。测斜记录需要“测点深度、倾角、方位角”三个属性,其主键由孔号与测点深度联合构成,这正是联系实体与属性边界需要一起考虑的地方。
地层分层与岩性段的属性设计最能体现专业差异。地层分层应包含层序号、顶深、底深、地层代号、接触关系;岩性段应包含段序号、顶深、底深、岩性名称、岩性描述、颜色、结构构造。二者都以“顶深、底深”表达区间,因此必须约定深度参照:本文统一采用孔口为零点、向下为正的孔深坐标,单位为米,保留两位小数;若使用海拔高程,须在字段名中显式标注,不得与孔深混用。样品实体则需记录样号、采样顶深、采样底深、样品类型(岩芯样、刻槽样、土样)、采样方法与采样日期,化验结果记录样号、化验项目、品位值、计量单位与检测单位,二者通过样号形成一对多联系。
三、联系与基数:把业务约束画进E-R图
实体之间的联系不是随意连线,而要能回答业务问题。一个钻孔有多条测斜记录,是一对多;一个钻孔有多层地层分层,是一对多;一个钻孔有多个岩性段,是一对多;一个样品只属于一个钻孔,但一个钻孔可以有多个样品,是一对多;一个样品可送检多个化验项目,化验结果与样品是一对多。需要特别注意的是地层分层与样品之间并非直接联系,样品通过“采样顶深、采样底深”落在某个分层区间内,这是一种由区间包含关系隐含的联系,在E-R图中可用带条件说明的联系线表达,并在数据字典中写明“样品区间应落于某一分层区间内”的完整性约束。
四、数据字典:把E-R图落成可执行的字段约定
E-R图解决结构问题,数据字典解决“字段到底怎么填”的问题。数据字典至少应包含字段名、中文名、数据类型、长度或精度、是否必填、取值范围或枚举、主外键与约束说明。以下给出本节可直接参考的示例片段,字段与取值均为教学示例,实际项目应按矿区规范调整。
| 实体 | 字段名 | 中文名 | 类型/精度 | 必填 | 约束与说明 |
|---|---|---|---|---|---|
| HOLE | hole_id | 孔号 | VARCHAR(20) | 是 | 主键,矿区代码+孔号,全局唯一 |
| HOLE | collar_x | 孔口X坐标 | DECIMAL(12,3) | 是 | 与collar_y同坐标系,须注明投影带 |
| HOLE | final_depth | 终孔深度 | DECIMAL(8,2) | 是 | >0,单位m,孔深坐标 |
| SURVEY | survey_depth | 测点深度 | DECIMAL(8,2) | 是 | 联合主键之一,≤final_depth |
| STRATUM | top_depth / bot_depth | 顶深/底深 | DECIMAL(8,2) | 是 | bot_depth > top_depth,同孔内区间不重叠 |
| SAMPLE | sample_id | 样号 | VARCHAR(24) | 是 | 主键,外键hole_id引用HOLE |
| ASSAY | item_code | 化验项目 | VARCHAR(16) | 是 | 枚举如Cu、Pb、Zn、Au,与sample_id联合主键 |
| ASSAY | grade_value | 品位值 | DECIMAL(10,4) | 是 | ≥0,单位随item_code约定 |
五、需求分析中的常见陷阱与检查要点
第一是深度口径不统一:有的班报表按钻具长度记录,有的按测井曲线校正后记录,若不在字典中写明“以校正后孔深为准”,后续分层与样品区间会对不上。第二是区间重叠与空隙:地层分层要求同孔内首尾相接、不重叠,而岩性段允许按岩性变化细分,二者不能共用同一套区间校验规则。第三是派生量误入库:见矿厚度、平均品位应由查询或视图计算,若直接写入钻孔表,一旦样品数据修订就会产生矛盾。第四是坐标系与高程基准缺失:孔口X、Y必须注明投影带与中央子午线,H须注明是1985国家高程基准还是地方基准,否则多矿区数据合并时会出现系统性偏移。
完成上述梳理后,需求分析的成果应形成两份可直接交付的材料:一份是标注了基数与约束说明的E-R图,一份是覆盖全部实体与关键字段的数据字典表。它们既是后续表结构设计与索引设计的依据,也是编写钻孔柱状图查询、见矿段统计查询和样品化验追溯查询时的需求基线。