bd-2
CREATE DATABASE IF NOT EXISTS blog_educativo
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE blog_educativo;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS respuestas_examen;
DROP TABLE IF EXISTS intentos_examen;
DROP TABLE IF EXISTS examen_preguntas;
DROP TABLE IF EXISTS examenes;
DROP TABLE IF EXISTS flashcards;
DROP TABLE IF EXISTS respuestas;
DROP TABLE IF EXISTS preguntas;
DROP TABLE IF EXISTS multimedia;
DROP TABLE IF EXISTS entradas;
DROP TABLE IF EXISTS subtemas;
DROP TABLE IF EXISTS temas;
SET FOREIGN_KEY_CHECKS = 1;
-- =========================================================
-- TEMAS
-- =========================================================
CREATE TABLE temas (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(150) NOT NULL,
slug VARCHAR(180) NOT NULL UNIQUE,
descripcion TEXT NULL,
activo TINYINT(1) NOT NULL DEFAULT 1,
fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion DATETIME NULL
DEFAULT NULL
ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_temas_activo (activo)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
-- =========================================================
-- SUBTEMAS
-- =========================================================
CREATE TABLE subtemas (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tema_id INT UNSIGNED NOT NULL,
nombre VARCHAR(150) NOT NULL,
slug VARCHAR(180) NOT NULL,
descripcion TEXT NULL,
activo TINYINT(1) NOT NULL DEFAULT 1,
fecha_creacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion DATETIME NULL
DEFAULT NULL
ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_subtemas_tema
FOREIGN KEY (tema_id)
REFERENCES temas(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
UNIQUE KEY uk_subtema_tema_slug (
tema_id,
slug
),
INDEX idx_subtemas_tema (tema_id)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
-- =========================================================
-- ENTRADAS
-- =========================================================
CREATE TABLE entradas (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tema_id INT UNSIGNED NOT NULL,
subtema_id INT UNSIGNED NULL,
titulo VARCHAR(250) NOT NULL,
subtitulo VARCHAR(500) NULL,
slug VARCHAR(280) NOT NULL UNIQUE,
contenido LONGTEXT NOT NULL,
estado ENUM(
'borrador',
'publicado',
'archivado'
) NOT NULL DEFAULT 'borrador',
fecha_publicacion DATETIME NULL,
fecha_creacion DATETIME NOT NULL
DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion DATETIME NULL
DEFAULT NULL
ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_entradas_tema
FOREIGN KEY (tema_id)
REFERENCES temas(id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
CONSTRAINT fk_entradas_subtema
FOREIGN KEY (subtema_id)
REFERENCES subtemas(id)
ON DELETE SET NULL
ON UPDATE CASCADE,
INDEX idx_entradas_tema (tema_id),
INDEX idx_entradas_subtema (subtema_id),
INDEX idx_entradas_estado (estado),
INDEX idx_entradas_fecha (fecha_publicacion)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
-- =========================================================
-- MULTIMEDIA
-- =========================================================
CREATE TABLE multimedia (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tema_id INT UNSIGNED NULL,
subtema_id INT UNSIGNED NULL,
entrada_id INT UNSIGNED NULL,
tipo ENUM(
'imagen',
'video'
) NOT NULL,
nombre_original VARCHAR(255) NOT NULL,
nombre_archivo VARCHAR(255) NOT NULL,
ruta VARCHAR(500) NOT NULL,
extension VARCHAR(20) NULL,
mime_type VARCHAR(100) NULL,
tamano BIGINT UNSIGNED NULL,
titulo VARCHAR(250) NULL,
descripcion TEXT NULL,
alt_text VARCHAR(250) NULL,
orden INT NOT NULL DEFAULT 0,
activo TINYINT(1) NOT NULL DEFAULT 1,
fecha_creacion DATETIME NOT NULL
DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_multimedia_tema
FOREIGN KEY (tema_id)
REFERENCES temas(id)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT fk_multimedia_subtema
FOREIGN KEY (subtema_id)
REFERENCES subtemas(id)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT fk_multimedia_entrada
FOREIGN KEY (entrada_id)
REFERENCES entradas(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
INDEX idx_multimedia_tema (tema_id),
INDEX idx_multimedia_subtema (subtema_id),
INDEX idx_multimedia_entrada (entrada_id),
INDEX idx_multimedia_tipo (tipo)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
-- =========================================================
-- PREGUNTAS
-- =========================================================
CREATE TABLE preguntas (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tema_id INT UNSIGNED NOT NULL,
subtema_id INT UNSIGNED NULL,
multimedia_id INT UNSIGNED NULL,
tipo ENUM(
'multiple_choice',
'visual'
) NOT NULL DEFAULT 'multiple_choice',
pregunta TEXT NOT NULL,
explicacion TEXT NULL,
dificultad ENUM(
'facil',
'media',
'dificil'
) NOT NULL DEFAULT 'media',
activo TINYINT(1) NOT NULL DEFAULT 1,
fecha_creacion DATETIME NOT NULL
DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion DATETIME NULL
DEFAULT NULL
ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_preguntas_tema
FOREIGN KEY (tema_id)
REFERENCES temas(id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
CONSTRAINT fk_preguntas_subtema
FOREIGN KEY (subtema_id)
REFERENCES subtemas(id)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT fk_preguntas_multimedia
FOREIGN KEY (multimedia_id)
REFERENCES multimedia(id)
ON DELETE SET NULL
ON UPDATE CASCADE,
INDEX idx_preguntas_tema (tema_id),
INDEX idx_preguntas_subtema (subtema_id),
INDEX idx_preguntas_tipo (tipo)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
-- =========================================================
-- RESPUESTAS
-- =========================================================
CREATE TABLE respuestas (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
pregunta_id INT UNSIGNED NOT NULL,
respuesta TEXT NOT NULL,
es_correcta TINYINT(1) NOT NULL DEFAULT 0,
orden INT NOT NULL DEFAULT 0,
activo TINYINT(1) NOT NULL DEFAULT 1,
fecha_creacion DATETIME NOT NULL
DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_respuestas_pregunta
FOREIGN KEY (pregunta_id)
REFERENCES preguntas(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
INDEX idx_respuestas_pregunta (pregunta_id)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
-- =========================================================
-- FLASHCARDS
-- =========================================================
CREATE TABLE flashcards (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tema_id INT UNSIGNED NOT NULL,
subtema_id INT UNSIGNED NULL,
multimedia_id INT UNSIGNED NULL,
frente TEXT NOT NULL,
reverso TEXT NOT NULL,
orden INT NOT NULL DEFAULT 0,
activo TINYINT(1) NOT NULL DEFAULT 1,
fecha_creacion DATETIME NOT NULL
DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion DATETIME NULL
DEFAULT NULL
ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_flashcards_tema
FOREIGN KEY (tema_id)
REFERENCES temas(id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
CONSTRAINT fk_flashcards_subtema
FOREIGN KEY (subtema_id)
REFERENCES subtemas(id)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT fk_flashcards_multimedia
FOREIGN KEY (multimedia_id)
REFERENCES multimedia(id)
ON DELETE SET NULL
ON UPDATE CASCADE,
INDEX idx_flashcards_tema (tema_id),
INDEX idx_flashcards_subtema (subtema_id)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
-- =========================================================
-- EXAMENES
-- =========================================================
CREATE TABLE examenes (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(250) NOT NULL,
descripcion TEXT NULL,
tema_id INT UNSIGNED NOT NULL,
subtema_id INT UNSIGNED NULL,
numero_preguntas INT UNSIGNED NOT NULL DEFAULT 10,
numero_opciones INT UNSIGNED NOT NULL DEFAULT 4,
activo TINYINT(1) NOT NULL DEFAULT 1,
fecha_creacion DATETIME NOT NULL
DEFAULT CURRENT_TIMESTAMP,
fecha_actualizacion DATETIME NULL
DEFAULT NULL
ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_examenes_tema
FOREIGN KEY (tema_id)
REFERENCES temas(id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
CONSTRAINT fk_examenes_subtema
FOREIGN KEY (subtema_id)
REFERENCES subtemas(id)
ON DELETE SET NULL
ON UPDATE CASCADE,
INDEX idx_examenes_tema (tema_id),
INDEX idx_examenes_subtema (subtema_id)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
-- =========================================================
-- PREGUNTAS DE EXAMEN
-- =========================================================
CREATE TABLE examen_preguntas (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
examen_id INT UNSIGNED NOT NULL,
pregunta_id INT UNSIGNED NOT NULL,
orden INT NOT NULL DEFAULT 0,
CONSTRAINT fk_examen_preguntas_examen
FOREIGN KEY (examen_id)
REFERENCES examenes(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT fk_examen_preguntas_pregunta
FOREIGN KEY (pregunta_id)
REFERENCES preguntas(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
UNIQUE KEY uk_examen_pregunta (
examen_id,
pregunta_id
)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_unicode_ci;
Comentarios
Publicar un comentario