Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике с вопросами к экзамену(ОЗО).doc
Скачиваний:
143
Добавлен:
10.03.2016
Размер:
1.21 Mб
Скачать

Проектирование реляционных баз данных

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

Процесс нормализации отношений основан на концепции нормальных форм.

Говорят, что отношение находится в некоторой нормальной форме (НФ), если оно удовлетворяет заданному набору условий.

Известно несколько НФ: первая нормальная форма (1НФ), вторая нормальная форма (2НФ), третья нормальная форма (3НФ), нормальная форма Бойса-Кодда (НФБК), четвертая нормальная форма (4НФ), пятая нормальная форма (5НФ). Причем все условия, необходимые для некоторой НФ, должны выполняться и для всех последующих НФ.

Возникает вопрос, можно ли продолжить нормализацию дальше, получить 6-ю, 7-ю и т. д. НФ? Действительно, существуют дополнительные НФ, но 5НФ считается во многих смыслах окончательной. А для практического проектирования достаточной считают 3НФ. Поэтому рассмотрим только три первые нормальные формы.

Отношение находится в 1НФ тогда и только тогда, когда значения всех полей неделимы.

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

Отношение находится во 2НФ тогда и только тогда, когда оно находится в 1НФ и каждое неключевое поле зависит от всего первичного ключа.

Например, рассмотрим отношение Успеваемость(НомерЗачетнойКнижки,Фамилия,Имя,Отчество,Дисциплина,Оценка).

Если первичным ключом здесь назначить НомерЗачетнойКнижки, то от него не будет зависеть полеДисциплина. В этом случае отношение не находится во 2НФ.

Можно тогда в качестве первичного ключа взять множество полей {НомерЗачетнойКнижки,Дисциплина}. От такого ключа зависят все поля, но поляФамилия,Имя,Отчествозависят только от поля НомерЗачетнойКнижки.

И при таком первичном ключе отношение не находится во 2НФ.

Чтобы получить отношения во 2НФ, произведем разбиение на два отношения:

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

Успеваемость1 (НомерЗачетнойКнижки, Дисциплина, Оценка).

Отношение находится в 3НФ тогда и только тогда, когда оно находится во 2НФ и каждое неключевое поле напрямую зависит от первичного ключа.

Например, рассмотрим отношение Студенты(НомерЗачетнойКнижки, Фамилия, Имя, Отчество, Группа,Специальность). Тогда получается, что полеСпециальность зависит от первичного ключа не напрямую, а через поле Группа.

Проведем разбиение на два отношения:

Группы (КодГруппы, Специальность) и

Студенты1(НомерЗачетнойКнижки, Фамилия, Имя, Отчество, КодГруппы)

Полученные отношения в 3НФ.

Если отношение не находится ни во 2НФ, ни в 3НФ, существует избыточность, которая приводит к нарушению целостности данных.

Связи в реляционных базах данных

В БД отношения могут быть связаны друг с другом. Например, в БД ФакультетотношениеСтуденты(НомерЗачетнойКнижки,Фамилия,Имя,Отчество,КодГруппы) связано с отношениемГруппы(КодГруппы,Специальность,Курс). Значение поляКодГруппыв отношенииСтудентыдопустимо только в том случае, если такое значение имеется в качестве значения первичного ключа отношенияГруппы. В этом случае полеКодГруппыв отношенииСтудентыявляетсявнешним ключом, ссылающимся на первичный ключ –КодГруппыотношенияГруппы(см. рис. 14).

Значение внешнего ключа является ссылкойк записи, содержащей соответствующее значение первичного ключа. Отношение, содержащее внешний ключ, называется ссылающимся (подчиненным), а отношение, содержащее объект ссылки (первичный ключ) – ссылочным (главным).

Внешние ключи реализуют следующие три типа связей между двумя отношениями.

  1. Один-к-одному: каждой записи первого отношения соответствует не более одной записи второго отношения, а каждой записи второго отношения – не более одной записи первого отношения. Например – см. рис. 15.

  2. Один-ко-многим: каждой записи ссылочного (главного) отношения соответствует ноль, одна или несколько записей ссылающегося (подчиненного) отношения, а каждой записи ссылающегося (подчиненного) отношения соответствует только одна запись ссылочного (главного) отношения. Пример – см. рис. 14.

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