Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Access 2007

.pdf
Скачиваний:
115
Добавлен:
11.05.2015
Размер:
23.5 Mб
Скачать

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

Часто задаваемый вопрос. Отключение обеспечения целостности данных

Бывают ли такие ситуации, когда не следует требовать целостности на уровне ссылок?

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

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

Рассмотрим очень успешную компанию, торгующую выпечкой на шести площадках. Когда клиент делает заказ на площадке в центре города, вы добавляете запись в таблицу Orders и заполняете поле CustomerlD (код клиента) (которое ссылается на полную запись в таблице Customers). Вот тут-то и возникает проблема. Полной записи о клиенте может не быть в вашей копии БД — вместо этого она может храниться в одной из БД на другой площадке или в главном управлении компании. Несмотря на то, что связь в таблице Orders правильная, программа Access считает, что вы допустили ошибку, поскольку она не может найти соответствующую запись о клиенте.

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

Каскадное удаление

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

Предупреждение

Каскадные удаления рискованны. Слишком легко удалить больше записей, чем было намечено, а если это сделать — пути назад нет. Еще хуже то, что команда Отменить (Undo) не сможет вам помочь отменить это изменение. Поэтому действуйте с осторожностью.

Для включения этого варианта при создании связи вы должны установить флажок каскадное удаление связанных записей (Cascade Delete Related Records) (см. рис. 5.4). Обновить связь можно и позже, установив данный флажок.

181

После установки этого флажка режим можно опробовать, удалив изготовителя, как показано на рис. 5.6.

Рис. 5.6. В данном примере отношение Dolls—Manufacturers использует установленный флажок каскадное удаление связанных записей. Когда удаляется изготовитель, программа Access предупреждает о том, что в действительности вы удалите девять записей

Для тех, кто понимает.

Пользуйтесь каскадным удалением с осторожностью

Средство каскадное удаление связанных записей — ядерное оружие БД, поэтому хорошенько подумайте, необходимо ли оно вам. Этот режим позволяет очень легко удалить записи, которые на самом деле нуждались всего лишь в корректировке.

Если вы выбрасываете клиента из БД, нет смысла удалять сведения о его выплатах, которые нужны для вычисления вашей общей прибыли. Гораздо лучше изменить запись о клиенте, пометив ее как неиспользуемую в дальнейшем. Можно добавить в запись о клиенте поле Active (действующий) логического типа и задать в нем значение Нет для того, чтобы пометить расчеты клиента как не используемые в настоящий момент вместо удаления записи. Вы также должны помнить, что каскадные удаления — всего лишь удобное средство. Они не содержат новых функциональных возможностей. Если не устанавливать флажок каскадное удаление связанных записей, вы все равно сможете удалять связанные записи до тех пор, пока не нарушите правильный порядок действий. Если нужно удалить изготовителя, начинайте с удаления всех связанных с ним кукол-болванчиков или измените записи о куклах, указав для них другого изготовителя (или вообще удалив изготовителя) с помощью корректировки значений ManufacturerlD. После выполнения этого шага вы сможете без проблем удалить запись об изготовителе.

Каскадные обновления

Программа Access также позволяет задать каскадное обновление. Если включить этот режим (установив флажок каскадное обновление связанных записей (Cascade Update Related Records) в диалоговом окне Изменение связей), Access копирует любое изменение, сделанное вами в связанном поле родительской записи, во все дочерние.

В БД кукол-болванчиков каскадное обновление позволяет изменить ID одного из изготовителей. Как только вы изменили ID, Access автоматически включает новое значение в поле ManufacturerID всех связанных записей таблицы Dolls. Без каскадного обновления вы не сможете изменить ID изготовителя, если есть связанные с этим значением записи о куклах.

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

182

столбец ID с типом данных Счетчик (см. разд. "Счетчик" главы 2). Программа Access не разрешает корректировать значение типа Счетчик, и каскадное обновление вам никогда не понадобится. (Счетчик однозначно идентифицирует запись и не связан ни с каким реальным объектом.)

С другой стороны, каскадные обновления очень пригодятся, если вы работаете с таблицей, в которой не предусмотрено применение для связи значений Счетчик. Если таблицы Dolls и Manufacturers связаны именем изготовителя, вам нужны каскадные обновления — они гарантируют согласование значений дочерних записей при изменении имени изготовителя. Каскадные обновления также полезны, если записи связываются с помощью номера социального обеспечения, шифра компонента, серийного номера или других кодов, которые не генерируются автоматически и могут быть объектами корректировок.

Переходы в отношении

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

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

Рис. 5.7. Хотите узнать, какие у вас есть куклы от MagicPlastic? Просто щелкните кнопкой мыши квадратик со знаком "плюс" (обведенный)

Этот щелчок раскрывает подтаблицу, в которой отображаются только связанные записи (рис. 5.8). Подтаблицу можно использовать для редактирования записей о куклах прямо в этом окне так, будто вы работаете на листе данных с полной таблицей Dolls. Можно даже добавлять новые записи.

183

Рис. 5.8. На самом деле подтаблица — это отфильтрованная версия обычной таблицы Dolls. В ней отображаются только записи, связанные с выбранным изготовителем. У подтаблицы те же параметры форматирования (шрифт, цвета, порядок столбцов), как и у листа данных связанной таблицы

Примечание

Вы можете открыть одновременно столько подтаблиц, сколько захотите. Единственное ограничение — записи подтаблицы не выводятся при печати листа данных (см. разд. "Печать листа данных" главы 3).

Рис. 5.9. Когда программа Access не знает, какую таблицу использовать как подтаблицу, она разрешает вам выбрать ее из списка всех ваших таблиц. В данном случае только два варианта имеют смысл. Выберите Orders для того, чтобы увидеть заказы клиентов, или Invoices для того, чтобы вывести счета клиентов. Когда в списке выбрана нужная таблица, Access автоматически заполняет связанными полями области в нижней части окна. Теперь для продолжения можно щелкнуть мышью кнопку ОК

184

Таблица-родитель может быть связана с несколькими таблицами-потомками. В этом случае программа Access предоставляет возможность выбора таблицы, которую вы хотите использовать, щелкнув кнопкой мыши квадратик со знаком "плюс". Допустим, вы создали таблицу Customers, которая связана с таблицей-потомком с заказами клиентов (Orders) и с таблицей, содержащей сведения о счетах (Invoices). Когда вы щелкаете кнопкой мыши квадратик со знаком "плюс", программа Access не знает, какую таблицу выбрать, поэтому ' она спрашивает вас (рис. 5.9).

Примечание

Вы должны выбирать только один раз подтаблицу, которую хотите использовать. Программа Access запоминает ваш выбор и использует с этого момента одну и ту же подтаблицу. Если вы передумали впоследствии, придется настраивать табличные параметры, как описано в примечании "Практические занятия для опытных пользователей. Изменение параметров подтаблицы" далее в этом разделе.

Когда вы создадите более детально проработанные БД, то обнаружите, что ваши таблицы связаны друг с другом цепочкой связей. Одна таблица-родитель может быть связана с таб- лицей-потомком, которая сама служит родителем для другой таблицы, и т. д. Это сложность не тревожит программу Access — она разрешает вам перемещаться по всей цепочке отношений (рис. 5.10).

Рис. 5.10. Здесь показаны две действующие связи. Таблица Customers — родитель для таблицы Orders (в которой перечислены все заказы, сделанные клиентом). Таблица Orders — родитель для таблицы OrderDetails (в которой приведены конкретные компоненты каждого заказа). Переходя от уровня к уровню, можно увидеть, что именно купил каждый клиент

Практические занятия для опытных пользователей. Изменение параметров подтаблицы

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

185

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

Имя подтаблицы (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 создает связь автоматически.) Таким образом, если вы

186

самостоятельно выполняете практические задания, используя предложенные примеры, удалите связь между таблицами Dolls и Manufacturers (как описано в разд. "Редактирование связей" ранее в этой главе), прежде чем двигаться дальше.

Далее приведены действия, необходимые для создания списка подстановок, связывающего две таблицы — Dolls и Manufacturers.

1.Откройте таблицу-потомок в Конструкторе. В данном примере это таблица Dolls.

2.Выберите поле, связывающее ее с таблицей-родителем, в столбце Тип данных

выберите вариант Мастер подстановок.

Впредлагаемом примере поле, которое вам нужно, — ManufacturerID.

3.Выберите переключатель Объект "столбец подстановки" будет использовать значения из таблицы или запроса ("I want 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 вы отобразите в списке подстановки для того, чтобы облегчить правильный выбор компании-изготовителя

187

Подсказка

Иногда может понадобиться несколько полей для описательной информации. Например, можно использовать поля FirstName и LastName из таблицы FamilyRelatives (члены семьи). Но не включайте слишком много информации, иначе список подстановки станет необъемным из-за включений в него всех этих сведений. Это выглядит неестественно.

6. Выберите поле, применяемое для сортировки списка подстановки (рис. 5.12), и щелкните мышью кнопку Далее.

В нашем примере список подстановки лучше всего отсортировать в соответствии со значениями поля Manufacturer.

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

7.В следующем окне мастера показано предварительное представление вашего списка подстановки (рис. 5.13). Убедитесь в том, что установлен флажок Скрыть ключевой столбец (Hide key column (recommended)), и затем щелкните мышью кнопку Далее. Несмотря на то, что у поля первичного ключа есть значение, связывающее вместе две таблицы, для пользователя, работающего с БД, оно значит не слишком много.

Ему гораздо важнее другое, описательное поле.

8.Выберите название столбца подстановки.

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

На последнем этапе вы можете также выбрать режим, называемый Разрешить несколько значений (Allow Multiple Values). Если установить этот флажок, в списке отображается флажок рядом с каждым значением, поэтому можно одновременно выбрать несколько элементов списка. (В этом примере можно создать запись о кукле с несколькими изготовителями.) Вы узнаете больше о варианте Разрешить несколько значений в разд. "Многозначные поля "далее в этой главе.

188

Рис. 5.13. Здесь показан список подстановки, содержащий имя изготовителя (поле Manufacturer) и скрывающий его идентификатор (поле ID)

9. Щелкните мышью кнопку Готово (Finish).

Теперь программа Access формирует список подстановки для поля и предлагает сохранить таблицу. После этого Access создает связь между двумя таблицами, связанными вашим столбцом подстановки. В данном случае программа устанавливает отношение "родитель— потомок" между таблицами Manufacturers и Dolls, так же как вы делали это самостоятельно

(см. разд. "Определение отношения "ранее в этой главе).

Примечание

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

"Редактирование связей" ранее в этой главе). Начните с добавления на вкладку обеих таблиц Dolls и Manufacturers. Затем щелкните правой кнопкой мыши линию связи между ними и выберите команду

Изменить связь. В заключение установите флажок Обеспечение целостности данных и щелкните мышью кнопку ОК.

Теперь, если отобразить таблицу Dolls в Режиме таблицы, можно использовать список подстановки во время редактирования и вставки записей (рис.5.14).

Часто задаваемый вопрос. Обновление списка

Я только что добавил запись, но она не появилась в моем списке подстановки. Почему?

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

189

В этой ситуации изменения, вносимые вами в таблицу, предоставляющую данные для списка подстановки, не появятся в таблице, использующей этот список.

Для того чтобы понять механизм действия, откройте одновременно таблицы Dolls и Manufacturers. (Они открываются на разных вкладках.) В таблицу Manufacturers добавьте новую компанию-изготовителя. Затем вернитесь в таблицу Dolls и попробуйте воспользоваться списком подстановки в поле ManufacturerID. Вы увидите, что новой записи нет в списке подстановки.

К счастью, найти решение легко. Вы можете попросить программу Access обновлять список подстановки в любое время, выбрав Главная → Записи → Обновить все (Ноmе Records Refresh All). Выполните эту последовательность из таблицы Dolls и увидите в списке подстановки обновленный список изготовителей.

Рис. 5.14. Несмотря на то, что за кадром таблица Dolls хранит значение ID в поле ManufacturerlD, нет способа отобразить его на вашем листе данных. Вместо данного поля вы видите связанное с ним название изготовителя (как на экране, так и на любой сделанной вами распечатке). Более того, если нужно добавить новую запись или изменить изготовителя в имеющейся, вы можете выбрать изготовителя из списка по имени

Более экзотические связи

Как вы узнали из разд. "Отношение типа „родитель—потомок" "ранее в этой главе, отношение или связь "один-ко-многим" (известная также под именем родитель—потомок), связывающая единственную запись одной таблицы с одной или несколькими записями другой таблицы, — наиболее распространенный тип отношения. Один изготовитель может быть связан с одной куклой, несколькими или не связан ни с одной куклой вообще.

Наряду со связями "один-ко-многим" существуют еще два несколько иных типа связей: отношение "один-к-одному" и отношение "многие-ко-многим". В следующих разделах вы познакомитесь с обоими типами.

190

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