Слишком много столбцов в одной таблице - это хорошая нормальная форма? - PullRequest
3 голосов
/ 03 февраля 2009

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

Ответы [ 5 ]

11 голосов
/ 03 февраля 2009

Есть ли связь между количество столбцов и хороший процесс нормализации?

Короче, нет. Нормализованная таблица 3NF будет иметь столько столбцов, сколько необходимо, при условии, что

данные в таблице зависят на ключе, весь ключ, и ничего но ключ (так помогите мне, Кодд).

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

10 голосов
/ 03 февраля 2009

Вы должны следовать принципам нормализации, а не заботиться о количестве столбцов в таблице. Бизнес-требования будут определять сущности, их атрибуты и их отношения, и никакое абсолютное число не является «правильным».

4 голосов
/ 03 февраля 2009

Вот подход, который вы можете использовать, если чувствуете, что в вашей таблице слишком много полей. Пример: - * +1001 *

CREATE TABLE Person
    Person_ID int not null primary key,
    Forename nvarchar(50) not null,
    Surname nvarchar(50) not null,
    Username varchar(20) null,
    PasswordHash varchar(50) null

В этой таблице представлены люди, но, очевидно, не все люди должны быть пользователями, поэтому поля «Имя пользователя» и «Пароль» могут быть пустыми. Однако возможно, что на 1 или 2 порядка больше людей, чем пользователей.

В таком случае мы могли бы создать таблицу User для хранения полей Username и PasswordHash с отношением один к одному с таблицей Person.

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

Редактировать

Благодаря Стефани (см. Комментарии) эту технику, по-видимому, называют «вертикальным разделением»

3 голосов
/ 03 февраля 2009

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

0 голосов
/ 03 февраля 2009

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

...