Как создать базу данных для пользовательских полей?

Мои требования:

  • Необходимо иметь возможность динамически добавлять определяемые пользователем поля любого типа данных
  • Необходимо иметь возможность быстро запрашивать пользовательские функции
  • Необходимо уметь выполнять вычисления на основе UDF на основе типа данных
  • Необходимо уметь сортировать UDF на основе типа данных

Другая информация:

  • В первую очередь я ищу производительность
  • Существует несколько миллионов основных записей, к которым могут быть прикреплены данные UDF
  • Когда я в последний раз проверял, в нашей текущей базе данных было более 50 миллионов записей UDF
  • Большую часть времени UDF прикрепляется только к нескольким тысячам основных записей, не все из них
  • UDF не объединяются или не используются в качестве ключей. Это просто данные, используемые для запросов или отчетов

Опции:

  1. Создать большую таблицу с помощью StringValue1, StringValue2 ... IntValue1, IntValue2, .. и т. д. Я ненавижу эту идею, но рассмотрю ее, если кто-то скажет мне, что она лучше других и почему.

  2. Создать динамическую таблицу, которая добавляет новый столбец по требованию. Мне также не нравится эта идея, поскольку я чувствую, что производительность будет низкой, если вы не проиндексировали каждый столбец.

  3. Создать одну таблицу, содержащую UDFName, UDFDataType и Value. Когда добавляется новый UDF, генерирует View, который извлекает только эти данные и анализирует их в соответствии с указанным типом. Элементы, не соответствующие критериям анализа, возвращают NULL.

  4. Создать несколько таблиц UDF, по одной на тип данных. Таким образом, у нас будут таблицы для UDFStrings, UDFDates и т. Д. Вероятно, будет сделано то же самое, что и для # 2, и автоматически генерировать представление при каждом добавлении нового поля

  5. XML DataTypes? Я не работал с ними раньше, но видел, как они упоминались. Не уверен, что они дадут мне результаты, которые я хочу, особенно с производительностью.

  6. Что-то еще?

138
задан Zoe 5 November 2018 в 17:17
поделиться