Связи в реляционной базе данных
В реляционной БД отношение между объектами (сущностями) определяет связи между таблицами. Поддерживаются связи четырех типов: «один к одному», «один ко многим», «много к одному» и «многие ко многим». Рассмотрим подробнее типы связей в применении к реляционной модели данных:
· «один к одному»
Отношение «один к одному» означает, кто каждой записи из первой таблицы соответствует одна и только одна запись из другой таблицы. Рассмотрим таблицы, содержащие персональные и служебные сведения о работниках некоторой фирмы.
Персональные сведения
Код_пс | № паспорта | Фамилия | Имя |
AB 2358955 | Сидоров | Сергей | |
DB 2456886 | Петров | Петр | |
MA 8654212 | Иванов | Иван |
Служебные сведения
Код_сс | Место работы | Должность | Разряд |
Бухгалтерия | Бухгалтер | ||
Цех 2 | Токарь | ||
Лабаратория 3 | Начальник отдела |
Между таблицами «Персональные сведения» и «Служебные сведения» существует отношение «один к одному», поскольку для одного человека, работающего в определенной фирме, может существовать только одна запись о его служебном положении. Табельные номера «Код_пс» и «Код_сс» были добавлены для однозначной идентификации записей. Эти же поля и приняты в качестве первичных ключей. Связь между этими таблицами поддерживается при помощи совпадающих значений полей «Код_пс» и «Код_сс». Легко убедиться, что между двумя ключевыми полями может существовать только связь «один к одному», поскольку любые дублирования одного и того же табельного номера исключены с обеих сторон.
· «один ко многим» и «много к одному»
Отношение «один ко многим» означает, что каждой записи из первой таблицы может соответствовать одна либо много записей из другой таблицы.
Рассмотрим таблицы, содержащие сведения о клиентах некоторой фирмы и сделанных ими заказах.
Клиенты
Код_клиента | № паспорта | Фамилия | Имя |
AB 2358955 | Сидоров | Сергей | |
DB 2456886 | Петров | Петр | |
MA 8654212 | Иванов | Иван |
Заказы
Код_заказа | Код_клиента | Дата заказа | Наименование |
05.03.06 | Пылесос Вихрь | ||
15.04.06 | Холодильник Минск | ||
21.04.06 | Телевизор Горизонт | ||
02.10.06 | Стол компьютерный | ||
12.12.06 | Кресло «Президент» |
Предполагается, что один и тот же покупатель может сделать несколько заказов. Таким образом, между этими таблицами существует связь «один ко многим». Для установления связи необходимо в таблицу «Заказы» ввести поле «Код_клиента». Связь между таблицами будет осуществляться на основании значений совпадающих полей «Код_клиента». Причем подчеркнем, что связь устанавливается на основе значений совпадающих полей, а не их наименований. Таким образом, если связь устанавливается между ключевым полем одной таблицы и неключевым полем второй таблицы, то это будет связь типа «один ко многим».
· «много ко многим»
Отношение «много ко многим» возникает между двумя таблицами в тех случаях, когда:
- каждой записи из первой таблицы может соответствовать одна либо много записей из другой таблицы,
- одной записи из второй таблицы может соответствовать одна либо много записей из первой таблицы.
Типичным примером является связь между клиентами некой фирмы и покупаемыми ими товарами. Каждый товар может быть куплен несколькими клиентами и наоборот, один клиент может купить несколько товаров. Такая связь может быть реализована с помощью дополнительной таблицы, содержащей ключевые поля обеих таблиц, участвующих в связи.
Клиенты
Код_клиента | № паспорта | Фамилия | Имя |
AB 2358955 | Сидоров | Сергей | |
DB 2456886 | Петров | Петр | |
MA 8654212 | Иванов | Иван |
Товары
Код_товара | Наименование | Цена |
Пылесос Вихрь | ||
Холодильник Минск | ||
Телевизор Горизонт |
Заказы
Код_заказа | Код_клиента | Код_товара | Дата заказа |
05.03.2006 | |||
15.04.2006 | |||
21.04.2006 | |||
02.10.2006 | |||
12.12.2006 | |||
30.12.2006 | |||
31.12.2006 |
Связь «много ко многим» также автоматически возникает между таблицами, связанными посредством неключевых полей. Пусть первая таблица содержит информацию о том, на каких станках могут работать рабочие некоторой бригады. Вторая таблица содержит сведения о том, кто из бригады ремонтников какие станки обслуживает.
Таблица 1 Таблица 2
Работает | Станок |
Иванов А. В. | станок 1 |
Иванов А.В. | станок 2 |
Петров Н.Г. | станок 1 |
Петров Н.Г. | станок З |
Сидоров В. К. | станок 2 |
Обслуживает | Станок |
Голубев Б. С. | станок 1 |
Голубев Б. С. | станок 2 |
Зыков А.Ф. | станок 2 |
Зыков А.Ф. | станок З |
Первой и третьей записям таблицы 1 соответствует первая запись таблицы 2. Четвертой записи таблицы 1 соответствуют вторая и четвертая записи таблицы 2. Такой вид связи М:N характеризуется как слабый вид связи или даже как отсутствие связи, поскольку никакого контроля за целостностью данных в этом случае не производится.
Информация, размещенная в связанных таблицах, может быть легко объединена с помощью запросов объединения. Для нашего примера будем иметь
Заказы
Фамилия | Имя | Наименование | Цена | Дата заказа |
Сидоров | Сергей | Пылесос Вихрь | 05.03.2000 | |
Петров | Петр | Холодильник Минск | 15.04.2000 | |
Петров | Петр | Телевизор Горизонт | 21.04.2000 | |
Сидоров | Сергей | Электрочайник BOSCH | 02.10.2000 | |
Иванов | Иван | Пылесос Вихрь | 12.12.2000 | |
Иванов | Иван | Телевизор Горизонт ТЦ | 30.12.2000 | |
Сидоров | Сергей | Холодильник Минск | 31.12.2000 |
Дата добавления: 2016-10-26; просмотров: 4121;