Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по ИТУ.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.31 Mб
Скачать

Пример связи записей двух таблиц

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

Рисунок 4.9. Пример таблиц реляционной базы данных

к разделy 4.6.2.2

В первой таблице «Табельный №» - первичный ключ, «Код отдела» - внешний ключ. Во второй таблице «Код» - первичный ключ.

Таблица 1

Табельный №

Фамилия И.О.

Код отдела

Рабочий телефон

008976

ПЕТРОВ А.В.

024

555-12-67

008980

РОМАНЕНКО С.Т.

024

555-12-80

008934

СТЕПАНОВА И.С.

025

 

Таблица 2

Код

Наименование отдела

010

ДИРЕКЦИЯ

023

БУХГАЛТЕРИЯ

024

ОТДЕЛ КАДРОВ

025

КАНЦЕЛЯРИЯ

Пример связи записей двух таблиц

Табельный №

Фамилия И.О.

Код отдела

Рабочий телефон

008980

РОМАНЕНКО С.Т.

024

555-12-80

+

Код

Наименование отдела

024

ОТДЕЛ КАДРОВ

=

Табельный №

Фамилия И.О.

Код отдела

Рабочий телефон

Наименование отдела

008980

РОМАНЕНКО С.Т.

024

555-12-80

ОТДЕЛ КАДРОВ

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

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

Подобное нарушение целостности может возникнуть и в том случае, когда удаляется одна из записей таблицы, содержащей ключевое поле. Например, при удалении из таблицы "ОТДЕЛЫ" записи №3, содержащей ключ 024, записи №1 и №2 таблицы "СОТРУДНИКИ" будут ссылаться на несуществующий отдел.

Целостность данных в этом случае поддерживается одним из нескольких способов:

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

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

  • Ссылающиеся записи "каскадно" уничтожаются. При удалении записи об отделе 024 в таблице "ОТДЕЛЫ" все записи о сотрудниках этого отдела в таблице "СОТРУДНИКИ" также будут удалены.

Современные СУБД поддерживают несколько способов поддержания целостности. Выбор одного из них зависит от особенностей предметной области.

Итак, реляционная база данных - это такая база данных, которая воспринимается ее пользователем как совокупность таблиц.