39669-vm/db/migrations/20260417_center_assessment_system.sql
2026-04-17 07:30:11 +00:00

84 lines
5.4 KiB
SQL

CREATE TABLE IF NOT EXISTS center_assessment_types (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
center_application_id INT UNSIGNED NOT NULL,
cycle_id INT UNSIGNED NOT NULL,
title VARCHAR(190) NOT NULL,
category VARCHAR(80) NOT NULL DEFAULT 'أداء',
scale_type VARCHAR(40) NOT NULL DEFAULT 'percentage',
max_score DECIMAL(8,2) NOT NULL DEFAULT 100.00,
weight_percentage DECIMAL(5,2) NOT NULL DEFAULT 0.00,
is_active TINYINT(1) NOT NULL DEFAULT 1,
notes TEXT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_center_assessment_types_center (center_application_id),
INDEX idx_center_assessment_types_cycle (cycle_id),
INDEX idx_center_assessment_types_active (center_application_id, cycle_id, is_active),
CONSTRAINT fk_center_assessment_types_center_application FOREIGN KEY (center_application_id) REFERENCES center_applications(id) ON DELETE CASCADE,
CONSTRAINT fk_center_assessment_types_cycle FOREIGN KEY (cycle_id) REFERENCES school_cycles(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS center_assessment_criteria (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
center_application_id INT UNSIGNED NOT NULL,
cycle_id INT UNSIGNED NOT NULL,
assessment_type_id INT UNSIGNED NOT NULL,
title VARCHAR(190) NOT NULL,
max_score DECIMAL(8,2) NOT NULL DEFAULT 0.00,
sort_order INT UNSIGNED NOT NULL DEFAULT 1,
is_active TINYINT(1) NOT NULL DEFAULT 1,
notes TEXT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_center_assessment_criteria_center (center_application_id),
INDEX idx_center_assessment_criteria_cycle (cycle_id),
INDEX idx_center_assessment_criteria_assessment (assessment_type_id),
CONSTRAINT fk_center_assessment_criteria_center_application FOREIGN KEY (center_application_id) REFERENCES center_applications(id) ON DELETE CASCADE,
CONSTRAINT fk_center_assessment_criteria_cycle FOREIGN KEY (cycle_id) REFERENCES school_cycles(id) ON DELETE CASCADE,
CONSTRAINT fk_center_assessment_criteria_assessment FOREIGN KEY (assessment_type_id) REFERENCES center_assessment_types(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS center_assessment_scores (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
center_application_id INT UNSIGNED NOT NULL,
cycle_id INT UNSIGNED NOT NULL,
assessment_type_id INT UNSIGNED NOT NULL,
score DECIMAL(8,2) NULL,
max_score DECIMAL(8,2) NOT NULL DEFAULT 100.00,
status VARCHAR(20) NOT NULL DEFAULT 'draft',
notes TEXT NULL,
assessed_on DATE NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uniq_center_assessment_score (center_application_id, cycle_id, assessment_type_id),
INDEX idx_center_assessment_scores_cycle (cycle_id),
INDEX idx_center_assessment_scores_assessment (assessment_type_id),
INDEX idx_center_assessment_scores_status (status),
CONSTRAINT fk_center_assessment_scores_center_application FOREIGN KEY (center_application_id) REFERENCES center_applications(id) ON DELETE CASCADE,
CONSTRAINT fk_center_assessment_scores_cycle FOREIGN KEY (cycle_id) REFERENCES school_cycles(id) ON DELETE CASCADE,
CONSTRAINT fk_center_assessment_scores_assessment FOREIGN KEY (assessment_type_id) REFERENCES center_assessment_types(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS center_assessment_score_items (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
center_application_id INT UNSIGNED NOT NULL,
cycle_id INT UNSIGNED NOT NULL,
assessment_score_id INT UNSIGNED NOT NULL,
assessment_type_id INT UNSIGNED NOT NULL,
criterion_id INT UNSIGNED NOT NULL,
score DECIMAL(8,2) NULL,
max_score DECIMAL(8,2) NOT NULL DEFAULT 0.00,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uniq_center_assessment_score_item (assessment_score_id, criterion_id),
INDEX idx_center_assessment_score_items_center (center_application_id),
INDEX idx_center_assessment_score_items_cycle (cycle_id),
INDEX idx_center_assessment_score_items_assessment (assessment_type_id),
INDEX idx_center_assessment_score_items_criterion (criterion_id),
CONSTRAINT fk_center_assessment_score_items_center_application FOREIGN KEY (center_application_id) REFERENCES center_applications(id) ON DELETE CASCADE,
CONSTRAINT fk_center_assessment_score_items_cycle FOREIGN KEY (cycle_id) REFERENCES school_cycles(id) ON DELETE CASCADE,
CONSTRAINT fk_center_assessment_score_items_score FOREIGN KEY (assessment_score_id) REFERENCES center_assessment_scores(id) ON DELETE CASCADE,
CONSTRAINT fk_center_assessment_score_items_assessment FOREIGN KEY (assessment_type_id) REFERENCES center_assessment_types(id) ON DELETE CASCADE,
CONSTRAINT fk_center_assessment_score_items_criterion FOREIGN KEY (criterion_id) REFERENCES center_assessment_criteria(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;