Что такое проект? Это схема — эскиз некоторого устройства, который в дальнейшем будет воплощен в реальность. Что такое проект реляционной базы данных? Это набор взаимосвязанных отношений, в которых определены все атрибуты, заданы
(рис 6.1) Этапы жизненного цикла БДПроцесс проектирования БД представляет собой последовательность переходов от неформального словесного описания информационной структуры предметной области к формализованному описанию объектов предметной области в терминах некоторой модели. В общем случае можно выделить следующие этапы проектирования:
Если мы учтем, что между вторым и третьим этапами необходимо принять решение, с использованием какой стандартной СУБД будет реализовываться наш проект, то условно процесс проектирования БД можно представить последовательностью выполнения пяти соответствующих этапов (см. рис. 6.2). Рассмотрим более подробно этапы проектирования БД.
(рис 6.2) Этапы проектирования БДС точки зрения проектирования БД в рамках системного анализа, необходимо осуществить первый этап, то есть провести подробное словесное описание объектов предметной области и реальных связей, которые присутствуют между описываемыми объектами. Желательно, чтобы данное описание позволяло корректно определить все взаимосвязи между объектами предметной области.
В общем случае существуют два подхода к выбору состава и структуры предметной области:
Чаще всего на практике рекомендуется использовать некоторый компромиссный вариант, который, с одной стороны, ориентирован на конкретные задачи или функциональные потребности пользователей, а с другой стороны, учитывает возможность наращивания новых приложений.
Системный анализ должен заканчиваться подробным описанием информации об объектах предметной области, которая требуется для решения конкретных задач и которая должна храниться в БД, формулировкой конкретных задач, которые будут решаться с использованием данной БД с кратким описанием алгоритмов их решения, описанием выходных документов, которые должны генерироваться в системе, описанием входных документов, которые служат основанием для заполнения данными БД.
Пусть требуется разработать информационную систему для автоматизации учета получения и выдачи книг в библиотеке. Система должна предусматривать режимы ведения системного каталога, отражающего перечень областей знаний, по которым имеются книги в библиотеке. Внутри библиотеки области знаний в систематическом каталоге могут иметь уникальный внутренний номер и полное наименование. Каждая книга может содержать сведения из нескольких областей знаний. Каждая книга в библиотеке может присутствовать в нескольких экземплярах. Каждая книга, хранящаяся в библиотеке, характеризуется следующими параметрами:
Книги могут иметь одинаковые названия, но они различаются по своему уникальному шифру (ISBN).
В библиотеке ведется картотека читателей.
На каждого читателя в картотеку заносятся следующие сведения:
Каждому читателю присваивается уникальный номер читательского билета.
Каждый читатель может одновременно держать на руках не более 5 книг. Читатель не должен одновременно держать более одного экземпляра книги одного названия.
Каждая книга в библиотеке может присутствовать в нескольких экземплярах. Каждый экземпляр имеет следующие характеристики:
В случае выдачи экземпляра книги читателю в библиотеке хранится специальный вкладыш, в котором должны быть записаны следующие сведения:
Предусмотреть следующие ограничения на информацию в системе:
С данной информационной системой должны работать следующие группы пользователей:
При работе с системой библиотекарь должен иметь возможность решать следующие задачи:
Читатель должен иметь возможность решать следующие задачи:
Администрация библиотеки должна иметь возможность получать сведения о должниках—читателях библиотеки, которые не вернули вовремя взятые книги; сведения о книгах, которые не являются популярными, т. е. ни один экземпляр которых не находится на руках у читателей; сведения о стоимости конкретной книги, для того чтобы установить возможность возмещения стоимости утерянной книги или возможность замены ее другой книгой; сведения о наиболее популярных книгах, то есть таких, все экземпляры которых находятся на руках у читателей.
Этот совсем небольшой пример показывает, что перед началом разработки необходимо иметь точное представление о том, что же должно выполняться в нашей системе, какие пользователи в ней будут работать, какие задачи будет решать каждый пользователь. И это правильно, ведь когда мы строим здание, мы тоже заранее предполагаем: для каких целей оно предназначено, в каком климате оно будет стоять, на какой почве, и в зависимости от этого проектировщики могут предложить нам тот или иной проект. Но, к сожалению, очень часто по отношению к базам данных считается, что все можно определить потом, когда проект системы уже создан. Отсутствие четких целей создания БД может свести на нет все усилия разработчиков, и проект БД получится "плохим", неудобным, не соответствующим ни реально моделируемому объекту, ни задачам, которые должны решаться с использованием данной БД.
Отложим на время рассмотрение этапа инфологического моделирования предметной области — этому серьезному вопросу будет посвящена следующая, седьмая лекция, а мы пойдем классическим путем и рассмотрим сначала этап даталогического проектирования. Напомним, что этап даталогического проектирования происходит уже после выбора конкретной модели данных. И мы рассматриваем даталогическое проектирование для реляционной модели данных.
В реляционных БД даталогическое или
Однако этап логического или даталогического проектирования не заканчивается проектированием схемы отношений. В общем случае в результате выполнения этого этапа должны быть получены следующие результирующие документы:
Однако перед тем как описывать построенную схему в терминах выбранной СУБД, нам надо выстроить эту схему. Именно этому процессу и посвящен данный раздел. Мы должны построить корректную схему БД, ориентируясь на реляционную модель данных.
Корректной назовем схему БД, в которой отсутствуют нежелательные зависимости между атрибутами отношений.
Процесс разработки корректной схемы реляционной БД называется логическим проектированием БД.
Проектирование схемы БД может быть выполнено двумя путями:
Классическая технология
Процесс проектирования с использованием декомпозиции представляет собой процесс последовательной нормализации схем отношений, при этом каждая последующая итерация соответствует нормальной форме более высокого уровня и обладает лучшими свойствами по сравнению с предыдущей.
Каждой нормальной форме соответствует некоторый определенный набор ограничений, и отношение находится в некоторой нормальной форме, если удовлетворяет свойственному ей набору ограничений.
В теории реляционных БД обычно выделяется следующая последовательность нормальных форм:
Основные свойства нормальных форм:
В основе классического процесса проектирования лежит последовательность переходов от предыдущей нормальной формы к последующей. Однако в процессе декомпозиции мы сталкиваемся с проблемой обратимости,то есть возможности восстановления исходной схемы. Таким образом, декомпозиция должна сохранять эквивалентность схем БД при замене одной схемы на другую.
Схемы БД называются эквивалентными,если содержание исходной БД может быть получено путем
При выполнении
Функциональные зависимости определяют не текущее состояние БД, а все возможные ее состояния, то есть они отражают те связи между атрибутами, которые присущи реальному объекту, который моделируется с помощью БД.
Поэтому определить функциональные зависимости по текущему состоянию БД можно только в том случае, если экземпляр БД содержит абсолютно полную информацию (то есть никаких добавлений и модификации БД не предполагается). В реальной жизни это требование невыполнимо, поэтому набор функциональных зависимостей задает разработчик, системный аналитик, исходя из глубокого системного
Приведем ряд основных определений.
Функциональной зависимостью набора атрибутов В отношения R от набора атрибутов A того же отношения, обозначаемой как R.A -> R.B или A -> B
называется такое соотношение проекций R[A] и R[B], при котором в каждый момент времени любому элементу проекции R[A] соответствует только один элемент проекции R[B], входящий вместе с ним в какой-либо R.
Функциональная зависимость R.A -> R.B называется полной,если набор атрибутов B функционально зависит от A и не зависит функционально от любого подмножества A, то есть R.A -> R.B называется полной, если:
$$\forall A1 \subseteq A \to R.A -/\to R.B$$,
что читается следующим образом:
для любого A1, являющегося подмножеством А, R.B функционально не зависит от R.A, в противном случае зависимость R.A -> R.B называется неполной.
Функциональная зависимость R.A -> R.B называется транзитивной, если существует набор атрибутов С такой, что:
А.B.R.A -> R.C.R.C -> R.A.R.C -> R.B.Возможным ключом отношения называется набор атрибутов отношения, который полностью и однозначно (функционально полно) определяет значения всех остальных атрибутов отношения, то есть возможный ключ — это набор атрибутов, однозначно определяющий
А может ли быть ситуация, когда отношение не имеет возможного ключа? Давайте вспомним определение отношения: отношение — это подмножество декартова произведения множества доменов. И в полном декартовом произведении все наборы значений различны, тем более в его подмножестве. Значит, обязательно для каждого отношения всегда существует набор атрибутов, по которому можно однозначно определить
В общем случае в отношении может быть несколько возможных ключей.
Среди всех возможных
Неключевым атрибутом называется любой атрибут отношения, не входящий в состав ни одного возможного ключа отношения.
Взаимно-независимые атрибуты — это такие атрибуты, которые не зависят функционально один от другого.
Если в отношении существует несколько функциональных зависимостей, то каждый атрибут или набор атрибутов, от которого зависит другой атрибут, называется детерминантом отношения.
Для функциональных зависимостей как фундаментальной основы проекта БД были проведены исследования, позволяющие избежать избыточного их представления. Ряд зависимостей могут быть выведены из других путем применения правил, названных
В является подмножеством А, то А -> BА->B, то A.C -> B.CA -> B и B -> C, то A -> C.Доказано, что данные правила являются полными и исчерпывающими, то есть, применяя их, из заданного множества функциональных зависимостей можно вывести все возможные функциональные зависимости.
Множество всех возможных функциональных зависимостей, выводимое из заданного набора исходных функциональных зависимостей, называется его замыканием.
Отношение находится в первой нормальной форме тогда и только тогда, когда на пересечении каждого столбца и каждой строки находятся только элементарные значения атрибутов.
В некотором смысле это определение избыточно, потому что собственно оно определяет само отношение в
| Преподаватель | День недели | Номер пары | Название дисциплины | Тип занятий | Группа |
|---|---|---|---|---|---|
| Петров В. И. | Понед. | 1 | Теор. выч. проц. | Лекция | 4906 |
| Вторник | 1 | Комп. графика | Лаб. раб.. | 4907 | |
| Вторник | 2 | Комп. графика | Лаб. раб | 4906 | |
| Киров В. А. | Понед. | 2 | Теор. информ. | Лекция | 4906 |
| Вторник | 3 | Пр-е на С++ | Лаб. раб. | 4907 | |
| Вторник | 4 | Пр-е на С++ | Лаб. раб. | 4906 | |
| Серов А. А. | Понед. | 3 | Защита инф. | Лекция. | 4944 |
| Среда | 3 | Пр-е на VB | Лаб. раб | 4942 | |
| Четверг | 4 | Пр-е на VB | Лаб. раб. | 4922 |
Здесь на пересечении одной строки и одного столбца находится целый набор элементарных значений, соответствующих набору дней, перечню пар, набору дисциплин, по которым проводит занятия один преподаватель.
Для приведения отношения "Расписание" к первой нормальной форме необходимо дополнить каждую строку фамилией преподавателя.
| Преподаватель | День недели | Номер пары | Название дисциплины | Тип занятий | Группа |
|---|---|---|---|---|---|
| Петров В. И. | Понед. | 1 | Теор. выч. проц. | Лекция | 4906 |
| Петров В. И. | Вторник | 1 | Комп. графика | Лаб. раб.. | 4907 |
| Петров В. И. | Вторник | 2 | Комп. графика | Лаб. раб | 4906 |
| Киров В. А. | Понед. | 2 | Теор. информ. | Лекция | 4906 |
| Киров В. А. | Вторник | 3 | Пр-е на С++ | Лаб. раб. | 4907 |
| Киров В. А. | Вторник | 4 | Пр-е на С++ | Лаб. раб. | 4906 |
| Серов А. А. | Понед. | 3 | Защита инф. | Лекция. | 4944 |
| Серов А. А. | Среда | 3 | Пр-е на VB | Лаб. раб | 4942 |
| Серов А. А. | Четверг | 4 | Пр-е на VB | Лаб. раб. | 4922 |
Отношение находится во
Рассмотрим отношение, моделирующее сдачу студентами текущей сессии. Структура этого отношения определяется следующим набором атрибутов:
(ФИО, Номер зач.кн., Группа, Дисциплина, Оценка)
Так как каждый студент сдает целый набор дисциплин в процессе сессии, то (Номер. зач.кн., Дисциплина), который однозначно определяет каждую строку отношения. С другой стороны, атрибуты ФИО и Группа зависят только от части первичного ключа — от значения атрибута Номер зач. кн., поэтому мы должны констатировать наличие неполных функциональных зависимостей в данном отношении. Для приведения данного отношения ко
(ФИО, Номер.зач.кн., Группа) (Номер зач.кн., Дисциплина, Оценка)
Этот набор отношений не содержит неполных функциональных зависимостей, и поэтому эти отношения находятся во
А почему надо приводить отношения ко Группа на новое. Во втором же случае меняется только один кортеж в первом отношении. И конечно, опасность нарушения корректности (непротиворечивости содержания) БД в первом случае выше. Может получиться так, что часть кортежей поменяет значения атрибута Группа, а часть по причине сбоя в работе аппаратуры останется в старом состоянии. И тогда наша БД будет содержать записи, которые относят одного студента одновременно к разным группам. Чтобы этого не произошло, мы должны принимать дополнительные непростые меры, например организовывать процесс согласованного изменения с использованием сложного механизма транзакций, который мы будем рассматривать в лекциях, посвященных вопросам распределенного доступа к БД. Если же мы перешли ко
Отношение находится в
Рассмотрим отношение, связывающее студентов с группами, факультетами и специальностями, на которых он учится.
(ФИО, Номер зач.кн., Группа, Факультет, Специальность, Выпускающая кафедра)
Номер зач.кн., однако рассмотрим остальные функциональные зависимости. Группа, в которой учится студент, однозначно определяет факультет, на котором он учится, а также специальность и выпускающую кафедру. Кроме того, выпускающая кафедра однозначно определяет факультет, на котором обучаются студенты, выпускаемые по данной кафедре. Но если мы предположим, что одну специальность могут выпускать несколько кафедр, то специальность не определяет выпускающую кафедру. В этом случае у нас есть следующие функциональные зависимости:
Номер зач.кн. -> ФИО Номер зач.кн. -> Группа Номер зач.кн. -> Факультет Номер зач.кн. -> Специальность Номер зач.кн. -> Выпускающая кафедра Группа -> Факультет Группа -> Специальность Группа -> Выпускающая кафедра Выпускающая кафедра -> Факультет
И эти зависимости образуют транзитивные группы. Для того чтобы избежать этого, мы можем предложить следующий набор отношений:
(Номер.зач.кн., ФИО, Специальность, Группа) (Группа, Выпускающая кафедра) (Выпускащая кафедра, Факультет)
Теперь необходимо удостовериться, что при естественном соединении мы не потеряем ни одной строки и не получим лишних кортежей. И это упражнение я предлагаю выполнить вам самостоятельно.
Полученный набор отношений находится в
Отношение находится в
Рассмотрим отношение, моделирующее сдачу студентом текущих экзаменов. Предположим, что студент может сдавать экзамен по одной дисциплине несколько раз, если он получил неудовлетворительную оценку. Допустим, что во избежание возможных полных однофамильцев мы можем однозначно идентифицировать студента номером его зачетной книги, но, с другой стороны, у нас ведется электронный учет текущей успеваемости студентов, поэтому каждому студенту -присваивается в период его обучения в вузе уникальный номер-идентификатор. Отношение, которое моделирует сдачу текущей сессии, имеет следующую структуру:
(Номер зач.кн., Идентификатор_студента, Дисциплина, Дата, Оценка)
Возможными Номер_зач.кн, Дисциплина, Дата и Идентификатор_студента, Дисциплина, Дата.
Какие функциональные зависимости у нас имеются?
Номер_зач.кн, Дисциплина, Дата -> Оценка; Идентификатор_студента, Дисциплина, Дата -> Оценка; Номер зач.кн. -> Идентификатор_студента; Идентификатор_студента -> Номер зач.кн.
Идентификатор_студента, поэтому по значению Номер зач.кн. можно однозначно определить Идентификатор_студента (это третья зависимость) и обратно (и это четвертая зависимость). Оценим это отношение.Номер зач.кн.и Идентификатор_студента, которые не являются возможными (Идентификатор_студента, Дисциплина, Дата, Оценка) (Номер зач.кн., Идентификатор_студента)
или наоборот:
(Номер зач.кн., Дисциплина, Дата, Оценка) (Номер зач.кн., Идентификатор_студента)
Эти схемы равнозначны с точки зрения теории нормализации, поэтому выбирать проектировщикам следует исходя из некоторых дополнительных рассуждений. Ну, например, если учесть, что зачетные книжки могут теряться, то как они будут восстанавливаться: если с тем же самым номером, то нет разницы, но если с новым номером, то тогда первая схема предпочтительней.
В большинстве случаев достижение третьей нормальной формы или даже формы Бойса—Кодда считается достаточным для реальных проектов баз данных, однако в теории нормализации существуют нормальные формы высших порядков, которые уже связаны не с функциональными зависимостями между атрибутами отношений, а отражают более тонкие вопросы семантики предметной области и связаны с другими видами зависимостей. Прежде чем перейти к рассмотрению нормальных форм высших порядков, дадим еще несколько определений.
В отношении R (A, B, C) существует многозначная зависимость (multi valid dependence, MVD) R.A ->> R.B в том и только в том случае, если множество значений B, соответствующее паре значений A и C, зависит только от A и не зависит от С.
Когда мы рассматривали функциональные зависимости, то каждому значению
(Номер зач.кн., Группа, Дисциплина)
Перечень дисциплин, которые должен сдавать студент, однозначно определяется не его фамилией, а номером группы (то есть специальностью, на которой он учится).
В данном отношении существуют следующие две многозначные зависимости:
Группа ->> Дисциплина Группа ->> Номер зач.кн.
Это означает, что каждой группе однозначно соответствует перечень дисциплин по учебному плану и номер группы определяет список студентов, которые в этой группе учатся.
Если мы будем работать с исходным отношением, то мы не сможем хранить информацию о новой группе и ее учебном плане — перечне дисциплин, которые должна пройти группа до тех пор, пока в нее не будут зачислены студенты. При изменении перечня дисциплин по учебному плану, например при добавлении новой дисциплины, внести эти изменения в отношение для всех студентов, занимающихся в данной группе, весьма затруднительно. С другой стороны, если мы добавляем студента в уже существующую группу, то мы должны добавить множество кортежей, соответствующих перечню дисциплин для данной группы. Эти аномалии модификации отношения как раз и связаны с наличием двух
В R (A, B, C) существует R.A ->> R.B в том и только в том случае, когда существует R.A ->> R.C.
Дальнейшая нормализация отношений, подобных нашему, основывается на
Отношение R (A, B, C) можно спроецировать без потерь в отношения R1 (A, B) и R2 (A, C) в том и только в том случае, когда существует MVD A ->> B | C ( что равнозначно наличию двух зависимостей A ->> B и A ->> C ).
Под проецированием без потерь понимается такой способ декомпозиции отношения путем применения
Отношение R находится в A ->> B все остальные атрибуты R функционально зависят от A.
В нашем примере можно произвести декомпозицию исходного отношения в два отношения:
(Номер зач.кн., Группа) (Группа, Дисциплина)
Оба эти отношения находятся в
Последней нормальной формой является пятая нормальная форма
зависимостей является в некотором роде обобщением
Отношение R (X, Y,..., Z) удовлетворяет зависимости соединения (X, Y,..., Z) в том и только в том случае, когда R восстанавливается без потерь путем соединения своих проекций на X, Y, ..., Z. Здесь X, Y, ..., Z — наборы атрибутов отношения R.
Наличие PJ-зависимости в отношении делает его в некотором роде избыточным и затрудняет операции модификации.
Отношение R находится в пятой нормальной форме (нормальной форме проекции-соединения — PJ/NF ) в том и только в том случае, когда любая зависимость соединения в R следует из существования некоторого возможного ключа в R.
Рассмотрим отношение R1:
R1(Преподаватель, Кафедра, Дисциплина)
Предположим, что каждый преподаватель может работать на нескольких кафедрах и на каждой кафедре может вести несколько дисциплин. В этом случае
Введем следующие обозначения наборов атрибутов:
ПК (Преподаватель, Кафедра) ПД (Преподаватель, Дисциплина) КД (Кафедра, Дисциплина)
Допустим, что отношение R1 удовлетворяет зависимости проекции соединения ( ПК, ПД, КД ). Тогда отношение R1 не находится в NF/PJ, потому что единственным ключом его является полный набор атрибутов, а наличие зависимости PJ связано с наборами атрибутов, которые не составляют возможные ключи отношения R1. Для того чтобы привести это отношение к NF/PJ, его надо представить в виде трех отношений:
R2 (Преподаватель, Кафедра) R3 (Преподаватель, Дисциплина) R4 (Кафедра, Дисциплина)
Пятая нормальная форма редко используется на практике. В большей степени она является теоретическим исследованием. Очень тяжело определить само наличие зависимостей "проекции—соединения", потому что утверждение о наличии такой зависимости делается для всех возможных состояний БД, а не только для текущего экземпляра отношения R1. Однако знание о возможном наличии подобных зависимостей, даже теоретическое, нам все же необходимо.
Что такое проект? Это схема — эскиз некоторого устройства, который в дальнейшем будет воплощен в реальность. Что такое проект реляционной базы данных? Это набор взаимосвязанных отношений, в которых определены все атрибуты, заданы
(рис 6.1) Этапы жизненного цикла БДПроцесс проектирования БД представляет собой последовательность переходов от неформального словесного описания информационной структуры предметной области к формализованному описанию объектов предметной области в терминах некоторой модели. В общем случае можно выделить следующие этапы проектирования:
Если мы учтем, что между вторым и третьим этапами необходимо принять решение, с использованием какой стандартной СУБД будет реализовываться наш проект, то условно процесс проектирования БД можно представить последовательностью выполнения пяти соответствующих этапов (см. рис. 6.2). Рассмотрим более подробно этапы проектирования БД.
(рис 6.2) Этапы проектирования БДС точки зрения проектирования БД в рамках системного анализа, необходимо осуществить первый этап, то есть провести подробное словесное описание объектов предметной области и реальных связей, которые присутствуют между описываемыми объектами. Желательно, чтобы данное описание позволяло корректно определить все взаимосвязи между объектами предметной области.
В общем случае существуют два подхода к выбору состава и структуры предметной области:
Чаще всего на практике рекомендуется использовать некоторый компромиссный вариант, который, с одной стороны, ориентирован на конкретные задачи или функциональные потребности пользователей, а с другой стороны, учитывает возможность наращивания новых приложений.
Системный анализ должен заканчиваться подробным описанием информации об объектах предметной области, которая требуется для решения конкретных задач и которая должна храниться в БД, формулировкой конкретных задач, которые будут решаться с использованием данной БД с кратким описанием алгоритмов их решения, описанием выходных документов, которые должны генерироваться в системе, описанием входных документов, которые служат основанием для заполнения данными БД.
Пусть требуется разработать информационную систему для автоматизации учета получения и выдачи книг в библиотеке. Система должна предусматривать режимы ведения системного каталога, отражающего перечень областей знаний, по которым имеются книги в библиотеке. Внутри библиотеки области знаний в систематическом каталоге могут иметь уникальный внутренний номер и полное наименование. Каждая книга может содержать сведения из нескольких областей знаний. Каждая книга в библиотеке может присутствовать в нескольких экземплярах. Каждая книга, хранящаяся в библиотеке, характеризуется следующими параметрами:
Книги могут иметь одинаковые названия, но они различаются по своему уникальному шифру (ISBN).
В библиотеке ведется картотека читателей.
На каждого читателя в картотеку заносятся следующие сведения:
Каждому читателю присваивается уникальный номер читательского билета.
Каждый читатель может одновременно держать на руках не более 5 книг. Читатель не должен одновременно держать более одного экземпляра книги одного названия.
Каждая книга в библиотеке может присутствовать в нескольких экземплярах. Каждый экземпляр имеет следующие характеристики:
В случае выдачи экземпляра книги читателю в библиотеке хранится специальный вкладыш, в котором должны быть записаны следующие сведения:
Предусмотреть следующие ограничения на информацию в системе:
С данной информационной системой должны работать следующие группы пользователей:
При работе с системой библиотекарь должен иметь возможность решать следующие задачи:
Читатель должен иметь возможность решать следующие задачи:
Администрация библиотеки должна иметь возможность получать сведения о должниках—читателях библиотеки, которые не вернули вовремя взятые книги; сведения о книгах, которые не являются популярными, т. е. ни один экземпляр которых не находится на руках у читателей; сведения о стоимости конкретной книги, для того чтобы установить возможность возмещения стоимости утерянной книги или возможность замены ее другой книгой; сведения о наиболее популярных книгах, то есть таких, все экземпляры которых находятся на руках у читателей.
Этот совсем небольшой пример показывает, что перед началом разработки необходимо иметь точное представление о том, что же должно выполняться в нашей системе, какие пользователи в ней будут работать, какие задачи будет решать каждый пользователь. И это правильно, ведь когда мы строим здание, мы тоже заранее предполагаем: для каких целей оно предназначено, в каком климате оно будет стоять, на какой почве, и в зависимости от этого проектировщики могут предложить нам тот или иной проект. Но, к сожалению, очень часто по отношению к базам данных считается, что все можно определить потом, когда проект системы уже создан. Отсутствие четких целей создания БД может свести на нет все усилия разработчиков, и проект БД получится "плохим", неудобным, не соответствующим ни реально моделируемому объекту, ни задачам, которые должны решаться с использованием данной БД.
Отложим на время рассмотрение этапа инфологического моделирования предметной области — этому серьезному вопросу будет посвящена следующая, седьмая лекция, а мы пойдем классическим путем и рассмотрим сначала этап даталогического проектирования. Напомним, что этап даталогического проектирования происходит уже после выбора конкретной модели данных. И мы рассматриваем даталогическое проектирование для реляционной модели данных.
В реляционных БД даталогическое или
Однако этап логического или даталогического проектирования не заканчивается проектированием схемы отношений. В общем случае в результате выполнения этого этапа должны быть получены следующие результирующие документы:
Однако перед тем как описывать построенную схему в терминах выбранной СУБД, нам надо выстроить эту схему. Именно этому процессу и посвящен данный раздел. Мы должны построить корректную схему БД, ориентируясь на реляционную модель данных.
Корректной назовем схему БД, в которой отсутствуют нежелательные зависимости между атрибутами отношений.
Процесс разработки корректной схемы реляционной БД называется логическим проектированием БД.
Проектирование схемы БД может быть выполнено двумя путями:
Классическая технология
Процесс проектирования с использованием декомпозиции представляет собой процесс последовательной нормализации схем отношений, при этом каждая последующая итерация соответствует нормальной форме более высокого уровня и обладает лучшими свойствами по сравнению с предыдущей.
Каждой нормальной форме соответствует некоторый определенный набор ограничений, и отношение находится в некоторой нормальной форме, если удовлетворяет свойственному ей набору ограничений.
В теории реляционных БД обычно выделяется следующая последовательность нормальных форм:
Основные свойства нормальных форм:
В основе классического процесса проектирования лежит последовательность переходов от предыдущей нормальной формы к последующей. Однако в процессе декомпозиции мы сталкиваемся с проблемой обратимости,то есть возможности восстановления исходной схемы. Таким образом, декомпозиция должна сохранять эквивалентность схем БД при замене одной схемы на другую.
Схемы БД называются эквивалентными,если содержание исходной БД может быть получено путем
При выполнении
Функциональные зависимости определяют не текущее состояние БД, а все возможные ее состояния, то есть они отражают те связи между атрибутами, которые присущи реальному объекту, который моделируется с помощью БД.
Поэтому определить функциональные зависимости по текущему состоянию БД можно только в том случае, если экземпляр БД содержит абсолютно полную информацию (то есть никаких добавлений и модификации БД не предполагается). В реальной жизни это требование невыполнимо, поэтому набор функциональных зависимостей задает разработчик, системный аналитик, исходя из глубокого системного
Приведем ряд основных определений.
Функциональной зависимостью набора атрибутов В отношения R от набора атрибутов A того же отношения, обозначаемой как R.A -> R.B или A -> B
называется такое соотношение проекций R[A] и R[B], при котором в каждый момент времени любому элементу проекции R[A] соответствует только один элемент проекции R[B], входящий вместе с ним в какой-либо R.
Функциональная зависимость R.A -> R.B называется полной,если набор атрибутов B функционально зависит от A и не зависит функционально от любого подмножества A, то есть R.A -> R.B называется полной, если:
$$\forall A1 \subseteq A \to R.A -/\to R.B$$,
что читается следующим образом:
для любого A1, являющегося подмножеством А, R.B функционально не зависит от R.A, в противном случае зависимость R.A -> R.B называется неполной.
Функциональная зависимость R.A -> R.B называется транзитивной, если существует набор атрибутов С такой, что:
А.B.R.A -> R.C.R.C -> R.A.R.C -> R.B.Возможным ключом отношения называется набор атрибутов отношения, который полностью и однозначно (функционально полно) определяет значения всех остальных атрибутов отношения, то есть возможный ключ — это набор атрибутов, однозначно определяющий
А может ли быть ситуация, когда отношение не имеет возможного ключа? Давайте вспомним определение отношения: отношение — это подмножество декартова произведения множества доменов. И в полном декартовом произведении все наборы значений различны, тем более в его подмножестве. Значит, обязательно для каждого отношения всегда существует набор атрибутов, по которому можно однозначно определить
В общем случае в отношении может быть несколько возможных ключей.
Среди всех возможных
Неключевым атрибутом называется любой атрибут отношения, не входящий в состав ни одного возможного ключа отношения.
Взаимно-независимые атрибуты — это такие атрибуты, которые не зависят функционально один от другого.
Если в отношении существует несколько функциональных зависимостей, то каждый атрибут или набор атрибутов, от которого зависит другой атрибут, называется детерминантом отношения.
Для функциональных зависимостей как фундаментальной основы проекта БД были проведены исследования, позволяющие избежать избыточного их представления. Ряд зависимостей могут быть выведены из других путем применения правил, названных
В является подмножеством А, то А -> BА->B, то A.C -> B.CA -> B и B -> C, то A -> C.Доказано, что данные правила являются полными и исчерпывающими, то есть, применяя их, из заданного множества функциональных зависимостей можно вывести все возможные функциональные зависимости.
Множество всех возможных функциональных зависимостей, выводимое из заданного набора исходных функциональных зависимостей, называется его замыканием.
Отношение находится в первой нормальной форме тогда и только тогда, когда на пересечении каждого столбца и каждой строки находятся только элементарные значения атрибутов.
В некотором смысле это определение избыточно, потому что собственно оно определяет само отношение в
| Преподаватель | День недели | Номер пары | Название дисциплины | Тип занятий | Группа |
|---|---|---|---|---|---|
| Петров В. И. | Понед. | 1 | Теор. выч. проц. | Лекция | 4906 |
| Вторник | 1 | Комп. графика | Лаб. раб.. | 4907 | |
| Вторник | 2 | Комп. графика | Лаб. раб | 4906 | |
| Киров В. А. | Понед. | 2 | Теор. информ. | Лекция | 4906 |
| Вторник | 3 | Пр-е на С++ | Лаб. раб. | 4907 | |
| Вторник | 4 | Пр-е на С++ | Лаб. раб. | 4906 | |
| Серов А. А. | Понед. | 3 | Защита инф. | Лекция. | 4944 |
| Среда | 3 | Пр-е на VB | Лаб. раб | 4942 | |
| Четверг | 4 | Пр-е на VB | Лаб. раб. | 4922 |
Здесь на пересечении одной строки и одного столбца находится целый набор элементарных значений, соответствующих набору дней, перечню пар, набору дисциплин, по которым проводит занятия один преподаватель.
Для приведения отношения "Расписание" к первой нормальной форме необходимо дополнить каждую строку фамилией преподавателя.
| Преподаватель | День недели | Номер пары | Название дисциплины | Тип занятий | Группа |
|---|---|---|---|---|---|
| Петров В. И. | Понед. | 1 | Теор. выч. проц. | Лекция | 4906 |
| Петров В. И. | Вторник | 1 | Комп. графика | Лаб. раб.. | 4907 |
| Петров В. И. | Вторник | 2 | Комп. графика | Лаб. раб | 4906 |
| Киров В. А. | Понед. | 2 | Теор. информ. | Лекция | 4906 |
| Киров В. А. | Вторник | 3 | Пр-е на С++ | Лаб. раб. | 4907 |
| Киров В. А. | Вторник | 4 | Пр-е на С++ | Лаб. раб. | 4906 |
| Серов А. А. | Понед. | 3 | Защита инф. | Лекция. | 4944 |
| Серов А. А. | Среда | 3 | Пр-е на VB | Лаб. раб | 4942 |
| Серов А. А. | Четверг | 4 | Пр-е на VB | Лаб. раб. | 4922 |
Отношение находится во
Рассмотрим отношение, моделирующее сдачу студентами текущей сессии. Структура этого отношения определяется следующим набором атрибутов:
(ФИО, Номер зач.кн., Группа, Дисциплина, Оценка)
Так как каждый студент сдает целый набор дисциплин в процессе сессии, то (Номер. зач.кн., Дисциплина), который однозначно определяет каждую строку отношения. С другой стороны, атрибуты ФИО и Группа зависят только от части первичного ключа — от значения атрибута Номер зач. кн., поэтому мы должны констатировать наличие неполных функциональных зависимостей в данном отношении. Для приведения данного отношения ко
(ФИО, Номер.зач.кн., Группа) (Номер зач.кн., Дисциплина, Оценка)
Этот набор отношений не содержит неполных функциональных зависимостей, и поэтому эти отношения находятся во
А почему надо приводить отношения ко Группа на новое. Во втором же случае меняется только один кортеж в первом отношении. И конечно, опасность нарушения корректности (непротиворечивости содержания) БД в первом случае выше. Может получиться так, что часть кортежей поменяет значения атрибута Группа, а часть по причине сбоя в работе аппаратуры останется в старом состоянии. И тогда наша БД будет содержать записи, которые относят одного студента одновременно к разным группам. Чтобы этого не произошло, мы должны принимать дополнительные непростые меры, например организовывать процесс согласованного изменения с использованием сложного механизма транзакций, который мы будем рассматривать в лекциях, посвященных вопросам распределенного доступа к БД. Если же мы перешли ко
Отношение находится в
Рассмотрим отношение, связывающее студентов с группами, факультетами и специальностями, на которых он учится.
(ФИО, Номер зач.кн., Группа, Факультет, Специальность, Выпускающая кафедра)
Номер зач.кн., однако рассмотрим остальные функциональные зависимости. Группа, в которой учится студент, однозначно определяет факультет, на котором он учится, а также специальность и выпускающую кафедру. Кроме того, выпускающая кафедра однозначно определяет факультет, на котором обучаются студенты, выпускаемые по данной кафедре. Но если мы предположим, что одну специальность могут выпускать несколько кафедр, то специальность не определяет выпускающую кафедру. В этом случае у нас есть следующие функциональные зависимости:
Номер зач.кн. -> ФИО Номер зач.кн. -> Группа Номер зач.кн. -> Факультет Номер зач.кн. -> Специальность Номер зач.кн. -> Выпускающая кафедра Группа -> Факультет Группа -> Специальность Группа -> Выпускающая кафедра Выпускающая кафедра -> Факультет
И эти зависимости образуют транзитивные группы. Для того чтобы избежать этого, мы можем предложить следующий набор отношений:
(Номер.зач.кн., ФИО, Специальность, Группа) (Группа, Выпускающая кафедра) (Выпускащая кафедра, Факультет)
Теперь необходимо удостовериться, что при естественном соединении мы не потеряем ни одной строки и не получим лишних кортежей. И это упражнение я предлагаю выполнить вам самостоятельно.
Полученный набор отношений находится в
Отношение находится в
Рассмотрим отношение, моделирующее сдачу студентом текущих экзаменов. Предположим, что студент может сдавать экзамен по одной дисциплине несколько раз, если он получил неудовлетворительную оценку. Допустим, что во избежание возможных полных однофамильцев мы можем однозначно идентифицировать студента номером его зачетной книги, но, с другой стороны, у нас ведется электронный учет текущей успеваемости студентов, поэтому каждому студенту -присваивается в период его обучения в вузе уникальный номер-идентификатор. Отношение, которое моделирует сдачу текущей сессии, имеет следующую структуру:
(Номер зач.кн., Идентификатор_студента, Дисциплина, Дата, Оценка)
Возможными Номер_зач.кн, Дисциплина, Дата и Идентификатор_студента, Дисциплина, Дата.
Какие функциональные зависимости у нас имеются?
Номер_зач.кн, Дисциплина, Дата -> Оценка; Идентификатор_студента, Дисциплина, Дата -> Оценка; Номер зач.кн. -> Идентификатор_студента; Идентификатор_студента -> Номер зач.кн.
Идентификатор_студента, поэтому по значению Номер зач.кн. можно однозначно определить Идентификатор_студента (это третья зависимость) и обратно (и это четвертая зависимость). Оценим это отношение.Номер зач.кн.и Идентификатор_студента, которые не являются возможными (Идентификатор_студента, Дисциплина, Дата, Оценка) (Номер зач.кн., Идентификатор_студента)
или наоборот:
(Номер зач.кн., Дисциплина, Дата, Оценка) (Номер зач.кн., Идентификатор_студента)
Эти схемы равнозначны с точки зрения теории нормализации, поэтому выбирать проектировщикам следует исходя из некоторых дополнительных рассуждений. Ну, например, если учесть, что зачетные книжки могут теряться, то как они будут восстанавливаться: если с тем же самым номером, то нет разницы, но если с новым номером, то тогда первая схема предпочтительней.
В большинстве случаев достижение третьей нормальной формы или даже формы Бойса—Кодда считается достаточным для реальных проектов баз данных, однако в теории нормализации существуют нормальные формы высших порядков, которые уже связаны не с функциональными зависимостями между атрибутами отношений, а отражают более тонкие вопросы семантики предметной области и связаны с другими видами зависимостей. Прежде чем перейти к рассмотрению нормальных форм высших порядков, дадим еще несколько определений.
В отношении R (A, B, C) существует многозначная зависимость (multi valid dependence, MVD) R.A ->> R.B в том и только в том случае, если множество значений B, соответствующее паре значений A и C, зависит только от A и не зависит от С.
Когда мы рассматривали функциональные зависимости, то каждому значению
(Номер зач.кн., Группа, Дисциплина)
Перечень дисциплин, которые должен сдавать студент, однозначно определяется не его фамилией, а номером группы (то есть специальностью, на которой он учится).
В данном отношении существуют следующие две многозначные зависимости:
Группа ->> Дисциплина Группа ->> Номер зач.кн.
Это означает, что каждой группе однозначно соответствует перечень дисциплин по учебному плану и номер группы определяет список студентов, которые в этой группе учатся.
Если мы будем работать с исходным отношением, то мы не сможем хранить информацию о новой группе и ее учебном плане — перечне дисциплин, которые должна пройти группа до тех пор, пока в нее не будут зачислены студенты. При изменении перечня дисциплин по учебному плану, например при добавлении новой дисциплины, внести эти изменения в отношение для всех студентов, занимающихся в данной группе, весьма затруднительно. С другой стороны, если мы добавляем студента в уже существующую группу, то мы должны добавить множество кортежей, соответствующих перечню дисциплин для данной группы. Эти аномалии модификации отношения как раз и связаны с наличием двух
В R (A, B, C) существует R.A ->> R.B в том и только в том случае, когда существует R.A ->> R.C.
Дальнейшая нормализация отношений, подобных нашему, основывается на
Отношение R (A, B, C) можно спроецировать без потерь в отношения R1 (A, B) и R2 (A, C) в том и только в том случае, когда существует MVD A ->> B | C ( что равнозначно наличию двух зависимостей A ->> B и A ->> C ).
Под проецированием без потерь понимается такой способ декомпозиции отношения путем применения
Отношение R находится в A ->> B все остальные атрибуты R функционально зависят от A.
В нашем примере можно произвести декомпозицию исходного отношения в два отношения:
(Номер зач.кн., Группа) (Группа, Дисциплина)
Оба эти отношения находятся в
Последней нормальной формой является пятая нормальная форма
зависимостей является в некотором роде обобщением
Отношение R (X, Y,..., Z) удовлетворяет зависимости соединения (X, Y,..., Z) в том и только в том случае, когда R восстанавливается без потерь путем соединения своих проекций на X, Y, ..., Z. Здесь X, Y, ..., Z — наборы атрибутов отношения R.
Наличие PJ-зависимости в отношении делает его в некотором роде избыточным и затрудняет операции модификации.
Отношение R находится в пятой нормальной форме (нормальной форме проекции-соединения — PJ/NF ) в том и только в том случае, когда любая зависимость соединения в R следует из существования некоторого возможного ключа в R.
Рассмотрим отношение R1:
R1(Преподаватель, Кафедра, Дисциплина)
Предположим, что каждый преподаватель может работать на нескольких кафедрах и на каждой кафедре может вести несколько дисциплин. В этом случае
Введем следующие обозначения наборов атрибутов:
ПК (Преподаватель, Кафедра) ПД (Преподаватель, Дисциплина) КД (Кафедра, Дисциплина)
Допустим, что отношение R1 удовлетворяет зависимости проекции соединения ( ПК, ПД, КД ). Тогда отношение R1 не находится в NF/PJ, потому что единственным ключом его является полный набор атрибутов, а наличие зависимости PJ связано с наборами атрибутов, которые не составляют возможные ключи отношения R1. Для того чтобы привести это отношение к NF/PJ, его надо представить в виде трех отношений:
R2 (Преподаватель, Кафедра) R3 (Преподаватель, Дисциплина) R4 (Кафедра, Дисциплина)
Пятая нормальная форма редко используется на практике. В большей степени она является теоретическим исследованием. Очень тяжело определить само наличие зависимостей "проекции—соединения", потому что утверждение о наличии такой зависимости делается для всех возможных состояний БД, а не только для текущего экземпляра отношения R1. Однако знание о возможном наличии подобных зависимостей, даже теоретическое, нам все же необходимо.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.