Meus requisitos são:
- Precisa ser capaz de adicionar dinamicamente campos definidos pelo usuário de qualquer tipo de dados
- Precisa ser capaz de consultar UDFs rapidamente
- Precisa ser capaz de fazer cálculos em UDFs com base no tipo de dados
- Precisa ser capaz de classificar UDFs com base no tipo de dados
Outra informação:
- Estou procurando desempenho principalmente
- Existem alguns milhões de registros mestre que podem ter dados UDF anexados
- Quando eu verifiquei pela última vez, havia mais de 50mil de registros UDF em nosso banco de dados atual
- Na maioria das vezes, uma UDF é anexada apenas a alguns milhares de registros mestre, nem todos eles
- UDFs não são unidos ou usados como chaves. São apenas dados usados para consultas ou relatórios
Opções:
Crie uma tabela grande com StringValue1, StringValue2 ... IntValue1, IntValue2, ... etc. Eu odeio essa idéia, mas a considerarei se alguém puder me dizer que é melhor do que outras idéias e por quê.
Crie uma tabela dinâmica que adicione uma nova coluna sob demanda, conforme necessário. Também não gosto dessa ideia, pois sinto que o desempenho seria lento, a menos que você indexasse todas as colunas.
Crie uma única tabela contendo UDFName, UDFDataType e Value. Quando um novo UDF é adicionado, gere uma View que extraia apenas esses dados e os analise em qualquer tipo especificado. Os itens que não atendem aos critérios de análise retornam NULL.
Crie várias tabelas UDF, uma por tipo de dados. Portanto, teríamos tabelas para UDFStrings, UDFDates, etc. Provavelmente, faria o mesmo que o número 2 e geraria automaticamente uma visualização a qualquer momento em que um novo campo fosse adicionado
DataTypes XML? Eu não trabalhei com isso antes, mas já os vi mencionados. Não tenho certeza se eles me dariam os resultados que eu quero, especialmente com o desempenho.
Algo mais?