2010-10-27 18 views
7

Quiero almacenar una matriz de valores enteros en una tabla de base de datos SQL (SQLServer 2005), si es posible usando una sola columna.Almacenamiento de una matriz de valores enteros en SQL Server

La matriz de enteros tendrá una longitud de 7560 valores.

Estoy usando un objectdatasource, el tipo de datos debe ser compatible con los parámetros generados de un compilador de tablas.

gracias por ayudar :)

+0

¿por qué no hacer un campo de texto grande y separar los valores por comas? o utilice un blob como mapa de bits (4 bytes por int), o bien cree una tabla con 7561 campos: P – joni

Respuesta

15

usted tiene por lo menos dos opciones:

  • tienda como una lista separada por comas de los valores separados.
  • Utilice una tabla separada y almacene un valor por fila, con una clave externa que indique su tabla.

Si quiere normalizar su base de datos debe tomar la segunda opción.

+4

@OP, recomiendo la opción dos. – Brad

+0

¡Gracias por tu respuesta! si normalizo la base de datos, terminaré con millones de filas (quizás más de 50 millones). No estoy seguro de si la base de datos puede manejar eso sin problemas de rendimiento. – spoekes

+1

@spoekes: creo que debe considerar sus casos de uso para decidir qué solución es mejor para usted.¿Siempre necesita buscar y modificar toda la lista a la vez? Entonces, usar una sola celda probablemente esté bien. ¿A veces le interesará cambiar solo un elemento o verificar si un elemento está en una lista? Luego, la normalización probablemente le dará un mejor rendimiento. –

0

¡Solo si es necesario! Puede crear fácilmente otra tabla que contenga una clave externa en su tabla y una columna int.

Si insiste en mantenerlo en SQL Server como una columna, debe usar el tipo de columna IMAGE o VARBINARY (MAX) ya que la longitud de los datos es superior a 8K. Esto almacenará cada int como un valor binario de 4 bytes.

¿Qué es ObjectDataSource?

+0

Gracias por su respuesta! ¿Hay algún inconveniente al usar VARBINARY (MAX) o IMAGE? ObjectDataSource es Data Access Layer que genera métodos para recuperar datos. – spoekes

+0

El rendimiento de los campos VARBINARIO (MÁX) o IMAGEN no es tan bueno aunque es suficiente. – Aliostad

5

Hacerlo bien: 1NF no estipula valores repetitivos. Cada elemento de la matriz propuesta de 7560 elementos pertenece a su propia fila.

Al poner cada elemento en su propia fila, le da al RDBMS la posibilidad de hacer cosas que no puede hacer, por ejemplo: calcular estadísticas en el conjunto, verificar que cada elemento se adhiere a las reglas de dominio, calcular diferencias entre dos conjuntos , contar/seleccionar conjuntos que comparten algunas características.

terminaré con millones de filas (quizás más de 50 millones). No estoy seguro de si la base de datos puede manejar eso sin problemas de rendimiento.

Eso no es particularmente muchos, y no tendrá que lidiar con los 50 millones la mayor parte del tiempo. Calcule cuántos accesos se necesitan para buscar en un árbol binario y encontrar un registro en mil millones. La respuesta puede sorprenderte.

+0

no hay necesidad de lograr todo. Para el etiquetado, creo que primero debe almacenar como matriz, y luego para fines de rendimiento e informe, cree otra tabla para facilitar eso. Esto probablemente es exactamente por qué algunas personas van por mongoDB. Pero en realidad es porque la gente dice que no debe hacer esto o lo que causó en mi humilde opinión. – windmaomao

0

Lo almacenaría en coma si los datos no están RELACIONADOS con ninguna otra tabla (ejemplo, valores que desea procesar de alguna manera), si son (productos en una factura, por ejemplo) debe crear otra mesa con una clave externa.

Greatings

Cuestiones relacionadas