Лучший способ создать таблицу данных для неизвестного количества столбцов? - PullRequest
0 голосов
/ 06 апреля 2011

Я пытаюсь создать структуру таблицы данных, которая будет наилучшим образом поддерживать следующие критерии:

1) Я не знаю, сколько столбцов должна иметь таблица.

  • Мне может понадобиться 6 столбцов в некоторых случаях или 10 в других. Я не ожидаю, что этой таблице когда-либо понадобится 20 или более столбцов, но я также не могу гарантировать, что она никогда не понадобится.

2) Мне нужно учитывать объем памяти и скорость создания отчетов.

  • В этой таблице должны храниться миллионы записей, и отчеты будут выполняться по этой таблице. Я знаю, что с точки зрения отчетности трудно развернуть сильно нормализованные таблицы, поэтому я хочу отменить нормализацию для отчетов. Но я также не знаю, является ли хорошей идеей простое использование по умолчанию некоторого большого количества столбцов во избежание некоторой нормализации, потому что я, вероятно, в конечном итоге получу множество NULLS во многих столбцах в конце таблицы, и все они (я думаю) займут некоторое количество места для хранения.

3) Если мне придется выбирать между объемом памяти и производительностью отчета, я буду поддерживать производительность.

Я не эксперт Business Intelligence, и я не гуру T-SQL (я буду использовать SQL Server), и поэтому я уверен, что здесь есть тонкости, которые я просто упустил из виду. Таким образом, я снова обращаюсь к блестящему SO-сообществу за советом, и чтобы какой-то смысл врезался в мой толстый череп.

Как бы вы спроектировали стол в этих обстоятельствах? Какие детали я упускаю и все еще нужно рассмотреть?

Ответы [ 2 ]

6 голосов
/ 06 апреля 2011

Столбцы таблицы представляют спецификации объекта, который будет сохранен.Сказать, что вы не знаете, сколько столбцов будет храниться, значит, вы не знаете спецификацию того, что будет храниться.Иными словами, вы хотите построить систему, не зная, что она будет хранить.Реляционные базы данных принципиально не предназначены для обработки этого , а также для обеспечения хорошей работы и поддержки .Для обеспечения хорошей работы и поддержки обслуживания реляционные базы данных полагаются на то, чтобы тратить время на определение характера сущности, которая будет сохранена и ее атрибутов, а затем на построение соответствующей схемы.

Таким образом, наилучшее и наиболее поддерживаемое решение, использующеереляционная база данных предназначена для построения схемы так, как она требуется, что означает сбор спецификаций о том, что должно храниться по мере необходимости.

Тем не менее, существуют альтернативы реляционным базам данных, такие как так называемые базы данных "nosql", которые могут удовлетворить потребность в сверхупругом дизайне лучше, чем реляционная база данных.Примеры этого включают MongoDB и CouchDB.

3 голосов
/ 06 апреля 2011

Большинство схем типовых таблиц, в которых значения столбцов выбираются на основе пользовательских настроек /, приводят к низкой производительности, поскольку все запросы будут динамическими.

Разумно было бы сделать оценку числа столбцов и позволить неиспользованным столбцам быть нулевыми изначально.

Можете ли вы привести пример того, для чего предназначен ваш рассказ? Один из примеров, который поднимает этот вопрос, - это когда у вас есть таблица продуктов, а у некоторых продуктов есть только 5 атрибутов, а у некоторых - 50. Как я уже говорил выше, вам лучше создать таблицу с 50 столбцами (если вы хотите иметь один таблица продуктов) и наличие других столбцов, как ноль, где это необходимо.

Инструменты отчетности и большинство СУБД хорошо справляются со значениями NULL во время агрегации и группировки.

...