trading-platform-database-v2/ddl/schemas/education/tables/07-quizzes.sql
rckrdmrd 45e77e9a9c feat: Initial commit - Database schemas and scripts
DDL schemas for Trading Platform:
- User management
- Authentication
- Payments
- Education
- ML predictions
- Trading data

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 04:30:23 -06:00

58 lines
2.1 KiB
SQL

-- =====================================================
-- TABLE: education.quizzes
-- =====================================================
-- Proyecto: OrbiQuant IA (Trading Platform)
-- Módulo: OQI-002 - Education
-- Especificación: ET-EDU-001-database.md
-- =====================================================
CREATE TABLE education.quizzes (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Relación (puede estar asociado a módulo o lección)
module_id UUID REFERENCES education.modules(id) ON DELETE CASCADE,
lesson_id UUID REFERENCES education.lessons(id) ON DELETE CASCADE,
-- Información básica
title VARCHAR(200) NOT NULL,
description TEXT,
-- Configuración
passing_score_percentage INTEGER DEFAULT 70, -- % mínimo para aprobar
max_attempts INTEGER, -- NULL = intentos ilimitados
time_limit_minutes INTEGER, -- NULL = sin límite de tiempo
-- Opciones
shuffle_questions BOOLEAN DEFAULT true,
shuffle_answers BOOLEAN DEFAULT true,
show_correct_answers BOOLEAN DEFAULT true, -- Después de completar
-- Gamificación
xp_reward INTEGER DEFAULT 50,
xp_perfect_score_bonus INTEGER DEFAULT 20,
-- Estado
is_active BOOLEAN DEFAULT true,
-- Metadata
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT valid_passing_score CHECK (passing_score_percentage > 0 AND passing_score_percentage <= 100),
CONSTRAINT quiz_association CHECK (
(module_id IS NOT NULL AND lesson_id IS NULL) OR
(module_id IS NULL AND lesson_id IS NOT NULL)
)
);
-- Índices
CREATE INDEX idx_quizzes_module ON education.quizzes(module_id);
CREATE INDEX idx_quizzes_lesson ON education.quizzes(lesson_id);
CREATE INDEX idx_quizzes_active ON education.quizzes(is_active) WHERE is_active = true;
-- Comentarios
COMMENT ON TABLE education.quizzes IS 'Quizzes/evaluaciones asociadas a módulos o lecciones';
COMMENT ON COLUMN education.quizzes.max_attempts IS 'NULL = intentos ilimitados';
COMMENT ON COLUMN education.quizzes.time_limit_minutes IS 'NULL = sin límite de tiempo';
COMMENT ON COLUMN education.quizzes.xp_perfect_score_bonus IS 'XP bonus por obtener 100% de score';