Diagrama
📌 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 sercontributor
,admin
ouser
.location
: Referencia a la colecciónlocations
(relación one-to-one).pines
: Array con referencias apins
(relación one-to-many).foundObjects
: Posible referencia alostObjects
(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 conusers
).where
: Ubicación donde se encontró (relación one-to-one conlocations
).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 unlostObject
(objeto perdido).when
: Fecha en la que el objeto fue devuelto.owner
: Usuario que recuperó el objeto (relación one-to-one conusers
).
📌 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ón | Tipo | Explicación |
---|---|---|
users → locations | One-to-One | Un usuario tiene una ubicación. |
users → pins | One-to-Many | Un usuario puede obtener varios pines. |
users → lostObjects | One-to-Many | Un usuario puede encontrar múltiples objetos. |
lostObjects → locations | One-to-One | Cada objeto perdido fue encontrado en una ubicación. |
solvedObjects → lostObjects | One-to-One | Un objeto resuelto tiene un objeto perdido asociado. |
solvedObjects → users | One-to-One | Un 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).