Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Управление данными (пособие).pdf
Скачиваний:
280
Добавлен:
21.05.2015
Размер:
5.42 Mб
Скачать

92

9.4.Ограничения целостности уровня базы данных

Внешние и родительские ключи отношения. Ссылочная целостность

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

Рассмотрим в качестве примера приведенные ниже на рис.9.2 отношения

СТУДЕНТЫ, ДИСЦИПЛИНЫ, УСПЕВАЕМОСТЬ и ФАКУЛЬТЕТЫ. Первое из них представляет персональную информацию о конкретных студентах. Его кортежи содержат данные о конкретных экземплярах сущности СТУДЕНТ. В отношении ДИСЦИПЛИНЫ содержится информация об изучаемых дисциплинах. Отношение УСПЕВАЕМОСТЬ представляет уже информацию о связи между сущностями СТУДЕНТ и ДИСЦИПЛИНА. Это связь многие-ко-многим – студент может иметь оценки по многим дисциплинам, и по конкретной дисциплине имеют оценки многие студенты. В отношении ФАКУЛЬТЕТЫ представлена информация о факультетах. Первичным ключом отношения СТУДЕНТЫ является атрибут КОД_СТУД (личный код студента), в отношении ДИСЦИПЛИНЫ первичным ключом является атрибут КОД_ДИСЦ, в отношения ФАКУЛЬТЕТЫ первичный ключ это атрибут ФАКУЛЬТЕТ, у отношения УСПЕВАЕМОСТЬ первичный ключ составной, это – {КОД_СТУД, КОД_ДИСЦ}.

СТУДЕНТЫ

 

 

 

УСПЕВАЕМОСТЬ

 

КОД_СТУД

ИМЯ

ФАКУЛЬТЕТ

СТАРОСТА

 

КОД_СТУД

КОД_ДИСЦ

ОЦЕНКА

С2

Иванов

Физический

С2

 

С9

Д2

5

С5

Петров

Химический

С9

 

С9

Д4

4

С4

Сидоров

Физический

С2

 

С9

Д1

4

С9

Орлов

Химический

С9

 

С9

Д6

5

С6

Смирнов

Физический

С2

 

С6

Д2

3

С1

Попова

Исторический

NULL

 

С6

Д4

4

С8

Поляков

NULL

NULL

 

С6

Д6

3

 

 

 

 

 

С1

Д4

5

 

 

 

 

 

С1

Д6

5

 

 

 

 

 

С1

Д8

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

93

ДИСЦИПЛИНЫ

 

 

 

ФАКУЛЬТЕТЫ

 

 

 

КОД_ДИСЦ

ДИСЦИПЛИНА

ЧАСЫ

СЕМЕСТР

 

ФАКУЛЬТЕТ

ДЕКАН

ТЕЛЕФОН

 

Д2

Физика

32

2

 

Физический

Климов

123778

 

Д4

Математика

54

1

 

Химический

Боев

123556

 

Д1

История

32

3

 

Исторический

Зуев

123367

 

Д6

Информатика

108

1

 

Математический

Ковалев

123876

 

Д8

Химия

17

4

 

 

 

 

 

Рис. 9.2. Примеры отношений базы данных для иллюстрации ограничений ссылочной целостности базы данных

При внимательном рассмотрении приведенных отношений можно увидеть, что значения некоторых атрибутов одного отношения оказываются связанными со значениями атрибутов в другом отношении. Рассмотрим характер связи между отношениями СТУДЕНТЫ и УСПЕВАЕМОСТЬ. В отношении УСПЕВАЕМОСТЬ не должно быть кортежей с записями, касающимися студентов, о которых отсутствует информация в отношении СТУДЕНТЫ (информация об оценках «неизвестно кого» не имеет смысла). Отсюда следует, что на значения атрибута КОД_СТУД отношения УСПЕВАЕМОСТЬ должно быть наложено соответствующее ограничение, а именно, – в качестве его значений могут использоваться только коды студентов фактически присутствующие в отношении СТУДЕНТЫ. Атрибут КОД_СТУД отношений является фактически средством связи этих отношений. При этом, как мы уже говорили, атрибут КОД_СТУД отношения СТУДЕНТЫ является первичным ключом этого отношения. В отношении же УСПЕВАЕМОСТЬ атрибут КОД_СТУД является так называемым внешним ключом, ссылающимся на соответствующий первичный ключ отношения СТУДЕНТЫ. Аналогично, в этом же отношении атрибут КОД_ДИСЦ является внешним ключом, ссылающимся на одноименный атрибут отношения ДИСЦИПЛИНЫ, а в отношении СТУДЕНТЫ атрибут ФАКУЛЬТЕТ является внешним ключом, ссылающимся на одноименный атрибут отношения

ФАКУЛЬТЕТЫ.

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

Пусть R2 – базовое отношение. Тогда внешний ключ (foreign key), FK в отношении R2 – это подмножество множества атрибутов R2, такое что:

существует базовое отношение R1 (отношения R1 и R2 не обязательно различные) с потенциальным ключом PK;

каждое значение внешнего ключа FK в текущем значении R2 всегда совпадает со значением потенциального ключа PK некоторого кортежа в текущем значении R1.

94

Потенциальный ключ, на который ссылается внешний ключ, называют

родительским ключом.

Значения внешнего ключа называют ссылкой (reference) к кортежу, содержащему соответствующее значение родительского потенциального ключа. Этот кортеж называют ссылочным (referenced) или целевым

(target) кортежем.

Проблема необходимости обеспечения соответствия значений внешнего ключа значениям определенного потенциального ключа известна как проблема

ссылочной целостности (referential integrity problem), а само ограничение,

накладываемое на допустимые значения внешнего ключа, называют

ссылочным ограничением (referential constraint).

Прокомментируем приведенное выше определение внешнего ключа.

1.Из определения следует, что каждое значение внешнего ключа должно являться значением соответствующего родительского потенциального ключа. Однако надо обратить внимание на то, что обратное не требуется, потенциальный ключ, выступающий в качестве родительского, может содержать значения, которые в данный момент не являются значением внешнего ключа. Например, в отношении СТУДЕНТЫ могут быть записи о студентах, не имеющих оценок ни по одной из дисциплин, и поэтому в отношении УСПЕВАЕМОСТЬ записи о них и, следовательно, соответствующие значения внешнего ключа будут отсутствовать.

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

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

4.Следует иметь в виду, что целевое отношение может само ссылаться на другое отношение, которое в свою очередь может ссылаться на следующее отношение, образуя, таким образом, цепь или каскад из отношений, последовательно ссылающихся друг на друга. (В приведенном примере отношение УСПЕВАЕМОСТЬ ссылается на отношение СТУДЕНТЫ, которое, в свою очередь ссылается на отношение ФАКУЛЬТЕТЫ).

5.Из определения внешнего ключа также следует, что отношение может ссылаться само на себя. (В отношении СТУДЕНТЫ атрибут СТАРОСТА в качестве внешнего ключа ссылается на атрибут КОД_СТУД этого же отношения, являющийся для него родительским ключом).

95

Внешние ключи и NULL-значения

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

Как уже говорилось выше, NULL-значения являются недопустимыми для первичных ключей. Появление же NULL-значений в позициях внешних ключей в общем случае не запрещено. Эта ситуация означает лишь то, что для конкретного кортежа ссылающегося отношения значение соответствующего родительского ключа не известно. Например, в отношении СТУДЕНТЫ атрибут ФАКУЛЬТЕТ является внешним ключом, ссылающимся на одноименный атрибут отношения ФАКУЛЬТЕТЫ, в котором этот атрибут является первичным ключом. Тот факт, что в отношении СТУДЕНТЫ в кортеже студента по фамилии Поляков вместо значения конкретного факультета установлен маркер NULL, означает то, что для этого студента в данный момент времени не известно на каком факультете он учится.

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

Пусть R2 – базовое отношение. Тогда внешний ключ, скажем FK в отношении R2 – это подмножество множества атрибутов R2, такое что:

существует базовое отношение R1 (отношения R1 и R2 не обязательно различные) с потенциальным ключом PK;

каждое значение внешнего ключа FK в текущем значении R2 или является NULL-значением, или совпадает со значением потенциального ключа PK некоторого кортежа в текущем значении R1.

Решение вопроса о допустимости или недопустимости использования для внешнего ключа NULL-значений зависит от конкретной ситуации. Например, должно быть понятно, что в рассматриваемом выше примере для внешнего ключа, представленный атрибутом КОД_СТУД отношения УСПЕВАЕМОСТЬ, запрещено использование NULL-значений из-за того, что сам этот атрибут является частью составного первичного ключа {КОД_СТУД, ДИСЦИПЛИНА}

отношения УСПЕВАЕМОСТЬ. Для атрибутов СТАРОСТА и ФАКУЛЬТЕТ,

являющихся внешними ключами отношения СТУДЕНТЫ, NULL-значения в принципе допустимы. Их наличие будет отражать тот факт, что для конкретного студента не известно, кто является его старостой, или не известно, на каком факультете он учится. Допускать или не допускать использование