Средство каскадное удаление связанных записей — ядерное оружие БД, поэтому хорошенько подумайте, необходимо ли оно вам. Этот режим позволяет очень легко удалить записи, которые на самом деле нуждались всего лишь в корректировке.
Если вы выбрасываете клиента из БД, нет смысла удалять сведения о его выплатах, которые нужны для вычисления вашей общей прибыли. Гораздо лучше изменить запись о клиенте, пометив ее как неиспользуемую в дальнейшем. Можно добавить в запись о клиенте поле 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 (в которой приведены конкретные компоненты каждого заказа). Переходя от уровня к уровню, можно увидеть, что именно купил каждый клиент