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

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

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

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

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

Рассмотрим очень успешную компанию, торгующую выпечкой на шести площадках. Когда клиент делает заказ на площадке в центре города, вы добавляете запись в таблицу 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 (в которой приведены конкретные компоненты каждого заказа). Переходя от уровня к уровню, можно увидеть, что именно купил каждый клиент

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