Основы информационных систем. Базы данных
Основные понятия
В истории развития вычислительной техники наблюдалось два основных направления ее применения. Первое связано с выполнением больших численных расчетов, которые трудно или невозможно произвести вручную. Развитие этой области способствовало ускорению развития методов математического моделирования, численных методов, языков программирования высокого уровня, рассчитанных на удобное представление вычислительных алгоритмов.
Второе направление связано с использованием вычислительной техники для создания, хранения и обработки больших массивов данных. Такие задачи решают информационные системы (в дальнейшем — ИС). К ним относятся поисковые, справочные, банковские системы, автоматизированные системы управления предприятием. Для задач первого типа характерны большие объемы вычислительной работы при относительно небольших потребностях в памяти. Задачи второго типа, наоборот, требуют больших объемов внешней памяти при относительно небольших расчетах. Вторая область применения возникла несколько позже первой. Это связано с тем, что на первых этапах внешняя память вычислительных систем была несовершенной, т.е. надежное хранение больших объемов данных не представлялось возможным.
Предметом настоящего рассмотрения являются программные продукты второй области применения — информационные системы. Информационная система представляет собой аппаратно-программный комплекс, обеспечивающий выполнение следующих функций:
• ввод данных об объектах некоторой предметной области;
• надежное хранение и защита данных во внешней памяти вычислительной системы;
• дополнение, удаление, изменение данных;
• сортировка, выборка данных по запросам пользователей;
• выполнение специфических для данной предметной области преобразований информации;
• предоставление пользователям удобного интерфейса;
• обобщение данных и составление отчетов.
Объем данных в ИС может исчисляться миллиардами байт. Отсюда необходимость устройств, хранящих большие объемы данных во внешней памяти. Число пользователей ИС может достигать десятков тысяч, что создает немало проблем в реализации эффективных алгоритмов функционирования ИС. Успешно решаются эти задачи, если данные в информационной системе структурированы. Структурирование данных рассмотрим на примере студенческой группы. Каждый член группы во многом индивидуален, и характеризовать его можно с разных сторон. Но деканат, скорее всего, заинтересуют следующие данные (предметная область): фамилия студента, имя, отчество, курс, наименование группы, массив оценок по изучаемым дисциплинам. Таким образом, из всего многообразия данных выбираются только некоторые, т.е. создается информационная модель объекта. Данные упорядочиваются по порядку следования, по применяемым типам (форматам) данных, после чего они могут быть обработаны автоматом, каковым является компьютер.
Совокупность взаимосвязанных данных называется структурой данных. Совокупность структурированных данных, относящихся к одной предметной области, называется базой данных (БД). Совокупность программ, реализующих в БД функции ИС в удобной для пользователя форме, называется системой управления базой данных (СУБД). Программы, производящие специфическую обработку данных в БД, составляют пакет прикладных программ (ППП). Итак, можно заключить, что ИС — это организационное объединение аппаратного обеспечения (АО), одной или нескольких баз данных (БД), системы управления базами данных (СУБД) и пакетов прикладных программ (ППП).
Классификация БД
По технологии обработки данных БД подразделяются на централизованные и распределенные.
Централизованная БД хранится целиком в памяти одной вычислительной системы. Если система входит в состав сети, то возможен доступ к этой БД других систем.
Распределенная БД состоит из нескольких, возможно пересекающихся или дублирующих друг друга БД, хранимых в памяти разных вычислительных систем, объединенных в сеть.
По способу доступа к данным БД распределяются на локальный и удаленный (сетевой) доступ.
Локальный доступ предполагает, что СУБД обрабатывает БД, которая хранится на том же компьютере.
Удаленный доступ — это обращение к БД, которая хранится на одном из компьютеров, входящих в компьютерную сеть.
Удаленный доступ может быть выполнен по принципу файл-сервер или клиент-сервер.
Архитектура файл-сервер предполагает выделение одного из компьютеров сети (сервер) для хранения централизованной БД. Все остальные компьютеры сети (клиенты) исполняют роль рабочих станций, которые копируют требуемую часть централизованной БД в свою память, где и происходит обработка. Однако при большой интенсивности запросов к централизованной БД увеличивается нагрузка на каналы сети, что приводит к снижению производительности ИС в целом. Архитектура клиент-сервер предполагает, что сервер, выделенный для хранения централизованной БД, дополнительно производит обработку клиентских запросов. Клиенты получают по сети уже обработанные данные. Учитывая широкое распространение БД в самых различных областях, в последнее время архитектура клиент-сервер применяется и на одиночных вычислительных системах. В этом случае клиент — программа, которой понадобились данные из БД, посылает запрос серверу — программе, управляющей ведением БД, на специальном универсальном языке запросов. Сервер пересылает программе данные, являющиеся результатом поиска в БД по ее запросу. Этот способ удобен тем, что программа — клиент не обязана содержать все функции поддержания и ведения БД, этим занимается сервер. В результате упрощается написание программ — клиентов. Кроме того, к серверу может обращаться любое количество клиентов.
Модели данных
Для реализации основных функций в ИС используются различные принципы описания данных. Ядром любой БД является модель представления данных. Модель данных представляет множество структур данных и взаимосвязи между ними.
Различают иерархическую, сетевую и реляционную модели данных.
Иерархическая модель представляет связи между объектами
(данными) в виде дерева.
К основным понятиям иерархической модели относятся:
• узел — набор атрибутов данных, описывающих объект;
• связь — линия, связывающая узлы нижнего уровня с одним узлом вышележащего уровня. При этом узел вышележащего уровня называют предком для соответствующих ему узлов нижнего уровня, в свою очередь, узлы нижнего уровня называют потомками связанного с ними вышележащего узла (например, на рис. 4.1 узел В1 — предок для узлов С1, С2, а узлы С1, С2 — потомки узла В1);
• уровень — номер слоя узлов, отсчитанный от корня.
Количество деревьев в БД определяется числом корневых записей. К каждому узлу существует единственный путь от корня.
Рис. 4.1. Иерархическая модель данных
Сетевая структура имеет те же составляющие, что и иерархическая, но каждый узел может быть связан с любым другим узлом (рис. 4.2). Сетевой подход к организации данных является расширением иерархического. В иерархических моделях запись-потомок должна иметь только одного предка; в сетевых — потомок может иметь любое число предков.
Рис. 4.2. Сетевая модель данных
Обе эти модели не получили широкого распространения из-за сложности реализации графов в виде машинных структур данных, кроме того, в них сложно осуществить операции поиска информации. Набольшее распространение получила третья модель данных — реляционная, она может так же описывать иерархическую и сетевую модель. Реляционная модель ориентирована на организацию данных в виде двумерных таблиц.
Рассмотрим реляционную модель данных, ориентированную на организацию данных в виде двумерных таблиц. Реляционная модель данных является наиболее универсальной, к ней могут быть сведены другие модели. Важнейшим понятием реляционных моделей данных является сущность. Сущность — это объект любой природы, данные о котором хранятся в БД. Данные о сущности хранятся в двумерных таблицах, которые называют реляционными.
Каждая реляционная таблица должна обладать следующими свойствами:
• один элемент таблицы — один элемент данных;
• все столбцы таблицы содержат однородные по типу данные (целочисленный, числовой, текстовый, и т.д.);
• каждый столбец имеет уникальное имя;
• число столбцов задается при создании таблицы;
• порядок записей в отношении может быть произвольным;
• записи не должны повторяться;
• количество записей в отношении не ограничено.
Объекты, их взаимосвязи и отношения представлены в виде таблиц. Формальное построение таблиц связано с фундаментальным понятием отношение (термин реляционная исходит от английского слова relation — отношение).
В реляционной таблице каждый столбец есть домен (его альтернативное название поле), а совокупность элементов каждой строки — кортеж (или запись).
Строка заголовков называется схемой отношения. Например, схема отношения СТУДЕНТ может быть следующей:
СТУДЕНТ (ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО, ФАКУЛЬТЕТ, КУРС, ГРУППА), здесь СТУДЕНТ - отношение, а ФАМИЛИЯ, ИМЯ и т.д. — атрибуты.
В отношении каждый конкретный экземпляр сущности представляется строкой, которая называется кортежем (или записью). Следующая таблица представляет отношение СТУДЕНТ (см. рис. 4.3)
Рис. 4.3. Отношение студент
Первичным ключом отношения называется поле или группа полей, однозначно определяющие запись. В отношении СТУДЕНТ первичным ключом может быть поле ФАМИЛИЯ, если во всем списке нет однофамильцев — это будет простой ключ. Если есть однофамильцы, то совокупность полей — фамилия, имя, отчество — создадут составной первичный ключ. На практике, обычно в качестве ключевого выбирают поле, в котором совпадения заведомо исключены. Для рассматриваемого примера таким полем может служить номер зачетной книжки студента.
Свойства первичного ключа:
• уникальность — в таблице может быть назначен только один первичный ключ, у составного ключа поля могут повторяться, но не все;
• неизбыточность — не должно быть полей, которые, будучи удаленными из первичного ключа, не нарушат его уникальность;
• в состав первичного ключа не должны входить поля типа, комментарий и графическое.
Чтобы избежать повторяющихся записей, приходят к связыванию таблиц. Например, если в отношении СТУДЕНТ надо описать вуз, в котором он обучается, то, на первый взгляд, можно было бы включить в отношение следующие поля СТУДЕНТ (ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО, ФАКУЛЬТЕТ, КУРС, ГРУППА, НАЗВАНИЕ вуза, АДРЕС). Но при заполнении такой таблицы для каждого студента придется указывать довольно длинное наименование вуза и его адрес, что неудобно. Более того, любая незначительная ошибка во вводе этих полей приведет к нарушению непротиворечивости базы данных. Например, ошибка в адресе вуза приведет к тому, что в БД появятся два вуза с одинаковым наименованием и разными адресами. Поступают в таком случае так: в отношение СТУДЕНТ вводят поле «код вуза» (целое число) и добавляют еще одно отношение ВУЗ (код вуза, название, адрес). СТУДЕНТ и ВУЗ при этом будут связаны по полю «код вуза».
При работе с такими таблицами повторяться могут только данные в поле «КОД вуза», а все необходимые сведения о вузе можно взять из отношения ВУЗ. Заметим при этом, что ввод в поле «КОД вуза» целого числа, вместо длинного названия, принесет гораздо меньше ошибок. В отношении ВУЗ поле «КОД вуза» будет первичным ключом, а в отношении СТУДЕНТ поле «КОД вуза» будет внешним ключом.
Для связи реляционных таблиц необходимо ввести в обе таблицы одинаковые по типу поля, по которым определится связь между записями обеих таблиц. Связи бывают нескольких типов «один к одному», «один ко многим», «многие ко многим». В вышеприведенном примере была установлена связь «один ко многим», т.е. одной записи в таблице ВУЗ соответствуют многие записи в таблице СТУДЕНТ.
Проектирование баз данных
Проектирование базы данных является одним из этапов жизненного цикла ИС. Ввиду сложности этот этап выполняется, как правило, коллективом разработчиков и включает следующие работы:
• анализ предметной области;
• проектирование и непосредственно кодирование (создание запросов и приложений);
• тестирование и сопровождение.
Анализ предметной области
Проектирование баз данных начинается с анализа предметной области, в которой будет работать ИС. Как правило, этот этап выполняется разработчиками ИС совместно с заказчиком. Обычным языком описываются информационные объекты, их свойства, их взаимосвязи, описываются пожелания будущих пользователей. Результатом такой работы является техническое задание на разработку ИС. В техническом задании более строго указывается список исходных данных, список запросов к ИС, список выходных данных, оговаривается интерфейс, определяющий переход от представления данных в БД к представлению, принятому среди пользователей, и обратно. В общем случае пользователи представляют данные в виде документов различных видов, от произвольных текстов до справок и таблиц фиксированного формата. Затем собственно и начинается проектирование базы данных.
Проектирование баз данных осуществляется на двух уровнях — физическом и логическом. На физическом уровне решаются вопросы размещения данных на внешних носителях. Во многом эта работа выполняется СУБД автоматически без участия разработчика.
На логическом уровне составляется общий список полей, который может насчитывать от единиц до тысяч. Описывают каждое поле по типу данных. Общий список полей разбивается на основные таблицы. Дальнейшее рассмотрение информационной структуры приводит к разбиению — нормализации — основных таблиц на более мелкие с целью избежания многократно повторяющихся данных в записях, что уменьшает объем памяти, занимаемый базой данных на диске, и обеспечивает непротиворечивость данных в БД.
Процесс нормализации имеет итерационный (пошаговый) характер, осуществляется методом нормальных форм. Суть метода состоит в последовательном переводе таблицы из одной нормальной формы в другую, причем каждая последующая устраняет определенный вид функциональной зависимости между полями таблицы. Всего в теории описаны шесть нормальных форм, на практике чаще всего применяются первые три.
Первая нормальная форма. Отношение называется приведенным к первой нормальной форме, если все его атрибуты атомарны (неделимы). Например, отношение, содержащее поле ФИО, не приведено к первой нормальной форме, если в запросах БД требуется выделить отдельно фамилию или имя. Разработчики БД изначально строят так исходное отношение, чтобы оно было в первой нормальной форме.
Вторая нормальная форма. Для приведения отношений ко второй нормальной форме введем понятие функциональной зависимости. Функциональная зависимость полей — это зависимость, при которой в строке определенному значению ключевого поля соответствует только одно значение не ключевого поля. Функционально не ключевое поле зависит от составного ключа, но не зависит от любого поля, входящего в составной ключ. Например, в отношении СТУДЕНТ (ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО, ФАКУЛЬТЕТ, КУРС, ГРУППА) первичным ключом является совокупность полей ФАМИЛИЯ + ИМЯ + ОТЧЕСТВО. Поля ФАКУЛЬТЕТ, КУРС, ГРУППА функционально полно зависят от составного ключа. Отношение находится во второй нормальной форме, если оно находится в первой нормальной форме, и каждое не ключевое поле функционально полно зависит от составного ключа. Например, в отношении УСПЕВАЕМОСТЬ (НОМЕР ЗАЧЕТКИ, ФАМИЛИЯ, ДИСЦИПЛИНА, ОЦЕНКА) составным ключом является совокупность НОМЕР ЗАЧЕТКИ + ДИСЦИПЛИНА. Это отношение находится в первой нормальной форме, но оно не находится во второй нормальной форме, так как поле ФАМИЛИЯ не имеет полной функциональной зависимости от составного ключа. Для перевода этого отношения во вторую нормальную форму необходимо исключить из него поле ФАМИЛИЯ, так как оно функционально зависит от НОМЕРА ЗАЧЕТКИ. Т.е. исходное отношение необходимо разбить на два связанных отношения УСПЕВАЕМОСТЬ (НОМЕР ЗАЧЕТКИ, ДИСЦИПЛИНА, ОЦЕНКА) и СПИСОК (НОМЕР ЗАЧЕТКИ, ФАМИЛИЯ). Связь здесь осуществляется по полю НОМЕР ЗАЧЕТКИ.
Третья нормальная форма. Третья нормальная форма позволяет устранить транзитивную зависимость. Транзитивная зависимость существует в отношении, если существуют два описательных поля, в которых первое зависит от ключа, а второе зависит от первого. Отношение находится в третьей нормальной форме, если оно находится во второй нормальной форме, и каждое не ключевое поле не транзитивно зависит от ключа. Например, в отношении СТУДЕНТ (ФАМИЛИЯ, ФАКУЛЬТЕТ, НАЗВАНИЕ вуза, АДРЕС) поле АДРЕС транзитивно (через поле НАЗВАНИЕ вуза) зависит от ключа ФАМИЛИЯ. При заполнении экземплярами такого отношения поле Адрес будет многократно повторяться. Для устранения транзитивной зависимости в классе используется расщепление отношения на несколько. Например, отношение СТУДЕНТ расщепляется на два: СТУДЕНТ (ФАМИЛИЯ, ФАКУЛЬТЕТ, НАЗВАНИЕ вуза), ВУЗ (НАЗВАНИЕ вуза, АДРЕС) связь по полю НАЗВАНИЕ вуза. Процесс нормализации заканчивается созданием схемы данных, в которой указываются все нормализованные таблицы с их полями и взаимосвязями между ними. Указываются типы взаимосвязей.
Нормализация схемы базы данных способствует более эффективному выполнению системой управления базами данных операций обновления базы данных, поскольку сокращается число проверок и вспомогательных действий, поддерживающих целостность базы данных. При проектировании реляционной базы данных почти всегда добиваются второй нормальной формы всех входящих в базу данных отношений. В часто обновляемых базах данных обычно стараются обеспечить третью нормальную форму отношений.