返回正文目录

第七章探查、口径与基线记录

日期:2026-10-18。对应第七章初稿。本章只读探查现有 Chinook,尚未建立 TM/QM 或执行语义查询。

环境与范围

沿用第六章的 CLI、Launcher 0.1.24,服务地址 http://127.0.0.1:18067,Namespace chinook,命名数据源 chinook-sqlite。本次复查连接成功,数据源指向 练习目录\lab\data\Chinook_Sqlite.sqlite;未重新安装组件或重启服务。

capabilities 返回 engine=java、runtimeApiVersion=foggy-runtime-api/v1、schemaVersion=2026-06-06、securityMode=none-dev-test-only,表结构探查与只读 SQL 能力可用。Runtime 的本地开发测试提示保留在响应中;本章没有验证业务身份或生产权限。

本次探查 Customer、Invoice、InvoiceLine、Track、Genre 五张表,核对这五张表之间的四条外键关系。Customer → Employee、Track → Album/MediaType 等不在本轮关联核对范围。

查询与证据

所有查询均通过公开 CLI 的 sql query --file 执行,限定数据源、最多 100 行输出和 5 秒查询超时。查询没有写入、建表或数据修复操作。

文件 核对内容
01-overview.sql 五张表记录数、账单日期范围和全库金额
02-invoice-sample.sql 2012 年前五张账单及其明细合计
03-invoice-reconciliation.sql 全部账单逐张对账、无明细账单与差额
04-core-relations.sql 四条核心关联的空键与孤立记录
05-data-shapes.sql 日期存储、数量、价格、金额精度及国家字段
06-monthly-invoices-2012.sql 2012 年每月账单数、客户数和金额
07-monthly-lines-2012.sql 2012 年每月明细数、数量和金额
08-join-grain-2012.sql 关联后累计账单头导致重复计算的实测对照
09-line-sample.sql 账单 252 的两条原始明细
10-genre-values.sql 25 个实际分类值,含音乐与影视分类

CLI 命令和退出码见调用记录。五份 inspect-*.json 与十份查询响应位于同一证据目录,保存列信息、返回行、警告与截断状态;本轮结果未截断。

下一章的建模约定草稿

这些定义用于本例教学,交作者和读者审阅;数据检查通过不等于真实企业已经确认业务口径。

实际结果与独立复核

五张表分别为 59、412、2240、3503、25 行;账单日期从 2009-01-01 到 2013-12-22,实际日期值均为文本、时间部分均为零点。全部 412 张账单均有明细,逐张金额一致,全库金额 2328.60。

2012 年有 83 张账单、447 条明细,总额 477.53;十月 42.62,十一月 37.62。错误地关联后累加账单头,全年金额变为 4256.25。完整十二个月结果见baseline.json。

四条核心关联未发现空键或孤立目标。Track.GenreId 在结构上允许为空,但这份样例里均有值;未来数据出现空值时,需保留金额并明确未分类的处理方式,不能根据本次“没有空值”把规则写死。

样例中的 Quantity 全为 1,账单国家与客户国家、明细价格与目录价格均相同;它们只是本文件中的数据现象。账单与明细未出现不能解析的日期、负账单金额、无效明细数量或超出两位小数的金额。

独立校验脚本以只读方式读取原始行,用 Python 字典核对关系,用 Decimal 计算逐账单及逐月合计,不复用 SQL 的 JOIN 和聚合结果作为预期值;同时核对 CLI 与原始表的字段、主键及外键。原件和副本均仍匹配固定样例 SHA256。通过结果见acceptance.json。

复跑

在服务已就绪的教学环境中执行:

Set-Location '练习目录\lab'
.\checks\collect-chapter-07.ps1
python -X utf8 .\checks\verify-chapter-07.py

采集脚本只调用公开 CLI,校验脚本检查响应和只读原始数据;不写源数据库、不生成语义模型。服务关闭时先按环境说明恢复,不重新下载或初始化现有样例。

当前只完成物理数据探查与独立基线。语义模型校验、自然语言到 DSL 的问答验收、Console 与 FAP 均留在后续章节。