MongoDB esquema - Arquisoft/wichat_es1b GitHub Wiki

Diagrama modelo de datos

image

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"
        }
    }
}

Autores