Программирование баз данных
Для успешного функционирования различных организаций требуется наличие развитой информационной системы, которая реализует автоматизированный сбор, обработку и манипулирование данными.
Банки данных
Современной формой информационных систем являются банки данных, включающие в свой состав следующие составляющие:
Вычислительную систему;
Систему управления базами данных (СУБД);
Одну или несколько баз данных (БД);
Набор прикладных программ (приложений БД).
База данных обеспечивает хранение информации, а также удобный и быстрый доступ к данным. Она представляет собой совокупность данных различного характера, организованных по определенным правилам. Информация в БД должна быть:
Непротиворечивый;
Неизбыточной;
Целостной.
Система управления базой данных (СУБД)- это совокупность языковых и программных средств, предназначенных для создания, ведения и использования БД. По характеру применения СУБД разделяют на персональные и многопользовательские.
Персональные СУБД обеспечивает возможность создания локальных БД, работающих на одном компьютере. К персональным СУБД относятся Paradox, dBase, FoxPro, Access и др.
Многопользовательские СУБД позволяют создавать информационные системы, функционирующие в архитектуре "клиент-сервер". Наиболее известными многопользовательскими СУБД являются Oracle, Informix, Microsoft SQL, Server, InterBase.
В состав языковых средств современных СУБД входят.
Язык описания данных, предназначенных для описания логической структуры данных;
Язык манипулирования данными, обеспечивающий выполнение основных операций над данными- ввод, модификацию и выборку;
Язык структурированных запросов (SQL- Structured Query Language), обеспечивающий управление структурой БД и манипулирование данными, а также являющийся стандартным средством доступа к удаленным БД.
Язык запросов по образцу (QBE- Query By Example), обеспечивающий визуальное конструирование запросов БД.
Прикладные программы, или приложения, служат для обработки данных, содержащихся в БД. Пользователь осуществляет управление БД и работу с ее данными именно с помощью приложений, которые также называют приложениями в БД.
Иногда термин "база данных" трактуют в более широком смысле и обозначают им не только саму БД, но и приложения, обрабатывающие ее данные.
Архитектуры информационных систем
В зависимости от взаимного расположения приложений и БД можно выделить:
Локальные БД;
Удаленные БД.
Организация баз данных
База данных содержит данные, используемые некоторой прикладной информационной системой (например, системами "Сирена" или "Экспресс" продажи авиа- и железнодорожных билетов). В зависимости от вида организации данных различают следующие основные модели представления данных в базе:
Иерархическую;
Сетевую;
Реляционную;
Объектно-ориентированную.
В иерархической модели данные представляются в виде древовидной (иерархической) структуры. Подобная организация данных удобна для работы с иерархически упорядоченной информацией, однако при оперировании данными со сложными логическими связями иерархическая модель оказывается слишком громоздкой.
В сетевой модели данные организуются в виде произвольного графа. Недостатком сетевой модели является жесткость структуры и высокая сложность ее реализации.
Кроме того, значительным недостатком иерархической и сетевой модели является также то, что структура данных задается на этапе проектирования БД и не может быть изменена при организации доступа к данным.
В объектно-ориентированной модели отдельные записи базы данных представляются виде объектов. Между записями базы данных и функциями их обработки устанавливаются взаимосвязи с помощью механизмов, подобных соответствующим средствам в объектно-ориентированных языках программирования. Объектно-ориентированные модели сочетают особенности сетевой и реляционной моделей и используются для создания крупных БД со сложными структурами данных.
Реляционная модель получила свое название от английского термина relation (отношение) и была предложена в 70 - х годах сотрудником фирмы IBM Эдгаром Коддом. Реляционная БД представляет собой совокупность таблиц, связанных отношениями. Достоинствами реляционной модели данных являются простота, гибкость структуры, удобство реализации на компьютере, наличие теоретического описания. Большинство современных БД для персональных компьютеров являются реляционными. При последующем изложении материала речь пойдет именно о реляционных БД.
Реляционные базы данных
Реляционные БД состоит из взаимосвязанных таблиц. Каждая таблица содержит информацию об объектах одного типа, а совокупность всех таблиц образует единую БД.
Таблицы баз данных
Таблицы, образующие БД, находятся в каталоге (папке) на жестком диске. Таблицы хранятся в файлах и похожи на отдельные документы или электронные таблицы (например, табличного процесса Microsoft Excel), их можно перемещать и копировать обычным способом, скажем, с помощью Проводника Windows. Однако, в отличие от документов, таблицы БД поддерживают многопользовательский режим доступа, т.е. могут одновременно использоваться несколькими приложениями.
Для одной таблицы создается несколько файлов, содержащих данные, индексы, ключи и т.п. Главным из них является файл с данными, имя этого файла становится именем таблицы, которое задается при ее создании
Каждая таблица БД состоит из строк и столбцов и предназначена для хранения данных об однотипных объектах информационной системы. Строка таблицы называется записью, столбец таблицы - полем.
Поле содержит данные одного из допустимых типов, например, строкового, целочисленного или даты. При вводе значения в поле таблицы автоматически производится проверка соответствия типа значения и типа поля. В случае, когда эти типы не совпадают, а преобразование типа значения невозможно, генерируется исключительная ситуация.
Особенности организации таблиц зависят от конкретной СУБД, используемой для создания и ведения БД.
Основу таблицы составляет описание ее полей, каждая таблица должна иметь хотя бы одно поле. Понятие структуры таблицы является более широким и включает в себя:
Описание полей;
Ключ;
Индексы;
Ограничения на значения полей;
Ограничения ссылочной целостности между таблицами;
Пароли.
Иногда ограничения на значения полей, ограничения ссылочной целостности между таблицами, а также права доступа называют одним общим термином "ограничения".
С таблицей в целом можно выполнять следующие операции:
Создание (определение структуры);
Изменение структуры (реструктуризация);
Переименование;
Удаление.
Типы данных:
Текстовый - используется для хранения обычного не форматируемого текста (255 символов).
Поле memo - специальный тип данных для хранения больших объемов текста (до 65535 символов), хранится в отдельном файле.
Числовой - для хранения действительных чисел.
Дата/время - для хранения календарных дат и текущего времени.
Денежный - для хранения денежных сумм (свои правила округления).
Счетчик - специальный тип для уникальных натуральных чисел с автоматическим наращиванием (для порядковой нумерации записи).
Логический - Для хранения логических данных (могут принимать 2 значения).
Поле объекта OLE -специальный тип данных предназначенный для хранения объектов OLE, например, мультимедийных.
Гиперссылка - специальное поле для хранения адресов для объектов Internetа.
Ключи и индексы
Ключ представляет собой комбинацию полей, данные в которых однозначно определяют каждую запись в таблице. Простой ключ состоит из одного поля, а составной (сложный)- из нескольких полей. Поля, по которым построен ключ, называют ключевым. В таблице может быть определен только один ключ. Ключ обеспечивает:
Однозначную идентификацию записей таблицы;
Ускорение выполнения связи запросов к БД;
Установление связи между отдельными таблицами БД;
Использование ограничений ссылочной целостности.
Ключ также называют первичным ключом или первичным (главным) индексом.
Информация о ключе может храниться в отдельном файле или совместно с данными таблицы. В БД Access вся информация содержится в одном общем файле с расширением MDB. Значения ключа располагаются в определенном порядке. Для каждого значения ключа имеется уникальная ссылка, указывающая на расположение соответствующей записи в таблице (в главном ее файле). Поэтому при поиске записи выполняется не последовательный просмотр всей таблицы, а прямой доступ к записи на основании упорядоченных значений ключа. Ценой, которую разработчик и пользователь платят за использование такой технологии, является увеличение размера БД вследствие необходимости хранения значений ключа, например, в отдельном файле.
Таблицы различных форматов имеют свои особенности построения ключей. Вместе с тем существуют и общие правила, состоящие в следующем:
Ключ должен быть уникальным. У составного ключа значения отдельных полей (но не всех одновременно) могут повторяться.
Ключ должен быть достаточным и неизбыточным, т.е. не содержать поля, которые можно удалить без нарушения уникальности ключа.
В состав ключа не могут входить поля некоторых типов, например, графическое поле или поле комментария.
Выбор ключевых полей не всегда является простой и очевидной задачей, особенно для таблиц с большим количеством полей. Не желательно выбирать в качестве ключевых поля содержащие людей в таблице сотрудников организаций или название товаров в таблице данных склада. В этом случае высока вероятность существования двух или более однофамильцах, а также товаров с одинаковыми названиями, которые различаются, к примеру, цветом (значение другого поля). Для указанных таблиц можно использовать, например, поле кода сотрудника и поле артикула товара. При этом предполагается, что указанные значения являются уникальными.
Индекс, как ключ, строится по полям таблицы однако он может допускать повторение значений составляющих его полей в этом и состоит его основное отличие ключа. Поля, по которым построен индекс, называются индексными. Простой индекс состоит из одного поля, а сложный из нескольких полей.
Индексы при их создании именуются. Как и в случае с ключом, в зависимости от СУБД, индексы могут хранится в отдельных файлах или совместно с данными. Создание индекса называют индексированием таблицы.
Использование индекса обеспечивает:
Увеличение скорости доступа к данным.
Сортировку записей.
Установление связи между отдельными таблицами БД.
Использование ограничений ссылочной целостности.
В двух последних случаях индекс применяется совместно с ключом второй таблицы.
Как и ключ, индекс представляет собой своеобразное оглавление таблицы, просмотр которого выполняется перед обращением к ее записям. Таким образом, использование индекса повышает скорость доступа к данным в таблице за счет того, что доступ выполняется не последовательно, а индексно - последовательным методом.
Сортировка представляет собой упорядочивание записей по полю или группе полей в порядке возрастания или убывания их значений. Можно сказать, что индекс служит для сортировки таблиц по индексным полям.
Для одной таблицы можно создать несколько индексов. В каждый момент времени один из них можно сделать текущим, т.е. активным. Даже при существовании нескольких индексов таблица может не иметь текущего индекса (текущий индекс важен, например, при выполнении поиска и сортировки записей набора данных Table).
Ключевые поля обычно автоматически индексируются.
Таким образом, использование ключей и индексов позволяет:
Однозначно идентифицировать записи;
Избегать дублирования значений в ключевых полях;
Выполнять сортировку таблиц;
Ускорять операции поиска в таблицах;
Устанавливать связи между отдельными таблицами БД;
Использовать ограничения ссылочной целостности.
Одной из основных задач БД является обеспечение быстрого доступа к данным (поиска данных). Время доступа к данным в значительной степени зависит от используемых для поиска данных методов и способов.
Методы и способы доступа к данным
Выделяют следующие методы доступа к данным таблиц:
Последовательный;
Прямой;
Индексно-последовательный.
При последовательном методе выполняется последовательный просмотр всех записей таблицы и поиск нужных из них. Этот метод доступа является крайне неэффективным и приводит к значительным затратам времени на поиски, которые прямо пропорциональны размеру таблицы (числу ее записей). Поэтому его рекомендуется использовать только для относительно небольших таблиц.
При прямом доступе нужная запись выбирается из таблицы на основании ключа или индекса. При этом просмотр других записей не выполняется. Напомним, что значения ключей и индексов располагается в упорядоченном виде и содержат ссылку, указывающую на расположение соответствующей записи в таблице. При поиске записи выполняется не последовательный просмотр всей таблицы, а непосредственный доступ к записи на основании ссылки.
Индексно-последовательный метод доступа включает в себя элементы последовательного и прямого методов доступа и используется при поиске группы записей. Этот метод реализуется только при наличии индекса, построенного по полям, значения которых должны быть найдены. Суть его заключается в том, что находится индекс первой записи, удовлетворяющей заданным условиям, и соответствующая запись выбирается из таблицы на основании ссылки. Это является прямым доступом к данным. После обработки первой найденной записи осуществляется переход к следующему значения индекса, и из таблицы выбирается запись, соответствующая значению этого индекса. Таким образом последовательно перебираются индексы всех записей, удовлетворяющих заданным условиям, что является последовательным доступом.
Достоинством прямого и индексно-последовательного методов является максимально возможная скорость доступа к данным, плата за которую- потеря памяти для хранения информации о ключах и индексах.
При выполнении операций с таблицами используется один из следующих способов доступа к данным:
Навигационный;
Реляционный.
Навигационный способ доступа заключается в обработке каждой отдельной записи таблицы. Этот способ обычно используется в локальных БД или в удаленных БД небольшого размера. Если необходимо обработать несколько записей, то все они обрабатываются поочередно.
Реляционный способ доступа основан на обработке сразу группы записей, при этом если необходимо обработать одну запись, то обрабатывается вся группа, состоящая из одной записи. Так как реляционный способ доступа основывается на SQL-запросах, то его также называют SQL- ориентированным. Этот способ доступа ориентирован на выполнение операций с удаленными БД и является предпочтительным при работе с ними, хотя его можно использовать также и для локальных БД.
Способ доступа к данным выбирается программистом и зависит от средств доступа к БД, используемых при разработке приложения.
Таким образом, методы доступа к данным определяются структурой БД, а способы доступа - приложением.
Связь между таблицами
В частном случае БД может состоять из одной таблицы, например, с днями рождения сотрудников организации. Однако обычно реляционная БД состоит из набора взаимосвязанных таблиц. Организация связи (отношений) между таблицами называется связыванием или соединением таблиц.
Связи между таблицами можно устанавливать как при создании БД , так и при выполнении приложения, используя средства, предоставляемые СУБД. Связывать можно две или несколько таблиц. В реляционной БД, помимо связанных, могут быть и отдельные таблицы, не соединенные ни с одной другой таблицей. Это не меняет сути реляционной БД, которая содержит единую информацию об информационной системе, связанную не в буквальном смысле (связь между таблицами), а в функциональном смысле - вся информация относится к одной системе.
Для связывания таблиц используются поля связи (иногда применяется термин "совпадающие поля"). Поля связи обязательно должны быть индексированными. В подчиненной таблице для связи с главной таблицей берется индекс, который также называется внешним ключом. Состав полей этого индекса должен полностью или частично совпадать с составом полей индекса главной таблицы.
Связь между таблицами определяет отношение подчиненности, при котором одна таблица является главной (родительской, или мастером), а вторая - подчиненной (дочерней, или детальной). Саму связь (отношение)называют связь "главный - подчиненный", "родительский - дочерний" или "мастер - детальный". Существуют следующие виды связи:
Отношение "один - к одному"
Отношение "один - ко - многим"
Отношение "много - к - одному"
Отношение "много - ко - многим"
Отношение "один - к - одному" обычно используется при разбиении таблицы с большим числом полей на несколько таблиц. В этом случае в первой таблице остаются поля с наиболее важной и часто используемой информацией, а остальные поля переносятся в другую "другие" таблицы.
Отношение "один - ко - многим" означает, что одной записи главной таблицы в подчиненной таблице может соответствовать несколько записей, в частном случае ни одной. Этот вид отношения встречается наиболее часто. После установления связи между таблицами при перемещении на какую-либо запись в главной таблице в подчиненной таблице автоматически становятся доступными записи, у которых значения поля связи равно значению поля связи текущей записи главной таблицы. Такой отбор записей подчиненной таблицы является своего рода фильтрацией.
Отношение "много - к - одному" отличается от отношения "один - ко - многим" только направлением. Если на отношение "один - ко - многим" посмотреть со стороны подчиненной таблицы, а не главной, то оно превращается в отношение "много - к - одному".
Отношение "много - ко - многим" имеет место, когда одной записи главной таблицы может соответствовать несколько записей подчиненной таблицы и одновременно одной записи подчиненной таблицы - несколько записей главной таблицы. Подобное отношение реализуется, например, при планировании занятий в институте и устанавливается между таблицами, в которых хранится информация о номерах аудиторий и номерах учебных групп. Так как учебная группа может заниматься в разных аудиториях, то одной записи об учебной группе (первая таблица)может соответствовать несколько записей о занимаемых этой группой аудиториях. В то же время в одной аудитории могут заниматься разные учебные группы (даже одновременно), поэтому одной записи об аудитории может соответствовать несколько записей об учебных группах (вторая таблица).
На практике отношение "много - ко - многим" используется достаточно редко. Причинами являются сложность организации связи между таблицами и взаимодействия между их записями.
Безопасность баз данных
Проблема безопасности БД решается, что в СУБД для сохранения информации используется двойной подход. В части операций, как обычно, участвует ОС компьютера, но некоторые операции сохранения происходят в обход ОС.
Операции изменения структуры БД, создание новых таблиц или иных объектов происходят при сохранении файла БД. Об этих операциях СУБД предупреждает пользователя. Это, так сказать, глобальная операция. Их никогда не проводят с базой данных, находящейся в коммерческой эксплуатации, - только с её копией. В этом случае любые сбои в работе вычислительных систем нестрашны.
С другой стороны, операции по изменению содержания БД, не затрагивающие структуры базы, максимально автоматизированы и выполняются без предупреждения. Если, работая с таблицей данных, мы что-то в ней меняем в составе данных, то изменения сохраняют немедленно и автоматически.
Языки программирования баз данных
Первые базы данных появились очень давно, как только появилась потребность в обработке больших массивов информации и выборки групп записей по определенным признакам. Для этого был создан структурированный язык запросов SQL {Structured Query Language). Он основан на мощной математической теории и позволяет выполнять эффективную обработку баз данных, манипулируя не отдельными записями, а группами записей.
Для управления большими базами данных и их эффективной обработки разработаны СУБД (Системы Управления Базами Данных). Практически в каждой СУБД помимо поддержки языка SQL имеется также свой уникальный язык, ориентированный на особенности этой СУБД и не переносимый на другие системы. Сегодня в мире насчитывается три ведущих производителя СУБД: Microsoft (SQL Server).
IBM (DB2) и Oracle. Их продукты нацелены на поддержку одновременной работы тысяч пользователей в сети, а базы данных могут храниться в распределенном виде на нескольких серверах. В каждой из этих СУБД реализован собственный диалект SQL, ориентированный на особенности конкретного сервера, поэтому SQL-программы, подготовленные для разных СУБД, друг с другом, как правило, несовместимы.
С появлением персональных компьютеров были созданы так называемые настольные СУБД. Родоначальником современных языков программирования баз данных для ПК принято считать СУБД dBase II, язык которой был интерпретируемым.
Затем для него были созданы компиляторы, появились СУБД FoxPro и Clipper, поддерживающие диалекты этого языка. Сегодня самой распространенной настольной СУБД стала система Microsoft Access.
Языки программирования для Интернета
С активным развитием глобальной сети было создано немало реализаций популярных языков программирования, адаптированных специально для Интернета.
Все они отличаются характерными особенностями: языки являются интерпретируемыми, интерпретаторы для них распространяются бесплатно, а сами программы - в исходных текстах. Такие языки называют скрипт-языками.
HTML. Общеизвестный язык для оформления документов. Он очень прост и содержит элементарные команды форматирования текста, добавления рисунков, задания шрифтов и цветов, организации ссылок и таблиц. Все Wefe-страницы написаны на языке HTML или используют его расширения.
Perl. В 80-х годах Ларри Уолл разработал язык Perl. Он задумывался как средство эффективной обработки больших текстовых файлов, генерации текстовых отчетов и управления задачами. По мощности Perl значительно превосходит языки типа Си. В него введено много часто используемых функций работы со строками, массивами, всевозможные средства преобразования данных, управления процессами, работы с системной информацией и др.
РНР. Расмус Лердорф, активно использовавший РHP-скрипты, в 1995 году решил улучшить этот язык, упростив его и дополнив встроенными средствами доступа к базам данных. В результате появилась разработка Personal Contents Page/Forms
Interpreter {PHP/FI). Уже через пару лет программы на ее основе использовались на 50 тыс. сайтов. В 1997 году ее значительно усовершенствовали Энди Гутмане и Зив Сураски, и под названием РНР 3.0 этот язык быстро завоевал популярность у создателей динамических сайтов во всем мире.
Тсl/Тk. В конце 80-х годов Джон Аустираут придумал популярный скрипт-язык Тcl и библиотеку Tk. В Tcl он попытался воплотить видение идеального скрипт-языка. Язык Tcl ориентирован на автоматизацию рутинных процессов и состоит из мощных команд, предназначенных для работы с абстрактными нетипизированньми объектами. Он независим от типа системы и при этом позволяет создавать программы с графическим интерфейсом.
VRML. В 1994 году был создан язык VRML для организации виртуальных трехмерных интерфейсов в Интернете. Он позволяет описывать в текстовом виде различные трехмерные сцены, освещение и тени, текстуры (покрытия объектов), создавать свои миры, путешествовать по ним, "облетать" со всех сторон, вращать в любых направлениях, масштабировать, регулировать освещенность и т. д.
XML. В августе 1996 года WWW-консорциум, ответственный за стандарты на Интернет-технологии, приступил к подготовке универсального языка разметки структуры документов, базировавшегося на достаточно давно созданной на IBM технологии SGML. Новый язык получил название XML. Сегодня он служит основой множества системных, сетевых и прикладных приложений, позволяя представлять в прозрачном для пользователей и программ текстовом виде различные аспекты внутренней структуры иерархически организованных документов. В недалеком будущем он может стать заменой HTML.
Языки моделирования
При создании программ и формировании структур баз данных нередко применяются формальные способы их представления - формальные нотации, с помощью которых можно визуально представить (изобразить с помощью мыши) таблицы баз данных, поля, объекты программы и взаимосвязи между ними в системе, имеющей специализированный редактор и генератор исходных текстов программ на основе созданной модели. Такие системы называются CASE-cиcтемами. D последнее время все большую популярность завоевывает язык графического моделирования UML.