Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Access_2007.doc
Скачиваний:
257
Добавлен:
17.03.2015
Размер:
20.6 Mб
Скачать

Для тех, кто понимает. Применяйте связи "один-к-одному" с осторожностью

Отношения "один-к-одному" крайне редко применяются в программе Access. Обычно гораздо удобнее использовать скрытие столбцов (см. разд. "Скрытие столбцов" главы 3) и запросы (см. главу 6), если вы хотите видеть только отдельные поля таблицы.

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

  • Две части таблицы необходимо поместить в отдельные БД (см. разд. "Что такое разделенная БД" главы 18) для того, чтобы разные люди могли копировать их на разные компьютеры и редактировать независимо.

  • Вы хотите защитить от любопытных глаз уязвимые данные. Один из возможных способов — поместить информацию, которую нужно защитить, в отдельную таблицу и сохранить эту таблицу в другой, более защищенный файл БД.

  • У вас есть таблица с огромным объемом данных, таких как поля типа Вложение (см. разд. "Вложение" главы 2) с большими документами. В этом случае можно повысить производительность, если разделить таблицу. Вы даже можете решить, что лучше поместить половину таблицы в отдельную БД (см, разд. "Что такое разделенная БД" главы 18).

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

Если у вас нет таких ситуаций, вы больше выиграете от создания одной большой таблицы.

Отношение "многие-ко-многим"

Отношение или связь "многие-ко-многим"связывает одну или несколько записей одной таб­лицы с одной или несколькими записями в другой таблице. Рассмотрим БД, в которой в отдельных таблицах хранятся данные об авторах и книгах. Авторы бестселлеров не останав­ливаются на одной книге (поэтому вы должны иметь возможность связать одного автора с несколькими книгами). Однако иногда авторы объединяются в команду под одним заглави­ем (поэтому вы должны иметь возможность связать одну книгу с несколькими авторами). Аналогичная ситуация возникает, если нужно распределить студентов по курсам, сотрудни­ков по комитетам или ингредиенты по рецептам. Можно даже представить подобную ситуацию

и в случае БД с куклами-болванчиками, если несколько изготовителей решат объеди­ниться для изготовления одной куклы-болванчика.

Связи "многие-ко-многим" довольно распространены, и программа Access предоставляет два способа их обработки.

Связующие таблицы

Связующие таблицы — традиционный метод обработки связей "многие-ко-многим", и их используют повсеместно в мире БД (включая и программное обеспечение промышленного уровня, такое как Microsoft SQL Server). Основная идея состоит в том, что вы создаете до­полнительную таблицу, у которой единственное назначение — связывание двух таблиц.

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

Предположим, что в вашей таблице Authors хранятся записи, представленные в табл. 5.6.

Таблица 5.6. Данные таблицы Authors

ID

FirstName

LastName

10

Alf

Abet

11

Cody

Pendant

12

Мое

DeLawn

В таблице Books содержатся записи, показанные в табл. 5.7.

Таблица 5.7. Данные таблицы Books

ID

Title

Published

402

Fun with Letters

January 1, 2007

403

How to Save Money by Living with Your Parents

February 24, 2008

404

Unleash Your Guilt

May 5, 2007

В табл. 5.8 приведена таблица Authors_Books, связывающая обе таблицы.

Таблица 5.8. Данные таблицы Authors_Books

ID

AuthorlD

BookID

1

10

402

2

11

403

3

12

403

4

11

404

AuthorsBooks — связующая таблица, определяющая четыре связи. Первая запись ука­зывает на то, что автор № 10 (Alf Abet) написал книгу № 402 (Fun with Letters). Если вы просмотрите остальную часть таблицы, то обнаружите, что Cody Pendant принимал участие в написании двух книг, и два автора работали над одной и той же книгой (How to Save Money by Living with Your Parents).

Подсказка

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

Суть связующей таблицы заключается в том, что она формирует два отношения "один-ко-многим", определенные в программе Access. Другими словами, связующая таблица — это таблица-потомок, у которой два родителя. У таблицы Authors отношение "один-ко-многим" с таблицей Authors_Books, в котором таблица Authors выступает как родитель. У таблицы Books также отношение "один-ко-многим" с таблицей Authors_Books, в котором таблица Books — родитель. Вы можете определить эти два отношения на вкладке Схема данных, убедившись в том, что заданы правила целостности данных (рис. 5.16).

Рис. 5.16. На самом деле отношение "многие-ко-многим" между таблицами Authors и Books — это два отношения "один-ко-многим", включающие таблицу Authors_Books. После определения этих отношений вы не сможете связать автора или книгу, которые не существуют, и удалить автора или книгу, у которых есть запись в таблице Authors_Books

Хотя на первый взгляд связующие таблицы производят странное впечатление, большин­ство фанатов БД быстро привыкают к ним. Как и в случае связей "один-ко-многим", кото­рыми вы пользовались ранее, можно создавать подстановки (см. разд. "Поиск в связанных таблицах" ранее в этой главе) для полей AuthorID и BookID таблицы Authors_Books. Но вам придется всегда вставлять вручную запись в таблицу Authors_Books для того, чтобы связать автора с книгой.

Многозначные поля

До появления программы Access 2007 связующие таблицы были единственным средством создания связей "многие-ко-многим". Но для поддержки средств интеграции (см. главу 21) сервисов SharePoint в Access 2007 включена новая функциональная возможность — много­значные поля.

Как следует из названия, многозначное поле может хранить более одного значения. Эта возможность очень удачно решает проблему связей "многие-ко-многим". Идея состоит в настройке связующего поля в таблице-потомке как многозначного поля. Вернемся к приме­ру с авторами и книгами. При отсутствии связующей таблицы вам нужно вставить столбец AuthorID в таблицу с записями о книгах для обозначения каждого автора, написавшего данную книгу (табл. 5.9).

Таблица 5.9. Данные таблицы Books, в которую добавлен столбец AuthorID, содержащий дублирующие значения

ID

Title

Published

AuthorID

402

Fun with Letters

January 1, 2006

10

403

How to Save Money by Living with Your Parents

February 24, 2005

11

404

Unleash Your Guilt

May 5, 2006

11

Но обычное поле хранит единственное значение. Таким образом, в этой таблице можно указать только одного из двух авторов книги № 403.

Если же разрешить хранение нескольких значений в поле AuthorID, можно ввести спи­сок авторов, подобный приведенному в табл. 5.10.

Таблица 5.10. Данные таблицы Books, в которую добавлен столбец AuthorlD, хранящий несколько значений

ID

Title

Published

AuthorID

403

How to Save Money by Living with Your Parents

February 24, 2005

11, 12

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

Для создания поля с несколькими значениями следует использовать подстановку. Как вы уже знаете (см. рис. 5.14), эта функциональная возможность выбирается на последней странице мастера Создание подстановки. С другой стороны, если у вас уже есть подстановка

в поле, необходимо внести небольшое изменение. Откройте таблицу в Конструкторе, выберите поле с подстановкой (например, ManufacturerID) и затем в области Свойства по­ля щелкните кнопкой мыши вкладку Подстановка (Lookup). Найдите свойство Разрешение нескольких значений (Allow Multiple Values) и измените его значение с Нет на Да.

Примечание

Как только вы задали в поле поддержку множественных значений, вы не сможете вернуться к варианту поддержки одного значения.

На рис. 5.17 показан многозначный список подстановки в действии.

Рис. 5.17. В данном списке подстановки применяются флажки, поскольку он предназначен для многозначного поля. В одной записи можно выбрать несколько значений, установив флажки нескольких элементов списка. Тем самым вы указываете, что одна кукла была создана в результате партнерства двух компаний-изготовителей

Многозначные поля доступны, только если применяется БД нового формата с расшире­нием accdb (см. примечание "Для тех, кто понимает. Использование Access БД, созданных в более ранних версиях программы" в разд. "Создание новой базы данных" главы 1). В файле с расширением mdb (БД, созданной программой Access 2003 и еще не преобразованной) вы не сможете их использовать.

Поля с множественными значениями вызывают проблемы при переносе вашей БД на SQL Server (как описано в главе 20), поскольку SQL Server не поддерживает их. Следова­тельно, если есть вероятность совместного использования вашей БД многими пользовате­лями (скажем, в большой компании) и вы можете в какой-то момент перенести ваши дан­ные в БД более мощной программы SQL Server, избегайте полей с множественными значениями.

Примечание

Поля с множественными значениями не создают проблем при переносе вашей БД на Share-Point Server (как описано в главе 21).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]