Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Аномалии в базе данных

Аномалии в базе данных возникают вследствие наличия избыточности. Избыточность возникает при попытке ввести слишком большой объем информации в одно отношение.

При прямом преобразовании ODL и E/R-моделей в реляционные схемы данных часто возникают аномалии. Аномалии не позволяют создать хорошую реляционную базу данных.

Первая нормальная форма. Любая таблица, удовлетворяющая требованию отношения, находится в первой нормальной форме. Требования к первой нормальной форме следующие:

· ячейки таблицы содержат данные простых типов;

· все данные в столбце имеют один тип;

· каждый столбец имеет уникальное имя;

· в таблице нет одинаковых строк.

Вторая нормальная форма. Отношение находится во второй нормальной форме, если не ключевые атрибуты отношения зависят от ключевых атрибутов. Для отношения Artists ключевыми атрибутами являются {name,street,city,playIn} определяет амплуа актера, и характеристики спектаклей, в которых он участвует {ampoule,year,runningTime}.

Actors

name аmpoule city street playIn year Running Time
Olga Borodina singer Saint-Petersburg Great Sea-st 33 Carmen
Irina Bogacheva singer Saint -Petersburg Nevsky 46 War and Peace
Yury Marusin singer Saint -Petersburg Small Sea-st 24 Carmen
Ulyana Lopatkina dancer Saint -Petersburg Garden-st 77 The Dying Swan

Приведенное отношение имеет аномалию удаления, поскольку удалив строку с балериной Ulyana Lopatkina , мы потеряем информацию о балете “The Dying Swan”. Отношение имеет также аномалию обновления, действительно, изменять название, год постановки или длительность спектакля “Carmen”, нужно дважды. Причиной аномалий является тот факт, что неключевые атрибуты {ampoule, year,runningTime} зависит от части ключа {name,street,city}→{ampoule}, a {playIn}→{year, runningTime}.

Нормальная форма Бойса-Кодда. Нормальная форма Бойса-Кодда гарантирует отсутствие аномалий в базе данных.

Определение. Отношение R является нормальной формой Бойса – Кодда (BCNF), тогда и только тогда, когда при наличии в отношении R нетривиальной зависимости {A1,A2,…,An,}→{B1,B2,…,Bm} множество {A1,A2,…,An,} является надключом, содержащим ключ.

Покажем, что отношение Performances(title,year, runningTime,type,TheatresName,ActorsName) не находится в BCNF. Ключом отношения является множество {title,year,actorsName}. В отношении Performances имеется функциональная зависимость {title, year}→ {runningTime, type, theatresName}. Здесь {title, year} не является надключом, поскольку не содержит ключ и не определяет actorsName. Существование такой зависимости нарушает условие BCNF.

Чтобы перевести отношение в BCNF, необходимо выполнить операцию его декомпозиции. Декомпозиция связана с разделением отношения на ряд более простых отношений. Повторно применяя декомпозицию, можно разбить любую схему отношения на множество отношений со следующими полезными свойствами:

· полученные отношения являются схемами BCNF;

· данные исходного отношения правильно представлены в новых отношениях;

· возможно точное восстановление исходного отношения из декомпозиции.

Следует отметить, что отношения с двумя атрибутами всегда находятся в BCNF. Поэтому простой способ декомпозиции связан с разделением исходного отношения на двух - атрибутные множества. Но при такой декомпозиции не всегда можно восстановить данные. Поэтому имеется более совершенный алгоритм декомпозиции:

· Найти нетривиальные зависимости, нарушающие BCNF, {A1,A2,…,An} → {B1,B2,…,Bm}, где {A1,A2,…,An} не является надключом;

· Найти атрибуты {B1,B2,…,Bm.}, которые функционально определяются {A1,A2,…,An};

· Выделить в отдельное отношение атрибуты, нарушающие зависимости BCNF;

· Выделить в отдельное отношение остальные атрибуты, не зависящие от {A1,A2,…,An}.

Следуя этому алгоритму, выполним декомпозицию отношения: Performances(title,year,runningTime,type,theatreName, actorName). Ключ отношения {title,year,actorsName}. Отношение содержит функциональную зависимость {title,year}→ {runningTime,type, theatreName}. Выделим в отношение Performances1, атрибуты, нарушающие BCNF:

Performances1(title, year, runningTime, type, theatreName)

Остальные атрибуты поместим в дргое отношение Performances2:

Performances2(title,year,ActorName)

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

Пусть имеется отношение {A,B,C}, имеющее функциональную зависимость A→B и зависимость B→C нарушающую BCNF. При декомпозиции получаем первое отношение как проекцию на {A,B} и второе отношение как проекцию на {B,C}. Тогда кортеж t=(a,b,c) исходного отношения разделяется на два кортежа u=(a,b) и w=(b,c), которые входят в два новых отношения. Кортежи, совпадающие по атрибутам (b), соединяются. В результате такого восстановления не может быть получен ложный кортеж (a, b,c), именно потому, что имеется функциональная зависимость A→B и B→C. Пока эта функциональная зависимость истинна, соединение двух проекций не может дать ложный кортеж.

 


<== предыдущая страница | следующая страница ==>
Переход от E/R-диаграмм к реляционным проектам | 

Дата добавления: 2015-07-26; просмотров: 254; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.003 сек.