Estructura de la Base de Datos
Se desea crear una base de datos.
Las entidades principales que componen la Base de datos son:
GRÁFICOS, MAGAZINES, EPISODIOS, SERIES, FILMES, SAGAS Y EXTRAS.
**Notas Técnicas sobre Tipos de Datos:**
**BOOLEAN:** SQLite no tiene tipo BOOLEAN nativo.
Los campos booleanos se almacenan como INTEGER con valores 0 (FALSE) o 1 (TRUE).
En la documentación se especifica como BOOLEAN por claridad conceptual.
La Entidad GRAFICO contiene y muestra todos los cómics con los siguientes atributos:
| Entidad Principal GRAFICO · Tabla Maestra | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_grafico | INT | PK | NO | Id único y primario del registro. | - | Autoincremental. |
| id_tipo_grafico | INT | FK | NO | Id de TIPO_GRAFICO que estamos vinculando. | Referencia a TIPO_GRAFICO.id_tipo_grafico | - |
| paginas_grafico | INT | - | NO | No. de páginas. | - | - |
| fecha_publicacion_grafico | DATE | - | SÍ | Fecha de publicación. | - | Día, Mes y Año. |
| sinopsis_grafico | TEXT | - | SÍ | Resumen corto. | - | - |
| id_pais | INT | FK | NO | Id de País que estamos vinculando. | Referencia a PAIS.id_pais | Regla: Es obligatorio registrar el país. |
| id_editorial | INT | FK | SI | Id de la Editorial que estamos vinculando. | Referencia a EDITORIAL.id_editorial | - |
| id_tinta | INT | FK | NO | Id de la Tinta que estamos vinculando. | Referencia a TINTA.id_tinta | Regla: Es obligatorio registrar la tinta. |
| id_distribuidora | INT | FK | SI | Id de la Distribuidora que estamos vinculando. | Referencia a DISTRIBUIDORA.id_distribuidora | - |
| codigo_distribuidora | TEXT | - | SI | Código de la Distribuidora. | - | - |
| rating_grafico | FLOAT | - | SÍ | Calificación. | - | - |
| comentarios_grafico | TEXT | - | SÍ | Comentarios. | - | - |
| anotaciones_grafico | TEXT | - | SÍ | Notas Personales. | - | - |
| clasificacion_grafico | BOOLEAN | - | NO | +18 o no. | - | TRUE = +18 FALSE = Todo público |
| pixelizacion_grafico | BOOLEAN | - | NO | Censurado o no. | - | TRUE = Censurado FALSE = Sin censura |
| id_edicion | INT | FK | SI | Id de la expo que estamos vinculando. | Referencia a edicion_EXPO.id_edicion | - |
| leido_grafico | BOOLEAN | - | NO | Si fue o no leído ya el cómic. | - | TRUE = SÍ FALSE = No |
| fecha_captura_grafico | DATE | - | NO | Fecha de captura en la Base de Datos. | - | Día, Mes y Año. |
| codigo_grafico | TEXT | - | NO | Código para su Identificación. | - | Se usa el prefijo GR- |
Relación · N: 1 – Muchos a Uno –
VERSIÓN GRÁFICO
| Entidad VERSION_GRAFICO | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_version | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| id_grafico | INT | FK | NO | Id del Gráfico que estamos vinculando. | Referencia a GRAFICO.id_grafico | Regla: Es obligatorio registrar un gráfico. |
| id_idioma | INT | FK | NO | Id del Idioma que estamos vinculando. | Referencia a IDIOMA.id_idioma | Regla: Es obligatorio registrar un idioma. |
| titulo_version | TEXT | - | NO | Título del cómic. | - | - |
| soporte_version | TEXT | - | NO | Soporte del cómic. Físico o Digital. | - | Regla: Es obligatorio registrar el soporte. |
| id_tipo_formato | INT | FK | NO | Id del Tipo de Formato que estamos vinculando. | Referencia a TIPO_FORMATO.id_tipo_formato | Regla: Es obligatorio registrar el tipo de formato. |
| ancho_version | INT | - | SÍ | Ancho de las Imágenes. | - | Datos en Pixeles. |
| alto_version | INT | - | SÍ | Alto de las Imágenes. | - | Datos en Pixeles. |
| resolucion_version | INT | - | SÍ | Resolución. | - | Datos en DPI. |
| peso_version | BIGINT | - | SÍ | Peso. | - | Datos en Bytes. |
| id_traductor | INT | FK | SI | Id del Ttraductor que estamos vinculando. | Referencia a TRADUCTOR.id_traductor | - |
Relación · 1:N - Uno a Muchos -
ÍNDICE VERSIÓN
| Entidad INDICE_VERSION | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_indice | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| id_version | INT | FK | NO | Id de la versión que estamos vinculando. | Referencia a VERSION_GRAFICO.id_version | Restricción: Solo aplica para soporte_version = 'Digital'. |
| numero_pagina | INT | - | NO | Número de página del archivo. | - | Valor >= 0 (0 = portada) |
| ruta_archivo | TEXT | - | NO | Ruta del archivo. | - | Ruta relativa al directorio base. |
| id_tipo_pagina | INT | FK | NO | Id del tipo de página que estamos vinculando | Referencia a TIPO_PAGINA.id_tipo_pagina | - |
Restricciones y Reglas de Negocio:
- Esta tabla solo aplica para versiones con soporte_version = 'Digital'.
- El numero_pagina debe ser único por id_version.
- numero_pagina = 0 indica portada.
- La ruta_archivo debe ser relativa al directorio base de almacenamiento.
Relación · 1:N – Uno a Muchos –
TIPO DE GRÁFICO
| Entidad TIPO_GRAFICO | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_tipo_grafico | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_tipo | VARCHAR (50) | - | NO | El nombre del tipo de cómic. | - | Regla: Es obligatorio registrar el tipo. |
| Valores Posibles | |
|---|---|
| Id | Nombre |
| 1 | Cómic |
| 2 | Manga |
| 3 | Doujinshi |
| 4 | Manhua |
| 5 | Manhwa |
| 6 | Webtoon |
| 7 | Historieta |
Relación · N: M - Muchos a Muchos -
GRÁFICO GÉNEROS
| Entidad GRAFICO_GENEROS | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_grafico | INT | FK | NO | Id del Gráfico que estamos vinculando. | Referencia a GRAFICO.id_grafico | Regla: Es obligatorio registrar un gráfico. |
| id_genero | INT | FK | NO | Id del Género que estamos vinculando. | Referencia a GENEROS.id_genero | Regla: Es obligatorio registrar un género. |
Relación · N: M - Muchos a Muchos -
GRÁFICO AUTOR
| Entidad GRAFICO_AUTOR | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_grafico | INT | FK | NO | Id del Gráfico que estamos vinculando. | Referencia a GRAFICO.id_grafico | Regla: Es obligatorio registrar un gráfico. |
| id_autor | INT | FK | NO | Id del Autor que estamos vinculando. | Referencia a AUTOR.id_autor | Regla: Es obligatorio registrar un autor. |
Relación · N: M - Muchos a Muchos -
GRÁFICO AVISOS
| Entidad GRAFICO_AVISOS | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_grafico | INT | FK | NO | Id del Gráfico que estamos vinculando. | Referencia a GRAFICO.id_grafico | Regla: Es obligatorio registrar un gráfico. |
| id_aviso | INT | FK | NO | Id del Aviso que estamos vinculando. | Referencia a AVISOS.id_aviso | Regla: Es obligatorio registrar un aviso. |
La Entidad COLECCION:MAGAZINE agrupa varios números o volúmenes de magazines relacionados con los siguientes atributos:
| Entidad Principal COLECCION_MAGAZINE · Tabla Maestra | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_coleccion | INT | PK | NO | Id único y primario del registro. | - | Autoincremental. |
| nombre_coleccion | TEXT | - | NO | Nombre de la Colección. | - | - |
| tipo_publicacion | TEXT | - | SI | Frecuencia de publicación. | - | Semanal, Mensual, Bimestral, Anual o por Evento. |
| estado_publicacion | BOOLEAN | - | NO | Estado de la publicación | - | TRUE = En Emisión. FALSE = Finalizado |
| fecha_inicio | DATE | - | SI | Fecha de la primera publicación. | - | Día, Mes y Año. |
| fecha_fin | DATE | - | SI | Fecha de la última publicación. | - | Día, Mes y Año. NULL si aún continúa. |
| descripcion_coleccion | TEXT | - | SI | Descripción | - | - |
| codigo_coleccion | TEXT | - | NO | Código para su Identificación. | - | Se usa el prefijo CN- |
| Entidad Principal MAGAZINE · Tabla Maestra | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_magazine | INT | PK | NO | Id único y primario del registro. | - | Autoincremental. |
| id_coleccion | INT | FK | SI | ID de la Colección a la que pertenece. | Referencia a COLECCION_MAGAZINE.id_coleccion | NULL para magazines independientes. |
| numero_magazine | INT | - | SI | Número dentro de la colección. | - | NULL si no es parte de una colección. |
| paginas_magazine | INT | - | NO | No. de páginas totales. | - | Campo calculado: suma de páginas de componentes. Se actualiza automáticamente mediante TRIGGERS cuando se insertan, actualizan o eliminan componentes del magazine. |
| fecha_publicacion_magazine | DATE | - | SÍ | Fecha de publicación. | - | Día, Mes y Año. |
| sinopsis_magazine | TEXT | - | SÍ | Resumen corto. | - | - |
| id_pais | INT | FK | NO | Id de País que estamos vinculando. | Referencia a PAIS.id_pais | Regla: Es obligatorio registrar el país. |
| id_editorial | INT | FK | SI | Id de la Editorial que estamos vinculando. | Referencia a EDITORIAL.id_editorial | - |
| id_tinta | INT | FK | NO | Id de la Tinta que estamos vinculando. | Referencia a TINTA.id_tinta | Regla: Es obligatorio registrar la tinta. |
| id_distribuidora | INT | FK | SI | Id de la Distribuidora que estamos vinculando. | Referencia a DISTRIBUIDORA.id_distribuidora | - |
| codigo_distribuidora | TEXT | - | SI | Código de la Distribuidora. | - | - |
| rating_magazine | FLOAT | - | SÍ | Calificación. | - | Rango 1-5 |
| comentarios_magazine | TEXT | - | SÍ | Comentarios. | - | - |
| anotaciones_magazine | TEXT | - | SÍ | Notas Personales. | - | - |
| clasificacion_magazine | BOOLEAN | - | NO | +18 o no | - | TRUE = Contiene contenido +18. FALSE = Todo el contenido es apto para todo público. |
| pixelizacion_magazine | BOOLEAN | - | NO | Censurado o no | - | TRUE = Contiene al menos un contenido censurado. FALSE = Todo el contenido está sin censura. |
| id_edicion | INT | FK | SI | Id de la expo que estamos vinculando. | Referencia a edicion_EXPO.id_edicion | - |
| leido_magazine | BOOLEAN | - | NO | Si ya fue o no leído el magazine. | - | TRUE = SÍ. FALSE = No. |
| fecha_captura_magazine | DATE | - | NO | Fecha de captura en la Base de Datos. | - | Día, Mes y Año. |
| codigo_magazine | TEXT | - | NO | Código para su Identificación. | - | Se usa el prefijo MGZ- |
Relación · N: 1 – Muchos a Uno –
VERSIÓN MAGAZINE
| Entidad VERSION_MAGAZINE | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_version | INT | PK | NO | Id único del archivo. | - | Autoincremental. |
| id_magazine | INT | FK | NO | Id del Magazine que estamos vinculando. | Referencia a MAGAZINE.id_magazine | - |
| id_idioma | INT | FK | NO | Id del Idioma que estamos vinculando. | Referencia a IDIOMA.id_idioma | Regla: Es obligatorio registrar un idioma. |
| titulo_version | TEXT | - | NO | Título del magazine. | - | - |
| soporte_version | TEXT | - | NO | Soporte del magazine. Físico o Digital. | - | Regla: Es obligatorio registrar el soporte. |
| id_tipo_formato | INT | FK | NO | Id del Tipo de Formato que estamos vinculando. | Referencia a TIPO_FORMATO.id_tipo_formato | Regla: Es obligatorio registrar el tipo de formato. |
| ancho_version | INT | - | SÍ | Ancho de las Imágenes. | - | Datos en Pixeles. |
| alto_version | INT | - | SÍ | Alto de las Imágenes. | - | Datos en Pixeles. |
| resolucion_version | INT | - | SÍ | Resolución. | - | Datos en DPI. |
| peso_version | BIGINT | - | SÍ | Peso. | - | Datos en Bytes. |
| id_traductor | INT | FK | SI | Id del Ttraductor que estamos vinculando. | Referencia a TRADUCTOR.id_traductor | - |
Relación · 1:N - Uno a Muchos -
ÍNDICE VERSIÓN
| Entidad INDICE_VERSION | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_indice | INT | PK | NO | Id único del archivo. | - | Autoincremental. |
| id_version | INT | FK | NO | Id de la versión que estamos vinculando. | Referencia a VERSION_MAGAZINE.id_version | Restricción: Solo para soporte_version = 'Digital'. |
| numero_pagina | INT | - | NO | Número de página del archivo. | - | Regla: Es obligatorio registrar el número de página. Valor >= 1 |
| id_tipo_pagina | INT | FK | NO | Id del tipo de página que estamos vinculando | Referencia a TIPO_PAGINA.id_tipo_pagina | - |
| id_grafico | INT | FK | SI | Id del Gráfico que estamos vinculando. | Referencia a GRAFICO.id_grafico | Solo si id_tipo_contenido = 'Gráfico' o 'Gráfico Nuevo'. |
| paginas_contenido | INT | - | NO | Total de páginas que ocupa este documento. | - | Si id_tipo_contenido='Gráfico': obtener de GRAFICOS.paginas_grafico Si no: valor = 1 por defecto. |
| ruta_archivo | TEXT | - | SI | Ruta del archivo de imagen. | - | Solo si tipo_pagina ≠ 'Gráfico'. Ruta relativa al directorio base. |
Restricciones y Reglas de Negocio:
Esta tabla solo aplica para versiones con soporte_version = 'Digital'.
El numero_pagina debe mantenerse secuencial dentro de una misma id_version
Si id_tipo_contenido = 'Gráfico': id_grafico es REQUERIDO y ruta_archivo debe ser NULL.
Si id_tipo_contenido ≠ 'Gráfico': id_grafico debe ser NULL y ruta_archivo es REQUERIDO.
La ruta_archivo debe ser relativa al directorio base de almacenamiento.
VISTA: MAGAZINE_GENEROS_VIEW
Obtiene todos los géneros únicos de los gráficos contenidos en cada magazine.
Permite consultar rápidamente todos los géneros presentes en un magazine sin necesidad de realizar joins complejos.
#### Definición SQL:
CREATE VIEW MAGAZINE_GENEROS_VIEW AS
SELECT DISTINCT
m.id_magazine,
m.codigo_magazine,
g.id_genero,
g.nombre_genero
FROM MAGAZINE m
JOIN VERSION_MAGAZINE vm ON m.id_magazine = vm.id_magazine
JOIN INDICE_VERSION iv ON vm.id_version = iv.id_version
JOIN GRAFICO gr ON iv.id_grafico = gr.id_grafico
JOIN GRAFICO_GENEROS gg ON gr.id_grafico = gg.id_grafico
JOIN GENEROS g ON gg.id_genero = g.id_genero
WHERE iv.id_tipo_pagina = 8; -- Solo páginas de tipo 'Gráfico'
#### Ejemplo de uso:
-- sql
-- Obtener todos los géneros del magazine con ID 101
SELECT nombre_genero
FROM MAGAZINE_GENEROS_VIEW
WHERE id_magazine = 101
ORDER BY nombre_genero;
-- Contar cuántos géneros diferentes tiene un magazine
SELECT id_magazine, COUNT(DISTINCT id_genero) as total_generos
FROM MAGAZINE_GENEROS_VIEW
GROUP BY id_magazine;
VISTA: MAGAZINE_AUTORES_VIEW
Obtiene todos los autores únicos de los gráficos contenidos en cada magazine.
#### Definición SQL:
CREATE VIEW MAGAZINE_AUTORES_VIEW AS
SELECT DISTINCT
m.id_magazine,
m.codigo_magazine,
a.id_autor,
a.nombre_autor
FROM MAGAZINE m
JOIN VERSION_MAGAZINE vm ON m.id_magazine = vm.id_magazine
JOIN INDICE_VERSION iv ON vm.id_version = iv.id_version
JOIN GRAFICO gr ON iv.id_grafico = gr.id_grafico
JOIN GRAFICO_AUTOR ga ON gr.id_grafico = ga.id_grafico
JOIN AUTOR a ON ga.id_autor = a.id_autor
WHERE iv.id_tipo_pagina = 8; -- Solo páginas de tipo 'Gráfico'
#### Ejemplo de uso:
-- sql
-- Obtener todos los autores del magazine con ID 101
SELECT nombre_autor
FROM MAGAZINE_AUTORES_VIEW
WHERE id_magazine = 101
ORDER BY nombre_autor;
-- Encontrar magazines donde participó un autor específico
SELECT m.codigo_magazine, m.fecha_publicacion_magazine
FROM MAGAZINE_AUTORES_VIEW mav
JOIN MAGAZINE m ON mav.id_magazine = m.id_magazine
WHERE mav.id_autor = 15
ORDER BY m.fecha_publicacion_magazine DESC;
VISTA: MAGAZINE_AVISOS_VIEW
Obtiene todos los avisos de contenido únicos de los gráficos contenidos en cada magazine.
#### Definición SQL:
CREATE VIEW MAGAZINE_AVISOS_VIEW AS
SELECT DISTINCT
m.id_magazine,
m.codigo_magazine,
av.id_aviso,
av.nombre_aviso
FROM MAGAZINE m
JOIN VERSION_MAGAZINE vm ON m.id_magazine = vm.id_magazine
JOIN INDICE_VERSION iv ON vm.id_version = iv.id_version
JOIN GRAFICO gr ON iv.id_grafico = gr.id_grafico
JOIN GRAFICO_AVISOS ga ON gr.id_grafico = ga.id_grafico
JOIN AVISOS av ON ga.id_aviso = av.id_aviso
WHERE iv.id_tipo_pagina = 8; -- Solo páginas de tipo 'Gráfico'
#### Ejemplo de uso:
-- sql
-- Obtener todos los avisos del magazine con ID 101
SELECT nombre_aviso
FROM MAGAZINE_AVISOS_VIEW
WHERE id_magazine = 101
ORDER BY nombre_aviso;
-- Encontrar magazines con contenido de violencia
SELECT DISTINCT m.codigo_magazine, m.sinopsis_magazine
FROM MAGAZINE_AVISOS_VIEW mav
JOIN MAGAZINE m ON mav.id_magazine = m.id_magazine
WHERE mav.nombre_aviso = 'Violencia'
ORDER BY m.fecha_publicacion_magazine DESC;
Notas importantes:
- **Actualización automática:** Estas vistas reflejan siempre el estado actual de los datos. No requieren mantenimiento manual.
- **Solo lectura:** No se pueden realizar operaciones INSERT, UPDATE o DELETE directamente sobre las vistas.
- **Filtro de tipo:** El filtro `WHERE iv.id_tipo_pagina = 8` asegura que solo se consideren páginas de tipo "Gráfico", excluyendo portadas, índices, artículos, etc.
- **Performance:** Para colecciones muy grandes, considera crear índices en las tablas base para optimizar las consultas.
*Relación: Vistas derivadas (solo lectura)*
Relación · 1: N - Uno a Muchos -
TIPO DE FORMATO
| Entidad TIPO_FORMATO | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_tipo_formato | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_formato | TEXT | - | NO | Formato del cómic. | - | Regla: Es obligatorio registrar el formato. |
| tipo_soporte | VARCHAR(50) | - | NO | Soporte del cómic. | - | Físico o Digital. Regla: Es obligatorio registrar el soporte. |
| Valores Posibles | ||
|---|---|---|
| Id | Formato | Soporte |
| 1 | Pasta Dura | Físico |
| 2 | Pasta Blanda | Físico |
| 3 | JPG | Digital |
| 4 | PNG | Digital |
| 5 | WEBP | Digital |
| 6 | Digital | |
| 7 | CBR | Digital |
Relación · 1: N - Uno a Muchos -
TIPO DE PÁGINA
| Entidad TIPO_PAGINA | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_tipo_pagina | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_tipo | VARCHAR (50) | - | NO | El nombre del tipo. | - | - |
| Valores Posibles | |
|---|---|
| Id | Nombre |
| 1 | Portada |
| 2 | Índice |
| 3 | Artículo |
| 4 | Ads (Publicidad) |
| 5 | Extra |
| 6 | Sección Especial |
| 7 | Página |
| 8 | Página Doble |
| 9 | Contraportada |
| 10 | Gráfico |
| 11 | Gráfico Nuevo (Estado Temporal) |
Relación · 1: N - Uno a Muchos -
EDITORIAL
| EntidadEDITORIAL | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_editorial | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_editorial | TEXT | - | NO | El nombre de la editorial. | - | - |
Relación · 1: N - Uno a Muchos -
DISTRIBUIDORA
| EntidadDISTRIBUIDORA | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_distribuidora | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_distribuidora | TEXT | - | NO | El nombre de la distribuidora. | - | - |
Relación · N: M - Muchos a Muchos -
GÉNEROS
| EntidadGÉNEROS | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_genero | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_genero | TEXT | - | NO | El nombre del género. | - | - |
| Valores Posibles | |
|---|---|
| Id | Nombre |
| 1 | Escolares |
| 2 | Fantasía |
| 3 | NTR |
| 4 | Harem |
| 5 | Cosplay |
| 6 | Chica Ángel |
| 7 | Vanilla |
Relación · 1:N - Uno a Muchos -
TINTA
| Entidad TINTA | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_tinta | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_tinta | VARCHAR (50) | - | NO | El nombre de la tinta. | - | - |
| Valores Posibles | ||
|---|---|---|
| Id | Nombre | |
| 1 | Color | |
| 2 | Blanco & Negro | |
| 3 | Sepia | |
| 4 | Mixto | |
Relación · N: M - Muchos a Muchos -
AUTOR
| Entidad AUTOR | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_autor | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_autor | TEXT | - | NO | El nombre del autor. | - | - |
Relación · N: 1 - Muchos a Uno -
AKA
| Entidad AKA | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_aka | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| id_autor | INT | FK | NO | Id del Autor que estamos vinculando. | Referencia a AUTOR.id_autor | Regla: Es obligatorio registrar un autor. |
| aka | TEXT | - | NO | El Seudónimo. | - | - |
Relación · 1: N - Uno a Muchos -
EXPO
| Entidad EXPO | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_expo | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_expo | TEXT | - | NO | El Nombre de la convención. | - | - |
| Valores Posibles | ||
|---|---|---|
| Id | Nombre | |
| 1 | Comic Market | |
| 2 | Anime Japan | |
Relación · 1: N - Uno a Muchos -
EDICIÓN EXPO
| Entidad EDICION_EXPO | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_edicion | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| id_expo | INT | FK | NO | Id de la Expo que estamos vinculando. | Referencia a EXPO.id_expo | - |
| nombre_edicion | TEXT | - | SI | Nombre completo de la edición. | - | - |
| fecha_edicion | DATE | - | SI | Fecha de edición del evento. | - | - |
| numero_edicion | INT | - | SI | Número de la edición. | - | - |
| Valores de Referencia | |
|---|---|
| Elemento | Dato |
| id_edicion | 106 |
| id_expo | 1 |
| nombre_edicion | Summer Comiket |
| fecha_edicion | Agosto 2025 |
| numero_edicion | 106 |
Relación · 1: N - Uno a Muchos -
PAÍS
| Entidad PAIS | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_pais | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_pais | VARCHAR (50) | - | NO | El nombre del país. | - | - |
| Valores Posibles | |
|---|---|
| Id | Nombre |
| 1 | Japón |
| 2 | Corea del Sur |
| 3 | EEUU |
| 4 | México |
Relación · 1: N - Uno a Muchos -
IDIOMA
| Entidad IDIOMA | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_idioma | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_idioma | VARCHAR (50) | - | NO | El nombre del idioma. | - | - |
| Valores Posibles | |
|---|---|
| Id | Nombre |
| 1 | Japonés |
| 2 | Coreano |
| 3 | Inglés |
| 4 | Español |
Relación · 1: N - Uno a Muchos -
TRADUCTOR
| Entidad TRADUCTOR | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_traductor | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_traductor | TEXT | - | NO | El nombre del traductor. | - | - |
Relación · N: M - Mucho a Muchos -
AVISOS
| Entidad AVISOS | ||||||
|---|---|---|---|---|---|---|
| Nombre del Campo | Tipo de Dato | Clave Key | Nulidad | Descripción o Función | Relaciones FK | Notas |
| id_aviso | INT | PK | NO | Id único del registro. | - | Autoincremental. |
| nombre_aviso | TEXT | - | NO | El valor del aviso. | - | - |
| Valores Posibles | |
|---|---|
| Id | Nombre |
| 1 | Sangre/Gore |
| 2 | Desnudez |
| 3 | Lenguaje Ofensivo |
| 4 | Tabaquismo |
| 5 | Violencia |
| 6 | Contenido Sexual |
| 7 | Diálogos Sugerentes |
TRIGGER: Actualización de páginas_magazine.
Este trigger actualiza automáticamente el número total de páginas de un magazine sumando las páginas de todos sus componentes (portada, índice, artículos, gráficos, ads, contraportada, etc.).
-- sql
paginas_magazine = SUM(paginas_contenido)
FROM INDICE_VERSION iv
JOIN VERSION_MAGAZINE vm ON iv.id_version = vm.id_version
WHERE vm.id_magazine = [id_magazine_actual]
-- Nota: Este campo no debe ser editado manualmente por el usuario.
TRIGGER: Actualización de clasificacion_magazine
-- sql
clasificacion_magazine = MAX(clasificacion_grafico de todos los gráficos del magazine)
-- Si al menos un gráfico tiene clasificacion_grafico = TRUE (1)
-- entonces clasificacion_magazine = TRUE (1)
-- sql
-- Trigger para INSERT
CREATE TRIGGER update_clasificacion_magazine_insert
AFTER INSERT ON INDICE_VERSION
WHEN NEW.id_tipo_pagina = 8 -- Solo para páginas de tipo 'Gráfico'
BEGIN
UPDATE MAGAZINE
SET clasificacion_magazine = (
SELECT CASE
WHEN MAX(gr.clasificacion_grafico) = 1 THEN 1
ELSE 0
END
FROM VERSION_MAGAZINE vm
JOIN INDICE_VERSION iv ON vm.id_version = iv.id_version
JOIN GRAFICO gr ON iv.id_grafico = gr.id_grafico
WHERE vm.id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = NEW.id_version
)
AND iv.id_tipo_pagina = 8
)
WHERE id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = NEW.id_version
);
END;
-- Trigger para UPDATE
CREATE TRIGGER update_clasificacion_magazine_update
AFTER UPDATE ON INDICE_VERSION
WHEN NEW.id_tipo_pagina = 8
BEGIN
UPDATE MAGAZINE
SET clasificacion_magazine = (
SELECT CASE
WHEN MAX(gr.clasificacion_grafico) = 1 THEN 1
ELSE 0
END
FROM VERSION_MAGAZINE vm
JOIN INDICE_VERSION iv ON vm.id_version = iv.id_version
JOIN GRAFICO gr ON iv.id_grafico = gr.id_grafico
WHERE vm.id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = NEW.id_version
)
AND iv.id_tipo_pagina = 8
)
WHERE id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = NEW.id_version
);
END;
-- Trigger para DELETE
CREATE TRIGGER update_clasificacion_magazine_delete
AFTER DELETE ON INDICE_VERSION
WHEN OLD.id_tipo_pagina = 8
BEGIN
UPDATE MAGAZINE
SET clasificacion_magazine = (
SELECT COALESCE(
CASE
WHEN MAX(gr.clasificacion_grafico) = 1 THEN 1
ELSE 0
END,
0
)
FROM VERSION_MAGAZINE vm
JOIN INDICE_VERSION iv ON vm.id_version = iv.id_version
JOIN GRAFICO gr ON iv.id_grafico = gr.id_grafico
WHERE vm.id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = OLD.id_version
)
AND iv.id_tipo_pagina = 8
)
WHERE id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = OLD.id_version
);
END;
/*
Nota: Estos campos se calculan automáticamente y no deben ser editados manualmente
por el usuario.
*/
TRIGGER: Actualización de pixelizacion_magazine
-- sql
pixelizacion_magazine = MAX(pixelizacion_grafico de todos los gráficos del magazine)
-- Si al menos un gráfico tiene pixelizacion_grafico = TRUE (1)
-- entonces pixelizacion_magazine = TRUE (1)
-- sql
-- Trigger para INSERT
CREATE TRIGGER update_pixelizacion_magazine_insert
AFTER INSERT ON INDICE_VERSION
WHEN NEW.id_tipo_pagina = 8 -- Solo para páginas de tipo 'Gráfico'
BEGIN
UPDATE MAGAZINE
SET pixelizacion_magazine = (
SELECT CASE
WHEN MAX(gr.pixelizacion_grafico) = 1 THEN 1
ELSE 0
END
FROM VERSION_MAGAZINE vm
JOIN INDICE_VERSION iv ON vm.id_version = iv.id_version
JOIN GRAFICO gr ON iv.id_grafico = gr.id_grafico
WHERE vm.id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = NEW.id_version
)
AND iv.id_tipo_pagina = 8
)
WHERE id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = NEW.id_version
);
END;
-- Trigger para UPDATE
CREATE TRIGGER update_pixelizacion_magazine_update
AFTER UPDATE ON INDICE_VERSION
WHEN NEW.id_tipo_pagina = 8
BEGIN
UPDATE MAGAZINE
SET pixelizacion_magazine = (
SELECT CASE
WHEN MAX(gr.pixelizacion_grafico) = 1 THEN 1
ELSE 0
END
FROM VERSION_MAGAZINE vm
JOIN INDICE_VERSION iv ON vm.id_version = iv.id_version
JOIN GRAFICO gr ON iv.id_grafico = gr.id_grafico
WHERE vm.id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = NEW.id_version
)
AND iv.id_tipo_pagina = 8
)
WHERE id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = NEW.id_version
);
END;
-- Trigger para DELETE
CREATE TRIGGER update_pixelizacion_magazine_delete
AFTER DELETE ON INDICE_VERSION
WHEN OLD.id_tipo_pagina = 8
BEGIN
UPDATE MAGAZINE
SET pixelizacion_magazine = (
SELECT COALESCE(
CASE
WHEN MAX(gr.pixelizacion_grafico) = 1 THEN 1
ELSE 0
END,
0
)
FROM VERSION_MAGAZINE vm
JOIN INDICE_VERSION iv ON vm.id_version = iv.id_version
JOIN GRAFICO gr ON iv.id_grafico = gr.id_grafico
WHERE vm.id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = OLD.id_version
)
AND iv.id_tipo_pagina = 8
)
WHERE id_magazine = (
SELECT id_magazine
FROM VERSION_MAGAZINE
WHERE id_version = OLD.id_version
);
END;
/*
Nota: Estos campos se calculan automáticamente y no deben ser editados manualmente
por el usuario.
*/
**Diagrama de Relaciones**
GRAFICO (1)
─→
(N) VERSION_GRAFICO (1)
─→
(N) INDICE_VERSION
↓
GRAFICO_GENEROS (N:M)
GRAFICO_AUTOR (N:M)
GRAFICO_AVISOS (N:M)
COLECCION_MAGAZINE (1)
─→
(N) MAGAZINE (1)
─→ (N)
VERSION_MAGAZINE (1)
─→
(N) INDICE_VERSION
↓
TIPO_PAGINA
↓
GRAFICO
(opcional)
EXPO (1)
──→
(N) EDICION_EXPO (1)
──→
(N) GRAFICO
└──→
(N) MAGAZINE
--- VISTAS DERIVADAS (Solo lectura) ---
MAGAZINE ════╗
║ (a través de INDICE_VERSION y GRAFICO)
║
╠══> MAGAZINE_GENEROS_VIEW
║
╠══> MAGAZINE_AUTORES_VIEW
║
╚══> MAGAZINE_AVISOS_VIEW
--- TRIGGERS AUTOMÁTICOS ---
INDICE_VERSION (INSERT/UPDATE/DELETE)
──TRIGGER──> MAGAZINE.paginas_magazine
──TRIGGER──> MAGAZINE.clasificacion_magazine
──TRIGGER──> MAGAZINE.pixelizacion_magazine
Notas del Diagrama:
- Las **líneas sólidas (──→)** representan relaciones directas mediante claves foráneas
- Las **líneas dobles (══>)** representan vistas derivadas que agregan información automáticamente
- Los **TRIGGERS** actualizan campos calculados en tiempo real
- Las vistas **MAGAZINE_*_VIEW** no almacenan datos, sino que consultan dinámicamente de las tablas relacionadas