Функциональные зависимости




Концепция функциональной зависимости (ФЗ), со сути являющейся связью типа «многие к одному», обеспечивает основу для научного подхода к решению практических задач, поскольку обладает богатым набором интересных формальных свойств, позволяющих формально и строго решать многие проблемы.

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

Определение 1. Функциональная зависимость

В отношении R атрибут Y функционально зависит от атрибута X (X и Y могут быть составными) в том и только в том случае, если каждому значению X соответствует в точности одно значение Y: R.X (r) R.Y.

Определение 2. Полная функциональная зависимость

Функциональная зависимость R.X (r) R.Y называется полной, если атрибут Y не зависит функционально от любого точного подмножества X.

Определение 3. Транзитивная функциональная зависимость

Функциональная зависимость R.X -> R.Y называется транзитивной, если существует такой атрибут Z, что имеются функциональные зависимости R.X -> R.Z и R.Z -> R.Y и отсутствует функциональная зависимость R.Z --> R.X. (При отсутствии последнего требования мы имели бы "неинтересные" транзитивные зависимости в любом отношении, обладающем несколькими ключами.)

Определение 4. Неключевой атрибут

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

Определение 5. Взаимно независимые атрибуты

Два или более атрибута взаимно независимы, если ни один из этих атрибутов не является функционально зависимым от других.

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

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

Функциональная зависимость A ® B является полной функциональной зависимостью, если удаление какого-либо атрибута из A приводит к утрате этой зависимости. Частичной функциональной зависимостью называется такая зависимость A ® B, если в A есть некий атрибут, при удалении которого эта зависимость сохраняется.

Основные критерии:

· Таблица должна находиться в первой нормальной форме.

· Любое её поле, не входящее в состав первичного ключа, функционально полно зависит от первичного ключа.

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

Эта таблица находится в первой нормальной форме, но не во второй.

Категория Дата Скидка Товар
Книги 10.10.2008 10% PHP for dummies
Ноутбуки 11.10.2008 20% Acer
Книги 10.10.2008 10% Windows XP

В этой таблице первичный ключ составляют первые два столбца (Категория и Дата).

Скидка функционально полно зависит от них обоих, так как определяется одновременно категорией и датой. А вот с товаром проблемы. Она зависит только от категории и не зависит от даты (в любой день будет лежать там, пока не купят). Поэтому, говорят, что он зависит функционально не полно от всего первичного ключа и функционально полно от его части (Категория). Это нарушает требования второй нормальной формы.

Методы приведения к 2NF:

· Создайте отдельные таблицы для наборов значений, относящихся к нескольким записям.

· Свяжите эти таблицы с помощью внешнего ключа (В нашем случае – это поле Категория).

Сразу отметим, что если таблица приведена к первой нормальной форме и у нее уже установлен уникальный id для каждой строки, то она находится и во второй нормальной форме.

Исправляется это разделением этой таблицы на две другие:

Категория Дата Скидка
Книги 10.10.2008 10%
Ноутбуки 11.10.2008 20%
Книги 10.10.2008 10%
Категория Товар
Книги PHP for dummies
Ноутбуки Acer
Книги Windows XP

 

 

Теперь эти таблицы находятся во второй нормальной форме.

Вторая нормальная форма применяется к отношениям с составными ключами, т. е. к таким отношениям, первичный ключ которых состоит из двух или больше атрибутов. Дело в том, что отношение с первичным ключом на основе единственного атрибута всегда находится, по крайней мере, в 2НФ. Отношение, которое не находится в 2НФ, может страдать от аномалий обновления, что приведет базу данных в противоречивое состояние.

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

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

Если для атрибутов A, B и C некоторого отношения существуют зависимости вида A ® B и B ® C, то говорят, что атрибут C транзитивно зависит от атрибута A через атрибут B (при условии, что атрибут A функционально не зависит ни от атрибута B, ни от атрибута C).

Транзитивная зависимость является описанием такого типа функциональной зависимости, которая возникает при наличии следующих функциональных зависимостей между атрибутами A, B и С:

A ® B и B ® C

В данном случае транзитивная зависимость A ® C осуществляется через атрибут B. Это утверждение справедливо только в том случае, если атрибут A функционально не зависит от атрибутов B и C.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: