Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Аномалии в базе данных
Аномалии в базе данных возникают вследствие наличия избыточности. Избыточность возникает при попытке ввести слишком большой объем информации в одно отношение. При прямом преобразовании ODL и E/R-моделей в реляционные схемы данных часто возникают аномалии. Аномалии не позволяют создать хорошую реляционную базу данных. Первая нормальная форма. Любая таблица, удовлетворяющая требованию отношения, находится в первой нормальной форме. Требования к первой нормальной форме следующие: · ячейки таблицы содержат данные простых типов; · все данные в столбце имеют один тип; · каждый столбец имеет уникальное имя; · в таблице нет одинаковых строк. Вторая нормальная форма. Отношение находится во второй нормальной форме, если не ключевые атрибуты отношения зависят от ключевых атрибутов. Для отношения Artists ключевыми атрибутами являются {name,street,city,playIn} определяет амплуа актера, и характеристики спектаклей, в которых он участвует {ampoule,year,runningTime}. Actors
Приведенное отношение имеет аномалию удаления, поскольку удалив строку с балериной 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. Пока эта функциональная зависимость истинна, соединение двух проекций не может дать ложный кортеж.
Дата добавления: 2015-07-26; просмотров: 254; Нарушение авторских прав Мы поможем в написании ваших работ! |