Вопрос

Я заметил, что многие люди здесь цитируют столы с 20+ (я видел столько же 55) столбцов в одной таблице. Теперь я не притворяюсь экспертом дизайна базы данных, но я всегда слышал, что это ужасная практика. Когда я вижу это, я обычно предлагаю разделить на две таблицы с одним до одной связи: один, содержащий наиболее часто используемые данные, другие с наименее часто используемыми данными. Хотя в то же время есть возможный выпуск производительности (меньше присоединений и таких). Итак, мой вопрос это:

Когда дело доходит до действительно крупных баз данных, существует ли преимущество в большом количестве столбцов, несмотря на то, что это обычно приводит к многим нулевым значениям?

Что это больше возможностей производительности: много колонн с большим количеством ноль или меньшем количества колонн с большим количеством присоединений?

Это было полезно?

Решение

Конструкция таблицы зависит от объекта, которую он должен хранить. Если все данные принадлежат вместе, то 50 столбцов (или даже 100) могут быть правильной вещью.

Пока столик нормализовано, нет правила большого пальца в отношении размера, кроме возможностей базы данных и необходимость оптимизации.

Другие советы

Я согласен с Одедом. Я видел таблицы с 500 колоннами в них, и все столбцы в них были в правильном месте. Просто рассмотрим количество фактов, которые можно было бы пожелать хранить о повседневном объекте, и вы скоро увидите, почему.

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

Сколько столбцов слишком много столбцов?

Когда вы чувствуете, что это больше не имеет смысла или имеет право добавить еще один столбец.

Обычно зависит от применения.

ODBC имеет ограничение символов 8000 .... Так что это физический предел, помимо того, что все становится очень расстраивающим.

Я работал на столе, имел 138 столбцов .. Это было ужасно написано и могло быть нормализовано. Хотя эта база данных, по-видимому, было созданию того, что кому-то интересно, почему в дизайне базы данных есть конвенции в базе данных и решите тестировать их все сразу.

Наличие очень широких сплющенных таблиц довольно распространены, когда вы попадаете в хранилище данных и отчетные серверы. Они намного быстрее и означают, что вам не нужно хранить свою базу данных Entirley в RAM для производительности.

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

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

Каждый проект, который я работал, отличается, так что вы должны найти баланс для каждой истории.

Имея слишком много столбцов, приводит к тому, что многие нули (злые) и громоздкий объект стол сопоставлен на. Это больно читабельность в IDE и препятствует обслуживанию (увеличение расходов на разработку). Если вам нужно быстро читать в некоторых случаях, используйте денормализованные таблицы, например, используемые исключительно для отчетности или запросов (поиск картины «CQRS»). Да «Человек» имеет миллион атрибутов, но вы можете сломать эти монотичные таблицы (дизайн предыдущие нормализации), чтобы соответствовать меньшим объектам («адрес,« телефон »,« хобби ») вместо добавления новых столбцов для каждого нового корпуса использования. Наличие меньших размеров объектов (и таблиц) приносит так много преимуществ; Они позволяют вещам, как тестирование подразделения, OOP и прочные практики.

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

Что это больше возможностей производительности: много колонн с большим количеством ноль или меньшем количества колонн с большим количеством присоединений?

Он чисто зависит от хранения данных, которые вы делаете, индексы, которые вы делаете и так далее. Никто не может убедиться, что кто-то работает лучше, чем другой, не зная, что вы храните. Обычно правила нормализации «заставляют» вы отделите данные для разных таблиц и пользователей FKEYS, если у вас есть большой стол, но я не согласен, что он всегда работает лучше, чем один большой стол. Вы можете заканчиваться на 6-7 уровнях в десятках запросов, которые иногда вызовут ошибки, потому что там гораздо больше шансов создать ошибку в более крупных запросах, которые в простых.

Если вы разместите некоторые требования к тому, что вы делаете, может быть, мы можем помочь вам в разработке БД правильно.

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

В мире NO-SQL (например, Cassandra / HBase) нет ограничений на количество столбцов, и он на самом деле считается хорошей практикой, чтобы иметь много столбцов. Это также происходит от того, как он хранится (без пробелов). Стоит во время расследования.

Какие необходимые бизнес требуется более 60 столбцов в любом наборе данных, не говоря уже о TSQL? Если есть такое деловое необходимость, то поворачивается в порядке, а столбцы должны быть строки. Например, в горнодобывающей промышленности могут содержать 600 различных измерений, предпринятых в анализе. Имя каждого измерения может быть именем столбца. Но зачем создать таблицу с 600 столбцами и рядами измерений? Геолог измерял бы шахту каждый день, возможно, и заполнил журнал 600 столбцов на одну строку. Это звучит для меня, как геолог, потеряет свой разум, и он не найдет лист бумаги достаточно долго. Возможно, рулон будет работать, но потом ему придется развернуть рулон и снова свернуть его снова.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top