esquema base datos - ManuelJDonoso/Proyecto_daw GitHub Wiki
8 - Esquema de Base de Datos
Propósito y Alcance
Este documento describe el esquema de base de datos para la aplicación Crónicas de Mérida. Detalla todas las tablas, vistas, relaciones y desencadenadores (triggers) que respaldan la funcionalidad de la aplicación. Este esquema sirve como base para el almacenamiento y recuperación de datos en todos los módulos de la aplicación, incluyendo el sistema de foros, gestión de materiales, gestión de usuarios y gestión de eventos.
Para información sobre la conexión a la base de datos en el código, consulta la sección de Arquitectura Principal. Para información sobre la implementación de la Gestión de Materiales, consulta la sección de Gestión de Materiales.
Visión General de la Base de Datos
La base de datos proyecto_daw
es una base de datos MySQL/MariaDB que proporciona almacenamiento persistente para todos los datos de la aplicación. Contiene 15 tablas, 10 vistas y 1 desencadenador para respaldar la funcionalidad de la aplicación.
Diagrama de Relaciones de Entidad
El siguiente diagrama ilustra las tablas principales y sus relaciones en el esquema de la base de datos:
Nota: Aquí se incluiría un diagrama ER si estuviera disponible.
Tablas de Gestión de Usuarios
El sistema de gestión de usuarios utiliza dos tablas principales para gestionar los usuarios y sus roles.
usuarios
Almacena información de cuentas de usuario, incluyendo detalles de autenticación y asignación de roles.
Columna | Tipo | Descripción |
---|---|---|
id | int | Clave primaria |
nombre_usuario | varchar(50) | Nombre de usuario único |
nombre | varchar(100) | Nombre completo |
varchar(100) | Dirección de correo electrónico única | |
password | varchar(255) | Contraseña encriptada |
rol_id | int | Clave foránea a la tabla roles |
reset_token | varchar(255) | Token para restablecimiento de contraseña |
token_expiracion | datetime | Expiración del token de restablecimiento |
roles
Define los roles de usuario disponibles en el sistema con los permisos correspondientes.
Columna | Tipo | Descripción |
---|---|---|
id | int | Clave primaria |
nombre | varchar(50) | Nombre del rol (visitante, jugador, moderador, administrador) |
Tablas del Sistema de Foros
El sistema de foros utiliza cuatro tablas principales para organizar las discusiones en una estructura jerárquica.
categorias
Unidades organizativas de nivel superior para los temas del foro.
Columna | Tipo | Descripción |
---|---|---|
id | int | Clave primaria |
nombre | varchar(100) | Nombre de la categoría |
permitir_crear_temas | tinyint(1) | Si los usuarios pueden crear temas en esta categoría |
temas
Temas dentro de las categorías que contienen hilos de discusión.
Columna | Tipo | Descripción |
---|---|---|
id | int | Clave primaria |
categoria_id | int | Clave foránea a la tabla categorias |
titulo | varchar(255) | Título del tema |
contenido | text | Contenido de la publicación inicial |
usuario_id | int | Clave foránea a la tabla usuarios |
created_at | timestamp | Marca de tiempo de creación |
permitir_publicaciones | tinyint(1) | Si se permiten respuestas |
publicaciones
Publicaciones individuales dentro de los temas.
Columna | Tipo | Descripción |
---|---|---|
id | int | Clave primaria |
tema_id | int | Clave foránea a la tabla temas |
contenido | text | Contenido de la publicación |
usuario_id | int | Clave foránea a la tabla usuarios |
created_at | timestamp | Marca de tiempo de la publicación |
me_gustas
Rastrea los "me gusta" en las publicaciones.
Columna | Tipo | Descripción |
---|---|---|
id | int | Clave primaria |
publicacion_id | int | Clave foránea a la tabla publicaciones |
usuario_id | int | Clave foránea a la tabla usuarios |
created_at | timestamp | Marca de tiempo del "me gusta" |
Tablas de Gestión de Materiales
El sistema de gestión de materiales utiliza cinco tablas para rastrear los elementos físicos que pueden ser prestados a los miembros.
tipo_material
Categoriza los materiales por tipo.
Columna | Tipo | Descripción |
---|---|---|
id | int | Clave primaria |
nombre | varchar(50) | Nombre del tipo (e.g., "Cartas", "Libros") |
material
Define los tipos de materiales disponibles.
Columna | Tipo | Descripción |
---|---|---|
id | int | Clave primaria |
nombre | varchar(100) | Nombre del material |
descripcion | text | Descripción del material |
edad_minima | int | Edad mínima recomendada |
tipo_id | int | Clave foránea a la tabla tipo_material |
stock | int | Cantidad disponible |
prestamos
Registra los préstamos de materiales a los usuarios.
Columna | Tipo | Descripción |
---|---|---|
id | int | Clave primaria |
material_id | int | Clave foránea a la tabla material |
usuario_id | int | Clave foránea a la tabla usuarios |
fecha_inicio | date | Fecha de inicio del préstamo |
fecha_fin | date | Fecha de finalización del préstamo |
devuelto | tinyint(1) | Indicador de si el material ha sido devuelto |
devoluciones
Registra las devoluciones de materiales.
Columna | Tipo | Descripción |
---|---|---|
id | int | Clave primaria |
prestamo_id | int | Clave foránea a la tabla prestamos |
fecha | date | Fecha de devolución |
estado | varchar(50) | Estado del material al ser devuelto |
inventario
Mantiene el inventario de materiales.
Columna | Tipo | Descripción |
---|---|---|
id | int | Clave primaria |
material_id | int | Clave foránea a la tabla material |
cantidad | int | Cantidad total disponible |