Performance indexes have been applied to the database:
Copy
-- Core indexes for enterprise isolationCREATE INDEX IF NOT EXISTS idx_bras_enterprise ON business_risk_assessments(enterprise_id);CREATE INDEX IF NOT EXISTS idx_legal_entities_enterprise ON legal_entities(enterprise_id);-- BRA query optimizationCREATE INDEX IF NOT EXISTS idx_bra_risk_scenarios_bra ON bra_risk_scenarios(bra_id);CREATE INDEX IF NOT EXISTS idx_bra_risk_ratings_bra ON bra_risk_ratings(bra_id);CREATE INDEX IF NOT EXISTS idx_bra_risk_ratings_scenario ON bra_risk_ratings(bra_risk_scenario_id);-- Control query optimizationCREATE INDEX IF NOT EXISTS idx_sub_controls_key_control ON sub_controls(key_control_id);-- Action query optimizationCREATE INDEX IF NOT EXISTS idx_mitigation_actions_status ON mitigation_actions(status);CREATE INDEX IF NOT EXISTS idx_mitigation_actions_due_date ON mitigation_actions(due_date);-- Audit log optimizationCREATE INDEX IF NOT EXISTS idx_audit_log_enterprise ON audit_log(enterprise_id);CREATE INDEX IF NOT EXISTS idx_audit_log_created ON audit_log(created_at);
-- Automatic timestamp updatesCREATE OR REPLACE FUNCTION update_updated_at()RETURNS TRIGGER AS $$BEGIN NEW.updated_at = NOW(); RETURN NEW;END;$$ LANGUAGE plpgsql;-- Apply to tablesCREATE TRIGGER update_bras_updated_atBEFORE UPDATE ON business_risk_assessmentsFOR EACH ROW EXECUTE FUNCTION update_updated_at();CREATE TRIGGER update_legal_entities_updated_atBEFORE UPDATE ON legal_entitiesFOR EACH ROW EXECUTE FUNCTION update_updated_at();-- Add triggers to all tables with updated_at column
-- Automatic risk score calculationCREATE OR REPLACE FUNCTION calculate_risk_score()RETURNS TRIGGER AS $$BEGIN NEW.risk_score = NEW.impact_score * NEW.likelihood_score; NEW.risk_level = CASE WHEN NEW.risk_score <= 4 THEN 'Low' WHEN NEW.risk_score <= 9 THEN 'Medium' WHEN NEW.risk_score <= 15 THEN 'High' ELSE 'Very High' END; RETURN NEW;END;$$ LANGUAGE plpgsql;CREATE TRIGGER calculate_rating_scoreBEFORE INSERT OR UPDATE ON bra_risk_ratingsFOR EACH ROW EXECUTE FUNCTION calculate_risk_score();