База данных

Автор работы: Пользователь скрыл имя, 06 Января 2014 в 21:03, лекция

Описание работы

Системы управления базами данных (СУБД) – это специализированные программные продукты, позволяющие:
1) постоянно хранить сколь угодно большие (но не бесконечные) объемы данных;
2) извлекать и изменять эти хранящиеся данные в том или ином аспекте, используя при этом так называемые запросы;

Файлы: 1 файл

1.docx

— 453.70 Кб (Скачать файл)

 

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

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

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

В теории реляционных баз  данных обычно выделяется следующая  последовательность нормальных форм:

1) первая нормальная форма  (1 NF);

2) вторая нормальная форма  (2 NF);

3) третья нормальная форма  (3 NF);

4) нормальная форма Бойса  – Кодда (BCNF);

5) четвертая нормальная  форма (4 NF);

6) пятая нормальная форма,  или нормальная форма проекции-соединения (5 NF или PJ/NF).

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

Основные свойства нормальных форм состоят в следующем:

1) каждая следующая нормальная  форма в некотором смысле лучше  предыдущей нормальной формы;

2) при переходе к следующей  нормальной форме свойства предыдущих  нормальных форм сохраняются.

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

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

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

2) процедурно, т. е. написанием  программного кода (использованием  упомянутых выше так называемых  триггеров).

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

Для того чтобы наглядно в  сравнении продемонстрировать работу ненормализованной и нормализованной  базы данных, рассмотрим следующий  пример.

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

Итак, вариант 1  схемы базы данных.

 

 

Сессия (№ зачетной книжки , Фамилия, Имя, Отчество, Предмет , Оценка)

 

 

В этом отношении, как видно  из изображения схемы базового отношения, задан составной первичный ключ:

 

Primary key (№ зачетной  книжки, Предмет);

 

Также в этом отношении  задана система функциональных зависимостей:

 

{№ зачетной  книжки} → {Фамилия, Имя, Отчество};

 

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

 

Здесь для поддержания  целостности данных по состоянию, т. е. для выполнения ограничения системы  функциональной зависимости {№ зачетной книжки} → {Фамилия, Имя, Отчество} при  изменении, например, фамилии необходимо просматривать все кортежи этого  базового отношения и последовательно  вводить необходимые изменения. Однако так как это довольно громоздкий и трудоемкий процесс (особенно если мы имеем дело с базой данных большого учебного заведения), разработчики систем управления базами данных пришли к  выводу, что этот процесс необходимо автоматизировать, т. е. сделать автоматическим. Теперь контроль выполнения этой (и  любой другой) функциональной зависимости  можно организовывать автоматически  при помощи правильного объявления в базовом отношении различных  ключей и так называемой декомпозиции (т. е. разбиения чего-либо на несколько самостоятельных частей) этого отношения.

Итак, нашу имеющуюся схему  отношения «Сессия» разобьем на две  схемы: схему «Студенты», содержащую только информацию о студентах данного  учебного заведения, и схему «Сессия», содержащую информацию о последней  прошедшей сессии. А затем объявим  ключи таким образом, чтобы можно  было без труда получить любую  необходимую информацию.

Покажем, как будут выглядеть  эти новые схемы отношений  со своими ключами.

Вариант 2  схемы базы данных.

 

Студенты (№ зачетной книжки , Фамилия, Имя, Отчество),

Primary key (№ зачетной  книжки).

 

Сессия (№ зачетной книжки , Предмет , Оценка),

Primary key (№ зачетной  книжки, Предмет),

Foreign key (№ зачетной  книжки) references Студенты (№ номер  зачетной книжки).

 

 

Что мы имеем теперь? В  отношении «Студенты» первичный  ключ «№ зачетной книжки» функционально  определяет остальные три атрибута: «Фамилия», «Имя» и «Отчество». А  в отношении «Сессия» составной  первичный ключ «№ зачетной книжки, Предмет» также однозначно, т. е. буквально  функционально определяет последний  атрибут этой схемы отношения  – «Оценка». И связь между этими  двумя отношениями налажена: она  осуществляется посредством внешнего ключа отношения «Сессия» «№ зачетной книжки», который ссылается на одноименный  атрибут отношения «Студенты» и  при соответствующем запросе  представляет всю необходимую информацию.

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

 

 

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

2. Первая  нормальная форма (1NF)

 

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

Составные атрибуты,  в отличие от простых, – это атрибуты, составленные из нескольких простых атрибутов.

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

Приведем примеры простых, составных, однозначных и многозначных атрибутов.

Рассмотрим следующую  таблицу, представляющую отношение:

 

Здесь атрибут «Телефон»  – простой, однозначный, а атрибут  «Адрес» – простой, но многозначный.

Теперь рассмотрим другую таблицу, с другими атрибутами:

 

В этом отношении, представленном таблицей, атрибут «Телефоны» –  простой, но многозначный, а атрибут  «Адреса» – и составной, и многозначный.

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

 

При нормализации схем базовых  отношений программистами может  быть использована одна из четырех  наиболее распространенных видов нормальных форм: первая нормальная форма (1NF), вторая нормальная форма (2NF), третья нормальная форма (3NF) или нормальная форма Бойса  – Кодда (NFBC). Поясним: сокращение NF – это аббревиатура от англоязычного  словосочетания Normal Form. Формально, кроме  вышеназванных, существуют и другие виды нормальных форм, но вышеназванные  – одни из самых востребованных.

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

 

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

Для наглядного объяснения различий нормализованных и ненормализованных  отношений рассмотрим пример.

Пусть, имеется ненормализованное  отношение, со следующей схемой.

Итак, вариант 1  схемы отношения с заданным на ней простым первичным ключом:

 

Сотрудники (№ табельный , Фамилия Имя Отчество, Код должности, Телефоны, Дата приема или увольнения);

 

 

Primary key (№ табельный);

 

Перечислим, какие в этой схеме отношения имеются ошибки, т. е. назовем те признаки, которые  и делают собственно эту схему  ненормализованной:

1) атрибут «Фамилия Имя  Отчество» является составным,  т. е. составленным из разнородных  элементов;

2) атрибут «Телефоны» является  многозначным, т. е. его значением  является множество значений;

3) атрибут «Дата приема  или увольнения» не имеет однозначной  семантики, т. е. в последнем  случае не понятно, какая именно  дата внесена.

Если, например, ввести дополнительный атрибут, чтобы поточнее определить смысл даты, то для этого атрибута значение будет семантически понятно, но тем не менее остается возможность  хранения только какой-то одной из указанных дат для каждого сотрудника.

Что же необходимо сделать  для приведения этого отношения  к нормальной форме?

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

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

Таким образом, с учетом всего  вышесказанного после приведения отношения  «Сотрудники» к первой нормальной форме  или 1NF путем его декомпозиции мы получим систему следующих отношений  с заданными на них первичными и внешними ключами.

Итак, вариант 2  отношения:

 

Сотрудники (№ табельный , Фамилия, Имя, Отчество, Код должности, Дата приема, Дата увольнения);

Primary key (№ табельный);

 

Телефоны (№ табельный , Телефон );

Primary key (№ табельный,  Телефон);

Foreign key (№ табельный) references Сотрудники (№ табельный);

 

Итак, что мы видим? Составного атрибута «Фамилия Имя Отчество»  больше в нашем отношении нет, вместо него присутствуют три простых  атрибута «Фамилия», «Имя» и «Отчество», поэтому эта причина «ненормальности» отношения исключилась.

Кроме того, вместо атрибута с неясной семантикой «Дата приема или увольнения» у нас появилось  два атрибута «Дата приема» и  «Дата увольнения», каждый из которых  имеет однозначную семантику. Следовательно, вторая причина того, что наше отношение  «Сотрудники» не находится в нормальной форме, также благополучно устранена.

И, наконец, последняя причина  того, что отношение «Сотрудники» не было приведено к нормальной форме, – это наличие многозначного атрибута «Телефоны». Чтобы избавиться от этого атрибута, и необходимо было провести декомпозицию всего отношения. Из исходного отношения «Сотрудники» в результате этой декомпозиции был исключен атрибут «Телефоны» вообще, но зато образовалось второе отношение – «Телефоны», в котором присутствуют два атрибута: «№ табельный» сотрудника и «Телефон», т. е. все атрибуты – опять-таки простые, условие принадлежности к первой нормальной форме выполняется. Эти атрибуты «№ табельный» и «Телефон» образуют составной первичный ключ отношения «Телефоны», а атрибут «№ табельный», в свою очередь, является внешним ключом, ссылающимся на одноименный атрибут отношения «Сотрудники», т. е. в отношении «Телефоны» атрибут первичного ключа «№ табельный» является одновременно внешним ключом, ссылающимся на первичный ключ отношения «Сотрудники». Таким образом, обеспечивается связь между этими двумя отношениями. Посредством этой связи можно по номеру табельному любого сотрудника без особого труда и затрат времени вывести весь список его телефонов, не прибегая к использованию составных атрибутов.

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

Информация о работе База данных