91 lines
4.7 KiB
SQL
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';
|