trading-platform-database-v2/ddl/schemas/education/tables/10-certificates.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

55 lines
2.1 KiB
SQL

-- =====================================================
-- TABLE: education.certificates
-- =====================================================
-- Proyecto: OrbiQuant IA (Trading Platform)
-- Módulo: OQI-002 - Education
-- Especificación: ET-EDU-001-database.md
-- =====================================================
CREATE TABLE education.certificates (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Relaciones
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
course_id UUID NOT NULL REFERENCES education.courses(id) ON DELETE RESTRICT,
enrollment_id UUID NOT NULL REFERENCES education.enrollments(id) ON DELETE RESTRICT,
-- Información del certificado
certificate_number VARCHAR(50) NOT NULL UNIQUE, -- OQI-CERT-XXXX-YYYY
-- Datos del certificado (snapshot)
user_name VARCHAR(200) NOT NULL,
course_title VARCHAR(200) NOT NULL,
instructor_name VARCHAR(200),
completion_date DATE NOT NULL,
-- Metadata de logro
final_score DECIMAL(5,2), -- Promedio de quizzes
total_xp_earned INTEGER,
-- URL del PDF generado
certificate_url VARCHAR(500),
-- Verificación
verification_code VARCHAR(100) UNIQUE, -- Para verificar autenticidad
is_verified BOOLEAN DEFAULT true,
-- Metadata
issued_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT unique_user_course_cert UNIQUE(user_id, course_id)
);
-- Índices
CREATE INDEX idx_certificates_user ON education.certificates(user_id);
CREATE INDEX idx_certificates_course ON education.certificates(course_id);
CREATE INDEX idx_certificates_number ON education.certificates(certificate_number);
CREATE INDEX idx_certificates_verification ON education.certificates(verification_code);
-- Comentarios
COMMENT ON TABLE education.certificates IS 'Certificados emitidos al completar cursos';
COMMENT ON COLUMN education.certificates.certificate_number IS 'Número único formato: OQI-CERT-YYYY-NNNNN';
COMMENT ON COLUMN education.certificates.verification_code IS 'Código para verificar autenticidad del certificado';
COMMENT ON COLUMN education.certificates.final_score IS 'Promedio de todos los quizzes del curso';