Нарушение 3NF, если мы используем автоматически увеличивающийся столбец идентификаторов вместе с PK
Как сказано в книге "Решения для баз данных", второе издание, написанной Томасом Коннолли и Кэролин Бегг, стр. 180:
Третья нормальная форма (3NF)
Таблица, которая уже находится в 1NF и 2NF и в которой значения во всех столбцах не первичного ключа могут быть получены только из столбцов первичного ключа и без других столбцов.
Я видел много сценариев, когда люди используют столбец идентификаторов, хотя у них уже есть столбец первичного ключа в их таблице. Запись также может быть обработана из столбца идентификаторов, поэтому не является ли это нарушением 3NF, если мы используем автоматически увеличивающийся столбец идентификаторов вместе с первичным ключом в таблице?
ОБНОВЛЕНИЕ: Если это не так, на какой столбец следует ссылаться как на внешний ключ в другой таблице. Столбец первичного ключа или столбец Identity?
3 ответа
Эта книга "Решения для баз данных: пошаговое руководство по созданию баз данных", 2-е издание 2004 года, - беспорядок. К сожалению, это говорит о неправильных вещах, вводит в заблуждение, и многие из их формулировок чрезвычайно плохи - как, например, "работа"- что является неформальным и никогда не определяется.
Третья нормальная форма (3NF)
Таблица, которая уже находится в 1NF и 2NF и в которой значения во всех столбцах не первичного ключа могут быть получены только из столбцов первичного ключа и без других столбцов.
Это неправильное определение на самом деле предназначено, чтобы быть неформальным и когда таблица имеет только один CK (ключ-кандидат). Но в книге об этом не говорится, за исключением косвенного и более позднего, когда она дает другое неправильное определение, касающееся PK (первичных ключей):
Формальное определение для третьей нормальной формы (3NF) - это таблица, которая находится в первой и второй нормальных формах и в которой столбец без первичного ключа транзитивно зависит от первичного ключа.
Позже он говорит, что может быть несколько CK, но все равно дает неправильное определение:
Следовательно, для таблиц с более чем одним ключом-кандидатом вы можете использовать обобщенное определение для 3NF, который представляет собой таблицу в 1NF и 2NF и в которой значения во всех столбцах, не относящихся к первичному ключу, могут быть получены только из ключевые столбцы-кандидаты и других столбцов нет.
Неверно говорится "столбцы первичного ключа", где простые столбцы, то есть столбцы CK, будут правильными.
В другой их книге "Системы баз данных, 4-е издание 2005" также представлены особые случаи определений того, когда существует только один CK, не говоря об этом, а затем даются "общие" определения. По крайней мере, те, которые получают "главный атрибут" правильно.
Общее определение для третьей нормальной формы (3NF) - это отношение, которое находится в первой и второй нормальной форме, в котором ни один атрибут ключа-кандидата не является транзитивно зависимым от ключа-кандидата.
Нет ничего необычного в таблице с несколькими CK в любой нормальной форме.
Нет. В "официальной" формулировке определения 3NF обычно используется термин "первичный атрибут" или "непростой атрибут". Если ваша книга предполагает, что это означает "атрибут первичного ключа", то выбросьте свою книгу в мусорное ведро. Это неверно. "основной атрибут" означает "атрибут, который является частью ЛЮБОГО из ключей", а "непростой атрибут" означает "атрибут, который не является частью ЛЮБОГО из ключей". Таким образом, введение в схему отношений вашего вида "атрибута автоинкремента" (и всех применимых FD, которые сделают его ключом) не может привести к нарушению 3NF, потому что не будет вводить непростой атрибут.
Абзац, который вы цитировали, неверен или, по крайней мере, настолько неформален, что бесполезен в качестве объяснения.
Отношение R находится в третьей нормальной форме, если оно находится во второй нормальной форме и каждый непростой атрибут R не является транзитивно зависимым от каждого ключа-кандидата в R.
Кодд Е. Ф., "Дальнейшая нормализация реляционной модели базы данных"
Ключи-кандидаты имеют значение. Нет ничего плохого в том, что у таблицы более одного ключа.