YourLib.net
Твоя библиотека
Главная arrow Базы данных. Проектирование и создание (С.М. Диго) arrow 5.4. Задание ограничений целостности
5.4. Задание ограничений целостности

5.4. Задание ограничений целостности

   Обеспечение целостности БД является одной из важнейших задач при создании БнД, так как обеспечение адекватности базы данных отображаемой предметной области является одним из основных требований, предъявляемых к БнД.
   При изложении вопросов создания и связывания таблиц мы уже касались некоторых аспектов обеспечения целостности БД. Рассмотрим другие возможности задания ограничений целостности.
   В Access ограничения целостности могут задаваться при создании таблицы. Многие из свойств полей, позволяют обеспечивать контроль целостности:
   • размер поля
   • тип поля
   • формат поля
   • маска ввода
   • значение по умолчанию
   • условия на значения
   • сообщение об ошибке
   • обязательное поле
   • пустые строки
   • индексированное поле,что в той или иной степени связано с ограничениями целостности.
   Тип данных
   Тип данных определяет допустимые символы, которые могут быть использованы при его заполнении, например не допускается ввод текста в числовые поля.
   Для некоторых типов полей, например поля типа «дата», осуществляется и более сложная проверка. Если ошибочно введены недопустимые для этого типа данных символы или несуществующая дата, то пользователь должен обязательно исправить ошибку, так как иначе СУБД не даст возможность продолжить работу.
   Размер поля
   В поле нельзя ввести больше символов, чем это зафиксировано в свойстве «размер поля» или предопределено типом поля. Условия на значения
   Одной из самых гибких возможностей определения ограничений целостности является задание «Условия на значения». Условия вводятся как выражения. Выражения могут быть простыми или сложными. Используя их можно задавать и диапазоны. Например, условие: >#1.92#, заданное как «Условие на значения» для поля ДАТА_ПРИЕМА_НА_РАБОТУ, будет означать, что допустим ввод дат только после 1992 года. (Значения-даты необходимо заключать в символы номера (#).) Такое ограничение целостности может быть использовано, например, в случае если организация, для которой ведется БД, была создана 1 января 1992 года и все зачисления на работу были после этой даты. При задании такого ограничения целостности ввод значения в поле будет обязательным (даже если в свойстве поля «Условие на значение» зафиксировано - «нет»).
   Условия на значения могут задаваться для полей или записей. Выражения, определяющие условия на значения, не должны содержать функции, а также ссылки на формы, запросы и таблицы. Кроме того, выражение, указанное в качестве условия для поля, не должно содержать ссылки на другие поля. Выражение, указанное в качестве условия на значение для записи, может содержать ссылки на поля той же таблицы.
   Условия на значения для записей задаются в окне свойств таблицы, вызываемом командой «Свойства» в контекстном в режиме конструктора таблицы.
   Если пользователь задает значение свойства «Условие на значение», но не определяет свойство «Сообщение об ошибке», то при нарушении условия на значение Microsoft Access выводит стандартное сообщение об ошибке. Если значение свойства «Сообщение об ошибке» задано (рис. 5.41), то в сообщении об ошибке выводится текст, указанный в качестве значения этого свойства.

Рис. 5.41. Задание ограничений целостности при описании полей таблицы
 

Рис. 5.41. Задание ограничений целостности при описании полей таблицы

   В Access нет специального способа задания домена перечислением. Как было показано выше, этого можно достичь, используя «Мастер подстановки». Кроме того, это можно сделать и путем задания соответствующего выражения для свойства Условия на значения. Например, для поля «Должность» в таблице БД преподавателей вузов можно задать условие «ассистент» Or «старший преподаватель» Or «доцент» Or «профессор» Or «заведующий кафедрой».
   Маска ввода
   Предположим, вы вводите в таблицу имена сотрудников. Для соответствующего поля можно задать маску ввода, которая позволит использовать только буквы при вводе, обеспечит преобразование первого символа в верхний регистр, всех остальных - в нижний, и допускающую использование не менее двух букв (считаем, что имен, состоящих из одной буквы, нет).
   В Access такая маска ввода будет выглядеть следующим образом:

>L<L???????????????????????????

   Символ «L» в маске обозначает, что в данную позицию должна быть введена буква, символ «?» - что в данную позицию может быть введена буква. Символ «>» преобразует все символы, расположенные правее этого знака, к верхнему регистру, символ «<» преобразует все символы, расположенные правее этого знака, к нижнему регистру. Все символы, которые могут быть использованы в масках, и их назначение можно посмотреть в «Справочной системе» Access.
   Использование подобных масок ввода не только обеспечивает контроль использования допустимых символов, но и облегчает процесс ввода данных.
   Индексированное поле
   Индексированное поле можно использовать для контроля на уникальность. В Access, как и во многих других системах, при определении для индексированного поля значения свойства «уникальный индекс» в это поле не допускается ввод повторяющихся значений.
   В тех СУБД, которые поддерживают концепцию ключа (в том числе и в Microsoft Access), после того как в таблице определяется ключ, по этому полю производится индексирование и запрещается ввод повторяющихся или пустых значений ключа. Ограничения целостности связи
   Как отмечалось выше, при задании связи между таблицами в Access можно установить флажок «Поддержание целостности данных», и в этом случае система будет автоматически поддерживать ограничения целостности связи. При удалении основной записи, связанной с несколькими подчиненными, могут быть выбраны разные стратегии обновления:
   • запретить удалять основную запись, если имеются подчиненные;
   • удалить вместе с основной записью и все подчиненные (каскадное удаление).
   В Access, например, при поддержании целостности связи автоматически принимается первая стратегия. Чтобы отменить ее для данной связи, надо установить флажок «Каскадное удаление связанных записей».
   Для задания сложных условий можно использовать макросы или модули.

 
< Пред.   След. >