Mis requerimientos son:
- Necesita poder agregar dinámicamente campos definidos por el usuario de cualquier tipo de datos
- Necesita poder consultar UDF rápidamente
- Necesita poder hacer cálculos en UDF basados en el tipo de datos
- Necesita poder ordenar UDF según el tipo de datos
Otra información:
- Estoy buscando rendimiento principalmente
- Hay algunos millones de registros maestros que pueden tener datos UDF adjuntos
- La última vez que lo verifiqué, había más de 50 mil registros UDF en nuestra base de datos actual.
- La mayoría de las veces, un UDF solo se adjunta a unos pocos miles de registros maestros, no a todos
- Los UDF no se unen ni se usan como claves. Son solo datos utilizados para consultas o informes
Opciones:
Cree una tabla grande con StringValue1, StringValue2 ... IntValue1, IntValue2, ... etc. Odio esta idea, pero consideraré si alguien me puede decir que es mejor que otras ideas y por qué.
Cree una tabla dinámica que agregue una nueva columna a pedido según sea necesario. Tampoco me gusta esta idea, ya que siento que el rendimiento sería lento a menos que indices cada columna.
Cree una sola tabla que contenga UDFName, UDFDataType y Value. Cuando se agrega un nuevo UDF, genere una Vista que extraiga solo esos datos y los analice en el tipo especificado. Los elementos que no cumplen los criterios de análisis devuelven NULL.
Cree múltiples tablas UDF, una por tipo de datos. Entonces tendríamos tablas para UDFStrings, UDFDates, etc. Probablemente haría lo mismo que # 2 y generaría automáticamente una Vista cada vez que se agregue un nuevo campo
Tipos de datos XML? No he trabajado con estos antes, pero los he visto mencionados. No estoy seguro de si me darían los resultados que quiero, especialmente con el rendimiento.
¿Algo más?