📋 完整性(25%)
权重最高 — "有没有漏填"
测量字段的空值率。主键、外键、业务必填字段不允许空值;其他字段设容忍阈值。
-- 主键空值检查
SELECT COUNT(*) AS null_count
FROM {table}
WHERE {pk_field} IS NULL
✅ 准确性(25%)
权重最高 — "填得对不对"
格式校验(日期格式、手机号正则)、值域检查(枚举值是否在合法列表内)、范围检查(金额不能为负)。
-- 日期格式校验 (PostgreSQL)
SELECT COUNT(*) AS bad_date
FROM {table}
WHERE {field} !~ '^\d{4}-\d{2}-\d{2}$'
🔑 唯一性(15%)
— "有没有重复"
主键必须全局唯一;业务唯一键(如机构编码+日期)不可重复。重复数据是分析错误的主要原因之一。
-- 主键重复检查
SELECT {pk}, COUNT(*) AS cnt
FROM {table}
GROUP BY {pk}
HAVING COUNT(*) > 1
⏱️ 及时性(15%)
— "数据有多新鲜"
数据是否在SLA内到位?招投标信息昨天的数据今天有价值吗?用 MAX(update_time) 与当前时间差来衡量。
-- 数据新鲜度检查
SELECT MAX({time_field}) AS latest,
NOW() - MAX({time_field}) AS age
FROM {table}
🔗 一致性(10%)
— "跨表对得上吗"
外键引用完整性(孤儿记录检查);同一业务对象在两张表中的值是否一致(如机构名称在A表和B表中是否相同)。
-- 外键孤儿记录检查
SELECT COUNT(*) AS orphan
FROM {child_table} c
LEFT JOIN {parent_table} p
ON c.{fk}=p.{pk}
WHERE p.{pk} IS NULL
🔍 有效性(10%)
— "值有意义吗"
值是否在业务合理的范围内?状态流转是否合法?ID格式是否符合国标(如统一社会信用代码18位)?
-- 状态合法性检查
SELECT COUNT(*) AS invalid
FROM {table}
WHERE {status_field}
NOT IN ('有效','无效','待审核')