Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
510
Добавлен:
06.03.2016
Размер:
2.95 Mб
Скачать
        1. Функциональная зависимость, ключи

Функциональная зависимость– это связь между значениями атрибутов (или просто атрибутами) отношения. Предположим, что если мы знаем значение одного атрибута, то можем вычислить (или найти) значение другого атрибута. Например, если нам известна фамилия студента (отношениеСТУДЕНТ), то мы можем определить год его рождения. В таком случае мы можем сказать, что атрибутГодРожднияфункционально зависитот атрибутаФамилия. АтрибутСреднийБаллтакже зависит от атрибутаФамилия. Функциональные зависимости обозначаются следующим образом:

Фамилия  ГодРождения

Фамилия  СреднийБалл

Атрибуты по левую сторону от стрелки называются детерминантами. В нашем примере каждой фамилии студента соответствует только один год рождения и только один средний балл. Обратное, однако неверно. В функциональные зависимости могут быть вовлечены группы атрибутов. Рассмотрим отношениеОЦЕНКИ(НомерСтудента,Дисциплина,Оценка). Комбинация номера студента и дисциплины определяет оценку:

(НомерСтудента, Дисциплина)  Оценка

Отметим, что для определения оценки требуется как номер студента, так и дисциплина. Нельзя разделить эту функциональную зависимость, т.к. ни номер студента, ни дисциплина по отдельности не определяют оценку сами по себе.

Ключ– это группа из одного или более атрибутов, которая уникальным образом идентифицирует строку. Рассмотрим отношениеСЕКЦИЯ(НомерСтудента, Секция, Плата), представленное на рис. 2.8. Каждая строка этого отношения содержит информацию о том, что студент посещает определенную секцию за определенную плату.

НомерСтудента

Секция

Плата

100

Лыжи

200

150

Плавание

50

175

Борьба

50

200

Плавание

50

Рис. 2.7. ОтношениеСЕКЦИЯ

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

Если студентам разрешено одновременно посещать более одной секции, то один и тот же номер студента появится в разных строках таблицы (рис.2.9), поэтому только НомерСтудентане будет уникальным образом определять строку, для этого потребуется какое-то сочетание атрибутов. Очевидно, что комбинация (НомерСтудента, Плата) не может уникальным образом определить строку, так как четвертая и пятая строка содержат одинаковые пары (175, 50). В силу этого, данная комбинация ключом быть не может. Подобная ситуация имеет место и для комбинации (Секция, Плата). А вот комбинация (НомерСтудента, Секция) уникальным образом определяет строку таблицы и может быть ключом отношенияСЕКЦИЯ.

НомерСтудента

Секция

Плата

100

Лыжи

200

100

Гольф

65

150

Плавание

50

175

Борьба

50

175

Плавание

50

200

Плавание

50

200

Гольф

65

Рис. 2.8. ОтношениеСЕКЦИЯ

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

В итоге на данный момент схема отношения СЕКЦИЯ(рис.2.9) будет следующейСЕКЦИЯ(НомерСтудента, Секция, Плата), в то время, как схема отношенияСЕКЦИЯ(рис.2.8) может выглядеть иначе:СЕКЦИЯ(НомерСтудента, Секция, Плата). Еще раз подчеркнем, что вопрос о выборе ключа зависит от соглашений и правил, принятых в моделируемой предметной области, которые определяют специфику подлежащих хранению данных. Из всего вышесказанного можно сделать вывод, чтокаждое отношение имеет как минимум один ключ(в первую очередь в силу того, что оно должно удовлетворять свойствам отношений, а именно – не иметь повторяющихся строк).

Для того чтобы не путать понятия функциональная зависимость, ключ и уникальность, необходимо уяснить следующее: детерминант функциональной зависимости может быть в отношении уникальным или неуникальным. Например, в отношенииСЕКЦИИатрибутСекцияфункционально определяет атрибутПлата, но название конкретной секции может фигурировать в нескольких строках отношения. В отличие от детерминантов, ключи всегда являются уникальными.Ключ функционально определяет целую строку. Таким образом, когда мы говорим, что атрибут (или комбинация атрибутов) является ключом, мы знаем, что этот атрибут или комбинация атрибутов будут уникальными.

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

Соседние файлы в папке лекции