суббота, 15 августа 2009 г.

БД23

3.2.2. Внешние ключи
Вспомним нашу БД Факультет. В отношении Студенты значение атрибута Группа допустимо только в том случае, если такое значение имеется в качестве значения первичного ключа отношения Группы. В этом случае атрибут Группа в отношении Студенты является внешним ключом, ссылающимся на первичный ключ – КодГруппы отношения Группы.
Внешний ключ существует для обеспечения непротиворечивости данных с внешним миром и внутри БД, т.е. значение внешнего ключа не может быть таким, которого нет среди значений первично ключа связанной таблицы.
В реляционной БД предусмотрена связь внешнего ключа не только с первичным, но и с любым другим потенциальным ключом, т.е. с альтернативным. Но нельзя создавать дублирующие связи – и с первичным, и с альтернативным – чтобы избежать избыточности данных.
Уточним определение внешнего ключа:
Пусть R2 — базовое отношение некой БД. Тогда внешний ключ FK (foreign key) отношения R2 – это подмножество множества атрибутов R2, такое, что:
1) существует базовое отношение R1, содержащее потенциальный ключ CK;
2) каждое значение FK в текущем значении R2, всегда совпадает со значением CK некоторого кортежа в текущем значении отношения R1.
Некоторые замечания по этому определению (следствия):
1. По определению, каждое значение внешнего ключа должно является значением соответствующего потенциального ключа, однако, обратное не требуется, т.е. потенциальный ключ, соответствующий данному внешнему ключу может содержать значения, которые в данный момент не являются значением внешнего ключа. НАПРИМЕР, может существовать кружок, который пока никто не посещает.
2. Данный внешний ключ будет составным тогда и только тогда, когда соответствующий потенциальный ключ также будет составным. Аналогично – внешний ключ будет простым тогда и только тогда, когда соответствующий потенциальный ключ – простой (состоящий из одного атрибута). НАПРИМЕР, добавим в БД Факультет отношение Расписание (№Недели, ДеньНедели, №пары, Группа, Дисциплина, Преподаватель, Кабинет). Здесь внешний ключ {Группа, Дисциплина, Преподаватель} будет составным, как и соответствующий первичный ключ в отношении Занятия (Группа, Дисциплина, Преподаватель).
3. Каждый атрибут, входящий в данный внешний ключ должен быть определен на том же домене, что и соответствующий атрибут соответствующего потенциального ключа.
4. R1 и R2 не обязательно различны НАПРИМЕР, в отношение Учителя можно ввести атрибут Куратор, значениями которого будут коды учителей их этого же отношения.
С понятием внешнего ключа связывается еще ряд терминов:
По сути значение внешнего ключа является ссылкой к кортежу, содержащему соответствующее значение потенциального ключа. Этот кортеж называется ссылочный (целевой) кортеж, а содержащее его отношение – ссылочное (целевое). Отношение, содержащее внешний ключ называется ссылающимся отношением. (ПРИМЕР)
Существует также ссылочная диаграмма.
НАПРИМЕР: Группы  Студенты  Кружки/Секции
Стрелки в ссылочной диаграмме направлены от отношения с внешним ключом к отношению с потенциальным ключом.
Иногда над стрелочками пишет название атрибута, по которому идет связь.
Ссылочный путь от отношения Rn к отношению Rm - это последовательность связанных отношений, которая приводит от Rn к Rm.
Rn  Rn+1  …  Rm-1  Rm
НАПРИМЕР: ссылочный путь от отношения Студенты к отношению Дисциплины: СтудентыГруппыДисциплины
Существует понятие ссылочного цикла: Rn  Rn+1  …  Rn-1  Rn
С внешними ключами связано правило ссылочной целостности:
БД не должна содержать несогласованных значений внешнего ключа (несогласованные значения – такие значения, которых нет для потенциального ключа в ссылочном отношении).
По сути, это правило эквивалентно определению внешнего ключа.

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

Для вас оперативная регистрация ooo нашими профессиональными юристами. Начните свое дело вместе с нами!