Обеспечение целостности данных с помощью связей

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

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

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

Первичный ключ таблицы (Primary Key PK) – это поле или группа полей, содержащее данные, уникально идентифицирующие каждую запись (строку) таблицы. При использовании одного ключевого поля значения в этом поле не могут повторяться, поскольку они должны идентифицировать каждую строку. При использовании в качестве ключа нескольких полей ограничение уникальности накладывается на комбинацию значений, содержащихся в этих полях.

Внешний ключ (Foreign Key FK) – это поле или группа полей, содержащее значение первичного ключа другой таблицы. Для внешнего ключа допустимы только значения, присутствующие в первичном ключе таблицы, с которой установлена связь.

Приведём пример использования такой связи. В качестве первой таблицы возьмём таблицу отделов, а в качестве второй таблицы – таблицу сотрудников, каждый из которых работает в одном отделе. При этом отдел будет характеризоваться названием, а сотрудник – именем.

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

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

Рис. 7.2. Пример связи один-ко-многим между двумя таблицами.

В обычных связях один-ко-многим, рассматриваемых в рамках данной работы, сущности являются неравноправными. Иными словами, есть первичная (родительская) сущность и вторичная (дочерняя). Первичной является сущность, от которой в связи задействован первичный ключ, а вторичной – та сущность, в которую при этом добавляется вторичный ключ. Связь всегда указывает от дочерней сущности к родительской сущности. Так, в примере на рис. 7.2 первичной сущностью является сущность «Отделы», а вторичной – «Сотрудники».

Для получения связи один-к-одному обычно используют две связи многие-ко-многим, направленные навстречу между двумя таблицами, как показано на примере связи сущностей «Отделы» и «ПроизводительностьОтделов» на рис. 7.3. Такая связь определяет правило: одному отделу соответствует одно значение количества выпусков проектов. При этом сущности «Отделы» и «ПроизводительностьОтделов» могут быть объединены в одну сущность, однако в данном примере эти сущности разделены по соображениям производительности, поскольку большинство запросов направляются для получения названия отдела.

Рис. 7.3. Пример связи один-к-одному между двумя таблицами.

Для получения связи многие-ко-многим обычно используется дополнительная таблица связи, в которой создаются внешние ключи, указывающие на первичные ключи связываемых таблиц. При этом внешние ключи таблицы связи составляют её первичный ключ. Таким образом, благодаря записям в таблице связей формируются уникальные комбинации связываемых записей основных таблиц. Пример реализации связи многие-ко-многим приведён на рис. 7.4. Здесь реализовано правило: один сотрудник обладает некоторым набором навыков, однако разные сотрудники могут владеть одним и тем же навыком.

Рис. 7.4. Пример связи многие-ко-многим между двумя таблицами.

Следует отметить, что для создания первичного ключа в среде Visio необходимо явно указывать атрибут или атрибуты первичного ключа. Однако для создания внешнего ключа не требуется явное указание соответствующего поля, поскольку при создании связей среда Visio осуществляет поиск наиболее подходящего атрибута в качестве внешнего ключа, и, в случае отсутствия такого атрибута автоматически добавляет новый и обозначает его внешним ключом (FK).

4.2 Целостность данных Microsoft Access 2010.


Похожие статьи.

Понравилась статья? Поделиться с друзьями: