Краткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33
Скачать 19.64 Mb.
|
Примечание Если нужно вставить сведения о новой кукле, сделанной новым изготовителем, следует сначала добавить запись об изготовителе и потом запись о кукле. Никаких проблем не возникает, если вы добавляете записи о компаниях-изготовителях, для которых нет соответствующих записей о куклах — в итоге вполне резонно вставить запись об изготовителе, даже если у вас нет пока сделанных им кукол. Наряду с этими ограничениями программа Access также не разрешит удалить таблицу, участвующую в связи. Нужно сначала удалить связь (используя окно Работа со связями), а затем — таблицу. Пропущенные значения в несвязанных записях Важно понимать, что есть одна операция, которую вы можете выполнить, не нарушая целостности данных: создание записи о кукле, не ссылающейся ни на какого изготовителя. Это произойдет, если поле ManufacturerlD останется пустым (педанты БД называют такое значение неопределенным (null value)). Единственная причина, по которой это поле может остаться пустым, — отсутствие записи об изготовителе в БД или отсутствие приемлемой информации. Может быть, кукла-болванчик была создана не каким-то изготовителем, а высокоразвитой инопланетной цивилизацией и оставлена на этой планете для изучения вами. Если эта лазейка из пропущенных значений вас нервирует, ее можно устранить. Просто задайте в таблице Dolls свойство поля Обязательное для ноля ManufacturerlD. Эта установка обеспечит каждую куклу-болванчика в вашей таблице Dolls законным изготовителем. Подобный прием важен, если связанная информация обязательна. Торгующая компания не сможет поместить заказ или создать счет без ссылки на клиента, сделавшего заказ. Часто задаваемый вопрос. Отключение обеспечения целостности данных Бывают ли такие ситуации, когда не следует требовать целостности на уровне ссылок? В большинстве случаев целостность данных — это окончательная проверка безопасности БД, и никто не захочет от нее отказаться — особенно, если в БД включена информация для решения критически важных задач вашего бизнеса. Напоминаю, что целостность на уровне ссылок препятствует проникновению противоречивых данных. Она пропускает пустые поля, если нет связанной записи, на которую вы хотите сослаться. Единственная ситуация, в которой вы можете решить увильнуть от соблюдения правил целостности на уровне ссылок, — использование частичных копий вашей БД. Обычно это происходит на крупных предприятиях, использующих одну и ту же БД на разных площадках. Рассмотрим очень успешную компанию, торгующую выпечкой на шести площадках. Когда клиент делает заказ на площадке в центре города, вы добавляете запись в таблицу Orders и заполняете поле CustomerlD (код клиента) (которое ссылается на полную запись в таблице Customers). Вот тут-то и возникает проблема. Полной записи о клиенте может не быть в вашей копии БД — вместо этого она может храниться в одной из БД на другой площадке или в главном управлении компании. Несмотря на то, что связь в таблице Orders правильная, программа Access считает, что вы допустили ошибку, поскольку она не может найти соответствующую запись о клиенте. В этом случае вы можете отключить обеспечение целостности данных, чтобы иметь возможность вставить запись. Если вы сделаете это, будьте особенно внимательны при вводе связанного значения (в данном примере CustomerID), чтобы избежать ошибок в дальнейшем. Каскадное удаление Правила целостности решительно останавливают вас при попытке удалить родительскую запись (такую как сведения об изготовителе), на которую ссылаются дочерние записи. Но есть и другой вариант — гораздо более радикальный. Вы можете выбрать удаление всех связанных дочерних записей при удалении записи-родителя. Например, это позволит вам удалить изготовителя и ликвидировать всех кукол, произведенных им. Предупреждение Каскадные удаления рискованны. Слишком легко удалить больше записей, чем было намечено, а если это сделать — пути назад нет. Еще хуже то, что команда Отменить (Undo) не сможет вам помочь отменить это изменение. Поэтому действуйте с осторожностью. Для включения этого варианта при создании связи вы должны установить флажок каскадное удаление связанных записей (Cascade Delete Related Records) (см. рис. 5.4). Обновить связь можно и позже, установив данный флажок. После установки этого флажка режим можно опробовать, удалив изготовителя, как показано на рис. 5.6. Р ис. 5.6. В данном примере отношение Dolls—Manufacturers использует установленный флажок каскадное удаление связанных записей. Когда удаляется изготовитель, программа Access предупреждает о том, что в действительности вы удалите девять записей Для тех, кто понимает. Пользуйтесь каскадным удалением с осторожностью Средство каскадное удаление связанных записей — ядерное оружие БД, поэтому хорошенько подумайте, необходимо ли оно вам. Этот режим позволяет очень легко удалить записи, которые на самом деле нуждались всего лишь в корректировке. Если вы выбрасываете клиента из БД, нет смысла удалять сведения о его выплатах, которые нужны для вычисления вашей общей прибыли. Гораздо лучше изменить запись о клиенте, пометив ее как неиспользуемую в дальнейшем. Можно добавить в запись о клиенте поле Active (действующий) логического типа и задать в нем значение Нет для того, чтобы пометить расчеты клиента как не используемые в настоящий момент вместо удаления записи. Вы также должны помнить, что каскадные удаления — всего лишь удобное средство. Они не содержат новых функциональных возможностей. Если не устанавливать флажок каскадное удаление связанных записей, вы все равно сможете удалять связанные записи до тех пор, пока не нарушите правильный порядок действий. Если нужно удалить изготовителя, начинайте с удаления всех связанных с ним кукол-болванчиков или измените записи о куклах, указав для них другого изготовителя (или вообще удалив изготовителя) с помощью корректировки значений ManufacturerlD. После выполнения этого шага вы сможете без проблем удалить запись об изготовителе. Каскадные обновления Программа Access также позволяет задать каскадное обновление. Если включить этот режим (установив флажок каскадное обновление связанных записей (Cascade Update Related Records) в диалоговом окне Изменение связей), Access копирует любое изменение, сделанное вами в связанном поле родительской записи, во все дочерние. В БД кукол-болванчиков каскадное обновление позволяет изменить ID одного из изготовителей. Как только вы изменили ID, Access автоматически включает новое значение в поле ManufacturerID всех связанных записей таблицы Dolls. Без каскадного обновления вы не сможете изменить ID изготовителя, если есть связанные с этим значением записи о куклах. Каскадные обновления безопаснее каскадных удалений, но они редко нужны. Поскольку, если вы следуете правилам хорошего проектирования БД, выустанавливаете связь, используя столбец ID с типом данных Счетчик (см. разд. "Счетчик" главы 2). Программа Access не разрешает корректировать значение типа Счетчик, и каскадное обновление вам никогда не понадобится. (Счетчик однозначно идентифицирует запись и не связан ни с каким реальным объектом.) С другой стороны, каскадные обновления очень пригодятся, если вы работаете с таблицей, в которой не предусмотрено применение для связи значений Счетчик. Если таблицы Dolls и Manufacturers связаны именем изготовителя, вам нужны каскадные обновления — они гарантируют согласование значений дочерних записей при изменении имени изготовителя. Каскадные обновления также полезны, если записи связываются с помощью номера социального обеспечения, шифра компонента, серийного номера или других кодов, которые не генерируются автоматически и могут быть объектами корректировок. Переходы в отношении Отношения не только помогают вылавливать ошибки. Они облегчают просмотр связанных данных. В разд. "Запросы и связанные таблицы" главы 6 вы узнаете, как создавать процедуры поиска, собирающие вместе информацию из связанных таблиц. Но даже без этих инструментов Access демонстрирует магию связей на листе данных. Вот как она действует. Если вы просматриваете таблицу-родитель на листе данных, то можете найти все связанные дочерние записи, щелкнув кнопкой мыши квадратик со знаком "плюс", расположенный у левого края строки (рис. 5.7). Рис. 5.7. Хотите узнать, какие у вас есть куклы от MagicPlastic? Просто щелкните кнопкой мыши квадратик со знаком "плюс" (обведенный) Этот щелчок раскрывает подтаблицу, в которой отображаются только связанные записи (рис. 5.8). Подтаблицу можно использовать для редактирования записей о куклах прямо в этом окне так, будто вы работаете на листе данных с полной таблицей Dolls. Можно даже добавлять новые записи. Рис. 5.8. На самом деле подтаблица — это отфильтрованная версия обычной таблицы Dolls. В ней отображаются только записи, связанные с выбранным изготовителем. У подтаблицы те же параметры форматирования (шрифт, цвета, порядок столбцов), как и у листа данных связанной таблицы Примечание Вы можете открыть одновременно столько подтаблиц, сколько захотите. Единственное ограничение — записи подтаблицы не выводятся при печати листа данных (см. разд. "Печать листа данных" главы 3). Р ис. 5.9. Когда программа Access не знает, какую таблицу использовать как подтаблицу, она разрешает вам выбрать ее из списка всех ваших таблиц. В данном случае только два варианта имеют смысл. Выберите Orders для того, чтобы увидеть заказы клиентов, или Invoices для того, чтобы вывести счета клиентов. Когда в списке выбрана нужная таблица, Access автоматически заполняет связанными полями области в нижней части окна. Теперь для продолжения можно щелкнуть мышью кнопку ОК Таблица-родитель может быть связана с несколькими таблицами-потомками. В этом случае программа Access предоставляет возможность выбора таблицы, которую вы хотите использовать, щелкнув кнопкой мыши квадратик со знаком "плюс". Допустим, вы создали таблицу Customers, которая связана с таблицей-потомком с заказами клиентов (Orders) и с таблицей, содержащей сведения о счетах (Invoices). Когда вы щелкаете кнопкой мыши квадратик со знаком "плюс", программа Access не знает, какую таблицу выбрать, поэтому ' она спрашивает вас (рис. 5.9). Примечание Вы должны выбирать только один раз подтаблицу, которую хотите использовать. Программа Access запоминает ваш выбор и использует с этого момента одну и ту же подтаблицу. Если вы передумали впоследствии, придется настраивать табличные параметры, как описано в примечании "Практические занятия для опытных пользователей. Изменение параметров подтаблицы" далее в этом разделе. К огда вы создадите более детально проработанные БД, то обнаружите, что ваши таблицы связаны друг с другом цепочкой связей. Одна таблица-родитель может быть связана с таблицей-потомком, которая сама служит родителем для другой таблицы, и т. д. Это сложность не тревожит программу Access — она разрешает вам перемещаться по всей цепочке отношений (рис. 5.10). Рис. 5.10. Здесь показаны две действующие связи. Таблица Customers — родитель для таблицы Orders (в которой перечислены все заказы, сделанные клиентом). Таблица Orders — родитель для таблицы OrderDetails (в которой приведены конкретные компоненты каждого заказа). Переходя от уровня к уровню, можно увидеть, что именно купил каждый клиент Практические занятия для опытных пользователей. Изменение параметров подтаблицы Вы можете отрегулировать несколько дополнительных параметров, влияющих на способ отображения в таблице ваших подтаблиц. Для вывода на экран этих параметров переведите таблицу в Конструктор. Затем выберите на ленте Работа с таблицами │ Конструктор → Показать или скрыть →Страница свойств (конечно, если эта страница не видна в данный момент). Страница свойств отображается в правой части окна. На ней есть набор разнообразных параметров, которые применяются к таблице в целом. Далее перечислены те из них, которые относятся к подтаблицам.
Поиск в связанных таблицах Итак, вы увидели, как связи облегчают просмотр и редактирование ваших записей. А как они помогают при первоначальном добавлении записи? Связи обычно основываются на бесполезном значении типа Счетчик. Когда вы создаете новую запись о кукле, то, возможно, не знаете, что компании Bobelle House O'Dolls соответствует код 3408. Программа Access не даст вам ввести идентификационный номер изготовителя, не связанный ни с одной компанией-изготовителем, но не поможет выбрать нужный номер. К счастью, у Access есть средство, способное помочь вам. В предыдущей главе вы узнали о подстановках (см. разд. "Создание простою списка подстановок, состоящего из констант" главы 4), функциональной возможности, снабжающей вас списком доступных значений столбца. При создании подстановки можно представить список констант или предложить список значений из другой таблицы. Вы могли бы создать подстановку для поля ManufacturerlD в таблице Dolls, использующую список значений ID, взятых из таблицы Manufacturers. Такой тип подстановки немного помогает — он предлагает список всех значений, которые можно использовать — но не решает главную проблему. А именно озадаченные пользователи, применяющие вашу БД, понятия не имеют о том, какой идентификационный номер принадлежит какой компании. Вам все-таки нужен способ отображения в списке подстановок имени изготовителя. У списков подстановок, к нашей общей радости, есть такая возможность. Решение — создание подстановки, у которой несколько столбцов. Один столбец содержит информацию (в данном случае имя изготовителя), которая выводится для пользователя вашей БД. В другом столбце находятся данные, которые вы хотите использовать при выборе значения (в данном случае идентификационный номер изготовителя). Примечание Программа Access становится немного странной при переходе к подстановкам. Она ждет, что вы добавите список подстановок, а потом связь. (В действительности, когда создается подстановка, использующая таблицу, Access создает связь автоматически.) Таким образом, если вы самостоятельно выполняете практические задания, используя предложенные примеры, удалите связь между таблицами Dolls и Manufacturers (как описано в разд. "Редактирование связей" ранее в этой главе), прежде чем двигаться дальше. Далее приведены действия, необходимые для создания списка подстановок, связывающего две таблицы — Dolls и Manufacturers.
В предлагаемом примере поле, которое вам нужно, — 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. |