Soy responsable de crear una base de datos en un proyecto. Tenemos campos que rara vez tendrán un valor (1 de cada 10,000 registros) y estoy tratando de encontrar la mejor manera de almacenar esto en la base de datos.
Por lo que puedo ver, tengo 3 opciones:
- Agregue una columna en la tabla para cada valor adicional
- Agregue una tabla vinculada que haga referencia a la tabla original y tenga registros solo donde necesitemos almacenar un valor
- Utilice el tipo de datos XML en la tabla original y almacene todos los valores en este.
¿Hay alguna otra opción que no haya considerado?
Estoy tratando de resolver los pros y los contras de cada método. Hasta donde puedo decir, 1 sería el más fácil y 2 ocuparía la menor cantidad de espacio, pero estoy luchando por encontrar muchos recursos para 3.
sql-server-2008
xml
Matthew Steeples
fuente
fuente
Respuestas:
Parece que lo que necesita son columnas dispersas e índices filtrados y vaya con la opción 1. Estas son funciones totalmente compatibles y documentadas para exactamente este escenario.
No puedo imaginar una solución XML que funcione bien en este escenario, tendrá una gran sobrecarga de metadatos redundantes y será lenta para consultar.
fuente
Una columna anulable no ocupa espacio si la longitud variable en SQL Server. El hecho de ser NULL se almacena en el mapa de bits NULL . Puede indexarlo si es necesario con índices filtrados para que ignore las columnas NULL.
Agrega complejidad cuando considera el punto 1.
No lo hagas Difícil de buscar, de análisis, etc: se va a arrepentir de esto más adelante
También depende del tamaño: ¿será char (1000) durante algunos miles de millones de filas? O tinyint para 100k filas? Si este último considera la complejidad añadida del punto 2: no vale la pena.
fuente
Con SQL Server 2008 tiene la opción adicional de usar columnas dispersas, que están diseñadas específicamente para la situación que mencionó.
Tienen el beneficio adicional de que puede verlos como un objeto XML combinado usando XML COLUMN_SET o hacer referencia a ellos individualmente y proporcionan un tremendo ahorro de espacio.
Consulte el siguiente artículo del blog para obtener más detalles: http://www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-Sparse-columns-and-XML-COLUMN_SET.aspx
fuente
Una cuarta opción: no usar tablas. Las tablas se adaptan muy mal a este tipo de datos (de hecho, a cualquier tipo de datos que no se hayan ajustado a la fuerza en forma de tabla). Solo usa XML.
fuente