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:
- ¿Por qué muchas aplicaciones gratuitas de Android (gmail, mapas, youtube, etc.) no están disponibles para descargar en algunos países?
- Cómo usar 9Apps
- ¿Cuál es el mejor método o aplicación que puede ayudarlo a organizar su vida?
- ¿Cuál es la mejor aplicación de chat?
- ¿Cuál es tu aplicación de calendario móvil favorita?
- 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.