Мои требования:
- Необходимо иметь возможность динамически добавлять определяемые пользователем поля любого типа данных
- Необходимо уметь быстро запрашивать UDF
- Нужно уметь делать вычисления на UDF на основе типа данных
- Необходимо уметь сортировать пользовательские функции по типу данных
Дополнительная информация:
- Я ищу производительность в первую очередь
- Существует несколько миллионов основных записей, к которым можно прикрепить данные UDF
- Когда я последний раз проверял, в нашей текущей базе данных было более 50 миллионов записей UDF
- В большинстве случаев UDF прикрепляется только к нескольким тысячам основных записей, но не ко всем
- UDF не объединяются и не используются в качестве ключей. Это просто данные, используемые для запросов или отчетов
Параметры:
Создать большую таблицу с помощью StringValue1, StringValue2 ... IntValue1, IntValue2, ... и т. Д. Я ненавижу эту идею, но рассмотрю ее, если кто-то скажет мне, что она лучше других и почему.
Создайте динамическую таблицу, которая добавляет новый столбец по требованию. Мне также не нравится эта идея, поскольку я чувствую, что производительность будет низкой, если вы не проиндексировали каждый столбец.
Создайте одну таблицу, содержащую UDFName, UDFDataType и Value. Когда добавляется новый UDF, генерируется View, который извлекает только эти данные и анализирует их в соответствии с указанным типом. Элементы, которые не соответствуют критериям анализа, возвращают NULL.
Создайте несколько таблиц UDF, по одной на тип данных. Таким образом, у нас будут таблицы для UDFStrings, UDFDates и т. Д. Вероятно, мы сделаем то же самое, что и # 2, и автоматически создадим View при каждом добавлении нового поля
XML DataTypes? Я не работал с ними раньше, но видел, как они упоминались. Не уверен, что они дадут мне результаты, которые я хочу, особенно с производительностью.
Что-то другое?