¿Puedo tener contenido múltiple dentro de una columna en SQLite en Android?

Por lo tanto, desea almacenar una lista de puntuaciones separadas por comas en una columna VARCHAR.

Publiqué lo siguiente en 2010: ¿Es realmente malo almacenar una lista delimitada en una columna de base de datos?

Además de violar la Primera forma normal debido al grupo repetitivo de valores almacenados en una sola columna, las listas separadas por comas tienen muchos otros problemas más prácticos:

  • No puedo asegurar que cada valor sea el tipo de datos correcto: no hay forma de evitar 1,2,3, banana, 5
  • No se pueden usar restricciones de clave externa para vincular valores a una tabla de búsqueda; No hay forma de hacer cumplir la integridad referencial.
  • No se puede hacer cumplir la unicidad: no hay forma de prevenir 1,2,3,3,3,5
  • No se puede eliminar un valor de la lista sin recuperar toda la lista.
  • No se puede almacenar una lista más larga de lo que cabe en la columna de cadena.
  • Difícil de buscar todas las entidades con un valor dado en la lista; tienes que usar un escaneo de tabla ineficiente. Puede que tenga que recurrir a expresiones regulares, por ejemplo en MySQL:
  • idlist REGEXP ‘[[: :]]’
  • Elementos difíciles de contar en la lista, o hacer otras consultas agregadas.
  • Es difícil unir los valores a la tabla de búsqueda a la que hacen referencia.
  • Es difícil obtener la lista en orden ordenado.
  • Almacenar enteros como cadenas ocupa aproximadamente el doble de espacio que almacenar enteros binarios. Sin mencionar el espacio ocupado por los caracteres de coma.

Para resolver estos problemas, debe escribir toneladas de código de aplicación, reinventando la funcionalidad que el RDBMS ya proporciona de manera mucho más eficiente.

Las listas separadas por comas son lo suficientemente incorrectas como para que este sea el primer capítulo de mi libro: Antipatterns SQL: Evitar los errores de la programación de bases de datos.

Hay momentos en los que necesita emplear la desnormalización, pero estos son casos excepcionales. Cualquier “optimización” no relacional beneficia un tipo de consulta a expensas de otros usos de los datos, así que asegúrese de saber cuáles de sus consultas deben tratarse de manera tan especial que merezcan la desnormalización.

Realmente no. En su ejemplo, estaría almacenando un valor en la columna PUNTUACIÓN: una cadena que contiene “12,32,43,55”. Puede analizarlo externamente como un conjunto de valores separados por comas, pero hasta donde la base de datos esté preocupado, es un valor único.

En una base de datos relacional (como SQLite), realmente querrá almacenar eso como varias filas, que difieren solo en la columna PUNTUACIÓN.

Ahora hay otros tipos de bases de datos además de las bases de datos relacionales puras. Por ejemplo, FileMaker le permite definir múltiples celdas dentro de un campo (al menos solía hacerlo, no lo ha usado en mucho tiempo). Y ciertamente puede construir estructuras de datos muy complicadas en una base de datos de gráficos, o, simplemente, usando listas en LISP.

La verdadera pregunta es: ¿Qué estás tratando de lograr?

SQLite es una base de datos relacional. Almacenar múltiples valores en una columna como esta se considera un mal diseño. Ciertamente, podría almacenar valores separados por comas en la columna y analizarlos usted mismo, pero probablemente sea una mejor idea usar una tabla separada para realizar un seguimiento de las puntuaciones.

Si necesita hacer esto en sus aplicaciones, implica algunos malos olores en sus aplicaciones. Considere refactorizar sus esquemas lo antes posible. No permita que se emitan códigos incorrectos en sus proyectos. También hay algunas buenas respuestas en este hilo, así que no las repito.