Какое правило нормализации это нарушает?

Предположим, у меня есть две таблицы в базе данных, T10 и T11, имеющие 10 и 11 столбцов соответственно, где 10 столбцов в обоих случаях абсолютно одинаковы.

Какое (если есть) правило нормализации я нарушаю?


person Otávio Décio    schedule 04.03.2010    source источник
comment
это не будет чем-то вроде: TableX с 10 столбцами и TableXHistoryLog с 10 столбцами + столбец ChangeDate (11 столбцов) ??   -  person KM.    schedule 04.03.2010


Ответы (8)


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

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

person Alison R.    schedule 04.03.2010
comment
Что, если все 10 столбцов являются ключевыми? - person DVK; 04.03.2010
comment
Я думаю, что единственный способ оказаться в 3NF, если бы все десять столбцов были ключами в первой таблице, был бы, если бы все одиннадцать столбцов были ключами во второй, так что мы бы говорили о разных сущностях, а не тот же объект (таблица 1) и тот же объект (таблица 2) плюс один атрибут. - person Alison R.; 04.03.2010
comment
Спасибо всем, кто ответил, это действительно похоже на нарушение 3rdNF. - person Otávio Décio; 04.03.2010
comment
Если бы все 10 столбцов были ключами, вам все равно не понадобились бы две таблицы, потому что они все еще дублируются в обеих таблицах. - person Jonathan Czitkovics; 05.03.2010
comment
@AlisonR.: не могли бы вы рассказать об этом подробнее, пожалуйста? Насколько я понимаю 3NF (на самом деле, любая нормальная форма), это применимо только к атрибутам в одном и том же отношении, поэтому наличие обеих таблиц в одной базе данных не повлияет на то, находится ли каждая из них в 3NF. - person outis; 09.01.2012
comment
@outis, я бы с уважением не согласился с этим утверждением. Процесс нормализации обязательно означает рассмотрение того, должны ли данные принадлежать тому или иному отношению. Само определение 3NF говорит о том, что атрибуты таблицы должны ссылаться на ее ключ и только на ее ключ. Если они ссылаются на ключ другой таблицы, то это не 3NF. - person Alison R.; 24.01.2012
comment
@AlisonR.: Я до сих пор этого не вижу. Насколько я понимаю, определение основано на зависимостях (а не на ссылках), а определение зависимости касается только атрибутов внутри одного и того же отношения. У вас есть время обсудить это в чате? - person outis; 24.01.2012
comment
@outis, почему бы не задать вопрос на dba.stackexchange.com? (И разместите здесь ссылку, чтобы мы могли участвовать и/или следить за новостями.) - person Alison R.; 25.01.2012
comment
@AlisonR.: Я сомневаюсь, потому что это (почти?) дубликат этого. Я полагаю, что это почему, а не что, чего может быть достаточно. Пожалуй, попробую, но с опасением, что его могут закрыть. - person outis; 25.01.2012
comment
@AlisonR.: один быстрый вопрос, который может прояснить ситуацию: вы говорите с точки зрения практики, а не теории? Это может быть причиной того, что у нас разное понимание 3NF. Если да, то есть ли у вас ссылка на определения, которые вы используете? Все, что мне удалось найти, либо определяет 3NF чисто теоретически, либо не дает точного определения, а (когда дело доходит до практики) использует только примеры разделения одной таблицы на две. - person outis; 25.01.2012
comment
@outis Да, я говорю с точки зрения практики. Я думаю, чем это обсуждение отличается от теории, как вы вкратце упомянули, так это тем, что теория подходит к нормализации с точки зрения взятия одной кучи данных и разделения ее на несколько таблиц. Эта дискуссия касается движения в противоположном направлении, в котором, если бы кто-то правильно следовал теории, не было бы необходимости, и поэтому теория не обращается к этому напрямую. Все мои ссылки в этом случае взяты из статей Википедии о нормализации, на которые я уже ссылался. - person Alison R.; 25.01.2012
comment
@ЭлисонР. Ни одна НФ не нарушена. Дизайн может возникнуть в таблицах 5NF или даже 6NF. Я думаю, вы говорите о нормализации с помощью декомпозиции, которая является всего лишь одной из процедур для получения дизайна в некоторой заданной НФ. Декомпозиция не является единственным методом и не является требованием теории нормализации. Синтез является одной из альтернатив. - person nvogel; 25.01.2012

Возможно, правило избегания избыточных данных? (т.е. одинаковые данные в двух таблицах)

person Ta01    schedule 04.03.2010

если 10 из 11 столбцов одинаковы, почему это не может быть просто одна таблица, где 11-й столбец оставлен пустым (наряду с возможным 12-м столбцом для обозначения типа данных, т.е. какой таблицы это было бы) в оригинале)?

person GSto    schedule 04.03.2010
comment
Поскольку хранение 5 значений в таблице строк 100M не является хорошей идеей с точки зрения хранения, например - person DVK; 04.03.2010
comment
Если две таблицы представляют разные вещи, это было бы плохой идеей. Каждая таблица должна представлять одну вещь или идею. - person redcayuga; 05.03.2010
comment
@redcayuga это зависит от того. если это действительно две разные вещи, почему 10 из 11 столбцов точно такие же? Можете ли вы привести пример, где это было бы так? - person GSto; 05.03.2010

Это зависит от того, что в таблицах.

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

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

person Larry Lustig    schedule 04.03.2010

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

person nvogel    schedule 25.01.2012

Если все 10 столбцов являются частью вашего ключа, то вторая нормальная форма: устранение избыточных данных. В частности, это подпадает под дилемму «Несуррогатные и суррогатные первичные ключи» — честно говоря, я не припомню, чтобы какой-либо из этих двух вариантов «нарушал» 2NF, но суррогатный ключ определенно ближе к духу 2NF.

person DVK    schedule 04.03.2010
comment
Таблица может удовлетворять или не удовлетворять 2НФ независимо от того, имеет она суррогатный ключ или нет. Я не вижу, чтобы суррогатные ключи были ближе к духу 2NF. - person nvogel; 27.03.2012

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

person Jonathan Czitkovics    schedule 04.03.2010

person    schedule
comment
DKNF - это то, в чем таблица находится или нет, независимо от ограничений на несколько таблиц. Интуитивно схема отношения находится в DK/NF, если каждое ограничение можно вывести, просто зная набор имен атрибутов и их базовых доменов, а также набор ключей. X-ограничение (или просто ограничение, если понимается X) — это отображение набора всех X-отношений в {ИСТИНА, ЛОЖЬ}. Прочтите статью Феджина. - person philipxy; 15.09.2015
comment
Также DKNF не находится в последовательности NF, ведущих к 5NF и 6NF. Это просто не имеет отношения к такой декомпозиции, основанной на NF и JD. PS Оказывается, нормализация к более высоким NF заключается не только в устранении аномалий обновления, потому что они исчезают по мере ETNF между 4NF и 5NF. - person philipxy; 27.09.2019