Практические занятия для опытных пользователей. Изменение параметров подтаблицы
Изменение параметров подтаблицы
Вы можете отрегулировать несколько дополнительных параметров, влияющих на способ отображения в таблице ваших подтаблиц. Для вывода на экран этих параметров переведите таблицу в Конструктор.Затем выберите на ленте Работа с таблицами │ Конструктор → Показать или скрыть →Страница свойств(конечно, если эта страница не видна в данный момент). Страница свойств отображается в правой части окна.
На ней есть набор разнообразных параметров, которые применяются к таблице в целом. Далее перечислены те из них, которые относятся к подтаблицам.
• Имя подтаблицы (Subdatasheet Name). Связанная таблица, применяемая в качестве подтаблицы. Если у вас несколько связанных таблиц, можно выбрать ту, с которой вы хотите работать. Или установить значение параметра (Auto), которое заставит программу Access спросить у вас имя подтаблицы в следующий раз, когда вы щелкните кнопкой мыши квадратик со знаком плюс, как показано на рис. 5.9.
• Высота подтаблицы (Subdatasheet Height). Задает высоту в дюймах, отводимую подтаблице для отображения данных. Если все связанные строки не помещаются в отведенное пространство, вам придется пользоваться полосой прокрутки. Стандартное значение этого параметра — 0, позволяющее подтаблице занять столько места, сколько ей нужно.
• Развернутая подтаблица (Subdatasheet Expanded). Позволяет выбрать вывод свернутых подтаблиц до тех пор, пока вы не щелкните кнопкой мыши по квадратику с плюсом (значение по умолчанию), или задать автоматическое раскрытие подтаблицы при открытии основной таблицы (для этого надо выбрать значение Да).
Поиск в связанных таблицах
Итак, вы увидели, как связи облегчают просмотр и редактирование ваших записей. А как они помогают при первоначальном добавлении записи? Связи обычно основываются на бесполезном значении типа Счетчик. Когда вы создаете новую запись о кукле, то, возможно, не знаете, что компании Bobelle House O'Dolls соответствует код 3408. Программа Access не даст вам ввести идентификационный номер изготовителя, не связанный ни с одной компанией-изготовителем, но не поможет выбрать нужный номер.
К счастью, у Access есть средство, способное помочь вам. В предыдущей главе вы узнали о подстановках (см. разд. "Создание простою списка подстановок, состоящего из констант" главы 4), функциональной возможности, снабжающей вас списком доступных значений столбца. При создании подстановки можно представить список констант или предложить список значений из другой таблицы. Вы могли бы создать подстановку для поля ManufacturerlDв таблице Dolls,использующую список значений ID, взятых из таблицы Manufacturers.Такой тип подстановки немного помогает — он предлагает список всех значений, которые можно использовать — но не решает главную проблему. А именно озадаченные пользователи, применяющие вашу БД, понятия не имеют о том, какой идентификационный номер принадлежит какой компании. Вам все-таки нужен способ отображения в списке подстановок имени изготовителя.
У списков подстановок, к нашей общей радости, есть такая возможность. Решение — создание подстановки, у которой несколько столбцов. Один столбец содержит информацию (в данном случае имя изготовителя), которая выводится для пользователя вашей БД. В другом столбце находятся данные, которые вы хотите использовать при выборе значения (в данном случае идентификационный номер изготовителя).
Примечание
Программа Access становится немного странной при переходе к подстановкам. Она ждет, что вы добавите список подстановок, а потом связь. (В действительности, когда создается подстановка, использующая таблицу, Access создает связь автоматически.) Таким образом, если вы
самостоятельно выполняете практические задания, используя предложенные примеры, удалите связь между таблицами Dollsи Manufacturers(как описано в разд. "Редактирование связей" ранее в этой главе), прежде чем двигаться дальше.
Далее приведены действия, необходимые для создания списка подстановок, связывающего две таблицы — Dollsи Manufacturers.
1. Откройте таблицу-потомок в Конструкторе.
В данном примере это таблица Dolls.
2. Выберите поле, связывающее ее с таблицей-родителем, в столбце Тип данныхвыберите вариант Мастер подстановок.
В предлагаемом примере поле, которое вам нужно, — ManufacturerID.
3. Выберите переключатель Объект "столбец подстановки" будет использовать значения из таблицы или запроса ("Iwant the lookup column to look up the values in a table or query") и щелкните мышью кнопку Далее.
На экране появится список всех таблиц вашей БД за исключением текущей таблицы.
4. Выберите таблицу-родитель и нажмите кнопку Далее.
В данном случае вам нужна таблица Manufacturers.После того как вы ее выбрали и перешли к следующему окну мастера, вы увидите на экране список всех полей этой таблицы.
5. Добавьте поле, которое используется для связи, и еще одно, более информативное поле в список Выбранные поля(Selected Fields) (рис. 5.11). Для продолжения щелкните мышью кнопку Далее.
В данном примере вам нужно добавить поля IDи Manufacturer.
Рис. 5.11.Секрет хорошей подстановки — выбор двух порций информации, первичного ключа (в данном случае поля ID) и более информативного значения (названия компании-изготовителя). Данные из поля ID вы должны сохранить в записи о кукле, а значение поля Manufacturerвы отобразите в списке подстановки для того, чтобы облегчить правильный выбор компании-изготовителя
Подсказка
Иногда может понадобиться несколько полей для описательной информации. Например, можно использовать поля FirstName и LastName из таблицы FamilyRelatives (члены семьи). Но не включайте слишком много информации, иначе список подстановки станет необъемным из-за включений в него всех этих сведений. Это выглядит неестественно.
6. Выберите поле, применяемое для сортировки списка подстановки (рис. 5.12), и щелкните мышью кнопку Далее.
В нашем примере список подстановки лучше всего отсортировать в соответствии со значениями поля Manufacturer.
Рис. 5.12. Отсортировать список подстановки очень важно для того, чтобы пользователь мог быстро найти нужное значение
7. В следующем окне мастера показано предварительное представление вашего списка подстановки (рис. 5.13). Убедитесь в том, что установлен флажок Скрыть ключевой столбец(Hide key column (recommended)), и затем щелкните мышью кнопку Далее.Несмотря на то, что у поля первичного ключа есть значение, связывающее вместе две таблицы, для пользователя, работающего с БД, оно значит не слишком много. Ему гораздо важнее другое, описательное поле.
8. Выберите название столбца подстановки.
Обычно естественней всего сохранить название поля, использующего подстановку (в данном случае ManufacturerID).
На последнем этапе вы можете также выбрать режим, называемый Разрешить несколько значений(Allow Multiple Values). Если установить этот флажок, в списке отображается флажок рядом с каждым значением, поэтому можно одновременно выбрать несколько элементов списка. (В этом примере можно создать запись о кукле с несколькими изготовителями.) Вы узнаете больше о варианте Разрешить несколько значенийв разд. "Многозначные поля "далее в этой главе.
Рис. 5.13. Здесь показан список подстановки, содержащий имя изготовителя (поле Manufacturer)и скрывающий его идентификатор (поле ID)
9. Щелкните мышью кнопку Готово (Finish).
Теперь программа Access формирует список подстановки для поля и предлагает сохранить таблицу. После этого Access создает связь между двумя таблицами, связанными вашим столбцом подстановки. В данном случае программа устанавливает отношение "родитель—потомок" между таблицами Manufacturers и Dolls, так же как вы делали это самостоятельно (см. разд. "Определение отношения "ранее в этой главе).
Примечание
Созданная программой Access связь не обеспечивает ссылочной целостности, поскольку программа не знает, соответствуют ли ваши записи этому жесткому стандарту. В таблице может быть кукла, указывающая на несуществующего изготовителя. Если такая возможность кажется угрожающе нестрогой, можно отредактировать связь с помощью вкладки Схема данных(как описано в разд. "Редактирование связей" ранее в этой главе). Начните с добавления на вкладку обеих таблиц Dollsи Manufacturers.Затем щелкните правой кнопкой мыши линию связи между ними и выберите команду Изменить связь.В заключение установите флажок Обеспечение целостности данныхи щелкните мышью кнопку ОК.
Теперь, если отобразить таблицу Dolls в Режиме таблицы, можно использовать список подстановки во время редактирования и вставки записей (рис.5.14).
Часто задаваемый вопрос.
Обновление списка
Я только что добавил запись, но она не появилась в моем списке подстановки. Почему?
Программа Access заполняет ваши списки подстановок, когда таблица открывается впервые. Например, когда открывается таблица Dolls, Access получает готовый к использованию список изготовителей. Но иногда вы должны открыть одновременно как таблицу, использующую список подстановки, так и таблицу, предоставляющую данные для этого списка.
В этой ситуации изменения, вносимые вами в таблицу, предоставляющую данные для списка подстановки, не появятся в таблице, использующей этот список.
Для того чтобы понять механизм действия, откройте одновременно таблицы Dollsи Manufacturers.(Они открываются на разных вкладках.) В таблицу Manufacturersдобавьте новую компанию-изготовителя. Затем вернитесь в таблицу Dollsи попробуйте воспользоваться списком подстановки в поле ManufacturerID.Вы увидите, что новой записи нет в списке подстановки.
К счастью, найти решение легко. Вы можете попросить программу Access обновлять список подстановки в любое время, выбрав Главная → Записи → Обновить все(Ноmе →Records → Refresh All). Выполните эту последовательность из таблицы Dollsи увидите в списке подстановки обновленный список изготовителей.
Рис. 5.14. Несмотря на то, что за кадром таблица Dolls хранит значение ID в поле ManufacturerlD, нет способа отобразить его на вашем листе данных. Вместо данного поля вы видите связанное с ним название изготовителя (как на экране, так и на любой сделанной вами распечатке). Более того, если нужно добавить новую запись или изменить изготовителя в имеющейся, вы можете выбрать изготовителя из списка по имени
Более экзотические связи
Как вы узнали из разд. "Отношение типа „родитель—потомок" "ранее в этой главе, отношение или связь "один-ко-многим" (известная также под именем родитель—потомок), связывающая единственную запись одной таблицы с одной или несколькими записями другой таблицы, — наиболее распространенный тип отношения. Один изготовитель может быть связан с одной куклой, несколькими или не связан ни с одной куклой вообще.
Наряду со связями "один-ко-многим" существуют еще два несколько иных типа связей: отношение "один-к-одному" и отношение "многие-ко-многим". В следующих разделах вы познакомитесь с обоими типами.
Отношение "один-к-одному"
Отношение или связь "один-к-одному" связывает одну запись таблицы с одной или не связывает ни с одной записью другой таблицы. Иногда этот тип отношения применяется для разбиения таблицы с большим количеством полей на две или несколько меньших таблиц.
Таблица Products(изделия) может содержать подробную информацию, описывающую изделие и его цену, и дополнительные сведения об особенностях его производства. Эти сведения интересны только сотрудникам инженерно-технических подразделений, поэтому их можно перенести в отдельную таблицу (названную, например, ProductsEngineering(технические характеристики изделия). Это та информация, которая не должна интересовать продавцов при оформлении заказов. В другой ситуации можно разбить таблицу на две, просто потому что она слишком велика. (Программа Access не разрешает таблице иметь более 255 полей.)
Рис. 5.15. Когда связываются два поля, в которых не допускаются дублирующиеся данные (и флажок Обеспечение целостности данныхустановлен), Access считает, что создается связь "один-к-одному". Программа помещает цифру 1 на концах линии связи для того, чтобы отличать ее от других типов связей. В этом примере столбец ID в таблице Productsи столбец ID в таблице ProductsEngineering— первичные ключи соответствующих таблиц, поэтому невозможно связать несколько записей таблицы ProductsEngineeringс одной и той же записью таблицы Products
Отношение "один-к-одному" создается так же, как отношение "один-ко-многим" — перетаскиванием с помощью мыши полей на вкладке Схема данных(рис. 5.15). Единственная
разница состоит в том, что всвязанных полях обеих таблиц нужно задать запрет совпадений. В этом случае запись одной таблицы может (как максимум) быть связана с единственной записью в другой таблице.
Примечание
В поле запрещены совпадения, если оно является первичным ключом таблицы (см. разд. "Первичный ключ" главы 2) или если у поля есть индекс, препятствующий появлению дублирующейся информации (см. разд. "Предотвращение дублирования значений с помощью индексов" главы 4).
Для тех, кто понимает.
Применяйте связи "один-к-одному" с осторожностью
Отношения "один-к-одному" крайне редко применяются в программе Access. Обычно гораздо удобнее использовать скрытие столбцов (см. разд. "Скрытие столбцов" главы 3) и запросы (см. главу 6), если вы хотите видеть только отдельные поля таблицы.
Разделение таблицы на две части усложняет проект вашей БД и обычно это делается, только если есть другие причины для разбиения таблицы. Примерами могут служить следующие варианты,
• Две части таблицы необходимо поместить в отдельные БД (см. разд. "Что такое разделенная БД" главы 18) для того, чтобы разные люди могли копировать их на разные компьютеры и редактировать независимо.
• Вы хотите защитить от любопытных глаз уязвимые данные. Один из возможных способов — поместить информацию, которую нужно защитить, в отдельную таблицу и сохранить эту таблицу в другой, более защищенный файл БД.
• У вас есть таблица с огромным объемом данных, таких как поля типа Вложение (см. разд. "Вложение" главы 2) с большими документами. В этом случае можно повысить производительность, если разделить таблицу. Вы даже можете решить, что лучше поместить половину таблицы в отдельную БД (см, разд. "Что такое разделенная БД" главы 18).
• Некоторые данные вашей таблицы необязательны. Вместо того чтобы включать большое количество незаполненных полей, можно выделить их в отдельную таблицу. Когда не нужно включать эту информацию, вам не придется добавлять запись в связанную таблицу.
Если у вас нет таких ситуаций, вы больше выиграете от создания одной большой таблицы.
Отношение "многие-ко-многим"
Отношение или связь "многие-ко-многим"связывает одну или несколько записей одной таблицы с одной или несколькими записями в другой таблице. Рассмотрим БД, в которой в отдельных таблицах хранятся данные об авторах и книгах. Авторы бестселлеров не останавливаются на одной книге (поэтому вы должны иметь возможность связать одного автора с несколькими книгами). Однако иногда авторы объединяются в команду под одним заглавием (поэтому вы должны иметь возможность связать одну книгу с несколькими авторами). Аналогичная ситуация возникает, если нужно распределить студентов по курсам, сотрудников по комитетам или ингредиенты по рецептам. Можно даже представить подобную ситуацию
и в случае БД с куклами-болванчиками, если несколько изготовителей решат объединиться для изготовления одной куклы-болванчика.
Связи "многие-ко-многим" довольно распространены, и программа Access предоставляет два способа их обработки.
Связующие таблицы
Связующие таблицы — традиционный метод обработки связей "многие-ко-многим", и их используют повсеместно в мире БД (включая и программное обеспечение промышленного уровня, такое как Microsoft SQL Server). Основная идея состоит в том, что вы создаете дополнительную таблицу, у которой единственное назначение — связывание двух таблиц.
Каждая запись в связующей таблице представляет связь, которая соединяет вместе запись каждой таблицы в отношение. В БД с книгами и авторами единственная запись в связующей таблице сопоставляет одного автора с одной книгой. Если один и тот же автор написал три книги, вы должны добавить три записи в связующую таблицу. Если два автора работают над одной книгой, вам потребуется дополнительная запись для связи с каждым новым автором.
Предположим, что в вашей таблице Authorsхранятся записи, представленные в табл. 5.6.
Таблица 5.6. Данные таблицы Authors
ID | FirstName | LastName |
Alf | Abet | |
Cody | Pendant | |
Мое | DeLawn |
В таблице Booksсодержатся записи, показанные в табл. 5.7.
Таблица 5.7. Данные таблицы Books
ID | Title | Published |
Fun with Letters | January 1, 2007 | |
How to Save Money by Living with Your Parents | February 24, 2008 | |
Unleash Your Guilt | May 5, 2007 |
В табл. 5.8 приведена таблица Authors_Books,связывающая обе таблицы.
Таблица 5.8. Данные таблицы Authors_Books
ID | AuthorlD | BookID |
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 |
Fun with Letters | January 1, 2006 | ||
How to Save Money by Living with Your Parents | February 24, 2005 | ||
Unleash Your Guilt | May 5, 2006 |
Но обычное поле хранит единственное значение. Таким образом, в этой таблице можно указать только одного из двух авторов книги № 403.
Если же разрешить хранение нескольких значений в поле AuthorID,можно ввести список авторов, подобный приведенному в табл. 5.10.
Таблица 5.10. Данные таблицы Books, в которую добавлен столбец AuthorlD, хранящий несколько значений
ID | Title | Published | AuthorID |
How toSave 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).
Часто задаваемый вопрос.
Работа со связями "многие-ко-многим"
Какой подход лучше: связующие таблицы или поля с множественными значениями?
Большинство фанатов БД в ближайшие годы будут приверженцами связующим таблицам. Такие таблицы приняты, укоренились и не скрывают внутреннего функционирования вашей БД. Связующие таблицы особенно удобны, если вы хотите добавить дополнительную информацию о связи между двумя конкретными таблицами. Предположим, что вы создаете таблицу Students_Classesдля учета учебных курсов, которые все студенты слушают в популярном учебном заведении. В таблицу Students_Classesможно включить дополнительные поля, такие как EnrollmentDate(дата записи на курс), Соn-firmationLetterSentDate(дата отправки подтверждающего письма) и Prerequi-sitesChecked(необходимые условия приема проверены).
С другой стороны, у связующих таблиц есть недостатки — с ними трудно работать на листе данных. Если в вашей БД применяется связующая таблица Authors_Books,для вставки новой книги в вашу систему придется редактировать, по крайней мере, две таблицы. Сначала необходимо вставить запись в таблицу Books.Затем следует открыть таблицу Authors_Booksи вставить в нее новую запись, которая свяжет книгу с автором. (Для облегчения этого процесса можно использовать подстановки в таблице Authors_Books,но все равно для этого требуется отдельный шаг.) Если же в таблице Booksсодержится поле Authorsс множественными значениями, можно добавить книгу и присвоить ей авторов за один шаг, что гораздо удобнее.
Если вы решили остановиться на связующих таблицах и хотите облегчить свою жизнь, программа Access предлагает отличное решение. Можно создать настраиваемую форму, умеющую работать сразу с несколькими таблицами. Можно сконструировать форму, позволяющую человеку, работающему с БД, вставлять запись одновременно и в таблицу Books,и в таблицу Authors_Books.И главное — ваша форма может выглядеть так, как будто она использует только одну таблицу. Вы узнаете, как применять этот прием в части IV.