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.