Базы данных: модели, разработка, реализация

Проектирование реляционных баз данных с использованием декомпозиционного и ER–методов. Вопросы поддержки целостности, защиты информации и параллельной обработки данных. Приложения для работы с базами данных с использованием СУБД Access и языка VBA.

Рубрика Программирование, компьютеры и кибернетика
Вид учебное пособие
Язык русский
Дата добавления 01.03.2011
Размер файла 211,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Роли приложения. Система безопасности SQL Server реализована на самом низком уровне -- уровне базы данных. Это наилучший, наиболее действенный метод контроля деятельности пользователей независимо от приложений, используемых ими для подключения к SQL Server.

Отличия между стандартными ролями и ролями приложения фундаментальны. Роль приложения не имеет членов, то есть пользователи SQL Server или Windows NT не могут быть добавлены в эту роль. Роль активизируется, когда приложение устанавливает соединение. Пользователь, работающий в это время с приложением, не является членом роли -- только лишь его приложение использует установленное соединение.

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

Приложение может быть спроектировано так, чтобы пользователь, работающий с ним, для активизации роли приложения должен был вводить пароль. Однако чаще всего пароль вводится самим приложением незаметно для пользователя. Дополнительно для обеспечения максимальной безопасности пароль может быть зашифрован перед своей отправкой к SQL Server по сети.

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

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

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

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

SQL Server позволяет шифровать следующие данные:

- любые данные, передаваемые между сервером и клиентом по сети;

- пароли учетных записей SQL Server или ролей приложения;

- код, использованный для создания объектов базы данных (хранимых процедур, представлений, триггеров и т. д.).

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

Если код триггера, представления или хранимой процедуры содержит данные или алгоритм, которые необходимо сохранить в тайне, необходимо использовать шифрование этих объектов.

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

SQL Server обеспечивает ограничение доступа к файлам системы.

Права доступа. Когда пользователь подключается к SQL Server, действия, которые он может выполнять в базе данных, определяются правами (разрешениями), выданными им как пользователю и как члену группы или роли, в которой они состоят.

Права в базе данных SQL Server можно разделить на три категории:

- права на доступ к объектам баз данных;

- права на выполнение команд Transact-SQL;

- неявные права (разрешения).

После создания пользователь не имеет никаких прав доступа кроме тех, которые разрешены для специальной роли базы данных public. Права, предоставленные этой роли, доступны всем пользователям в базе данных.

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

Важно быть осторожным с предоставлением разрешений на доступ к данным. Необходимо внимательно контролировать права доступа, выдаваемые пользователю как непосредственно, так и через членство в группах Windows NT и ролях SQL Server. Особенно это касается больших систем с тысячами пользователей и десятками групп.

Права на доступ к объектам баз данных. Работа с данными и выполнение хранимых процедур требуют наличия класса доступа, называемого правами на доступ к объектам баз данных. Под объектами подразумеваются таблицы, столбцы таблицы, представления, хранимые процедуры. Права на доступ к объектам баз данных контролируют возможность выполнения пользователями, например, команд SELECT, INSERT, UPDATE и DELETE для таблиц и представлений. Таким образом, если пользователю необходимо добавить новые данные в таблицу, ему следует предоставить право INSERT (вставка записей в таблицу). Предоставление же пользователю права EXECUTE разрешает ему выполнение каких-либо хранимых процедур и функций.

Для различных объектов применяются разные наборы прав доступа к ним:

- SELECT, INSERT, UPDATE, DELETE, REFERENCES - эти права могут быть применены для таблицы или представления;

- SELECT и UPDATE -- эти права могут быть применены к конкретному столбцу таблицы или представления;

- INSERT и DELETE -- эти права применяются для таблицы или представления;

- EXECUTE -- это право применяется только к конкретным хранимым процедурам и функциям, разрешая пользователю их выполнение.

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

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

Для управления разрешениями пользователя на доступ к объектам базы данных используется команда GRANT, которую мы рассматривали ранее.

В дополнение к рассмотренному в команде указывается имя того объекта системы безопасности, который необходимо включить в роль. В качестве таких объектов могут выступать как учетные записи SQL Server, так и пользователи и группы пользователей Windows NT, которым предоставлен доступ к серверу баз данных.

Права на исполнение команд Transact-SQL. Этот класс прав контролирует возможность создания объектов в базе данных, создания самой базы данных и выполнения процедуры резервного копирования.

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

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

Аналогичная ситуация получается и с ролями сервера.

Для конкретного действия, контролируемого разрешением, возможны три варианта состояния доступа: предоставление, запрещение и неявное отклонение.

Для запрещения пользователю доступа к объектам базы данных используется команда DENY.

Параметры данной команды аналогичны параметрам команды GRANT. Использование параметра CASCADE позволяет отзывать права не только у данного пользователя, но также и у всех тех пользователей, кому он предоставил данные права.

Для неявного отклонения доступа к объектам базы данных можно использовать команду REVOKE, синтаксис которой:

REVOKE [GRANT OPTION FOR]

{ALL | PRIVLEGES}

<колонки_таблицы>

Параметры имеют смысл, аналогичный параметрам команд GRANT и DENY. Параметр GRANT OPTION FOR используется, когда необходимо отозвать право, предоставленное параметром WITH GRANT OPTION команды GRANT. Пользователь при этом сохраняет разрешение на доступ к объекту, но теряет возможность предоставлять это разрешение другим пользователям.

Неявное отклонение доступа позволяет более гибко конфигурировать систему безопасности.

Конфликты доступа. Разрешения, предоставленные роли или группе, наследуются их членами. Хотя пользователю может быть предоставлен доступ через членство в одной роли, роль другого уровня может иметь запрещение на действия с объектом. В таком случае возникает конфликт доступа.

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

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. Множество значений некоторого столбца отношения является подмножеством значений другого столбца этого отношения.

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

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

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

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

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

Однако как только пользователи получают возможность выполнять операции изменения одних и тех же данных в БД, ситуация изменяется. Вернемся к системе продажи билетов. Например, три различных оператора, находясь в различных транспортных агенствах города, одновременно запросили один билет до Москвы на 1 февраля, в поезде N 351, в купейном вагоне. В этом случае будет независимо друг от друга выполнено три процесса (транзакции). Транзакция - это разовое выполнение некоторой программы (программа может быть сложной прикладной, выраженной на одном из языков программирования, а может быть реализацией простого запроса, выраженного на языке запросов системы).

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

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

Блокировки. Решение задачи защиты данных при параллельном доступе заключается во введение блокировок для доступа к данным. Прежде чем прочитать некоторое данное X, транзакция T1 обязана его заблокировать: УСТАНОВИТЬ - БЛОКИРОВКУ X. Блокировка предотвращает доступ к этому данному другой транзакции Т2. Транзакция Т2 должна ждать, пока транзакция T1 не закончит работу с данным Х и не разблокирует его: СНЯТЬ -БЛОКИРОВКУ X. Если некоторая транзакций пытается блокировать уже блокированный элемент, она становится в очередь на ожидание, пока блокировка с этого элемента данных не будет снята.

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

Модели блокировок. Для блокировки могут использоваться простая модель и модель с блокировкой для чтения и записи. Рассмотрим эти модели.

Простая модель. В данной модели не вводится различие блокировок для операции чтения или операции записи элемента X. Установление блокировки предотвращает доступ к элементу X от других транзакций как по операции чтения, так и по операции записи до тех пор, пока этот элемент не будет разблокирован.

Модель с блокировками для чтения и записи. В данной модели имеется два вида доступа к элементу X: доступ только для чтения, доступ для чтения и записи. Соответственно различают два типа команд блокировки.

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

2. Команда блокировки элемента Х по записи. Команда блокировки по записи соответствует команде блокировки в простой модели, т.е. предотвращается доступ к элементу Х от других транзакций по чтению и по записи. Если некоторая транзакция установила блокировку элемента Х по записи, то никакая другая транзакция не сможет его заблокировать ни по записи, ни по чтению. Блокировка по чтению и блокировка по записи снимается одной командой; СНЯТЬ - БЛОКИРОВКУ X. В модели допускается, что транзакция может вначале устанавливать блокировку элемента X по чтению, а затем блокировку элемента X по записи.

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

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

Для пояснения тупиковой ситуации рассмотрим алгоритм двух программ П1 и П2.

Программа П1

1 шаг -войти в программу;

2 шаг -установить блокировку А;

3 шаг -читать А;

4 шаг -установить блокировку В;

5 шаг -читать В;

5 шаг -выполнить совместную обработку А иВ;

7 шаг -писать А;

8 шаг -снять блокировку с А;

9 шаг -писать В;

10 шаг -сиять блокировку с В;

11 шаг -выйти из программы.

Программа П2

1 шаг -войти в программу;

2 шаг -установить блокировку В;

3 шаг -читать В;

4 шаг -установить блокировку А;

5 шаг -читать А;

5 шаг -установить блокировку С;

7 шаг -читать С;

8 шаг -выполнить совместную обработку А, В и С;

9 шаг -писать В;

10 шаг -снять 5локировку с В;

11 шаг -писать А;

12 шаг -с н я т ь б л о к и р о в к у с А;

13 шаг -писать С;

14 шаг -снять блокировку с А;

15 шаг -выйти из программы.

Припопытке параллельного исполнения двух транзакций Т1 - выполнение программы П1, а Т2 - выполнение программы П2, они заблокируют друг друга и возникнет тупиковая ситуация. ВначалеТ1 заблокирует элемент А, а Т2 - элемент В. Здесь никаких осложнений нет, элементы различны и система разрешает транзакциям Т1 и Т2 выполняться параллельно. Закончив 3-й шаг, транзакции Т1 и Т2 перейдут всостояние ожидания: транзакция T1 будет ждать разблокировки элемента В, заблокированного транзакцией Т2; транзакция Т2 будет ждать разблокировки элемента А, заблокированного транзакцией Т1. Ни одна транзакция не может продолжаться из-за блокировок общих элементов. Это и есть тупиковая ситуация.

Существуют следующие подходы к разрешению тупиковых ситуаций.

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

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

3. Не вводится никаких системных требований на написание программ. В этом случае СУБД следит за возникновением тупиковых ситуаций. При обнаружении тупика действие одной из транзакций аннулируется, все выполненные ею изменения в БД устраняются. Транзакция переводится в состояние ожидания, и через некоторое время выполняется ее рестарт или полностью аннулируется. Чтобы выполнить рестарт или аннулирование транзакции, СУБД фиксирует транзакцию, записывая для каждой транзакции ее идентификатор, все произведенные ею вычисления, время начала и завершения. Такая информация позволяет в случае системного сбоя выполнить также рестарт всех зафиксированных транзакций, которые не успели успешно завершиться.

2.4 Восстановление БД

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

2.4.1 Уровни восстановления

Укрупнено можно выделить три уровня восстановления;

1. Оперативное восстановление. Характеризуется возможностью восстановления на уровне отдельного логического элемента работы при аномальном окончании управления данными (ошибка в программе, ошибка в аргументе и т.д.).

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

3. Длительное восстановление. При разрушении базы данных в результате дефекта на диске осуществляют восстановление с помощью копии базы данных. Затем воспроизводят результаты выполненных с момента снятия копии логических элементов работы и возвращают систему в состояние на момент разрушения.

2.4.2 Восстановление и логический элемент работы

Непрерывное управление данными, при котором базу данных из одного целостного состояния переводят в другое целостное состояние, называют логическим элементом работы (ЛЭР). Логический элемент работы также называют транзакцией.

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

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

Требования к ЛЭР
1. Необходимо, чтобы логический элемент работы или выполнялся полностью, или совершенно не выполнялся.
2. Необходимо, чтобы ЛЭР допускал возможность возврата в первоначальное состояние.
3. Необходимо иметь возможность воспроизведения процесса выполнения ЛЭР.
При появления сбоя осуществлять возврат удобнее не в начало логического элемента работы, a в некоторое промежуточное положение. Точку, куда происходит такой возврат, называют точкой фиксации (контрольной точкой). Пользователь может устанавливать в процессе выполнения ЛЭР произвольное количество контрольных точек.
Откат и раскрутка ЛЭР. Основным средством, используемым при восстановлении, является системный журнал, в котором регистрируются все изменения, осуществляемые в БД каждым ЛЭР. Возврат ЛЭР в начальное состояние состоит в аннулирование всех изменений, которые он осуществил в базе данных в процессе своего выполнения. Такую операцию называют откатом. Для воспроизведения результатов выполнения ЛЭР можно воспользоваться системным журналом и восстановить значения проведенных изменений в порядке их возникновения, либо повторно выполнить ЛЭР.
Воспроизведение результатов выполнения элемента с использованием системного журнала называют раскруткой. В любом случае эта операция является громоздкой. Однако такой способ можно использовать для устранения тупиковой ситуации, когда производится откат одного из логических элементов работы.

Для повышения эффективности выполнения отката ЛЭР записи системного журнала группируют по всем объектам, подлежащим изменению. П о окончании ЛЭР копию можно отбросить.

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

При двухстраничном способе нет необходимости фиксировать в журнале каждое изменение значений изменяемых объектов. Начальное значение изменяемого объекта можно зафиксировать в журнале только один раз -при первоначальном его изменении ЛЭР. Необходимость записи в журнал появляется также при прохождении точки фиксации.

Возможно, появление сбоя непосредственно перед операцией, связанной с отображением изменений в базе данных. Поэтому фактическое внесение изменений в БД откладывается до завершения ЛЭР. Информация о необходимых изменениях накапливается в специальном файле, который можно считать аналогом системного журнала.

2.4.3 Промежуточное восстановление

Если появляется сбой из-за ошибки пользоваться или системно-программной ошибки, то выполняемый в это время ЛЭР полностью исключается и возникает необходимость в перезапуске системы с некоторого предшествующего момента времени. Для этого в системе организуют контрольные точки. Контрольная точка для осуществления отката ЛЭР и является границей, с которой перезапускают систему. Момент возникновения сбоя нельзя заранее предугадать, поэтому периодически необходимо устанавливать контрольные точки.

Существует два типа контрольных точек.

1. Условием установления контрольной точки является отсутствие в данный момент времени выполняющихся ЛЭР. Если такой элемент существует, то начало выполнение новых ЛЭР задерживается и после завершения выполняющегося элемента устанавливается контрольная точка. При появлении сбоя осуществляется откат в состояние, соответствующее последней установленной контрольной точке. Раскрутку ЛЭР, завершившегося между контрольной точкой и точкой появления сбоя, осуществляют с использованием системного журнала.

2. Контрольная точка устанавливается при наличии выполняющихся ЛЭР. В данном случае в контрольной точке фиксируют состояние рабочих областей всех выполняющихся ЛЭР. При появлении сбоя осуществляется откат в состояние контрольной точки. Для ЛЭР, который выполнялся в момент установления контрольной точки, откат осуществляется до его начального состояния и далее аналогично п.1.

2.4.4 Длительное восстановление

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

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

2.5 Математический аппарат, используемый при работе с реляционной базой данных

Для выполнения операций над отношениями используется реляционная алгебра, основателем которой является Э.Ф.Кодд. Все множество операций реляционной алгебры можно разделить на две группы: теоретико-множественные и специальные. В первую группу входят 4 операции. Три первые теоретико-множественные операции являются бинарными, то есть в них участвуют два отношения и они требуют эквивалентных схем исходных отношений.

2.5.1 Теоретико-множественные операции реляционной алгебры

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

Пусть заданы два отношения R1 = { r1 } , R2 = {r2}, где r1 и r2 -- соответственно кортежи отношений R1 и R2, то объединение

R3 = R1 U R2 = { r r R1 v r R2}. Здесь r -- кортеж нового отношения, v -операция логического сложения «ИЛИ”.

Пересечением отношений называется отношение, которое содержит множество кортежей, принадлежащих одновременно и первому и второму отношениям R1 и R2.

R4 = R1 R2 ={ г | r R1 r R2 } здесь -- операция логического умножения (логическое «И»).

Разностью отношений R1 и R2 называется отношение, содержащее множество кортежей, принадлежащих R1 и не принадлежащих R2:

R5 = R1 \ R2 = { r | r R1 r R2}

Следует отметить, что операции Объединение и Пересечение являются коммутативными операциями, то есть результат операции не зависит от порядка аргументов в операции. Операция же Разности является принципиально несимметричной операцией, то есть результат операции будет различным для разного порядка аргументов. Кроме перечисленных трех теоретико-множественных операций в рамках реляционной алгебры определена еще одна теоретико-множественная операция -- расширенное декартово произведение. Эта операция не накладывает никаких дополнительных условий на схемы исходных отношений, поэтому операция расширенного декартова произведения, обозначаемая R1 R2, допустима для любых двух отношений. Но прежде чем определить саму операцию, введем дополнительно понятие конкатенации, или сцепления, кортежей

Сцеплением, или конкатенацией, кортежей с = <c1,c2 , ..., c n> и q = <q1,q 2, …, q m> называется кортеж, полученный добавлением значений второго в конец первого. Сцепление кортежей с и q обозначается как (с , q).

(с, q) = < c1, c 2,….. c n , q 1, q 2, …. , q m>

Здесь n -- число элементов в первом кортеже с, m -- число элементов во втором кортеже q.

Все предыдущие операции не меняли степени или арности отношений -- это следует из определения эквивалентности схем отношений. Операция декартова произведения меняет степень результирующего отношения.

Расширенным декартовым произведением отношения R1 степени n со схемой Sri = (A1, А2, .. , An) и отношения R2 степени m со схемой Sr2 = (В1, В2, . , Вm) называется отношение R3 степени n+m со схемой SR3 = (А1, А2,. , An, В1, В2, .., Вm), содержащее кортежи, полученные сцеплением каждого кортежа r отношения R1 с каждым кортежем q отношения R2. То есть если R1 = { r }, R2 = { q }, то R1 R2 = {(r, q) r R1 q R2}

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

(R1 U R2) \ (R1 \ R2) \ (R2 \ R1).

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

2.5.2 Специальные операции реляционной алгебры

Первой специальной операцией реляционной алгебры является горизонтальный выбор, или операция фильтрации, или операция ограничения отношений, или выборка.

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

R[(r)] = {r | r R (r) = "Истина"}, где (r) - условие.

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

Следующей специальной операцией является операция проектирования или проекции.

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

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

Следующей специальной операцией реляционной алгебры является операция соединения.

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

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

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

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

Вариантом операции соединения является операция условного соединения.

Пусть R = { r }, Q = { q } -- исходные отношения,

SR, SQ -- схемы отношений R и Q соответственно.

SR = (A1, А2, ... , Аk); SQ = (B1, В2, ... , Вm), где Аi, Bj -- имена атрибутов в схемах отношений R и Q соответственно.

При этом полагаем, что заданы наборы атрибутов А и В

А { Аi }i=1,k; В { Bj } j=1,m

и эти наборы состоят из -сравнимых атрибутов.

Тогда соединением отношений R и Q при условии будет подмножество декартова произведения отношений R и Q, кортежи которого удовлетворяют условию , рассматриваемому как одновременное выполнение условий:

- r.Аi i Вi : i =l,k, где k -- число атрибутов, входящих в наборы А и В, а i -- конкретная операция сравнения.

- Ai i Bi D; i -- i-й предикат сравнения, определяемый из множества допустимых на домене Di операций сравнения.

R [ ] Q = { (r,q) (r, q) r.А i q.Bi = «Истина», i =1,k}

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

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

3. Разработка приложений для работы с базами данных

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

3.1 Краткий обзор СУБД

Для использование на ПК, совместимых с IBM PC, большое распространение получили так называемые dBASE - подобные СУБД. Известно по крайней мере три семейства таких СУБД (dBASE, FoxPro и Clipper), однако версий оригинальных систем и их адаптированных вариантов гораздо больше. Отличаясь друг от друга используемыми командными языками, все эти СУБД используют одни и те же оперативные файлы с расширением .dbf, формат которых стал на некоторое время своеобразным стандартом баз данных.


Подобные документы

  • Базы данных с двумерными файлами и реляционные системы управления базами данных (СУБД). Создание базы данных и обработка запросов к ним с помощью СУБД. Основные типы баз данных. Базовые понятия реляционных баз данных. Фундаментальные свойства отношений.

    реферат [57,1 K], добавлен 20.12.2010

  • Базы данных (БД) и системы управления базами данных (СУБД) как основы современной информационной технологии, их роль в хранении и обработке информации. Этапы реализации БД, средств ее защиты и поддержки целостности. Протоколы фиксации и отката изменений.

    презентация [364,2 K], добавлен 22.10.2013

  • Реализация приложения "Книжный магазин" средствами систем управления базами данных. Проектирование структуры базы данных, определение сущности и атрибутов. Логическое проектирование базы данных и реализация базы данных в СУБД Microsoft Office Access.

    курсовая работа [7,8 M], добавлен 13.02.2023

  • Основные этапы проектирования базы данных. Access как система управления базами данных (СУБД), ее предназначение, отличительные возможности. Работа с таблицами, их создание и редактирование. Порядок создания запросов. Способы защиты баз данных.

    лабораторная работа [3,1 M], добавлен 18.08.2009

  • Системы управления базами данных: сущность и характеристика. Типы данных и свойства полей СУБД Access. Объекты базы данных: таблицы, схемы данных, формы, запросы, отчеты. Разработка и проектирование базы данных "Продажи книг" в среде Microsoft Access.

    курсовая работа [1,8 M], добавлен 04.02.2013

  • Базы данных и системы управления базами данных. Структура простейшей базы данных, свойства полей. Понятие языка SQL. Проектирование баз данных, режимы работы, объекты. СУБД Microsoft Access. Создание базы данных "Электротовары" средствами Visual FoxPro.

    курсовая работа [5,7 M], добавлен 29.04.2014

  • Изучение основных понятий баз данных: структура простейшей базы данных, компоненты базы данных Microsoft Access. Проектирование базы данных "Туристическое агентство" в СУБД Access 2010, в которой хранятся данные о клиентах, которые хотят поехать отдыхать.

    курсовая работа [3,3 M], добавлен 20.09.2013

  • Основные принципы проектирования реляционных баз данных и их практическая реализация в MS Access. Концептуальная и логическая модели реляционной базы данных, ее физическое проектирование. Автоматизация процесса взаимодействия с клиентами и поставщиками.

    курсовая работа [2,8 M], добавлен 10.03.2015

  • Операции в системе управления базами данных (СУБД). MS Access как функционально полная реляционная СУБД. Разработка реляционных моделей баз данных экономического направления. Применение прикладных программ для решения экономико-управленческих задач.

    курсовая работа [2,1 M], добавлен 14.01.2015

  • Понятие и сущность базы данных, их классификация и характеристика. Системы управления базами данных. СУБД структуры "сервер-клиент", его суть. Microsoft Access - функционально полная реляционная СУБД. Предназначение СУБД Access, и описание ее работы.

    реферат [44,3 K], добавлен 27.02.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.