Даже если вы предоставляете пользователю добавление пользовательских столбцов, это не обязательно означает, что запросы к этим столбцам будут работать хорошо.Есть много аспектов, которые входят в дизайн запросов, которые позволяют им работать хорошо, наиболее важным из которых является правильная спецификация того, что должно храниться в первую очередь.Таким образом, по сути, хотите ли вы позволить пользователям создавать схемы, не задумываясь о спецификациях, и иметь возможность быстро получать информацию из этой схемы?Если это так, то маловероятно, что любое такое решение будет хорошо масштабироваться, особенно если вы хотите позволить пользователю выполнять численный анализ данных.
Опция 1
ИМО, этот подход дает вам схемуне зная, что означает схема, которая является рецептом катастрофы и кошмаром для разработчиков отчетов.То есть вы должны иметь метаданные, чтобы знать, в каком столбце хранятся какие данные.Если эти метаданные будут испорчены, это может привести к потере данных.Кроме того, это позволяет легко помещать неправильные данные в неправильный столбец.(«Что? String1 содержит название монастыря? Я думал, что это были любимые наркотики Чали Шин».)
Вариант 3,4,5
ИМО, требования 2, 3 и 4 исключитьлюбая вариация EAV.Если вам нужно запросить, отсортировать или выполнить вычисления на основе этих данных, EAV - это мечта Ктулху и кошмар вашей команды разработчиков и администратора баз данных.EAV создаст узкое место с точки зрения производительности и не обеспечит вам целостность данных, необходимую для быстрого доступа к необходимой информации.Запросы быстро превратятся в кросс-таблицы узлов Гордиана.
Вариант 2,6
Это действительно оставляет один выбор: собрать спецификации, а затем построить схему.
Если клиенту нужна максимальная производительность для данных, которые он хочет сохранить, ему необходимо пройти через процесс работы с разработчиком, чтобы понять их потребности, чтобы они сохранялись максимально эффективно.Он все еще может храниться в таблице отдельно от остальных таблиц с кодом, который динамически формирует форму на основе схемы таблицы.Если у вас есть база данных, которая допускает расширенные свойства для столбцов, вы даже можете использовать их, чтобы помочь построителю форм использовать красивые метки, всплывающие подсказки и т. Д., Чтобы все, что было необходимо, - это добавить схему.В любом случае, для эффективного создания и запуска отчетов данные должны храниться надлежащим образом.Если в рассматриваемых данных будет много нулей, некоторые базы данных могут хранить информацию такого типа.Например, SQL Server 2008 имеет функцию под названием «Разреженные столбцы», специально для данных с большим количеством нулей.
Если бы это был только пакет данных, для которых не нужно было выполнять анализ, фильтрацию или сортировку, я бы сказал, что некоторые вариации EAV могут помочь.Однако с учетом ваших требований наиболее эффективным решением будет получение правильных спецификаций, даже если вы храните эти новые столбцы в отдельных таблицах и динамически формируете формы из этих таблиц.
Разреженные столбцы