2. Первая нормальная форма (1NF)
2. Первая нормальная форма (1NF)
На ранних стадиях проектирования баз данных и разработки схем их управления использовались простые и однозначные атрибуты как наиболее продуктивные и рациональные единицы кода. Тогда применяли наряду с простыми и составные атрибуты, а также наряду с однозначными и многозначные атрибуты. Поясним значения каждого из этих понятий.
Составные атрибуты, в отличие от простых, – это атрибуты, составленные из нескольких простых атрибутов.
Многозначные атрибуты, в отличие от однозначных, – это атрибуты, представляющие множество значений.
Приведем примеры простых, составных, однозначных и многозначных атрибутов.
Рассмотрим следующую таблицу, представляющую отношение:
Здесь атрибут «Телефон» – простой, однозначный, а атрибут «Адрес» – простой, но многозначный.
Теперь рассмотрим другую таблицу, с другими атрибутами:
В этом отношении, представленном таблицей, атрибут «Телефоны» – простой, но многозначный, а атрибут «Адреса» – и составной, и многозначный.
Вообще возможны различные комбинации простых или составных атрибутов. В разных случаях таблицы, представляющие отношения, могут выглядеть следующим общим образом:
При нормализации схем базовых отношений программистами может быть использована одна из четырех наиболее распространенных видов нормальных форм: первая нормальная форма (1NF), вторая нормальная форма (2NF), третья нормальная форма (3NF) или нормальная форма Бойса – Кодда (NFBC). Поясним: сокращение NF – это аббревиатура от англоязычного словосочетания Normal Form. Формально, кроме вышеназванных, существуют и другие виды нормальных форм, но вышеназванные – одни из самых востребованных.
В настоящее время разработчики баз данных стараются избегать составных и многозначных атрибутов, чтобы не усложнять написание кода, не перегружать его структуру и не запутывать пользователей. Из этих соображений логически и вытекает определение первой нормальной формы.
Определение. Любое базовое отношение находится в первой нормальной форме тогда и только тогда, когда схема этого отношения содержит только простые и только однозначные атрибуты, причем обязательно с одной и той же семантикой.
Для наглядного объяснения различий нормализованных и ненормализованных отношений рассмотрим пример.
Пусть, имеется ненормализованное отношение, со следующей схемой.
Итак, вариант 1 схемы отношения с заданным на ней простым первичным ключом:
Сотрудники (№ табельный, Фамилия Имя Отчество, Код должности, Телефоны, Дата приема или увольнения);
Primary key (№ табельный);
Перечислим, какие в этой схеме отношения имеются ошибки, т. е. назовем те признаки, которые и делают собственно эту схему ненормализованной:
1) атрибут «Фамилия Имя Отчество» является составным, т. е. составленным из разнородных элементов;
2) атрибут «Телефоны» является многозначным, т. е. его значением является множество значений;
3) атрибут «Дата приема или увольнения» не имеет однозначной семантики, т. е. в последнем случае не понятно, какая именно дата внесена.
Если, например, ввести дополнительный атрибут, чтобы поточнее определить смысл даты, то для этого атрибута значение будет семантически понятно, но тем не менее остается возможность хранения только какой-то одной из указанных дат для каждого сотрудника.
Что же необходимо сделать для приведения этого отношения к нормальной форме?
Во-первых, необходимо провести разбиение составных атрибутов на простые, для того, чтобы исключить эти самые составные атрибуты, а также атрибуты с составной семантикой.
А во-вторых, необходимо провести декомпозицию этого отношения, т. е. нужно разбить его на несколько новых самостоятельных отношений, с тем чтобы исключить многозначные атрибуты.
Таким образом, с учетом всего вышесказанного после приведения отношения «Сотрудники» к первой нормальной форме или 1NF путем его декомпозиции мы получим систему следующих отношений с заданными на них первичными и внешними ключами.
Итак, вариант 2 отношения:
Сотрудники (№ табельный, Фамилия, Имя, Отчество, Код должности, Дата приема, Дата увольнения);
Primary key (№ табельный);
Телефоны (№ табельный, Телефон);
Primary key (№ табельный, Телефон);
Foreign key (№ табельный) references Сотрудники (№ табельный);
Итак, что мы видим? Составного атрибута «Фамилия Имя Отчество» больше в нашем отношении нет, вместо него присутствуют три простых атрибута «Фамилия», «Имя» и «Отчество», поэтому эта причина «ненормальности» отношения исключилась.
Кроме того, вместо атрибута с неясной семантикой «Дата приема или увольнения» у нас появилось два атрибута «Дата приема» и «Дата увольнения», каждый из которых имеет однозначную семантику. Следовательно, вторая причина того, что наше отношение «Сотрудники» не находится в нормальной форме, также благополучно устранена.
И, наконец, последняя причина того, что отношение «Сотрудники» не было приведено к нормальной форме, – это наличие многозначного атрибута «Телефоны». Чтобы избавиться от этого атрибута, и необходимо было провести декомпозицию всего отношения. Из исходного отношения «Сотрудники» в результате этой декомпозиции был исключен атрибут «Телефоны» вообще, но зато образовалось второе отношение – «Телефоны», в котором присутствуют два атрибута: «№ табельный» сотрудника и «Телефон», т. е. все атрибуты – опять-таки простые, условие принадлежности к первой нормальной форме выполняется. Эти атрибуты «№ табельный» и «Телефон» образуют составной первичный ключ отношения «Телефоны», а атрибут «№ табельный», в свою очередь, является внешним ключом, ссылающимся на одноименный атрибут отношения «Сотрудники», т. е. в отношении «Телефоны» атрибут первичного ключа «№ табельный» является одновременно внешним ключом, ссылающимся на первичный ключ отношения «Сотрудники». Таким образом, обеспечивается связь между этими двумя отношениями. Посредством этой связи можно по номеру табельному любого сотрудника без особого труда и затрат времени вывести весь список его телефонов, не прибегая к использованию составных атрибутов.
Заметим, что в случае наличия в отношении системы ограничений функциональных зависимостей после всех вышеприведенных преобразований нормализация не была бы завершена. Однако в данном конкретном примере нет ограничений функциональных зависимостей, поэтому дальнейшая нормализация этого отношения не требуется.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Краткая форма записи
Краткая форма записи Можно существенно упростить объявление перехода (в котором нет задержки), пользуясь свойством transition. Такой синтаксис будет использоваться во всех остальных примерах этой книги.a.foo { padding: 5px 10px; background: #9c3; -webkit-transition: background 0.3s ease; }a.foo: hover { background: #690; }Мы
Основная форма If...Then
Основная форма If...Then Оператор If ... Then выполняет некоторый блок программного кода, если условие, которое вы предложили этому оператору, принимает значение True, и не делает ничего, если условие принимает значение False. Синтаксис оператора следующий:If условие Then( операторы,
Строгая форма имени
Строгая форма имени Перед установкой компоновочного блока в GAC вы должны назначить компоновочному блоку строгое имя, которое уникальным образом идентифицирует издателя данного двоичного объекта .NET. При этом следует понимать, что "издателем" может быть и отдельный
3. Вторая нормальная форма (2NF)
3. Вторая нормальная форма (2NF) Более сильные требования накладывает на отношения вторая нормальная форма, или 2NF.Это происходит потому, что определение второй нормальной формы отношений предполагает, в отличие от первой нормальной формы, наличие системы ограничений
4. Третья нормальная форма (3NF)
4. Третья нормальная форма (3NF) Следующей нормальной формой, которую мы подвергнем рассмотрению, является третья нормальная форма (или 3NF). В отличие от первой нормальной формы, так же как и вторая нормальная форма, третья – подразумевает задание вместе с отношением системы
5. Нормальная форма Бойса – Кодда (NFBC)
5. Нормальная форма Бойса – Кодда (NFBC) Нормальная форма Бойса – Кодда следует по «сложности» сразу после третьей нормальной формы. Поэтому нормальную форму Бойса – Кодда еще иногда называют просто усиленной третьей нормальной формой (или усиленной 3 NF). Почему же она
Форма как графический объект
Форма как графический объект Каким образом можно скопировать форму в буфер обмена в виде графического изображения?uses clipbrd;procedure TShowVRML.Kopieren1Click(Sender: TObject);var bitmap:tbitmap;begin bitmap:=tbitmap.create; bitmap.width:=clientwidth; bitmap.height:=clientheight; try with bitmap.Canvas do CopyRect (clientrect,canvas,clientrect); clipboard.assign(bitmap); finally
Форма проекта
Форма проекта Нам понадобится форма с тремя страничками и тремя компонентами TMemo. В первом будет показываться исходный текст преобразуемого документа, во втором — XSLT-преобразование и в третьем — результат преобразования.Приблизительный внешний вид формы показан на
Форма букв
Форма букв Есть буквы (например, «п», «ш», «щ», «ч», «т», «и»), которые можно писать округленно или угловато. Восходящие и нисходящие штрихи этих букв некоторые соединяют полукруглыми линиями, такой почерк называется круглым. У других людей штрихи пересекаются между собой
Форма слов
Форма слов В процессе общения некоторые люди много и откровенно говорят о своих делах, планах и желаниях, другие же проявляют определенную сдержанность и даже скрытность. По почерку можно выявить степень откровенности, для этого необходимо обратить внимание на форму
Форма заглавных букв
Форма заглавных букв В написании заглавных букв наблюдается такое же разнообразие, как и в написании прописных букв. Они могут быть большими и маленькими, простыми и вычурными. По стилю написания заглавные буквы часто заметно отличаются от прописных и поэтому
9. Форма
9. Форма Признаки слева направо (рис. 189): Рис. 189• форма почерка угловатая;• форма почерка округлая;• форма почерка школьная;• форма почерка с печатными буквами;• форма почерка каллиграфическая;• форма почерка
Форма объявлений
Форма объявлений Отточим наши критические навыки вначале на чем-либо не столь существенном. Поэтому начнем с синтаксиса. Рассмотрим нотацию, используемую при объявлении компонентов. В отличие от многих языков мы не использовали для подпрограмм ключевых слов procedure или
Базовая форма
Базовая форма Программный объект довольно простое существо, если известен класс, которому он принадлежит. Пусть O - объект. По определению он является экземпляром некоторого класса. Точнее, он является прямым экземпляром (direct instance) только одного класса, например C. С