tipos tipo propiedades precio para los ejemplos ejemplo descripcion datos dato columnas campos sql-server database datastore data-storage

sql server - tipo - Almacenar matriz de números en el campo de base de datos



tipo de dato tinyint (6)

Almacénelo como una matriz JSON, pero sepa que ahora todos los accesos serán para toda la matriz, sin lecturas / escrituras individuales a coeficientes específicos.

En nuestro caso, los estamos almacenando como una matriz json. Al igual que en su caso, no existe una relación entre los números de matriz individuales: la matriz solo tiene sentido como una unidad y como una unidad SÍ tiene una relación con otras columnas en la tabla. Por cierto, todo lo demás está normalizado. Lo comparo con esto: si fuera a almacenar un fragmento de 10 bytes, lo guardaría empaquetado en una sola columna de VARBINARY (10). No lo fragmentaría en 10 bytes, almacenaría cada uno en una columna de VARBINARY (1) y luego los uniría con una clave externa. Quiero decir que podrías, pero no tendría ningún sentido.

USTED como desarrollador tendrá que entender qué tan ''monolítico'' es realmente el conjunto de int.

Contexto: SQL Server 2008, C #

Tengo una matriz de enteros (0-10 elementos). Los datos no cambian a menudo, pero se recuperan a menudo.

Podría crear una tabla separada para almacenar los números, pero por alguna razón parece que eso no sería óptimo.

Pregunta # 1: ¿Debo almacenar mi matriz en una tabla separada? Por favor, da razones de una manera u otra.

Pregunta # 2: (independientemente de cuál sea la respuesta a Q # 1), ¿cuál es la "mejor" manera de almacenar int [] en el campo de la base de datos? XML? JSON? CSV?

EDITAR: Algunos antecedentes: los números que se almacenan son solo algunos coeficientes que no participan en ninguna relación, y siempre se usan como una matriz (es decir, nunca se está recuperando o usando un valor de forma aislada).


Creo que ya que estás hablando de un servidor SQL que indica que tu aplicación puede ser una aplicación basada en datos. Si ese es el caso, mantendría definitivamente la matriz en la base de datos como una tabla separada con un registro para cada valor. Será normalizado y optimizado para el retorno. Incluso si solo tiene unos pocos valores en la matriz, es posible que deba combinar esos datos con otros datos recuperados que puedan necesitar "unirse" con los valores de su matriz. En cuyo caso se optimiza sql utilizando índices, claves externas, etc. (normalizado).

Dicho esto, siempre puede codificar los 10 valores en su código y guardar el viaje de ida y vuelta a la base de datos si no necesita cambiar los valores. Depende de cómo funcione su aplicación y para qué se va a utilizar esta matriz.


Estoy de acuerdo con todos los demás en que lo mejor es una tabla normalizada separada. Pero si insiste en tenerlo todo en la misma tabla, no coloque la matriz en una sola columna. En su lugar, cree las 10 columnas y almacene cada valor de matriz en una columna diferente. Le ahorrará los problemas de análisis y actualización.


La "mejor" forma de almacenar datos en una base de datos es la forma más propicia para las operaciones que se realizarán en ella y la que facilita el mantenimiento. Es este último requisito el que debería llevarlo a una solución normalizada que significa almacenar los enteros en una tabla con una relación. Además de ser más fácil de actualizar, es más fácil para el siguiente desarrollador que viene después de que usted entienda qué y cómo se almacena la información.


Mesa separada, normalizada.

No como XML o json, sino números separados en filas separadas

No importa lo que pienses, es la mejor manera. Me lo puedes agradecer después


Una tabla separada sería la forma más "normalizada" de hacer esto. Y probablemente sea mejor a largo plazo, ya que no tendrá que analizar el valor de la columna para extraer cada entero.

Si lo desea, también puede usar una columna XML para almacenar los datos.

Las columnas dispersas también pueden ser otra opción para usted.

Si quiere mantenerlo realmente simple, solo puede delimitar los valores: 10;2;44;1