Files
portal-epromos/-- Tabla principal de landings.txt
T

242 lines
9.6 KiB
Plaintext

-- Tabla principal de landings
CREATE TABLE IF NOT EXISTS landing_pages (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(200) NOT NULL,
slug VARCHAR(160) NOT NULL UNIQUE,
estado ENUM('borrador','publicado') NOT NULL DEFAULT 'borrador',
hero_image VARCHAR(255) NULL,
contenido_html MEDIUMTEXT NULL, -- HTML renderizable
css_inline MEDIUMTEXT NULL, -- CSS opcional por landing
js_inline MEDIUMTEXT NULL, -- JS opcional por landing
meta_title VARCHAR(200) NULL,
meta_desc VARCHAR(255) NULL,
canonical_url VARCHAR(255) NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Captura de leads del formulario de la landing
CREATE TABLE IF NOT EXISTS landing_forms (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
landing_id INT UNSIGNED NOT NULL,
nombre VARCHAR(150) NULL,
email VARCHAR(180) NULL,
telefono VARCHAR(60) NULL,
mensaje TEXT NULL,
ip_address VARCHAR(64) NULL,
user_agent TEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX (landing_id),
CONSTRAINT fk_lf_lp FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-- 1. Bloques reutilizables (biblioteca)
CREATE TABLE IF NOT EXISTS landing_blocks (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(160) NOT NULL,
tipo ENUM('html','css','js') NOT NULL DEFAULT 'html',
contenido MEDIUMTEXT NOT NULL,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_nombre (nombre)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 2. Asignación de bloques a una landing (con orden)
CREATE TABLE IF NOT EXISTS landing_page_blocks (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
landing_id INT UNSIGNED NOT NULL,
block_id INT UNSIGNED NOT NULL,
posicion INT NOT NULL DEFAULT 1, -- orden
zona VARCHAR(40) NOT NULL DEFAULT 'main', -- main/header/footer/etc
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uq_lp_block (landing_id, block_id, zona),
KEY idx_landing_pos (landing_id, posicion),
CONSTRAINT fk_lpb_lp FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE,
CONSTRAINT fk_lpb_blk FOREIGN KEY (block_id) REFERENCES landing_blocks(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 3. Variantes A/B de una landing
CREATE TABLE IF NOT EXISTS landing_variants (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
landing_id INT UNSIGNED NOT NULL,
nombre VARCHAR(120) NOT NULL,
peso DECIMAL(6,3) NOT NULL DEFAULT 1.000, -- tráfico relativo
estado ENUM('borrador','activo','pausado') NOT NULL DEFAULT 'activo',
-- contenido específico de la variante (opcional); si NULL, toma el de landing_pages
hero_image VARCHAR(255) NULL,
contenido_html MEDIUMTEXT NULL,
css_inline MEDIUMTEXT NULL,
js_inline MEDIUMTEXT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
KEY idx_lv_landing (landing_id, estado),
CONSTRAINT fk_lv_lp FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 4. Programación por fecha (ventanas de publicación)
CREATE TABLE IF NOT EXISTS landing_schedule (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
landing_id INT UNSIGNED NOT NULL,
start_at DATETIME NULL,
end_at DATETIME NULL,
estado ENUM('programada','activa','finalizada') NOT NULL DEFAULT 'programada',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_sched (landing_id, start_at, end_at),
CONSTRAINT fk_ls_lp FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 5. Tracking: impresiones y conversiones por variante
CREATE TABLE IF NOT EXISTS landing_variant_stats (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
landing_id INT UNSIGNED NOT NULL,
variant_id INT UNSIGNED NULL, -- NULL = página base (sin variante)
event_type ENUM('impression','conversion') NOT NULL,
session_id VARCHAR(64) NULL,
ip_address VARCHAR(64) NULL,
user_agent TEXT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_lv_evt (landing_id, variant_id, event_type, created_at),
CONSTRAINT fk_lvs_lp FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE,
CONSTRAINT fk_lvs_lv FOREIGN KEY (variant_id) REFERENCES landing_variants(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
---
## Estructura de Base de Datos
```sql
-- Landings principales
CREATE TABLE landing_pages (
id INT AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(255) NOT NULL,
slug VARCHAR(255) NOT NULL UNIQUE,
descripcion TEXT,
activo TINYINT(1) DEFAULT 1,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Bloques reutilizables
CREATE TABLE landing_blocks (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(255) NOT NULL,
tipo ENUM('texto','html','imagen','video') DEFAULT 'texto',
contenido TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Relación landing <-> bloques
CREATE TABLE landing_page_blocks (
id INT AUTO_INCREMENT PRIMARY KEY,
landing_id INT NOT NULL,
block_id INT NOT NULL,
zona VARCHAR(40) DEFAULT 'main',
posicion INT DEFAULT 1,
FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE,
FOREIGN KEY (block_id) REFERENCES landing_blocks(id) ON DELETE CASCADE
);
-- Variantes para A/B testing
CREATE TABLE landing_variants (
id INT AUTO_INCREMENT PRIMARY KEY,
landing_id INT NOT NULL,
nombre VARCHAR(255),
porcentaje_traffic DECIMAL(5,2) DEFAULT 50.00,
activo TINYINT(1) DEFAULT 1,
FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE
);
-- Programación de publicaciones
CREATE TABLE landing_schedule (
id INT AUTO_INCREMENT PRIMARY KEY,
landing_id INT NOT NULL,
variant_id INT DEFAULT NULL,
fecha_inicio DATETIME,
fecha_fin DATETIME,
activo TINYINT(1) DEFAULT 1,
FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE,
FOREIGN KEY (variant_id) REFERENCES landing_variants(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS landing_pages (
id INT AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(255) NOT NULL,
slug VARCHAR(255) NOT NULL UNIQUE,
descripcion TEXT,
activo TINYINT(1) DEFAULT 1,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS landing_variants (
id INT AUTO_INCREMENT PRIMARY KEY,
landing_id INT NOT NULL,
nombre VARCHAR(255),
porcentaje_traffic DECIMAL(5,2) DEFAULT 50.00,
activo TINYINT(1) DEFAULT 1,
FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS landing_blocks (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(255) NOT NULL,
tipo ENUM('texto','html','imagen','video') DEFAULT 'texto',
contenido TEXT,
fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS landing_page_blocks (
id INT AUTO_INCREMENT PRIMARY KEY,
landing_id INT NOT NULL,
block_id INT NOT NULL,
zona VARCHAR(40) DEFAULT 'main',
posicion INT DEFAULT 1,
FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE,
FOREIGN KEY (block_id) REFERENCES landing_blocks(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS landing_forms (
id INT AUTO_INCREMENT PRIMARY KEY,
landing_id INT NOT NULL,
nombre VARCHAR(200),
email VARCHAR(200),
telefono VARCHAR(50),
mensaje TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ip_address VARCHAR(100),
user_agent TEXT,
FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS landing_variant_stats (
id INT AUTO_INCREMENT PRIMARY KEY,
landing_id INT NOT NULL,
variant_id INT NULL,
event_type ENUM('impression','conversion') NOT NULL,
session_id VARCHAR(100) NULL,
ip_address VARCHAR(100) NULL,
user_agent TEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX (landing_id),
INDEX (variant_id),
INDEX (event_type),
INDEX (created_at),
FOREIGN KEY (landing_id) REFERENCES landing_pages(id) ON DELETE CASCADE,
FOREIGN KEY (variant_id) REFERENCES landing_variants(id) ON DELETE SET NULL
);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////