- •Базы данных
- •Введение
- •Часть 1. Проектирование баз данных
- •1.1. Некоторые понятия и определения
- •1. 2. Модели данных
- •1.2.1. Иерархическая модель данных
- •1.2.2. Сетевая модель данных
- •1.2.3. Реляционная модель данных Основные определения
- •Типы связей между отношениями
- •1.3. Классификация баз данных
- •1.4. Цели проектирования баз данных
- •1.5. Проектирование баз данных с использованием универсального отношения
- •1.5.1. Универсальное отношение
- •1.5.2. Проблемы, вызываемые использованием универсального отношения
- •Проблема вставки
- •Проблемы обновления
- •Проблемы удаления
- •1.5.3. Нормальная форма Бойса -Кодда
- •Функциональные зависимости
- •Возможный ключ и детерминант
- •Общий подход к декомпозиции
- •Анализ исходных аномалий
- •1.5.4. Возможные потери фз при декомпозиции
- •1.5.5. Избыточные функциональные зависимости
- •Приемы удаления избыточных фз
- •Минимальное покрытие
- •Модернизированный алгоритм проектирования бд
- •1.6. Метод er - проектирования
- •1.6.1. Сущности и связи
- •1.6.2. Степень связи
- •1.6.3. Переход от диаграмм er – типа к отношениям
- •Предварительные отношения для бинарных связей степени 1:1
- •Предварительные отношения для бинарных связей степени 1:n.
- •Предварительные отношения для бинарных связей степени n:m
- •1.6.4. Дополнительные конструкции, используемые в er - методе
- •Необходимость связей более высокого порядка
- •Предварительные отношения для трехсторонних связей
- •Использование ролей
- •1.6.5. Последовательность проектирования бд при использовании er- метода
- •1.6.6. Проверка отношений на завершающейся фазе проектирования
- •1.7. Другие нормальные формы
- •1.8. Контрольные вопросы
- •Часть 2. Специальные аспекты работы с базами данных
- •2.1. Защита данных в базе
- •2.2.1. Общие вопросы защиты данных
- •2.2.2. Реализация защиты данных в различных системах
- •Управление доступом в sql
- •Реализация системы защиты в ms sql Server
- •2.2. Обеспечение целостности данных
- •2.3. Организация параллельных процессов обработки данных
- •2.4. Восстановление бд
- •2.4.1. Уровни восстановления.
- •2.4.2. Восстановление и логический элемент работы
- •Требования к лэр
- •2.4.3. Промежуточное восстановление
- •2.4.4. Длительное восстановление
- •2.5. Математический аппарат, используемый при работе с реляционной базой данных
- •2.5.1. Теоретико-множественные операции реляционной алгебры
- •2.5.2. Специальные операции реляционной алгебры
- •2.6. Контрольные вопросы
- •Часть 3. Разработка приложений для работы с базами данных
- •3.1. Краткий обзор субд
- •3.2. Субд Access
- •3.2.1. Вводные замечания
- •3.2.2. Создание базы данных
- •3.2.3. Создание и работа с таблицами
- •3.2.4. Работа с запросами
- •3.2.5. Создание форм
- •3.2.6. Отчеты в Access
- •3.2.7. Макросы в Access
- •Преобразование макросов в программы на Visual Basic
- •3.2.8. Работа с внешними данными
- •3.3. Программирование в Access
- •3.3.1. Вводные замечания
- •3.3.2. Объявление переменных
- •3.3.3. Константы
- •3.3.4. Тип данных Variant
- •3.3.5. Пользовательские типы данных
- •3.3.5.Операторы, команды и выражения в vba
- •3.3.7. Процедуры vba
- •3.3.8. Управляющие структуры в vba
- •Работа с управляющими структурами
- •3.3.9. Объекты в Access
- •3.3.10. Классы в Access
- •3.3.11. Работа с ошибками в vba
- •3.4.Работа в ms sql –Server
- •3.4.1. Основные количественные показатели системы sql-сервер
- •3.4.2. Создание баз данных
- •3.4.3. Создание таблицы
- •3.4.4. Извлечение данных
- •3.4.5. Добавление данных
- •3.4.6. Изменение данных
- •3.4.7. Удаление данных
- •3.5. Контрольные вопросы
- •Цитированная литература
- •Оглавление
- •Часть 1. Проектирование баз данных 3
- •Часть 2. Специальные аспекты работы с базами данных 71
- •Часть 3. Разработка приложений для работы с базами данных 114
2.2. Обеспечение целостности данных
Одним из основополагающих понятий в технологии баз данных является понятие целостности. В общем случае это понятие, прежде всего, связано с тем, что база данных отражает в информационном виде некоторый объект реального мира или совокупность взаимосвязанных объектов реального мира. В реляционной модели объекты реального мира представлены в виде совокупности взаимосвязанных отношений. Под целостностью будем понимать соответствие информационной модели предметной области, хранимой в базе данных, объектам реального мира и их взаимосвязям в каждый момент времени.
Любое изменение в предметной области, значимое для построенной модели, должно отражаться в базе данных, и при этом должна сохраняться однозначная интерпретация информационной модели в терминах предметной области.
В модели данных должны быть предусмотрены средства и методы, которые позволят обеспечивать динамическое отслеживание в базе данных согласованных действии, связанных с согласованным изменением информации.
Поддержка целостности в реляционной модели данных в ее классическом понимании включает в себя 3 аспекта.
Во - первых это поддержка структурной целостности, которая трактуется как то, что реляционная СУБД должна допускать работу только с однородными структурами данных типа «реляционное отношение». При этом понятие <реляционного отношения > должно удовлетворять всем ограничениям, накладываемым на него в классической теории реляционной БД (отсутствие дубликатов кортежей, соответственно обязательное наличие первичного ключа, отсутствие понятия упорядоченности кортежей).
В дополнение к структурной целостности необходимо рассмотреть проблему неопределенных Null значений. Неопределенное значение интерпретируется в реляционной модели как значение неизвестное на данный момент времени. Это значение при появлении дополнительной информации в любой момент времени может быть заменено на некоторое конкретное значение. При сравнении неопределенных значений не действуют стандартные правила сравнения. Одно неопределенное значение никогда не считается равным другому неопределенному значению. Для выявления равенства значения некоторого атрибута неопределенному значению применяют стандартные специальные операторы:
<имя атрибута>IS NULL и <имя атрибута> IS NOT NULL.
Если в данном кортеже (в данной строке) указанный атрибут имеет неопределенное значение, то предикат IS NULL принимает значение TRUE (Истина), а предикат IS NOT NULL — FALSE (Ложь), в противном случае предикат IS NULL принимает значение FALSE а предикат IS NOT NULL принимает значение TRUE.
В стандарте SQL2 появилась возможность сравнивать не только конкретные значения атрибутов с неопределенным значением, но и результаты логических выражений сравнивать с неопределенным значением, для этого введена специальная логическая константа UNKNOWN. В этом случае операция сравнения выглядит так. Логическое выражение> IS {TRUE | FALSE | UNKNOWN}
Во вторых, это поддержка языковой целостности, которая состоит в том, что реляционная СУБД должна обеспечивать языки описания и манипулирования данными не ниже стандарта SQL. He должны быть доступны иные низкоуровневые средства манипулирования данными, не соответствующие стандарту.
Именно поэтому доступ к информации, хранимой в базе данных, и любые изменения этой информации могут быть выполнены только с использованием опреаторов языка SQL.
В третьих, это поддержка ссылочной целостности (Declarative Referential Integrity, DRI).
При поддержании ссылочной целостности между главной и подчиненной таблицами часто используются следующие правила:
• подчиненная строка не может быть вставлена, пока не существует главная строка. Например, нельзя ввести записи позиций счет - фактуры, пока в главной таблице не появится запись счета. Однако в поле внешнего ключа возможен ввод пустых значений, показывающих, что записи только подготавливаются и пока не являются связанными;
• главная строка не может быть удалена до удаления всех подчиненных строк. Например, нельзя удалить запись счет - фактуры, если в подчиненной таблице имеются записи позиций счета;
• если значение первичного ключа в главной строке изменено, все значения внешнего ключа, которые обращаются к этому значению первичного ключа, должны быть также обновлены; и наоборот, нельзя изменить значение ключевого поля в главной таблице, если существуют связанные записи.
Чтобы наложить эти правила на конкретную связь в СУБД Access, при ее создании следует установить флажок Обеспечение целостности данных в окне Изменение связи. Если данный флажок установлен, то любая попытка выполнить действие, нарушающее одно из перечисленных выше правил, приведет к выводу на экран предупреждения, а само действие выполнено не будет.
Ссылочная целостность обеспечивает поддержку непротиворечивого состояния БД в процессе модификации данных при выполнении операций добавления или удаления.
С целью обеспечения целостности данных при создании приложений используются ограничения целостности.
Ограничение — некоторое ограничивающее условие. В базе данных — общее понятие, охватывающее широкий круг аспектов управления базой данных: ключи, значения, типы и форматы данных и т. д. Ограничения устанавливают для пользователя некоторые рамки при вводе, изменении или удалении данных приложения.
Например, ограничение можно использовать, чтобы гарантировать, что каждый служащий в базе данных будет относиться к какому-либо отделу или что пользователи не смогут случайно ввести отрицательное значение для цены товара.
Ограничения можно определять на двух уровнях:
В базе данных. Ограничения в базе данных ассоциируются с определениями объектов-таблиц. Например, для таблицы может быть установлено ограничение, которое требует, чтобы каждое значение в столбце было уникальным.
В приложении Access (в программном коде или свойствах объектов). Ограничения в приложении ассоциируются с объектами приложения, которые формируют интерфейс к информации базы данных. Например, текстовое поле может иметь ограничение, которое требует, чтобы все вводимые в него значения были больше 20.
Ограничения в базе данных. Ограничение в базе данных — декларативно определенное правило, ограничивающее значения, которые могут быть введены в столбец или набор столбцов в таблице. Ограничения базы данных являются декларативно определяемыми, так как определяют ограничения как часть структуры таблицы при ее создании или изменении.
Будучи однажды ассоциировано с таблицей, ограничение всегда поддерживается, если его явно не удалить или не деактивировать.
Размещение ограничений в базе данных имеет следующие преимущества:
Централизация. Ограничение базы данных определяется только один раз и может автоматически использоваться всеми клиентами, обращающимися к базе данных. Определение ограничения в базе данных освобождает разработчика от необходимости вносить одни и те же ограничения в каждую форму, которая использует данную информацию. Кроме того, при необходимости модифицировать ограничение изменения вносятся только в один объект;
Защита. Ограничения базы данных всегда поддерживаются, независимо от того, какой инструмент доступа к данным используется. С другой стороны, ограничения, определенные в приложении, могут быть нарушены пользователем, использующим для доступа к тем же таблицам другое приложение или инструмент;
Простота. Ограничения базы данных просты в определении и не требуют никакого программного кода.
Типы ограничений в базе данных. Типы ограничений, которые можно ассоциировать с таблицей, варьируются в зависимости от базы данных, в которой хранится эта таблица. Описанные ниже категории ограничений поддерживаются большинством реляционных баз данных, в том числе и Microsoft Access.
Ограничения Null или Not Null. Ограничения разрешают или запрещают ввод в столбец таблицы пустых значений. Оно всегда применяется к отдельным столбцам. Ограничения Not Null используются, чтобы гарантировать, что для важных данных всегда имеются значения. Например, это ограничение можно использовать, чтобы гарантировать, что в записи каждого служащего в базе данных был проставлен его оклад.
При определении структуры таблицы это ограничение в СУБД Access задается установкой значений свойств Обязательное поле и Пустые строки поля таблицы. Необходимо различать два типа пустых значений: пустые (Null) значения и пустые строки. В некоторых ситуациях поле может быть оставлено пустым потому, что данные для него либо существуют, но пока неизвестны, либо их не существует вовсе. В связи с этим и различают два типа пустых строк. Например, если в таблице есть поле "Номер факса", то оно может быть пустым потому, что пользователь не знает, есть ли у клиента номер факса или нет, или потому, что он знает, что номера факса у клиента нет. Таким образом, если поле имеет пустое (Null) значение, то это означает, что его значение неизвестно. Если же введена пустая строка (два знака прямых кавычек (" ")), то это означает, что строкового значения нет.
Ограничения Unique. Ограничение запрещает пользователю ввод в столбец или набор столбцов дублированных значений. Ограничение Unique может активироваться для отдельного столбца или для комбинации столбцов. В последнем случае ограничение Unique иногда называется составным ограничением Unique.
Ограничения Unique используются, чтобы гарантировать, что в таблице не будет дублированных значений столбцов. Например, оно может гарантировать, что каждому служащему в базе данных будет присвоен уникальный номер.
Ограничение Unique не запрещает пользователю ввод в таблицу нескольких пустых значений — пустое значение в столбце всегда удовлетворяет ограничению Unique. Чтобы предотвратить ввод в столбец с ограничением Unique пустых значений, к столбцу необходимо также добавить ограничение Not Null.
В Access ограничение Unique инициируется установкой значения "Да (Совпадения не допускаются)" для свойства Индексированное поле либо установкой значения "Да" для свойства Уникальный индекс.
Ограничения Primary Key. Ограничение Primary Key гарантирует, что каждая строка в таблице будет уникально идентифицирована значением в столбце или наборе столбцов первичного ключа. Ограничение по первичному ключу объединяет черты ограничения Unique и ограничения Not Null.
Обычно рекомендуется включать ограничение Primary Key в каждой создаваемой таблице. Использование первичного ключа может значительно повысить быстродействие доступа к строкам таблицы. Ограничение Primary Key также используется для поддержания ссылочной целостности, когда в базе данных определены отношения один – ко - многим. Установка ссылочной целостности позволяет поддерживать соответствие между главной и подчиненной таблицами. Для поддержания ссылочной целостности ограничения Primary Key используются в комбинации с ограничениями Foreign Key, описанными ниже.
Некоторые СУБД (такие, как Access) могут автоматически поддерживать полную ссылочную целостность после создания ограничений Foreign Key и Primary Key. В других базах данных (таких, как SQL Server ранних версий) необходимо определить обработку ссылочной целостности отдельно (обычно в триггере). Однако в любом случае, чтобы установить в базе данных правила ссылочной целостности, необходимо определить ограничения Primary Key и Foreign Key.
Примечание: Установить правила ссылочной целостности можно также в приложении. Поддержание ссылочной целостности на уровне приложения не требует специфицирования ограничений Primary Key и Foreign Key, однако в этом случае все требуемые процедуры и правила должны быть реализованы программным способом.
Ограничения Foreign Key. Ограничение Foreign Key (внешний ключ) гарантирует, что каждое значение, введенное в столбец, уже существует в некотором другом столбце (обычно в другой таблице). Ограничения Foreign Key обычно используются для поддержания ссылочной целостности, когда в базе данных определены отношения один – ко - многим. Ограничения Foreign Key всегда используются вместе с ограничениями Primary Key (описанными в предыдущем разделе).
В отношении один –ко - многим внешний ключ — столбец в подчиненной таблице, которая содержит идентификатор строки в главной таблице. Значение в столбце внешнего ключа равно значению в столбце первичного ключа в другой таблице.
В отношении один – к - одному каждая строка в подчиненной таблице соответствует уникальной строке в главной таблице. В отношении один – ко - многим одной строке в главной таблице может соответствовать любое количество строк в подчиненной таблице.
Кроме рассмотренных ограничений целостности существуют:
1. Ограничения реальных значений данных, хранимых в БД, чтобы значение поля принадлежало некоторому диапазону значений, либо соблюдалось некоторое арифметическое соответствие между значениями различных полей.
2. В заданном отношении для каждого кортежа между значениями полей А и В должно всегда выполняться условие, что первое больше второго.
3. Значения, которые принимает некоторый атрибут, должны быть ограничены заданным диапазоном.
4. Для некоторого атрибута (или комбинации атрибутов) может существовать конечный, небольшой по размеру набор допустимых значений (например, по атрибуту ОБРАЗОВАНИЕ может быть только значения НАЧАЛЬНОЕ, НЕПОЛНОЕ СРЕДНЕЕ, СРЕДНЕЕ, НЕПОЛНОЕ ВЫСШЕЕ, ВЫСШЕЕ).
5. Значение некоторого атрибута должны удовлетворять определенному формату.
5. Множество значений одного из атрибутов отношения должно удовлетворять некоторому статическому условию. Например, конкретное значение не должно превышать более чем в два раза среднее значение.
7. Множество значений некоторого столбца отношения является подмножеством значений другого столбца этого отношения.
Кроме перечисленных, существуют и другие ограничения целостности. Например, ограничения на условия выполнения параллельных операций над данными в базе; ограничения типа "старый" - "новый", когда БД переходит в новое состояние.
Описание ограничений целостности содержит две части. В первой из них выражается само ограничение, во второй описывается, когда, при каких условиях должна выполняться проверка. Язык манипулирования данными реальных систем позволяют в той или иной мере поддерживать многие из рассмотренных ограничений целостности.