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