Files
prop-ai-hr/backend/script/sql/update/aihr_20260813_golden_calibration_mysql8.sql
T

91 lines
4.7 KiB
SQL

-- Frozen golden datasets and explicit rule-acceptance evidence.
-- This migration never activates a rule or changes an asset, review decision, publication, or index.
CREATE TABLE IF NOT EXISTS `aihr_golden_dataset` (
`id` bigint NOT NULL AUTO_INCREMENT,
`tenant_id` varchar(20) NOT NULL,
`dataset_code` varchar(64) NOT NULL,
`version_no` int NOT NULL,
`name` varchar(120) NOT NULL,
`description` varchar(1000) DEFAULT NULL,
`status` varchar(20) NOT NULL DEFAULT 'DRAFT',
`sample_count` int NOT NULL DEFAULT 0,
`content_hash` char(64) DEFAULT NULL,
`owner_id` bigint NOT NULL,
`frozen_by` bigint DEFAULT NULL,
`frozen_time` datetime DEFAULT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_aihr_golden_dataset_version` (`tenant_id`, `dataset_code`, `version_no`),
KEY `idx_aihr_golden_dataset_status` (`tenant_id`, `status`, `update_time`),
CONSTRAINT `ck_aihr_golden_dataset_status` CHECK (`status` IN ('DRAFT','FROZEN','RETIRED')),
CONSTRAINT `ck_aihr_golden_dataset_sample_count` CHECK (`sample_count` >= 0)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Immutable versions of human-labeled rule calibration datasets';
CREATE TABLE IF NOT EXISTS `aihr_golden_sample` (
`id` bigint NOT NULL AUTO_INCREMENT,
`tenant_id` varchar(20) NOT NULL,
`dataset_id` bigint NOT NULL,
`sample_key` varchar(100) NOT NULL,
`risk_class` varchar(20) NOT NULL,
`expected_decision` varchar(20) NOT NULL,
`reason_codes_json` json DEFAULT NULL,
`evidence_ref` varchar(500) NOT NULL,
`asset_id` bigint DEFAULT NULL,
`version_id` bigint DEFAULT NULL,
`created_by` bigint NOT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_aihr_golden_sample` (`tenant_id`, `dataset_id`, `sample_key`),
KEY `idx_aihr_golden_sample_risk` (`tenant_id`, `dataset_id`, `risk_class`, `id`),
CONSTRAINT `ck_aihr_golden_sample_risk` CHECK (`risk_class` IN ('LOW','MEDIUM','HIGH','CRITICAL')),
CONSTRAINT `ck_aihr_golden_sample_decision` CHECK (`expected_decision` IN ('PASS','REVIEW','BLOCK'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Human-labeled samples belonging to a versioned golden dataset';
CREATE TABLE IF NOT EXISTS `aihr_rule_golden_evaluation` (
`id` bigint NOT NULL AUTO_INCREMENT,
`tenant_id` varchar(20) NOT NULL,
`evaluation_id` bigint NOT NULL,
`dataset_id` bigint NOT NULL,
`golden_sample_id` bigint NOT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_aihr_rule_golden_evaluation` (`tenant_id`, `evaluation_id`),
KEY `idx_aihr_rule_golden_sample` (`tenant_id`, `golden_sample_id`, `evaluation_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Traceable link from a shadow evaluation to its frozen golden label';
CREATE TABLE IF NOT EXISTS `aihr_rule_acceptance_profile` (
`id` bigint NOT NULL AUTO_INCREMENT,
`tenant_id` varchar(20) NOT NULL,
`rule_id` bigint NOT NULL,
`version_no` int NOT NULL,
`risk_class` varchar(20) NOT NULL,
`min_total_samples` int NOT NULL,
`min_golden_samples` int NOT NULL,
`min_reviewed_samples` int NOT NULL,
`min_agreement_rate` decimal(7,6) NOT NULL,
`max_false_allow_rate` decimal(7,6) NOT NULL,
`max_false_block_rate` decimal(7,6) NOT NULL,
`min_review_coverage_rate` decimal(7,6) NOT NULL,
`status` varchar(20) NOT NULL DEFAULT 'DRAFT',
`owner_id` bigint NOT NULL,
`freeze_reason` varchar(500) DEFAULT NULL,
`frozen_by` bigint DEFAULT NULL,
`frozen_time` datetime DEFAULT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_aihr_rule_acceptance_profile` (`tenant_id`, `rule_id`, `version_no`),
KEY `idx_aihr_rule_acceptance_status` (`tenant_id`, `rule_id`, `status`, `version_no`),
CONSTRAINT `ck_aihr_rule_acceptance_risk` CHECK (`risk_class` IN ('LOW','MEDIUM','HIGH','CRITICAL')),
CONSTRAINT `ck_aihr_rule_acceptance_status` CHECK (`status` IN ('DRAFT','FROZEN','RETIRED')),
CONSTRAINT `ck_aihr_rule_acceptance_counts` CHECK (
`min_total_samples` >= 1 AND `min_golden_samples` >= 1 AND `min_reviewed_samples` >= 1),
CONSTRAINT `ck_aihr_rule_acceptance_rates` CHECK (
`min_agreement_rate` BETWEEN 0 AND 1 AND
`max_false_allow_rate` BETWEEN 0 AND 1 AND
`max_false_block_rate` BETWEEN 0 AND 1 AND
`min_review_coverage_rate` BETWEEN 0 AND 1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Frozen, risk-specific evidence thresholds for a processing-rule version';