SQL Server - Columnas Dinamicas. Como me conviene definirla?

   
Vista:

Columnas Dinamicas. Como me conviene definirla?

Publicado por pepitolanda (1 intervención) el 21/12/2009 00:04:14
Hola a todos:

Quisiera saber si me conviene definir la siguiente tabla modificando los campos en forma dinamica o no.
La tabla se usa para guardar datos historicos de un proceso (temp, presiones, etc), en donde cada fila o entrada corresponde a al dato en una fecha en particular y y cada columna es un tipo de variable del proceso. A priori no tengo ninguna variable (columna) cargada ya que depende del proceso que deseo almacenar. Desde el soft voy a definir las variables (no necesariamente todas desde el primer momento, si no que de vez en cuando puede haber una modificacion) y crear la tabla y/o modificarla cuando sea necesario.

Me conviene definir la tabla de esa manera, es decir, agregando/eliminado las columnas que sean necesarias (no seria algo muy habitual) o definir una tabla con los siguientes campos:

FechaDato
NombreVariable
ValorDato

lo cual me crearia una tabla con muchas mas filas y muchos valores replicados de las fechas y de los nombres para identificar correctamente al valor de una determinada fila. Pero tendria la ventaja de ser una tabla con una cantidad de columnas fijas.

Cuando yo realizo el pedido de datos busco el valor de todas las variables en una determinada fecha, y por eso pienso que tener una columna por cada variable tendria una mejor indexacion. es asi??

Por ultimo, me cree un procedimiento para agregar una columna de la siguiente forma:

CREATE PROCEDURE AgregarVariable
@NombreVariable varchar(50),
@Descrip varchar(100),
@UnidadMedida varchar(20)
as

DECLARE @SQLString NVARCHAR(100)
SET @SQLString = N'alter table DatosPlanta add '+@NombreVariable+' float'
EXEC sp_executesql @SQLString

INSERT TagsPlanta
(ID_Tag, NombreTag, Descripcion, UnidadMedida)
SELECT
max(ID_Tag) + 1, @NombreVariable, @Descrip, @UnidadMedida
FROM TagsPlanta

go

DatosPlanta : es la tabla donde se guardan los datos
TagsPlanta: es una tabla con una lista de todas las variables, donde se guardan datos y caracteristicas de las mismas.

El problema que tengo con este procedimiento es que si el nombre de columna que especifico ya existe, la columna no se crea, pero si me crea una nueva entrada en la tabla TagsPlanta. Como evito esto? con un Trigger? de que manera?.

Agradesco a quien me pueda dar una mano.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder