Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009 (1084484), страница 34
Текст из файла (страница 34)
Проектирование и использование БД166ПРОЕКТЫ-ЗАДАНИЯ (Номер_проекта, Задание_сотрудника).Первичный ключ отношения: Номер_проекта, Задание_сотрудника.ПРОЕКТЫ-ЗАДАНИЯНомер_проектаЗадание_сотрудника001100120013004100420071Как легко увидеть, оба этих отношения находятся в 4 Н Ф и свободны отзамеченных недостатков. Дублирование значений атрибутов кодов сотрудников пропало. Попробуйте самостоятельно соединить эти отношения и убедиться в том, что в точности получится отношение ПРОЕКТЫ.В общем случае не всякое отношение можно восстановить к исходному.В нашем случае восстановление возможно потому, что каждый сотрудник, участвующий в некотором проекте, выполнял все задания по этому проекту(именно это укладывается в принцип 1:М соединения отношений). Сами жесотрудники участвовали в нескольких проектах, и разные проекты могли содержать одинаковые задания.Пятая нормальная форма.Результатом нормализации всех предыдущих схем отношений были два новых отношения.
Иногда это сделать не удается, либо получаемые отношения заведомо имеют нежелательные свойства. В этом случае выполняют декомпозицию исходного отношения на отношения, количество которых превышает два.Рассмотрим отношение СОТРУДН И КИ-ОТДЕЛ Ы-ПРОЕКТЫ, которое имеет заголовок С О Т Р У Д Н И К И - О Т Д Е Л Ы - П Р О Е К Т Ы (Код_сотрудника,Код_отдела, Номер_проекта).
Первичный ключ отношения включает все атрибуты: Код_сотрудника, Код_отделаи Номер_проекта. Пусть в этом отношении одинсотрудник может работать в нескольких отделах, причем в каждом отделе он может принимать участие в нескольких проектах. В одном отделе могут работать несколько сотрудников, но каждый проест выполняет только один сотрудник. Функциональных и многозначных зависимостей между атрибутами не существует.Это отношение является частью базы данных вымышленного научного подразделения НИИЧАВО - Научно-Исследовательского Института ЧАродейства и ВОлшебства из повести А. и Б. Стругацких «Понедельник начинается в субботу». Коды отделов здесь обозначают: АД - Администрация,1675.
Проектирование баз данныхСОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫКод_сотрудникаКод_отделаНомер_проекта01РД03602АД00403УП00404АД01905ЛС00105ЛС00406УП00708ВЦ01309ВЦ01410СЖ013ВЦ - Вычислительный центр, Л С - Линейного счастья, РД - Родильный дом,СЖ - Смысла жизни, УП - Универсальных превращений.Исходя из структуры отношения С О Т Р У Д Н И К И - О Т Д Е Л Ы - П Р О Е К Т Ыможно заключить, что оно находится в форме 4НФ. Тем не менее в отношении могут быть аномалии, связанные с возможностью повторения значенийатрибутов в нескольких кортежах.
Например, то, что сотрудник может работать в нескольких отделах, при увольнении сотрудника требует отыскания ипоследующего удаления из исходной таблицы нескольких записей.Введем определение зависимости соединения. Отношение R(X, Y, ... , Z)удовлетворяет зависимости соединения, которую обозначим как *(Х, Y,..., Z),в том и только в том случае, если R восстанавливается без потерь путем соединения своих проекций на X, Y, ... , Z. Зависимость соединения являетсяобобщением функциональной и многозначной зависимостей.Определение пятой нормальной формы.
Отношение R находится в 5 Н Ф(или нормальной форме проекции-соединения - PJ/NF) в том и только томслучае, когда любая зависимость соединения в R следует из существованиянекоторого возможного ключа в R.Образуем составные атрибуты отношения С О Т Р У Д Н И К И - О Т Д Е Л Ы ПРОЕКТЫ:СО={ Код_сотрудника, Код_отдела }СП={ Код_сотрудника, Номер_проекта }ОП={ Код_отдела, Номер_проекта }.Покажем, что если отношение С О Т Р У Д Н И К И - О Т Д Е Л Ы - П Р О Е К Т Ыспроецировать на составные атрибуты СО, СП и ОП, то соединение этих про-Часть 2.
Проектирование и использование БД168екций дает исходное отношение. Это значит, что в нашем отношении существовала зависимость соединения *(СО, СП, ОП). Проекции на составныеатрибуты назовем соответственно С О Т Р У Д Н И К И - О Т Д Е Л Ы , С О Т Р У Д НИКИ-ПРОЕКТЫ и ОТДЕЛЫ-ПРОЕКТЫ.Ранее мы выполняли соединение двух проекций и сразу получали искомый результат. Для восстановлении отношения из трех (или нескольких)проекций надо получить все попарные соединения (так как информация отом, какое из них «лучше», отсутствует), над которыми затем выполнить операцию пересечения множеств.
Проверим, так ли это.СОТРУДНИКИ-ОТДЕЛЫСОТРУДНИКИ-ПРОЕКТЫОТДЕЛЫ-ПРОЕКТЫКод_сотрудникаКод_отделаКод_сотрудникаНомер_проектаКод_отделаНомер_проекта01РД01036АД00402АД02004АД01903УП03004ВЦ01304АД04019ВЦ01405ЛС05001ЛС00105ЛС05004ЛС00406УП06007СЖ01308ВЦ08013РД03609ВЦ09014УП00410СЖ10013УП007Получим попарные соединения трех приведенных выше отношений, которые будут иметь вид:*(СО, СП)Код_сотрудникаKO/LотделаНомер_проекта01РД03602АД00403УП00404АД01905ЛС0011695. Проектирование баз данных05ЛС00406УП00708ВЦ01309ВЦ01410СЖ013*(С0, ОП)*(СП, ОП)Код_сотрудникаКод^отделаНомер_проектаКод_сотрудникаКод_отделаНомер_проекта01РД03601РД03602АД00402АД00402АД01902ЛС00403УП00402УП00403УП00703АД00404АД00403ЛС00404АД01903УП00405ЛС00104АД01905ЛС00405ЛС00106УП00405АД00406УП00705ЛС00408ВЦ01305УП00408ВЦ01406УП00409ВЦ01306УП00709ВЦ01408ВЦ01310СЖ01308ВЦ01409ВЦ01309ВЦ01410СЖ013Нетрудно увидеть, что пересечение всех отношений дает исходное отношение С О Т Р У Д Н И К И - О Т Д Е Л Ы - П Р О Е К Т Ы .170Часть 2.
Проектирование и использование БДЗамечание.Существуют и другие способы восстановления исходного отношения изего проекций. Так, для восстановления отношения С О Т Р У Д Н И К И - О Т Д Е Л Ы - П Р О Е К Т Ы можно соединить отношения С О Т Р У Д Н И К И - О Т Д Е Л Ы иС О Т Р У Д Н И К И - П Р О Е К Т Ы по атрибуту Код_сотрудника, после чего полученное отношение соединить с отношением О Т Д Е Л Ы - П Р О Е К Т Ы по составному атрибуту (Код_отдела, Номер_проекта).Отношения СОТРУДНИКИ-ОТДЕЛЫ, СОТРУДНИКИ-ПРОЕКТЫ и ОТДЕЛЫ-ПРОЕКТЫ находятся в 5НФ.
Эта форма является последней из известных. Условия ее получения довольно нетривиальны и поэтому она почти не используется на практике. Более того, она имеет определенные недостатки!Предположим, необходимо узнать, где и какие проекты исполняет сотрудник с кодом 02. Для этого в отношении С О Т Р У Д Н И К И - О Т Д Е Л Ы найдем,что сотрудник с кодом 02 работает в отделе АД, а из отношения О Т Д Е Л Ы ПРОЕКТЫ найдем, что в отделе АД выполняются проекты 004 и 019. А этозначит, что сотрудник 02 должен выполнять проекты 004 и 019. Увы, информация о том, что сотрудник с кодом 02 выполняет проект 019, ошибочна (см.исходное отношение С О Т Р У Д Н И К И - О Т Д Е Л Ы - П Р О Е К Т Ы ) .Такие противоречия можно устранить только путем совместного рассмотрения всех проекций основного отношения.
Именно поэтому после соединенияпроекций и выполнялась операция их пересечения. Безусловно, это - недостаток. Отметим, что наличие недостатков не требует обязательного отказа от определенных видов нормальных форм. Надо учитывать недостатки и условия ихпроявления. В некоторых постановках задач недостатки не проявляются.На практике обычно ограничиваются структурой БД, соответствующейЗ Н Ф или БКНФ. Поэтому процесс нормализации отношений методом нормальных форм предполагает последовательное удаление из исходного отношения следующих межатрибутных зависимостей:• частичных зависимостей неключевых атрибутов от ключа (удовлетворение требований 2НФ);• транзитивных зависимостей неключевых атрибутов от ключа (удовлетворение требований ЗНФ);• зависимости ключей (атрибутов составных ключей) от неключевых атрибутов (удовлетворение требований Б К Н Ф ) .Кроме метода нормальных форм Кодда, используемого для проектирования небольших БД, применяют и другие методы, например, метод ER-диаграмм (метод «Сущность-связь»), Этот метод используется при проектировании больших БД, на нем основан ряд средств проектирования БД.
Метод ERдиаграмм рассматривается в следующем разделе.На последнем этапе метода ER-диаграмм отношения, полученные в результате проектирования, проверяются на принадлежность их к БКНФ. Этот этапможет выполняться уже с использованием метода нормальных форм. Послезавершения проектирования создается БД с помощью СУБД.5. Проектирование баз данных1715.3. Рекомендации по разработке структурВ качестве обобщения материала предыдущего подраздела приведем наиболееважные рекомендации, неучет которых может привести к аномалиям при обработке данных в базах.
Остановимся на двух вопросах: исходя из каких соображений нужно создавать отношения (таблицы) и каким образом следует их связывать.Какими должныбыть таблицысущностейОсновное правило при создании таблиц сущностей - это «каждой сущности - отдельную таблицу» (как в популярном лозунге: «каждой семье - отдельную квартиру»),Поля таблиц сущностей могут быть двух видов: ключевые и неключевые.Введение ключей в таблице практически во всех реляционных С У Б Д позволяет обеспечить уникальность значений в записях таблицы по ключу, ускорить обработку записей таблицы, а также выполнить автоматическую сортировку записей по значениям в ключевых полях. .Обычно достаточно определения простого ключа, реже - вводят составнойключ.
Таблицей с составным ключом может быть, например, таблица хранениясписка сотрудников (фамилия, имя и отчество), в котором встречаются однофамильцы. В некоторых СУБД пользователям предлагается определить автоматически создаваемое ключевое поле нумерации (в Access - это поле типа «счетчик»), которое упрощает решение проблемы уникальности записей таблицы.Иногда в таблицах сущностей имеются поля описания свойств или характеристик объектов.
Если в таблице есть значительное число повторений по этим полям иэта информация имеет существенный объем, то лучше их выделить в отдельнуютаблицу (придерживаясь правила: «каждой сущности - отдельную таблицу»). Темболее, следует образовать дополнительную таблицу, если свойства взаимосвязаны.В более общем виде последние рекомендации можно сформулировать так:информацию о сущностях следует представить таким образом, чтобы неключевые поля в таблицах были взаимно независимыми и полностью зависелиот ключа (см.
определение третьей нормальной формы).В процессе обработки таблиц сущностей надо иметь в виду следующее. Новуюсущность легко добавить и изменить, но при удалении следует уничтожить всессылки на нее из таблиц связей, иначе таблицы связей будут некорректными. Многие современные СУБД блокируют некорректные действия в подобных операциях.ОрганизациясвязисущностейЗаписи таблицы связей предназначены для отображения связей междусущностями, информация о которых находится в соответствующих таблицах сущностей.Обычно одна таблица связей описывает взаимосвязь двух сущностей. Поскольку таблицы сущностей в простейшем случае имеют по одному ключевому полю, то таблица связей двух таблиц для обеспечения уникальности за-172Часть 2.