Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Bazy_dannykh_Uchebnik_novy

.pdf
Скачиваний:
132
Добавлен:
02.05.2015
Размер:
4.02 Mб
Скачать

Рисунок 17. Интерфейс для задания ограничений целостности на уровне домена.

После выбора вариантов «Поле» или «Поле со списком» появляется следующая вкладка.

Рисунок 18. Интерфейс для задания ограничений целостности на уровне домена Если ограничение целостности на уровне домена представляет собой список, то значения

списка вводятся через «;» в поле «Источник строк». Домен можно задать и путем формирования запроса, которому принадлежат все значения домена. Для этого необходимо кликнуть мышкой на кнопке «…» в конце поля «Источник строк». В

результате появится интерфейс для выполнения SQL-запроса. Показан на рисунке 19.

51

Рисунок 19. Интерфейс для задания ограничений на уровне домена неявным способом, с

помощью запроса

Ограничения целостности, задаваемые на уровне отношения.

Некоторые семантические правила невозможно преобразовать в выражения, которые будут применимы только к одному столбцу. Предположим, что в примере с библиотекой надо потребовать, чтобы пользователь оставлял свой телефон для связи с ним. С другой стороны у него может быть несколько телефонов, для записи каждого из телефонов имеется специальный атрибут – колонка в таблице. Заполнение каждого из атрибутов по отдельности не является обязательным, но один-то телефон точно должен быть. Мы хотим потребовать, чтобы из двух по крайней мере один телефон был бы задан обязательно.

Попробуем сформулировать это в терминологии неопределенных значений баз данных.

Пример 17:

Домашний телефон должен быть задан (>NOT NULL>) или рабочий телефон должен быть задан (>NOT NULL>). Для MS Access или для MS SQL Server97

соответствующее проверочное выражение будет выглядеть следующим образом:

HOME_PHON IS NOT NULL OR WORK_PHON IS NOT NULL

В MS Access данное ограничение также можно задать с помощью графического

интерфейса, см. предыдушие примеры.

Ограничения целостности, задаваемые на уровне связи между отношениями:

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

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

Пример 18:

Задание ограничений целостности на уровне между отношениями – рисунок 20.

Одним из способов доступа к данному графическому интерфейсу в MS Access:

вкладка «Схема данных».

52

Рисунок 20. Задание ограничений целостности на уровне отношения.

Процедурные ограничения целостности

Процедурная поддержка ограничений целостности заключается в

использовании триггеров и хранимых процедур.

Процедурные ограничения целостности реализуются с помощью триггеров – хранимых

процедур.

Триггер

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

(INSERT), удалением строки (DELETE) или модификации данных в строке

(UPDATE) заданном столбце заданной таблицы реляционной базы данных.

Триггеры используются для проверки целостности данных, а также для отката транзакций.

Пример 19:

Имеются данные по кафедрам и по сотрудникам, работающим на них. Требуется,

чтобы поле Количество таблицы Кафедры должно содержать количество сотрудников, реально числящихся в подразделении.

53

 

 

Таблица 11. Данные по кафедрам и сотрудникам.

 

 

 

 

 

 

 

 

Ключ

Название

Количество

 

Ключ

ФИО

Кафедра

 

 

 

 

 

 

 

 

 

1

Кафедра алгебры

3

 

1

Иванов

1

 

2

Кафедра

2

 

2

Петров

2

 

 

программирования

 

 

 

 

 

 

 

 

 

3

Сидоров

1

 

 

 

 

 

 

 

 

 

 

 

 

 

4

Пушников

2

 

 

 

 

 

5

Шарипов

1

 

 

Таблица «Кафедры»

 

 

 

 

 

 

 

Таблица

«Сотрудники».

 

Для реализации этого ограничения необходимо создать триггер, запускающийся при вставке, модификации и удалении записей в таблице Сотрудники, который корректно изменяет значение поля Количество. Например, при вставке в таблицу

Сотрудники новой строки, триггер увеличивает на единицу значение поля

Количество, а при удалении строки - уменьшает. Заметим, что при модификации записей в таблице Сотрудники могут потребоваться даже более сложные действия.

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

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

при декларировании (объявлении) ограничения текст ограничения хранится в виде некоторого объекта СУБД, а для реализации ограничения используются встроенные в СУБД функции, и тогда этот код представляет собой внутренние функции ядра СУБД.

при декларировании ограничения СУБД автоматически генерирует триггеры,

выполняющие необходимые действия по проверке ограничений.

Структурная целостность базы данных

54

Структурная целостность базы данных трактуется как то, что реляционная СУБД должна допускать работу только с однородными структурами данных типа "реляционное отношение" или таблица.

При этом понятие "реляционного отношения" должно удовлетворять всем ограничениям,

накладываемым на него в классической теории реляционной БД (отсутствие дубликатов кортежей, соответственно обязательное наличие первичного ключа, отсутствие понятия упорядоченности кортежей).

Языковая целостность базы данных Языковая целостность базы данных означает, что реляционная СУБД должна

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

Не должны быть доступны иные низкоуровневые средства манипулирования данными, не соответствующие стандарту. Именно поэтому доступ к информации, хранимой в базе данных, и любые изменения этой информации могут быть выполнены только с использованием операторов языка SQL.

Ссылочная целостность базы данных Ссылочная целостность – это ограничение базы данных, гарантирующее, что

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

Таким образом, под ссылочной целостностью базы данных подразумевается комплекс ограничений целостности: ограничения на уровне доменов (подстановки), ограничения на уровне отношения и ограничения на уровне между отношениями. Вот несколько дополнительных определений, найденных в Internet:

«Ссылочная целостность в реляционной базе данных – это согласованность между связанными таблицами. Ссылочная целостность обычно поддерживается путем комбинирования первичного ключа и внешнего ключа. Для соблюдения ссылочной целостности требуется, чтобы любое поле в таблице, объявленное внешним ключом, могло содержать только значения из поля первичного ключа родительской таблицы …».

55

«[Ссылочная целостность – это] свойство, обеспечиваемое реляционными системами управления базами данных (РСУБД), которое предотвращает ввод несогласованных данных пользователями или приложениями. В большинстве РСУБД имеются различные правила ссылочной целостности, которые можно применить при создании связи между двумя таблицами.»

«[Ссылочная целостность – это] предохранительное устройство системы управления базами данных, гарантирующее, что каждый внешний ключ соответствует первичному ключу. Например, номера заказчиков являются первичными ключами в файле заказчиков и внешними ключами в файле заказов.

При удалении записи заказчика должны быть удалены соответствующие записи заказов; в противном случае они останутся без исходной связи. Если СУБД не проверяет этого, соответствующий механизм должен программироваться в приложении».

Поддержка ссылочной целостности в базе данных обеспечивает много преимуществ.

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

Убыстрение разработки. Ссылочная целостность объявляется. Это гораздо продуктивнее (на один или два порядка), чем написание специального программного кода.

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

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

Проблема неопределенных значений

Для обеспечения целостности данных важным моментом является интерпретация неопределенных (Null) значений. Неопределенное значение интерпретируется в реляционной модели как значение, неизвестное на данный момент времени. Это значение при появлении дополнительной информации в любой момент времени может быть

56

заменено на некоторое конкретное значение. При сравнении неопределенных значений не действуют стандартные правила сравнения: одно неопределенное значение никогда не считается равным другому неопределенному значению. Для выявления равенства значения некоторого атрибута неопределенному применяют специальные стандартные предикаты:

<имя атрибута>IS NULL

<имя атрибута> IS NOT NULL.

Если в данном кортеже (в данной строке) указанный атрибут имеет неопределенное значение, то предикат IS NULL принимает значение TRUE(Истина), а предикат IS NOT NULL — FALSE (Ложь), в противном случае предикат IS NULL принимает значение

FALSE, а предикат IS NOT NULL принимает значение TRUE.

Ведение Null значений вызвало необходимость модификации классической двузначной логики и превращения ее в трехзначную. Все логические операции,

производимые с неопределенными значениями, подчиняются этой логике в соответствии с заданной таблицей истинности.

Таблица 12. Таблица истинности для логических операций с неопределенными значениями

А

В

Not A

A & B

A В

 

 

 

 

 

TRUE

TRUE

FALSE

TRUE

TRUE

 

 

 

 

 

TRUE

FALSE

FALSE

FALSE

TRUE

 

 

 

 

 

TRUE

Null

FALSE

Null

TRUE

 

 

 

 

 

FALSE

TRUE

TRUE

FALSE

TRUE

 

 

 

 

 

FALSE

FALSE

TRUE

FALSE

FALSE

 

 

 

 

 

FALSE

Null

TRUE

FALSE

Null

 

 

 

 

 

Null

TRUE

Null

Null

TRUE

 

 

 

 

 

Null

FALSE

Null

FALSE

Null

 

 

 

 

 

Null

Null

Null

Null

Null

 

 

 

 

 

Транзакции Транзакция - это последовательность операторов манипулирования данными,

выполняющаяся как единое целое (все или ничего) и переводящая базу данных из одного целостного состояния в другое целостное состояние.

Транзакция обладает четырьмя важными свойствами, известными как свойства АСИД:

(А) Атомарность. Транзакция выполняется как атомарная операция - либо выполняется вся транзакция целиком, либо она целиком не выполняется.

57

(С) Согласованность. Транзакция переводит базу данных из одного согласованного (целостного) состояния в другое согласованное (целостное)

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

(И) Изоляция. Транзакции разных пользователей не должны мешать друг другу

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

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

системы.

Транзакции важны как в многопользовательских, так и в однопользовательских системах. В однопользовательских системах транзакции - это логические единицы работы, после выполнения которых база данных остается в целостном состоянии.

Транзакции также являются единицами восстановления данных после сбоев -

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

OLTP системы - системы оперативной обработки транзакций (Online Transaction Processing, OLTP)

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

Для нормальной работы множества пользователей применяются блокировки и транзакции. Эффективная обработка транзакций и поддержка блокировок входят в число важнейших требований к системам оперативной обработки транзакций.

Высоконагруженные системы

Информационные системы, обеспечивающие обработку запросов большого

количества одновременно работающих пользователей.

Например, для работы сайта крупной компании может потребоваться обрабатывать

запросы от 10 000 одновременно работающих пользователей.

58

Хранилища данных (англ. Data Warehouse)

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

Строится на базе клиент-серверной архитектуры, реляционной СУБД и утилит поддержки принятия решений. Данные, поступающие в хранилище данных, становятся доступны только для чтения. Данные из промышленной OLTP-системы копируются в хранилище данных таким образом, чтобы построение отчётов и OLAP-анализ не использовал ресурсы промышленной системы и не нарушал её стабильность. Данные загружаются в хранилище с определённой периодичностью, поэтому актуальность данных несколько отстает от

OLTP-системы.

59

6. Реляционная алгебра

После того, как создана схема реляционной базы данных, можно перейти к самому главному, ради чего все затевалось – к получению выборок и отчетов на основе сведений,

хранящихся в базе данных. Для получения выборок и отчетов необходимо знать функциональные возможности реляционной базы данных по обработке запросов.

Обработка запросов в реляционных базах основана на операциях реляционной алгебры.

Реляционная алгебра, определенная Коддом, состоит из восьми операторов,

составляющих две группы. В первую группу входят традиционные операции над множествами: объединение ( ), пересечение (∩), вычитание (–) и декартово произведение

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

например, взять проекцию от объединения, или соединение от двух выборок и т.д. Такие выражения считаются вложенными.

Исходные данные

Пусть даны два отношения и с информацией о сотрудниках:

 

Отношение A

 

 

Отношение B

Таб.номер

Фамилия

Зарплата

 

Таб.номер

Фамилия

Зарплата

1

 

Иванов

1000

 

1

Иванов

1000

2

 

Петров

2000

 

2

Пушников

2500

3

 

Сидоров

3000

 

4

Сидоров

3000

 

 

 

 

 

 

 

 

Объединение UNION.

Объединением двух совместимых по типу отношений A и B называется отношение с тем же заголовком, что и у отношений A и B, и телом, состоящим из кортежей, принадлежащих или A, или B, или обоим отношениям.

Пример 16:

Результат операции A UNION B:

Таб.номер

Фамилия

Зарплата

1

Иванов

1000

 

 

 

2

Петров

2000

 

 

 

60

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