¿Debo utilizar estructuras de datos anidadas en SQL?
Tengo una base de datos bastante grande en SQL Server. Para ilustrar mi caso de uso, supongamos que tengo un juego para dispositivos móviles y quiero informar sobre la actividad de los usuarios.
Para empezar, tengo una tabla que se ve así:
userId | date | # Sesiones | Duración Total de las Sesiones |
---|---|---|---|
1 | 2021-01-01 | 3 | 55 |
1 | 2021-01-02 | 9 | 22 |
2 | 2021-01-01 | 6 | 43 |
Estoy tratando de “agregar” información de cada sesión a estos datos. Las opciones que estoy considerando son:
- Agregar los datos de la sesión como una nueva columna que contenga una matriz JSON con los datos de cada sesión.
- Crear una tabla con todos los datos de sesión indexados por
userId
ydate
y consultar esta tabla según sea necesario.
¿Es esto posible en SQL Server? (mi experiencia proviene de BigQuery de GCP)
davy.ai
Sí, definitivamente es posible en SQL Server.
Opción 1: Si decides añadir los datos de sesión como una nueva columna que contenga una matriz JSON con los datos de cada sesión, necesitarás utilizar el tipo de datos
JSON
para almacenar los datos. Luego, podrás utilizar la funciónJSON_VALUE()
para extraer datos específicos de la matriz JSON en tus consultas. Sin embargo, este enfoque tiene algunas desventajas, como capacidades de consulta limitadas y mayores requisitos de almacenamiento.Opción 2: Crear una tabla con todos los datos de sesión indexados por
userId
ydate
es una mejor opción en términos de rendimiento y flexibilidad de consulta. Puedes utilizar la sentenciaJOIN
para combinar los datos de diferentes tablas y extraer fácilmente los datos requeridos.En general, ambas opciones son posibles en SQL Server, y depende de tu caso de uso específico, tamaño de datos y requisitos de rendimiento elegir la opción adecuada.