Skip to content

Diagrama

Captura de Moon modeler

📌 Descripción de la Base de Datos

Esta base de datos almacena información sobre objetos perdidos y encontrados, usuarios, ubicaciones y recompensas en forma de “pines”. Está diseñada para permitir a los usuarios reportar objetos perdidos, encontrarlos y ser recompensados por su contribución.

La estructura sigue un modelo documental en MongoDB, donde los documentos pueden contener referencias (objectId) para establecer relaciones entre ellos.


📂 Colecciones y Relación entre ellas

1️⃣ users (Usuarios)

📌 Propósito: Representa a los usuarios registrados en la plataforma.

📌 Campos clave:

  • mail: Identificador único del usuario.
  • rol: Puede ser contributor, admin o user.
  • location: Referencia a la colección locations (relación one-to-one).
  • pines: Array con referencias a pins (relación one-to-many).
  • foundObjects: Posible referencia a lostObjects (si el usuario ha encontrado objetos).
  • lost: Booleano que indica si el usuario ha perdido un objeto.

📌 Relaciones:

  • One-to-One con locations (cada usuario tiene una ubicación).
  • One-to-Many con pins (un usuario puede tener varios pines).
  • One-to-Many con lostObjects (un usuario puede encontrar varios objetos perdidos).

2️⃣ locations (Ubicaciones)

📌 Propósito: Almacena ciudades y coordenadas de ubicación.

📌 Campos clave:

  • city: Nombre de la ciudad.
  • country: País.
  • latitude, longitude, altitude: Coordenadas geográficas.

📌 Relaciones:

  • One-to-Many con users (un usuario pertenece a una ubicación).
  • One-to-Many con lostObjects (cada objeto perdido se encontró en una ubicación).

3️⃣ pins (Recompensas en forma de pines)

📌 Propósito: Representa los pines que los usuarios reciben por encontrar objetos.

📌 Campos clave:

  • name: Nombre del pin.
  • image: Imagen del pin.
  • level: Nivel de contribución necesario para obtener el pin.

📌 Relaciones:

  • One-to-Many con users (un usuario puede recibir varios pines).

4️⃣ lostObjects (Objetos Perdidos)

📌 Propósito: Contiene información sobre objetos reportados como perdidos.

📌 Campos clave:

  • findBy: Usuario que encontró el objeto (relación one-to-one con users).
  • where: Ubicación donde se encontró (relación one-to-one con locations).
  • imgs: Array de imágenes del objeto.
  • tags: Categorías o etiquetas asociadas.

📌 Relaciones:

  • One-to-One con users (cada objeto perdido fue encontrado por un usuario).
  • One-to-One con locations (cada objeto perdido tiene una ubicación asociada).

5️⃣ solvedObjects (Objetos Resueltos)

📌 Propósito: Representa objetos que han sido devueltos a sus dueños.

📌 Campos clave:

  • lostObject: Referencia a un lostObject (objeto perdido).
  • when: Fecha en la que el objeto fue devuelto.
  • owner: Usuario que recuperó el objeto (relación one-to-one con users).

📌 Relaciones:

  • One-to-One con lostObjects (cada objeto resuelto tiene un objeto perdido asociado).
  • One-to-One con users (cada objeto resuelto pertenece a un dueño).

📊 Tipos de Relaciones en la Base de Datos

RelaciónTipoExplicación
userslocationsOne-to-OneUn usuario tiene una ubicación.
userspinsOne-to-ManyUn usuario puede obtener varios pines.
userslostObjectsOne-to-ManyUn usuario puede encontrar múltiples objetos.
lostObjectslocationsOne-to-OneCada objeto perdido fue encontrado en una ubicación.
solvedObjectslostObjectsOne-to-OneUn objeto resuelto tiene un objeto perdido asociado.
solvedObjectsusersOne-to-OneUn objeto resuelto tiene un dueño.

✅ Conclusión

Esta base de datos sigue un modelo documental relacional en MongoDB, donde se utilizan ObjectId para establecer relaciones entre colecciones.

📌 Las principales relaciones incluyen:

  • One-to-One (usuario-ubicación, objeto perdido-lugar, objeto resuelto-usuario).
  • One-to-Many (usuario-pines, usuario-objetos encontrados).