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

Entradas más populares de este blog

PROMPT MAESTRO — PLATAFORMA EDUCATIVA PHP + MYSQL

La Estructura que Simula una Base de Datos en PHP