Главная страница

Краткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33


Скачать 19.64 Mb.
НазваниеКраткое содержание 29 Об этих стрелках 30 о сочетаниях клавиш 32 о щелчках кнопкой мыши 33 Примеры 33
АнкорAccess_2007.doc
Дата16.03.2017
Размер19.64 Mb.
Формат файлаdoc
Имя файлаAccess_2007.doc
ТипКраткое содержание
#3862
страница12 из 65
1   ...   8   9   10   11   12   13   14   15   ...   65
Глава 4

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

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

В этой главе описан основной набор средств проверки, имеющийся у программы Access:

  • основные, включая совпадения, обязательные поля и значения по умолчанию;

  • маски ввода, форматирующие, с помощью образцов обычный текст, такой как почтовые коды и телефонные номера;

  • правила верификации (validation rules), устанавливающие строгие правила для полей, не подчиняющихся никаким законам;

  • подстановки (lookups), ограничивающие возможные значения списком заранее заданных вариантов.



О целостности данных

Все средства проверки программы Access реализованы в режиме Конструктора, с которым вы познакомились в главе 2. Для их применения вы выбираете поле и настраиваете его свой­ства. Единственная сложность — знать, какие свойства наиболее полезны. Некоторые из них описаны в главе 2, но в следующих разделах вы найдете дополнительные подробности.

Совет

Программа Access предоставляет три варианта переключения в режим Конструктора. Можно щелкнуть правой кнопкой мыши на заголовке вкладки таблицы и выбрать из меню команду Конструктор, использовать кнопку Режим на вкладке ленты Главная или воспользоваться крошечными кнопками режима в правом нижнем углу окна программы Access. Если вы очень нетерпеливы, то можете даже не открывать вашу таблицу, а просто найти ее в области пере­ходов, щелкнуть ее правой кнопкой мыши и выбрать команду Конструктор.

Запрет незаполненных полей

Для того чтобы каждая запись имела какой-то смысл, в ней должен быть хотя бы абсолют­ный минимум информации. Без вашей помощи программа Access не может отделить важ­ную информацию от необязательных деталей. По этой причине все поля в новой таблице определены как необязательные, за исключением поля первичного ключа (которое обычно содержит идентификационный номер записи). Убедитесь в этом с помощью таблицы Dolls из главы 1; вы быстро обнаружите, что можете вставлять записи, фактически не содержащие данных.

Э
тот недостаток легко исправить. Просто выберите в Конструкторе поле, которое обяза­тельно должно быть заполнено и задайте в свойстве Обязательное поле (Required) значение Да (рис. 4.1).
Рис. 4.1. Свойство Обязательное поле сообщает программе Access о запрете пропущенных значений (именуемых на профессиональном жаргоне null)

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

Представьте, что вы внесли в таблицу Dolls сведения о нескольких куклах-болванчиках до того, как решили, что в поле Character обязательно должно быть значение. Вы переклю­чаетесь в Конструктор, выбираете поле Character и заменяете значение свойства Обяза­тельное поле на Да. Когда вы сохраняете таблицу (возвращаясь в Режим таблицы или за­крывая таблицу), программа Access дает вам возможность проверить записи о куклах-болванчиках,

уже внесенных в таблицу (рис. 4.2). Если вы выбираете выполнение проверки и Access обнаруживает проблему, программа позволяет вам отменить внесенные корректи­ровки (рис. 4.3).




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




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

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

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

Например, компания, продающая костюмы Элвиса, возможно, не захочет вставлять но­вый комплект одежды в свою таблицу Products (изделия), пока он не будет полностью готов. Свойство Обязательное поле в данном случае хорошее подспорье, поскольку не даст включить в каталог незавершенные изделия.

С другой стороны, такая строгость не годится в таблице Customers (клиенты) той же компании. Отделу продаж нужна гибкость при добавлении новых предполагаемых кли­ентов, даже если предоставлена только частичная информация. Потенциальный клиент может позвонить и оставить только почтовый адрес (без номера счета, номера телефона, адреса электронной почты и т. п.). Даже в этом случае, не имея полной информации о клиенте, вы должны включить его в таблицу Customers, для того чтобы он или она по­лучали ежемесячный информационный бюллетень.

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

Пропущенные значения и пустые строки
Программа Access поддерживает свойство Обязательное поле (Required) для всех типов данных. Но, возможно, для некоторых типов данных понадобятся дополнительные провер­ки. Это объясняется тем, что свойство Обязательное поле запрещает только незаполненные поля — поля, в которых нет совсем никаких данных. Но программа Access, что кажется не­сколько странным, различает пропущенные значения и пустые строки (empty text).

Пропущенное значение (null) означает отсутствие данных. Пустая строка свидетельству­ет о том, что значение поля было введено, но оказалось пустым. Все еще недоумеваете? Раз­ница существует, т. к. БД, такие как Access, должны распознавать пропущенные данные. Пропущенное значение может означать оплошность — возможно, кто-то просто забыл вве­сти значение, С другой стороны, пустая строка означает сознательное решение исключить данную информацию.

Примечание

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

К счастью, если вы сочтете это различие сбивающим с толку, можно запретить и пропу­щенные значения, и пустые строки. Просто установите в свойстве Обязательное поле (Required) значение Да для запрета пропущенных значений и в свойстве Пустые строки (Allow Zero Length) значение Нет для запрета пустых строк.
Примечание

Такое же различие существует и у данных числового типа. Даже если установить свойство Обязательное поле равным Да, вы все равно можете вставить значение 0. Если вы хотите помешать этому, нужно применить правила верификации, описанные в разд. "Правила вери­фикации или условия на значения" далее в этой главе.

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

Задается значение по умолчанию в свойстве поля Значение по умолчанию (Default Value). Для поля AddedCost (добавленная стоимость) числового типа вы могли бы оставить его равным 0. В текстовом поле Country (страна) можно использовать строку "U.S.A." как значение по умолчанию. (Все текстовые значения, используемые как значения по умолча­нию, должны быть заключены в кавычки.)

Программа Access выводит вес значения по умолчанию в строке, подготовленной для ввода новой записи, в нижней части таблицы (рис. 4.4). Она также автоматически вставляет значения по умолчанию в любые скрытые столбцы (см. разд. "Скрытие столбцов " главы 3).
Р
ис. 4.4
. Эта служба знакомств использует четыре значения по умолчанию: стандартный рост (5.9), город по умолчанию (New York), штат по умолчанию (тоже New York — NY) и страну по умолчанию (U.S.A.). Такая система хороша, поскольку в большинстве новых записей содержится именно эта информация. С другой стороны, нет оснований предлагать значения по умолчанию для полей, содержащих имя и фамилию

Access вставляет значение по умолчанию, когда вы создаете новую запись (но вы всегда можете изменить это значение). Вы также можете во время редактирования поля вернуться к значению по умолчанию с помощью сочетания клавиш <Сtrl>+<Аlt>+<Пробел>.
Совет

Очень удобно использовать значение по умолчанию как отправную точку для новой записи. Например, когда создается новая запись в таблице, можно редактировать значение по умол­чанию, а не заменять его полностью другим значением.

Вы можете создать и более развитые динамические значения по умолчанию. Программа Access оценивает их, когда вы вводите новую запись, что означает зависимость выбранного значения по умолчанию от других данных записи. Динамические значения по умолчанию используют выражения (специальные формулы БД), способные выполнять вычисления или извлекать другие подробности. Одна полезная функция Date ( ) извлекает текущую дату, установленную на вашем компьютере. Если применить эту функцию как значение по умол­чанию для поля с датой (как показано на рис. 4.5), программа Access автоматически встав­ляет текущую дату при вводе новой записи.
Р
ис. 4.5.
Если вы применяете функцию Date ( ), как значение по умолчанию в поле DateAcquired в таблице с куклами-болванчиками, то при каждой вставке новой записи о кукле программа Access вставляет текущую дату. Вы решаете — оставить ее или заменить другим значением
Примечание

Вы узнаете больше о выражениях языка SQL (Structured Query Language, язык структуриро­ванных запросов) в части II.

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

Но здесь есть подводный камень. Как вы узнали из главы 2, самый надежный способ — создание идентификационного поля (поля Код) для первичного ключа. До сих пор во все таблицы, которые вы видели, включалось такое поле. Но что, если вам нужно, чтобы другие поля тоже были уникальны? Представьте себе, что вы создаете таблицу Employees (сотрудники). Вы следуете правильным принципам проектирования БД и идентифицируете каждую запись автоматически генерируемым идентификационным номером. Но вы также хотите быть уверены в том, что в таблице нет двух сотрудников с одинаковыми номерами социального обеспечения (Social Security number, SSN), и, тем самым, желаете предупредить возможные ошибки — такие, как случайный повторный ввод данных об одном и том же со­труднике.

Примечание

Для того чтобы вспомнить, почему так важны идентификационные поля, еще раз прочитайте примечание "На профессиональном уровне. Как Access предотвращает дублирование записей" в разд. "Первичный ключ" главы 2. В таблице Employees вы конечно можете выбрать SSN в качестве первичного ключа, но ситуация будет далека от идеальной, когда вы начнете связы­вать таблицы друг с другом (см. главу 5), и возникнут проблемы, если позже понадобится из­менить номер социального обеспечения (например, из-за ошибки) или ввести информацию о сотруднике до того, как вы получите SSN.
Вы можете заставить поле требовать уникальных значений с помощью индекса. Индекс БД похож на предметный указатель в книге — это список значений (из поля) с перекрестной ссылкой, которая указывает на соответствующий раздел (полную запись). Если индексиро­вать поле SocialSecurityNumber, программа Access создаст список, подобный приведенному в табл. 4.1 и хранящийся в файле вашей БД.

Таблица 4.1. Список, хранящийся в БД после создания индекса

SocialSecurityNumber

Location of Full Record

001-01-3455



001-02-0434



001-02-9558



002-40-3200



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

На профессиональном уровне.

Как работают индексы
Важно то, что список номеров социального обеспечения отсортирован. Сортировка означает, что номер 001-01-3455 всегда предшествует в индексе номеру 002-40-3200, независимо от физического размещения записи в БД. Такая сортировка важна, т. к. она позволяет программе Access быстро проверять наличие дубликатов. Если вы вво­дите номер 001-02-4300, Access достаточно прочитать только первую часть списка. Как только программа обнаружит следующий "больший" SSN (тот, который включен в список позже в результате сортировки, например 001-02-501), она уже знает, что в оставшейся части индекса нет дубликата. На практике все БД используют множество алгоритмов оптимизации для того, чтобы сделать этот процесс стремительным. Но существует один ключевой принцип — без применения индекса программа Access должна проверять всю таблицу. В БД хранятся несортированные таблицы, поэтому программа не может быть уверена в том, что данного SSN нет в таблице до тех пор, пока не проверит каждую запись.

Итак, как применить индекс с полем? Хитрость заключается в применении свойства Ин­дексированное поле (Indexed), которое доступно для данных всех типов за исключением типа Вложение и типа Объект OLE. Когда вы добавляете поле, у его свойства Индексированное

поле указано значение Нет. Для вставки индекса и предупреждения дублирования значений вы можете изменить в Конструкторе значение свойства Индексированное поле

на Да (Совпадения не допускаются). При выборе третьего варианта — Да (Допускаются сов­падения) — создается индекс, но разрешается нескольким записям иметь одинаковые значе­ния поля. Этот вариант не поможет вам поймать повторяющиеся записи, но его можно при­менить для ускорения поиска (для получения дополнительной информации см. примечание "Практические занятия для опытных пользователей. Как индексы ускоряют поиск" в разд. "Получение заданного количества первых записей" главы 6).

Примечание

Как вы знаете из главы 2, первичные ключи также предотвращают дублирование записей с помощью аналогичного метода. Когда вы определяете первичный ключ, программа Access создает индекс в поле.
Когда вы закрываете Конструктор после изменения свойства Индексированное поле,

программа Access напоминает о необходимости сохранить ваши корректировки. В этот мо­мент она создает любые нужные ей новые индексы. Вы не можете создать индекс, запре­щающий совпадения, если в вашей таблице уже есть дублирующаяся информация. В данной ситуации Access выводит сообщение об ошибке, когда закрывается Конструктор и програм­ма пытается добавить индекс.
1   ...   8   9   10   11   12   13   14   15   ...   65


написать администратору сайта