Modelo - UESSalexmendoza/Diseno-Software GitHub Wiki
📚 Modelo de Datos – Plataforma de Trueque de Libros
🎯 Objetivo
Definir y describir el modelo de datos de la Plataforma de Trueque de Libros entre Estudiantes, estableciendo las entidades, atributos, relaciones y restricciones que rigen la estructura de la base de datos, asegurando integridad, consistencia y eficiencia en el almacenamiento de la información.
📝 Resumen del Modelo
La plataforma requiere almacenar información sobre usuarios, libros, peticiones de intercambio y configuraciones auxiliares como categorías, estados y formas de contacto.
El modelo de datos organiza esta información en entidades relacionadas que soportan las operaciones principales del sistema como registro de usuarios, publicación de libros, gestión de peticiones, y comunicación entre usuarios.
🗂️ Entidades Principales
| Entidad |
Descripción |
| Usuario |
Representa a los estudiantes registrados que pueden publicar libros, buscar y realizar peticiones de intercambio. |
| Perfil |
Define el tipo de usuario dentro del sistema (Administrador o Estudiante). |
| Libro |
Representa un libro disponible para intercambio, publicado por un usuario. |
| Categoria |
Clasifica los libros según su área temática (Historia, Ciencias, Literatura, etc.). |
| EstadoLibro |
Define el estado físico del libro (Nuevo, Usado, Aceptable). |
| Peticion |
Representa una solicitud de intercambio de un libro entre usuarios. |
| EstadoPeticion |
Define el estado actual de una petición (Pendiente, Aceptada, Rechazada). |
| FormaContacto |
Asocia a los usuarios con distintos métodos de contacto. |
| TipoContacto |
Define los tipos disponibles de formas de contacto (Correo, WhatsApp, Formulario). |
🛠️ Atributos de Entidades
Usuario
| Atributo |
Tipo de Dato |
Restricción |
| idUsuario |
INT (PK) |
PRIMARY KEY |
| nombreUsuario |
VARCHAR(50) |
UNIQUE, NOT NULL |
| nombreReal |
VARCHAR(100) |
NOT NULL |
| email |
VARCHAR(100) |
UNIQUE, NOT NULL |
| password |
VARCHAR(255) |
NOT NULL |
| fechaAcceso |
DATETIME |
NULLABLE |
| aceptacionPolitica |
BOOLEAN |
NOT NULL |
| fechaAceptacion |
DATETIME |
NOT NULL |
| intentosFallidos |
INT |
DEFAULT 0 |
| estatus |
VARCHAR(20) |
DEFAULT 'Activo' |
| perfil |
INT (FK) |
FOREIGN KEY → Perfil |
Relaciones:
- 1 Usuario tiene 1 Perfil
- 1 Usuario tiene muchas FormasContacto
- 1 Usuario publica muchos Libros
- 1 Usuario realiza muchas Peticiones
Perfil
| Atributo |
Tipo de Dato |
Restricción |
| idPerfil |
INT (PK) |
PRIMARY KEY |
| nombrePerfil |
VARCHAR(50) |
NOT NULL |
| estado |
BOOLEAN |
DEFAULT TRUE |
Libro
| Atributo |
Tipo de Dato |
Restricción |
| idLibro |
INT (PK) |
PRIMARY KEY |
| nombre |
VARCHAR(100) |
NOT NULL |
| descripcion |
TEXT |
NULLABLE |
| autor |
VARCHAR(100) |
NOT NULL |
| idCategoria |
INT (FK) |
FOREIGN KEY → Categoria |
| idEstadoLibro |
INT (FK) |
FOREIGN KEY → EstadoLibro |
| idUsuario |
INT (FK) |
FOREIGN KEY → Usuario |
| estadoRegistro |
BOOLEAN |
DEFAULT TRUE |
Relaciones:
- 1 Libro pertenece a 1 Usuario
- 1 Libro tiene 1 Categoria
- 1 Libro tiene 1 EstadoLibro
Categoria
| Atributo |
Tipo de Dato |
Restricción |
| idCategoria |
INT (PK) |
PRIMARY KEY |
| nombreCategoria |
VARCHAR(50) |
NOT NULL |
| estado |
BOOLEAN |
DEFAULT TRUE |
EstadoLibro
| Atributo |
Tipo de Dato |
Restricción |
| idEstadoLibro |
INT (PK) |
PRIMARY KEY |
| estado |
VARCHAR(50) |
NOT NULL |
Peticion
| Atributo |
Tipo de Dato |
Restricción |
| idPeticion |
INT (PK) |
PRIMARY KEY |
| idUsuario |
INT (FK) |
FOREIGN KEY → Usuario |
| idLibro |
INT (FK) |
FOREIGN KEY → Libro |
| fechaPeticion |
DATETIME |
NOT NULL |
| idEstadoPeticion |
INT (FK) |
FOREIGN KEY → EstadoPeticion |
| fechaLimiteDevolucion |
DATETIME |
NULLABLE |
| mensaje |
TEXT |
NULLABLE |
| respuesta |
TEXT |
NULLABLE |
Relaciones:
- 1 Peticion la realiza 1 Usuario sobre 1 Libro
- 1 Peticion tiene 1 EstadoPeticion
EstadoPeticion
| Atributo |
Tipo de Dato |
Restricción |
| idEstadoPeticion |
INT (PK) |
PRIMARY KEY |
| estado |
VARCHAR(50) |
NOT NULL |
FormaContacto
| Atributo |
Tipo de Dato |
Restricción |
| idFormaContacto |
INT (PK) |
PRIMARY KEY |
| idUsuario |
INT (FK) |
FOREIGN KEY → Usuario |
| idTipoContacto |
INT (FK) |
FOREIGN KEY → TipoContacto |
TipoContacto
| Atributo |
Tipo de Dato |
Restricción |
| idTipoContacto |
INT (PK) |
PRIMARY KEY |
| tipoContacto |
VARCHAR(50) |
NOT NULL |
| estado |
BOOLEAN |
DEFAULT TRUE |
🔗 Principales Relaciones del Modelo
- Usuario 1:1 Perfil
- Usuario 1:M Libros
- Usuario 1:M FormasContacto
- Usuario 1:M Peticiones
- Libro 1:1 Categoria
- Libro 1:1 EstadoLibro
- Peticion 1:1 EstadoPeticion
📌 Reglas de Integridad
- Cada usuario debe tener un perfil válido asociado.
- Cada libro debe tener una categoría y un estado físico definidos.
- Cada petición debe estar relacionada a un libro y a un usuario.
- Se debe garantizar la unicidad del correo electrónico y nombre de usuario en la tabla
Usuario.