iloom-flatten/migrations/20260604_143807_add_check_constraints_and_monitor.sql

51 lines
1.6 KiB
MySQL
Raw Normal View History

-- ============================================
-- 此文件由 Meoo Cloud 自动生成,请勿修改
-- This file is auto-generated by Meoo Cloud, DO NOT MODIFY
-- ============================================
ALTER TABLE inventory_records
DROP CONSTRAINT IF EXISTS chk_inventory_positive;
ALTER TABLE inventory_records
ADD CONSTRAINT chk_inventory_positive
CHECK (quantity >= 0 AND rolls >= 0 AND (price_per_meter IS NULL OR price_per_meter >= 0));
ALTER TABLE payments
DROP CONSTRAINT IF EXISTS chk_payment_positive;
ALTER TABLE payments
ADD CONSTRAINT chk_payment_positive
CHECK (amount >= 0 AND quantity >= 0 AND price_per_meter >= 0);
ALTER TABLE accounts_payable
DROP CONSTRAINT IF EXISTS chk_ap_amounts;
ALTER TABLE accounts_payable
ADD CONSTRAINT chk_ap_amounts
CHECK (
total_amount >= 0 AND
paid_amount >= 0 AND
unpaid_amount >= 0 AND
paid_amount <= total_amount AND
unpaid_amount <= total_amount
);
CREATE OR REPLACE VIEW v_error_rate_monitor AS
SELECT
DATE_TRUNC('day', changed_at) as check_date,
table_name,
COUNT(*) as total_operations,
SUM(CASE WHEN validation_passed = FALSE THEN 1 ELSE 0 END) as failed_operations,
ROUND(
SUM(CASE WHEN validation_passed = FALSE THEN 1 ELSE 0 END)::NUMERIC /
NULLIF(COUNT(*), 0) * 10000, 2
) as error_rate_per_10k,
CASE
WHEN SUM(CASE WHEN validation_passed = FALSE THEN 1 ELSE 0 END)::NUMERIC /
NULLIF(COUNT(*), 0) * 10000 <= 1 THEN '✓ 达标 (≤1/万)'
ELSE '✗ 超标 (>1/万)'
END as target_status
FROM data_audit_logs
WHERE changed_at >= NOW() - INTERVAL '30 days'
GROUP BY DATE_TRUNC('day', changed_at), table_name
ORDER BY check_date DESC, table_name;