Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИТ / М 3 Офісні програмні системи / Тема 8. Бази даних / ІТ Зан_32 Т9 Лк_15 - Можливості системи керування базою даних MS Access.doc
Скачиваний:
34
Добавлен:
19.02.2016
Размер:
729.6 Кб
Скачать

2.3. Связи между таблицами и модель «сущность-связь» Классификация связей между таблицами

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

Рассмотрим механизм связывания таблиц на конкретном примере. Предположим, что кроме изображенной на рис. 2.1 таблицы КОМПЬЮТЕРЫ база данных компьютерного магазина содержит таблицу с информацией о комплектующих (здесь ключевым атрибутом является Серийный номер) (рис. 2.2).

Между КОМПЬЮТЕРАМИ и КОМПЛЕКТУЮЩИМИ есть связь, заключающаяся в том, что каждое комплектующее устройство входит в состав определенного (одного) компьютера. В реляционной БД этот факт можно отобразить путем добавления к таблице КОМПЛЕКТУЮЩИЕ еще одного поля, которое будет содержать коды компьютеров (рис. 2.3).

Теперь становится понятным, что указанные в таблице КОМПЛЕКТУЮЩИЕ привод DVD-RW и один из модулей оперативной памяти входят в состав компьютера Pentium-4 3000, который имеет код 2402, а жесткий диск и второй модуль памяти - в состав компьютера Athlon 2800, который имеет код 1041. Связь было установлено путем добавления ключевого поля одной таблицы (КОМПЬЮТЕРЫ) в другую таблицу (КОМПЛЕКТУЮЩИЕ), в которой это поле уже не будет ключевым. Таблица, ключ которой копируется, называется главной, а таблица, в которую копируется ключ другой таблицы, - подчиненной. Понятия главной и подчиненной таблиц определяются лишь относительно определенной связи. Так, относительно связи «состав компьютеров» таблица КОМПЬЮТЕРЫ будет главной, а таблица КОМПЛЕКТУЮЩИЕ - подчиненной.

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

Различают бинарные связи следующих типов:

  • один-к-одному;

  • один-ко-многим;

  • многие-ко-многим.

Связь между таблицами КОМПЬЮТЕРЫ и КОМПЛЕКТУЮЩИЕ является связью типа «один-ко-многим», так как в состав каждого из компьютеров может входить много комплектующих, но каждое комплектующее устройство может принадлежать лишь одному компьютеру. Таким образом, связь «один-ко-многим» означает, что каждой записи главной таблицы отвечает произвольное количество записей подчиненной таблицы, а каждой записи подчиненной таблицы – не больше одной записи главной (рис. 2.4).

Связь «один-к-одному» означает, что каждой записи главной таблицы отвечает не больше одного записи подчиненной таблицы и наоборот – каждой записи подчиненной таблицы отвечает не больше одного записи главной (рис. 2.5).

Подобную связь можно установить между таблицами КОМПЛЕКТУЮЩИЕ и МОДУЛИ ПАМЯТИ, если в отдельной таблице хранить информацию о характеристиках каждого конкретного модуля оперативной памяти (рис. 2.6).

Теперь в БД хранится информация о том, что на компьютере Pentium-4 3000 установлен модуль памяти DDR2 емкостью 1 Гбайт (его серийный номер 215094000), а на компьютере Athlon 2800 - модуль DDR емкостью 512 Мбайт (его серийный номер 215094001). Внешним ключом таблицы МОДУЛИ ПАМЯТИ будет атрибут Серийный номер, он же будет и первичным ключом данной таблицы.

Связь «многие-ко-многим» означает, что каждой записи одной таблицы может отвечать произвольное количество записей другой таблицы, и наоборот (рис. 2.7а). Из двух таблиц, которые принимают участие в такой связи, нельзя выделить главной и подчиненной, поскольку ключевые атрибуты одной таблицы не добавляются непосредственно в другую. Эта связь моделируется путем создания вспомогательной таблицы, которая связывается с двумя главными таблицами связями «один-ко-многим» (рис. 2.7б).

Каждая запись вспомогательной таблицы отвечает одной связи между записями главных таблиц. Например, с помощью записи 5 вспомогательной таблицы, изображенной на рис. 2.7, моделируется связь между записью 1 таблицы 1 и записью 3 таблицы 2. Вспомогательная таблица должна содержать два внешних ключа: первый образовывается копированием значений ключа таблицы 1, а второй – копированием значений ключа таблицы 2.

В БД компьютерного магазина связью «многие-ко-многим» могут быть соединены, например, компьютеры и сервисные центры: каждый компьютер может обслуживаться во многих сервисных центрах, и любой сервисный центр обслуживает много компьютеров.

На рис. 2.8 и 2.9. приведены примеры таблицыСЕРВИСНЫЕ ЦЕНТРЫ и вспомогательной таблицы ОБСЛУЖИВАНИЕ.

Ключом таблицы СЕРВИСНЫЕ ЦЕНТРЫ является атрибут Название. Поэтому таблица ОБСЛУЖИВАНИЕ содержит внешние ключи Название сервисного центра и Код компьютера. Кроме того, таблица ОБСЛУЖИВАНИЕ содержит информацию о дате обслуживания определенного компьютера в определенном сервисном центре. Ее ключ состоит из всех трех атрибутов.

В таблице ОБСЛУЖИВАНИЕ содержится информация о том, что компьютер Duron 1800 (код 283) дважды, 10.11.05 и 27.11.05, обслуживался в сервисном центре Компсервис, а в сервисном центре ДокторПК 14.11.05 был отремонтирован компьютер Athlon 2800 (код 1041) и 01.12.05 - компьютер Pentium-4 3000 (код 2402).

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

  • прежде чем удалять запись из главной таблицы, следует удалить все связанные записи из подчиненной таблицы;

  • при вводе новых данных сначала создаются записи в главной таблице, а потом – в подчиненной;

  • изменение значений ключевых полей в главной таблице должны приводить к изменению значений внешнего ключа в подчиненной таблице.