Программирование >>  Реализация целостности данных 

1 ... 95 96 97 [ 98 ] 99 100 101 ... 124


ЧАСТЬ 3 Прое!айр;)ван( пйяьзоаатеяьского интерфейса

/Т; icale Data

herecoi you have entered appearsh dtipllceee en enWfne recorttothe i!at *Hrtte.y*iilvtl)uMyDiiWtt*Ddo? :,

. M ДМ..-. i s:i- ; fces p iv .-- .x :have

.: J ctw (да tiij fecui d. Bot №ll Шй1 to the

-.: ,\: : : V .:.

/ йс. 16-1. Диалоговое окно, сообщающее что новая запись в базе, возможно, повторяет уже имеющуюси

Реализуя эту возможность, обратите особое ание на ясность интерфейса. Он должен содержать вс аддимые комментарии, разъясняющие пользователю возможные варианты действий. Позаботьтесь, чтобы данные, введенные пользователем, сохранились до окончательного разрешения вопроса 1юшейся записью, Нельзя допустить, чтобы введенные пользователем данные пропали или были заменены другими без его согласия. Возможно такое решение: вывести уж ауюшую в базе данных запись в отдельном окне и позволите тояателю выбрать: заменить ли введенную им запись уже имеющейся или оставить новую запись без изменений. Обратите внимание на следующую особенность; окно на рис. 16-1 позволяет пользователю продолжать ввод данных, не просматривая запись, которая предположительно является двойником вводимой. Возможно, пользователь знает, что такая запись уже существует в базе, и лишний раз напоминать ему об этом не нужно.

Еще один распространенный случай нарушения ограничений на уровне сущности и ссылочной целостности - пользователь при вводе данных пропускает или оставляет пустым ноле первичного ключа. Чтобы этого избежать, часто используют уникальные значения первичного ключа, сгенерированные системой. Поля ujHdtT в Access и Identity ъ SQL Server позволяют определить естественный внешний ключ таким образом, что пустые или повторяющиеся значения, введенные пользователями, не приведут к нарушению целостности на уровне сущности или ссылочной целостности. Если по какой-либо

причине вы не можете использовать ноля AutoNumber или Identity в

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



глава 16

.жка ЦЕЛОСТНОСТИ базы данных

умолчанию здесь нельзя, поскольку они определяются

для каждой таблицы отдельно. Конечно, можно применить значения, сгенерированные системой на этапе исполнения. Но если вы собирае-использовать произвольные значения для первичного ключа, почему не применить поле umber* Единственный альтернативный нариант - всякий раз обращаться к пользователю, чтобы он ввел нужное значение.

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

может выбрать один из четырех вариантов:

создать новую запись в базе данных и сразу ввести всю необходимую информацию;

создать новую запись и ввести лишь часть данных, а впоследствии

обновить запись;

обратиться к другой записи;

аьить несуществующую ссылку позднее.

Unknown Rdsience

Рис. 16-2 оговое окно, позволяющеешить ситуацию, когда пользователь обращается вующим данным

Отмечу особо, что предоставить пользователю возможность на время отменить или игнорировать ограничение нельзя: тогда база данных будет содержать неверную информацию.



ЧАСТЬ 3 npctJiKiHposatiHe пользовгпяпко иншрфей?

Если нельзя предоставить возможность выбрать

нужное значение из списка что такой список будет слишком

велик, выведите на экран список значений, в большей или меньшей степени похожих на введенные данные. Для создания такого списка применяют разные алгоритмы - от простого ип.птор:! LI KE до. поиска в базе данных величин с использованием

критерия SOUNDEX.

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

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

Microsoft Jet поддерживает механизм каскадных обновлений и удалений данных, что позволяет обновлять и удалять записи, на которые имеются ссылки, без дополнительных запросов системы к нользова-телю. В SQL Server можно реализовать те же возможности при помощи триггеров. Каскадные обновления и удаления данных - очень удобный способ автоматического разрешения проблем при нарушении ссылочной целостности. Я рекомендую использовать его везде, где это возможно (разумеется, решение принимают системные аналитики и Однако если вы предоставляете лю возможность выбирать, что надлежит делать при нарушении ссылочной целостности, не забудьте подробно разъяснить ему, к чему каждое из предложенных действий.



1 ... 95 96 97 [ 98 ] 99 100 101 ... 124

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика