Максимальное количество столбцов в таблице - PullRequest
5 голосов
/ 11 января 2010

Проблема 1: Какое максимальное количество столбцов мы можем иметь в таблице

Проблема 2: Какое максимальное количество столбцов у нас должно быть в таблице

Ответы [ 5 ]

9 голосов
/ 11 января 2010

Ответ 1: Вероятно, больше, чем у вас, но не больше, чем вы будете иметь.

Ответ 2: Меньше, чем у вас.

Задание этих вопросов обычно указывает на то, что вы не разработали таблицу должным образом. Вы, вероятно, практикуете антипаттерн Метаданные Триббл . Столбцы имеют тенденцию накапливаться с течением времени, создавая неограниченный набор столбцов, в которых в основном хранятся данные одного типа. Например. subtotal1, subtotal2, subtotal3 и т. Д.

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

CREATE TABLE Subtotals (
  entity_id    INT NOT NULL,
  year_quarter SMALLINT NOT NULL, -- e.g. 20094
  subtotal NUMERIC(9,2) NOT NULL,
  PRIMARY KEY (entity_id, year_quarter),
  FOREIGN KEY (entity_id) REFERENCES Entities (entity_id)
);

Мой бывший коллега также написал блог об этом:

Понимание максимального количества столбцов в таблице MySQL

Ответ не так прост, как вы думаете.

7 голосов
/ 11 января 2010

SQL 2000: 1024

SQL 2005: 1024

SQL 2008: 1024 для неширокой таблицы, 30 КБ для широкой таблицы.

Широкие таблицы предназначены для использования в SQL 2008 новой функции разреженных столбцов, которая предназначена для случаев, когда у вас есть большое количество столбцов, которые обычно пусты.

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

1 голос
/ 11 января 2010

2) Существует множество рекомендаций. В частности, в отношении нормализации базы данных. Главным принципом всегда является способность адаптироваться. Как и в классах, таблицы с большим количеством столбцов не очень гибки. Некоторые из вопросов, которые вы должны задать себе:

  • Описывает ли столбец A атрибут объекта (таблицы), который можно / нужно сгруппировать с помощью столбца B
  • Обновление данных. Имейте в виду, что большинство СУБД выполняет блокировку строки при обновлении значений. Это означает, что если вы постоянно обновляете столбец A, в то время как другой процесс обновляет столбец B, они будут бороться за строку, что приведет к конфликту.

Дизайн базы данных - это искусство, а не наука. Хотя руководящие указания и технические ограничения приведут вас в правильном направлении, не существует жестких правил, которые бы заставили вашу систему работать или дать сбой на 100%.

1 голос
/ 11 января 2010

1) http://msdn.microsoft.com/en-us/library/aa933149%28SQL.80%29.aspx

1024 кажется пределом.

2) Намного меньше, чем 1024 :). Серьезно, это зависит от того, насколько нормализуется ваша БД. Как правило, чем меньше у вас столбцов в таблице, тем легче будет понять (обычно). Как и для таблицы person, вы можете захотеть сохранить адрес этого человека в другой таблице (например, person_address). Лучше всего разбить ваши данные на сущности, которые имеют смысл для вашей бизнес-модели, и перейдите оттуда.

0 голосов
/ 11 января 2010
  1. Я думаю, что 4096 в MySQL, SQL Server я не знаю
  2. Я задавал тот же вопрос несколько месяцев назад в особом сценарии, возможно, ответы помогут вам решить. Обычно, как можно меньше, я бы сказал.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...