Нормализация: что означает "повторяющиеся группы"?

Я читал разные учебники и видел разные примеры нормализации, особенно понятие "повторяющиеся группы" в первой нормальной форме. Из них я понял, что повторяющиеся группы являются" своего рода " многозначными атрибутами (например,здесь и здесь).

но мы уже делаем отдельные таблицы для каждого многозначного атрибута, включая внешние ключи из родительской таблицы в процессе сопоставления ERM (Entity relationship Модель) к RDM (реляционная модель данных)? Ссылка: этой

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

enter image description here В этом примере значение English повторяется снова и снова. Это повторяющаяся группа? если я устраните его, чтобы сделать другую тему таблицы с именем темы и Module_ID (внешний ключ), это то, что я получаю. Конечно, он избавляется от повторяющегося значения, но я не уверен, что это правильно. Правильно ли это? enter image description here

2 ответов


термин "повторяющаяся группа" первоначально означал концепцию в языках на основе CODASYL и COBOL, где одно поле может содержать массив повторяющихся значений. Когда Э. Ф. Кодд описывал свою первую нормальную форму, он имел в виду повторяющуюся группу. Концепция не существует ни в одной современной реляционной или SQL-СУБД.

термин "повторяющаяся группа" также стал использоваться неофициально и неточно дизайнерами баз данных, чтобы означать повторение набор колонки, что означает коллекцию столбцов, содержащих аналогичные типы значений в таблице. Это отличается от его первоначального значения по отношению к 1NF. Например, в случае таблицы, называемой семействами со столбцами Parent1, Parent2, Child1, Child2, Child3, ... etc коллекция ребенка N столбцы иногда называют повторяющейся группой и предполагают, что они нарушают 1NF, даже если это не повторяющаяся группа в том смысле, что Codd предназначенный.

этот последний смысл так называемой повторяющейся группы технически не является нарушением 1NF, если каждый атрибут имеет только одно значение. Сами атрибуты не содержат повторяющихся значений, и поэтому по этой причине нет нарушения 1NF. Однако такой дизайн часто считается анти-шаблоном, поскольку он ограничивает таблицу предопределенным фиксированным числом значений (максимум N детей в семье) и поскольку он заставляет запросы и другую бизнес-логику быть повторяется для каждой колонки. Другими словами, он нарушает "сухой принцип" дизайна. Поскольку это обычно считается плохим дизайном, это подходит дизайнерам баз данных, а иногда даже учителям, чтобы ссылаться на повторяющиеся столбцы такого рода как "повторяющаяся группа" и нарушение духа первой нормальной формы.

это неофициальное использование терминологии немного неудачно, потому что оно может быть немного произвольным и запутанным (когда на самом деле набор столбцов это повторение?) а также потому, что это отвлечение от более фундаментальной проблемы, а именно от нулевой проблемы. Все нормальные формы связаны с отношениями, которые не допускают возможности нулей. Если таблица допускает значение null в любом столбце, то она не отвечает требованиям схемы отношений, удовлетворяющей 1NF. В случае нашей таблицы "семьи", если дочерние столбцы разрешают нули (представлять семьи, у которых меньше N детей), то таблица "семьи" не удовлетворяет 1НФ. Возможность нулей часто забывается или игнорируется в упражнениях нормализации, но избегание ненужных столбцов с нулевыми значениями является одной из очень веских причин избегать повторяющихся наборов столбцов, независимо от того, называете ли вы их "повторяющимися группами".

см. также в этой статье.


значение English повторяется снова и снова. Это повторять группа?

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

Если SUBJECT_MODULE-это строки, где " [SUBJECT_NAME] имеет [MODULE_NAME], идентифицированный [MODULE_ID]", и у субъекта может быть более одного модуля, то где-то вы должны есть несколько упоминаний этой темы (возможно, через ее имя) с упоминаниями различных модулей (возможно, по имени или идентификатору). Это не предполагает избыточности.

Student Age Subject

Adam    15  Biology
Adam    15  Maths
Alex    14  Maths
Stuart  17  Maths

избыточность в этом примере из второго вашего вопроса"этой" ссылка не в том, что Адам появляется в двух рядах или что Адам появляется с 15 в двух рядах. Дело в том, что если в таблице есть строки, где "[студент] - [возраст] лет и принимает [предмет]", то студент (например, Адам) может появиться в нескольких строках но всегда появляется с тем же возрастом (например, 15). Но если бы в таблице были строки, где "[студент] имеет друга [возраст] лет в [теме]", то таблица уже могла бы быть полностью нормализована.

конечно, он избавляется от повторяющегося значения, но я не уверен, что это правильная вещь.

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

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

давая возможное разложение, вы сказали, что это также строки, где"...[имя субъекта.]..[Module_ID]..." И." ..[имя модуля.]..[Module_ID]...- И вы привели несколько примеров декомпозиции. Но мы только знаем, что это мог бы быть таким разложенным, потому что вы добавили разложение. И декомпозиция плюс данные по-прежнему недостаточно для нас, чтобы знать, является ли это должны превратиться в жижу.

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

"повторяющиеся группы" являются чем-то из дореляционных баз данных и не могут отображаться в реляционной таблице (отношение). Они похожи на именованный набор значений, который похож на поле рекорд, но не совсем. Реляционная таблица всегда находится в 1NF. Каждый столбец строки имеет одно значение типа столбца. Нереляционная база данных " нормализуется "в таблицы ie 1NF (первый смысл" нормализован"), который избавляется от повторяющихся групп. Затем эти таблицы / отношения " нормализуются "до более высоких нормальных форм (Второе значение"нормализовано").

реляционная таблица, имеющая несколько одинаковых столбцов или имеющая тип столбца с несколькими похожими частями, - это просто напоминает наличия повторяющейся группы в нереляционной базе данных. И несколько столбцов и частей должны стать несколькими строками в отдельной таблице, как и несколько членов повторяющейся группы. Но эти проблемы имеют отношение к relational качество конструкции, не повторяющиеся группы или нормализация (в любом смысле) или реляционные (т. е. находящиеся в 1NF).

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

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

посмотреть этот ответ re "атомарность".