Связывание таблиц

При проектировании баз данных информацию обычно размещают в нескольких таблицах. В реляционных СУБД для работы с данными, находящимися в нескольких таблицах, производят их связывание. При этом автоматически выполняется контроль целостности вводимых в БД данных. Это повышает достоверность хранимой в БД информации. Кроме того, установление связи между таблицами облегчает доступ к данным. (Связывание таблиц при выполнении таких операций как поиск, просмотр, редактирование, выборка и подготовка отчетов обычно обеспечивает возможность обращения к, произвольным полям связанных записей.)

Между таблицами могут устанавливаться бинарные (между двумя таблицами), тернарные (между тремя таблицами) и, в общем случае, n-арные связи. Рассмотрим наиболее часто встречающиеся бинарные связи. Суть связывания состоит в установлении соответствия полей связи двух таблиц. В зависимости от того, как определены поля связи основной и дополнительной таблиц (как соотносятся ключевые поля с полями связи), между двумя таблицами в общем случае могут устанавливаться связи различного вида. В таблице 1.4 представлены различные виды связей.

Таблица 1.4 Связи между таблицами

Характеристика полей связи по видам 1:1 1:М М:1 М:М
Поля связи первой таблицы являются ключом являются ключом не являются ключом являются ключом
Поля связи второй таблицы являются ключом не являются ключом являются ключом являются ключом

Связь вида 1:1 образуется в случае, когда каждой записи из первой таблицы соответствует единственная запись во второй таблице и наоборот. В этом случае говорят, что между данными таблиц существует взаимное однозначное соответствие (поля связи обеих таблиц являются ключевыми). Поскольку значения в ключевых полях обеих таблиц не повторяются, обеспечивается взаимнооднозначное соответствие записей из этих таблиц. Сами таблицы, по сути, здесь становятся равноправными.

На практике связи вида 1:1 используются сравнительно редко, так как хранимую в двух таблицах информацию легко объединить в одну таблицу, которая занимает гораздо меньше места в памяти компьютера. Возможны случаи, когда удобнее иметь не одну, а две и более таблицы. Причинами этого может быть необходимость ускорить обработку, повысить удобство работы нескольких пользователей с общей информацией, обеспечить более высокую степень защиты информации и т. д.

Например: Имеются сведения о выполняемых в некоторой организации научно-исследовательских работах. (Таблица 1.5) Эти данные включают в себя следующую информацию по каждой из работ – тему (девиз и полное наименование работ), шифр (код), даты начала и завершения работы, количество этапов, головного исполнителя и другую дополнительную информацию. Все работы имеют гриф «Для служебного пользования» или «секретно». В такой ситуации всю информацию целесообразно хранить в двух таблицах: в одной из них — всю секретную информацию (например, шифр, полное наименование работы и головной исполнитель), а в другой — всю оставшуюся несекретную информацию. Обе таблицы можно связать по шифру работы (Рис. 1.5).

Таблица 1.5 «Работы»

Код Наименование Дата начала работы Дата завершения работы Кол-во этапов Головной исполнитель Примечания
Анализ информационных потоков фирмы 30.10.2008 30.10.2009 Аналитический отдел Для служебного пользования
Создание БД 10.09.2008 10.12.2009 Администратор Секретно

Данную таблицу надо разделить на две и связать их по ключевым полям. Для схемы отношений (таблиц) это выглядит следующим образом:

Рис 1.5 Преобразование таблицы «Работы» в две таблицы, связанные 1:

Другой пример: предположим, что часть сведений о сотрудниках принадлежит категории «для служебного пользования» (ФИО, год рождения, фотография, должность, отдел, дата приема на работу, стаж работы и т.д.). Другая часть сведений принадлежит категории «секретно» (домашний адрес, телефон, оклад, …). В этом случае таблицу «Сотрудники» так же можно разделить на две (Рис 1.6).

Рис 1.6 Преобразование таблицы «Сотрудники» в две таблицы, связанные 1:1

Связь вида 1:М имеет место в случае, когда одной записи из первой таблицы может соответствовать несколько записей из второй таблицы, но каждой записи из второй таблицы может соответствовать только одна запись из первой таблицы. Это самый распространенный тип связи. При связывании двух таблиц выделяют основную и дополнительную (подчиненную) таблицы. Логическое связывание таблиц производится с помощью ключа связи. Ключ связи, по аналогии с обычным ключом таблицы, состоит из одного или нескольких полей.

Такой тип связи применяется, например, в следующем случае: имеется две таблицы. Первая содержит сведения о владельцах квартир (ФИО, личные данные, адрес прописки, …), а вторая – сведения о жилье (адрес, общая площадь, жилая площадь, число комнат, …). Каждый из владельцев может иметь в собственности несколько квартир; но у каждой из квартир должен быть только один хозяин. В приведенном примере основной является таблица «владельцы квартир», а дополнительной – «жилье».

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

Для организации такого вида связи в основной таблице выбирают ключевое поле (ключ связи). Это поле добавляют в подчиненную таблицу. Таблицы связываются по этим полям. Добавленное в дополнительную таблицу из основной поле называется альтернативным ключом. В отличие от ключевого поля основной таблицы, данные здесь могут повторяться. Однако значениями альтернативного ключа могут быть только такие данные, которые есть в ключевом поле основной таблицы.

Например: Имеются две таблицы, содержащие сведения о сотрудниках и их окладах, зависящих от разряда (Рис 1.7). Таблица «Оклад» — является основной, таблица «Сотрудники» — альтернативной.

Заполнение таблиц, связанных между собой связью 1:М начинается с основной таблицы.

Данные ключевого поля «разряд» основной таблицы – не пустые и не повторяются. Данные альтернативного ключа (поля «разряд» подчиненной таблицы) могут повторяться, как например, для второго и третьего сотрудника. Но значениями этого поля могут быть только такие данные, которые присутствуют в основной таблице. (Если в данном примере в альтернативном ключе попытаться ввести число «6», то будет выдано сообщение об ошибке, т.к. сведений о 6 разряде нет в основной таблице). В приведенном примере в подчиненной таблице нет сотрудников, работающих по 5 разряду. Однако сведения о данном разряде обязательно должны быть представлены в основной таблице. В противном случае невозможно будет например внести сведения о новом работнике, который устраивается по 5 разряду.

Для схемы отношений (таблиц) (где ключевые поля таблиц принято выделять жирным шрифтом), эта связь выглядит следующим образом (Рис. 1.8):

Для схемы отношений (таблиц) БД «студенческая библиотека» (Рис. 1.9)

Связь вида М:1 имеет место, когда одной или нескольким записям в первой таблице соответствует одна запись из второй таблицы. Связь создается аналогично предыдущей. Вообще, вид связи 1:М или М:1 зависит только от того, какая таблица является главной, а какая дополнительной.

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

Например: предприятие выпускает несколько видов товаров и поставляет его нескольким потребителям. Каждый товар может быть приобретен несколькими потребителями и каждый потребитель может получить несколько видов товаров. Первая таблица содержит сведения о товарах, вторая – о потребителях. Обе таблицы являются равнозначными. Как и связь 1:1, связь М:М не устанавливает подчиненности таблиц. Для создания связи М:М надо создать третью таблицу, в которой поместить поля «Код товара» и «Код потребителя» из первых двух таблиц. Сюда же можно добавить, например, поле «количество». Тогда можно будет получить ответ на запрос о количестве товара, приобретенного каждой формой и его стоимости. Схема таблиц представлена на Рис. 1.10.

Сами таблицы могут иметь, например, следующий вид (Рис. 1.11):

ТОВАРЫ ТАБЛИЦА СВЯЗИ ПОТРЕБИТЕЛИ
Код Товара Наименование Ед. Цена Код Товара Код потребителя Код потребителя Название
ПР12 Гайка шт. ПР12 ООО «НИКЛ»
ПР12
ПР13 Шайба шт. ПР13 ООО «Заря»
ПР14
ПР14 Болт шт. ПР14 ООО ГРАНД
ПР15 Шуруп

Рис 1.11 Содержание таблиц, связанных между собой связью М:М

Исходя из данных таблиц, следует, что товары с кодами «ПР12» и «ПР14» (т.е. гайки и шайбы) — поставляется в фирмы «ООО НИКЛ» и «ООО Заря». Товар «ПР 13» (шайбы) — только в фирму «ООО Заря». Фирма «ООО ГРАНД» — не заказывала ни одного из наименований товаров. Товар «ПР15» (шурупы) – не был приобретен ни одной из фирм.

Замечание. На практике в связь обычно вовлекается сразу несколько таблиц. При этом каждая из таблиц может иметь разного рода связи с несколькими другими таблицами.

Заполнение таблиц происходит следующим образом. Сначала заполняются таблицы, содержащие сведения о товарах и потребителях в любом порядке. (В общем случае – таблицы, содержащие описание каких-либо предметов (сущностей)). Затем – заполняется таблица, связывающая их.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *