MongoDB esquema - Arquisoft/wichat_es1b GitHub Wiki
Diagrama modelo de datos
Explicación modelo de datos
User (Usuarios)
Los usuarios están representados en la colección User y contienen la siguiente información:
- username (String): Nombre de usuario único.
- password (String): Contraseña almacenada (idealmente con hash para mayor seguridad).
- createdAt (Date): Fecha de creación del usuario, con un valor por defecto de Date.now.
- answers (Array of Questions): Un array que almacena las respuestas dadas por el usuario. Aquí se pueden almacenar referencias a documentos de la colección Question.
🔹 Relación: Un usuario puede haber respondido múltiples preguntas, por lo que se usa un array de referencias a la colección Question.
Question (Preguntas)
La colección Question almacena las preguntas junto con sus respuestas correctas e incorrectas:
- question (String, requerido): Texto de la pregunta.
- CorrectAnswer (String, requerido): Respuesta correcta de la pregunta.
- time (Float): Tiempo límite en segundos para responder la pregunta.
- category (Category, requerido): Referencia a la categoría a la que pertenece la pregunta.
- wrongAnswers (Array of Strings): Lista de respuestas incorrectas como strings.
🔹 Relación: Cada pregunta pertenece a una sola categoría, lo que se representa con una referencia a Category.
Category (Categorías)
La colección Category define las categorías de las preguntas:
- name (String): Nombre de la categoría.
🔹 Relación: Una categoría puede tener múltiples preguntas, pero cada pregunta pertenece a una sola categoría.
Resumen de Relaciones
- User → Question Un usuario puede responder múltiples preguntas (almacenadas como referencias en un array en el campo answers).
- Question → Category Cada pregunta está asociada a una sola categoría mediante una referencia.
Ejemplo de Documento en MongoDB
User
{
"_id": "ObjectId('user123')",
"username": "johndoe",
"password": "hashedpassword123",
"createdAt": "ISODate('2024-02-24T12:00:00Z')",
"answers": ["ObjectId('question456')", "ObjectId('question789')"]
}
Question
{
"_id": "ObjectId('question456')",
"question": "¿Cuál es la capital de Francia?",
"CorrectAnswer": "París",
"time": 30.0,
"category": "ObjectId('category001')",
"wrongAnswers": ["Madrid", "Berlín", "Roma"]
}
Categoria
{
"_id": "ObjectId('category001')",
"name": "Geografía"
}
JSON modelo
{
"User": {
"username": {
"type": "String"
},
"password": {
"type": "String"
},
"createdAt": {
"type": 2,
"default": "Date.now"
},
"answers": {
"type": "Array of Questions"
}
},
"Question": {
"question": {
"type": "String",
"required": true
},
"CorrectAnswer": {
"type": "String",
"required": true
},
"time": {
"type": "float"
},
"category": {
"type": "Category",
"required": true
},
"wrongAnswers": {
"type": "Array of Strings"
}
},
"Category":{
"name":{
"type":"String"
}
}
}