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

Крючков Основы учёта,контроля 2007

.pdf
Скачиваний:
494
Добавлен:
16.08.2013
Размер:
9 Мб
Скачать
☆

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

Таблица работников

Внешний ключ

Фамилия

Должность ID

 

 

Иванов

7

 

 

Петров

3

Первичный ключ

 

 

 

 

Таблица должностей

 

 

Должность ID

Должность

 

 

7

инженер

 

 

14

доцент

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

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

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

Первая нормальная форма должна удовлетворять единственному требованию атомарности: каждое поле данных должно содержать

351

единственный элемент данных и ни один отдельный элемент не должен повторяться.

Вторая нормальная форма дополнительно должна удовлетворять еще двум правилам:

•каждая таблица содержит данные только об одном объекте;

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

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

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

•Обоснованность денормализации. Единственная причина, по которой возможна денормализация – это повышение производительности приложения.

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

•Полная документированность производимых действий.

В реляционной базе данных различают различные типы отношений между таблицами:

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

•Отношение «один со многими» используется для связи записи

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

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

352

отношением «один со многими», что в результате реализует отношение «многие со многими» исходной таблицы.

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

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

Поддержка транзакций

Любое изменение в базе данных в компьютеризированных СУиК ЯМ осуществляется с помощью транзакций. Транзакция – это набор преобразований в базе данных, в результате которого она переходит из одного непротиворечивого состояния в другое непротиворечивое состояние. Транзакции должны удовлетворять четырем требованиям «ACID»: атомарности (Atomicity), постоянства (Consistency), изолированности (Isolation), устойчивости (Durability).

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

•Условие постоянства означает, что транзакция не должна оставлять за собой след. Прерванные транзакции должны возвращать систему в исходное состояние. Эта операция называется «откат транзакции» (rollback).

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

353

• Устойчивость транзакции означает, что, если транзакция завершена и ее цель достигнута, она становится завершенной, даже если с системой что–то произойдет.

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

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

Язык структурированных запросов SQL

Язык структурированных запросов SQL является языком высокого уровня для манипулирования данными и объектами в реляционных базах данных. Наличие такого языка является необходимым условием, предъявляемым к базе данных, чтобы она могла считаться реляционной. Реляционная модель была разработана фирмой IBM в 70–е годы двадцатого века. Одновременно с этим появилась первая версия структурированного языка запросов. Последний стандарт SQL был принят в 2003 г.

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

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

354

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

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

Основная команда SQL это команда выборки информации – SELECT. Ее синтаксис достаточно сложен и позволяет составлять запросы для осуществления большого количества операций по предоставлению пользователю информации из базы данных. Приведем несколько примеров иллюстрирующих его возможности:

SELECT title, price FROM titles

WHERE рrice >= 5 AND рrice <=10

В данном примере из таблицы titles выбираются значения полей, озаглавленных title, и price для всех записей, в которых значения поля price лежат в интервале от 5 до 10. Ключевые слова SELECT и FROM в запросе необходимы, так как они специфицируют таблицу, в которой осуществляется выборка, и поля, значения которых необходимо представить пользователю. Ключевое слово WHERE определяет условие осуществляемой выборки. Если оно отсутствует, то выборка будет осуществлена по всем записям таблицы.

Поскольку предикат в предложении WHERE принимает значение «истина»/«ложь», то для его формирования можно использовать операторы булевой алгебры. В булевом выражении единственный предикат может использовать любое количество условий, что позволяет формировать исключительно мощные предикаты. SQL может использовать операторы сравнения: равно, больше, меньше, больше или равно, меньше или равно, не равно. Последний имеет вид <>.

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

•AND – логическое И. Оператор берет два булевых выражения (А AND B) и выдает в результате «истина», если они оба истинны или «ложно» в противном случае;

•OR – логическое ИЛИ. Оператор берет два булевых выражения (А OR В) и выдает в результате «истина» в том случае, если хотя бы одно из них имеет значение «истина»;

355

•NOT – логическое отрицание. В качестве аргумента используется одно выражение (NOT А). Этот оператор меняет значение на противоположное.

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

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

•COUNT – определяет количество строк или полей, выбранных посредством запроса и не являющимися NULL значениями.

•SUM – вычисляет арифметическую сумму всех выбранных значений данного поля.

•AVG – вычисляет среднее значение всех выбранных значений данного поля.

•MAX – вычисляет наибольшее из всех выбранных значений данного поля.

•MIN – вычисляет наименьшее из всех выбранных значений данного поля.

Приведем пример использования функций агрегирования:

SELECT AVG(price) FROM titles

В данном примере пользователь получает единственное число, равное среднему значению величин, содержащихся в столбце price таблицы titles.

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

Для вставки информации в таблицу базы данных используется команда INSERT. Приведем пример вставки в таблицу Users кон-

356

кретных значений в столбцы, озаглавленные F_name, L_name, U_login, U_password

INSERT INTO Users (F_name, L_name, U_login, U_password)

VALUES ('Сергей', 'Иванов', 'Sergey', 'HM235YPAH')

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

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

ром 1034:

UPDATE Users

SET U_login=’master’

WHERE user_id=1034

Здесь после ключевого слова UPDATE указывается таблица, в которой производятся изменения. Затем вслед за ключевым словом SET указывается само изменение. И, наконец, предикат вслед за ключевым словом WHERE специфицирует запись, для которой осуществляется это изменение.

Синтаксис команды удаления достаточно прост. Приведем пример:

DELETE FROM Users

WHERE user_id=1002

В данном случае из таблице USERS удаляется запись, содержащая информацию о пользователи с идентификационным номером

1002.

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

357

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

СУБД, используемые в компьютеризированных СУиК ЯМ

Во время написания этой главы выбор разработчика был ограничен двумя SQL серверами, сертифицированными по третьему классу защиты от НСД. Это SQL Server производства компании Microsoft версии 6.5 и СУБД Oracle двух версий. Использование продуктов семейства Oracle ограничено их высокой стоимостью. MS SQL Server имеет относительно более доступную стоимость и приемлемую мощность для предприятий различного уровня. В настоящий момент Федеральная информационная система и ряд крупных предприятий отрасли используют СУБД Oracle. Большинство же остальных продуктов работает с использованием MS SQL Server 6.5 [13]. Так же как и в случае с операционными системами, производится сертификация новых программных продуктов. В ближайшее время планируется сертификация по третьему классу защиты от НСД MS SQL Server 2000 [14] и Oracle 10. Помимо СУБД, предназначенных для работы под управлением ОС Windows, вместе с защищенным дистрибутивом Linux, сертифици-

рована СУБД PostgreSQL.

7.3.3. Инструментальные средства разработки

Инструментальные средства разработки представляют собой третью составляющую базового программного обеспечения компьютеризированные СУиК ЯМ. Они выполняют две основных функции при проектировании систем и их эксплуатации. Прежде всего, с их помощью разработчик создает графический пользовательский интерфейс (ГИП). Без развитого и удобного интерфейса представить себе коммерческий продукт в наше время невозможно. Вторая функция прикладного программного обеспечения – про-

358

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

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

•удобные средства разработки программ;

•возможность визуального программирования;

•хорошие средства отладки;

•развитый аппарат обработки ошибок;

•поддержку многооконности;

•удобные средства связи с базами данных.

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

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

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

В настоящее время систем разработки программного обеспечения, имеющих такие возможности, достаточно много. Лидерами популярности являются продукты фирмы Microsoft – Visual Basic и Visual С++ и продукт фирмы Borland – Delphi и C++ Builder.

359

По материалам исследования, проведенного в отрасли в 2001 г., около трети разработчиков использовали Visual Basic и около 15 % разработчиков – Delphi. Популярность VB в среде российских разработчиков компьютеризированных СУиК ЯМ объясняется, главным образом, влиянием опыта разработчиков LANL (США), чей продукт CoreMAS, хотя и не был взят на вооружение предприятиями отрасли, но использовался в качестве образца при создании многих российских систем. Наконец, VB достаточно простая и удобная система программирования, различные версии которой имеют в своем составе многочисленные средства доступа к данным.

Следует же указать еще на одну особенность систем разработки приложений, которая хотя и не указана в стандарте отрасли, но давно уже является стандартом любой профессиональной системы разработки программных приложений. Используемое для разработки средство должно поддерживать объектно–ориентированное программирование (ООП). Рассмотрим кратко его принципы [15].

Объектно–ориентированное программирование

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

Что такое объект в ООП? Рассмотрим последовательность программных единиц. Идентификатор – определяет одно какое–либо значение, например цвет. Далее, во всех современных языках программирования есть понятие записи как совокупности идентификаторов. Может быть создана запись, содержащая место положения прямоугольника на экране (четыре числа), цвет (одно число), надпись (символьная строка), положение – кнопка нажата или не нажата (булевская переменная). Такая запись полностью определяет

360