Нормализация: что означает "повторяющиеся группы"?
Я читал разные учебники и видел разные примеры нормализации, особенно понятие "повторяющиеся группы" в первой нормальной форме. Из них я понял, что повторяющиеся группы являются "своего рода" многозначными атрибутами (например, здесь и здесь).
Но мы уже создаем отдельные таблицы для каждого многозначного атрибута, включая внешние ключи из родительской таблицы в процессе сопоставления ERM (модель отношения сущностей) к RDM (реляционная модель данных)? Ссылка: это
Во-вторых, являются ли эти "повторяющиеся группы", по существу, горизонтальными в одной и той же строке, или же одно и то же значение, встречающееся в одном и том же столбце снова и снова, то есть одно и то же значение атрибута снова и снова, также является повторяющейся группой и должно быть исключено?
В этом примере значение English повторяется снова и снова. Это повторяющаяся группа? Если я исключу его, чтобы сделать другую таблицу SUBJECT с именем субъекта и Module_ID(внешний ключ), это то, что я получаю. Конечно, это избавляет от повторяющегося значения, но я не уверен, что это правильно. Это правильно?
2 ответа
Термин "повторяющаяся группа" первоначально означал концепцию в языках на основе CODASYL и COBOL, где одно поле может содержать массив повторяющихся значений. Когда EFCodd описал свою первую нормальную форму, это было то, что он имел в виду под повторяющейся группой. Концепция не существует ни в одной современной реляционной или основанной на SQL СУБД.
Термин "повторяющаяся группа" также стал использоваться неформально и неточно разработчиками базы данных для обозначения повторяющегося набора столбцов, то есть набора столбцов, содержащих аналогичные значения в таблице. Это отличается от своего первоначального значения по отношению к 1NF. Например, в случае таблицы с именем Семейства со столбцами с именами Parent1, Parent2, Child1, Child2, Child3 и т. Д. Коллекция столбцов Child N иногда называется повторяющейся группой и предполагается, что она нарушает даже 1NF. хотя это не повторяющаяся группа в том смысле, который намеревался сделать Кодд.
Этот последний смысл так называемой повторяющейся группы технически не является нарушением 1NF, если каждый атрибут только однозначный. Сами атрибуты не содержат повторяющихся значений, и поэтому по этой причине нарушения 1NF не происходит. Однако такой дизайн часто считается антишаблоном, поскольку он ограничивает таблицу заранее определенным фиксированным числом значений (максимум N дочерних элементов в семье), а также заставляет повторять запросы и другую бизнес-логику для каждого из столбцов. Другими словами, это нарушает принцип " СУХОГО" дизайна. Поскольку это обычно считается плохим дизайном, разработчикам баз данных, а иногда даже учителям рекомендуется называть повторяющиеся столбцы такого рода "повторяющейся группой" и нарушением духа Первой нормальной формы.
Такое неформальное использование терминологии несколько неудачно, потому что оно может быть немного произвольным и запутанным (когда набор столбцов фактически представляет собой повторение?), А также потому, что это отвлекает от более фундаментальной проблемы, а именно от проблемы Null. Все Нормальные Формы связаны с отношениями, которые не допускают возможности нулевых значений. Если в каком-либо столбце таблица допускает пустое значение, она не соответствует требованиям схемы отношений, удовлетворяющей 1NF. В случае нашей таблицы "Семейства", если столбцы "Дочерние элементы" допускают пустые значения (для представления семей, у которых меньше N детей), то таблица "Семейства" не удовлетворяет 1NF. Возможность нулевых значений часто забывают или игнорируют в упражнениях по нормализации, но избегание ненужных обнуляемых столбцов - одна из очень веских причин избегать повторяющихся наборов столбцов, независимо от того, называете ли вы их "повторяющимися группами".
Смотрите также эту статью.
значение английского повторяется снова и снова. Это повторяющаяся группа?
Нет. Многократные появления английского языка в 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. А именно, являются ли некоторые из его столбцов функциями других (функциональные зависимости) и являются ли его строки также теми, где "..." И "..." (объединение зависимостей).
Задавая возможную декомпозицию, вы сказали, что это также строки, в которых "... [Subject_Name]...[Module_ID]..." AND "... [Module_Name]...[Module_ID]..." And Вы привели пример разложения данных. Но мы знаем только, что он может быть настолько разложен, потому что вы добавили разложение. И данных декомпозиции плюс еще недостаточно для того, чтобы мы знали, следует ли их декомпозировать.
Я читал разные учебники и видел разные примеры нормализации, особенно понятие "повторяющиеся группы" в первой нормальной форме.
"Повторяющиеся группы" - это что-то из пред-реляционных баз данных, и они не могут появляться в реляционной таблице (отношении). Они похожи на именованный набор значений, который похож на поле записи, но не совсем. Реляционная таблица всегда в 1NF. Каждый столбец строки имеет одно значение типа столбца. Нереляционная база данных "нормализуется" к таблицам, т.е. 1NF (первое значение "нормализовано"), которая избавляет от повторяющихся групп. Затем эти таблицы / отношения "нормализуются" к более высоким нормальным формам (второе чувство "нормализуется").
Реляционная таблица, имеющая несколько одинаковых столбцов или имеющая тип столбца с несколькими одинаковыми частями, каждая из них просто напоминает наличие повторяющейся группы в нереляционной базе данных. И несколько столбцов и частей должны стать несколькими строками в отдельной таблице, точно так же, как несколько членов повторяющейся группы. Но эти проблемы имеют отношение к качеству реляционного дизайна, а не к повторяющимся группам или нормализации (в любом смысле) или к реляционности (т. Е. В 1NF).
Обратите внимание, что нереляционная база данных сама по себе может иметь похожие проблемы с несколькими одинаковыми полями и / или именованными наборами или с несколькими похожими частями значений полей. Нормализация к таблицам не избавляет от них, когда избавляется от повторяющихся групп.
Независимо от того, как они попали в реляционный дизайн, удаление их дает "лучший" дизайн. Просто потому, что эти проблемы проектирования напоминают повторяющиеся группы, люди запутываются и воображают, что каким-то образом таблица может содержать повторяющуюся группу. Таким образом, несколько похожих столбцов и значений с несколькими одинаковыми частями (или частями) неправильно называются "повторяющимися группами".
Смотрите этот ответ о "атомности".