Методы и способы доступа к данным
Что такое база данных
Множество фирм и компаний всего мира используют компьютеры для хранения и обработки служебной информации. Эта информация содержится в так называемых базах данных.
База данных — это хранилище для большого количества систематизированных данных, с которыми можно производить определенные действия (добавление, удаление, изменение, копирование, упорядочивание и т. д.).
Все данные, находящиеся в базе данных, можно представить в виде записей или объектов.
Для успешной работы с базами данных нужны программные средства, которые обеспечивали бы доступ к нужной информации, внесение каких-либо изменений в базу данных и другие действия с данными. Для решения этой задачи используются системы управления базами данных.
Система управления базами данных (СУБД) — это совокупность языковых и программных средств, обеспечивающих создание, использование и ведение базы данных. Все СУБД делятся на две группы:
· локальные;
· сетевые.
Локальные — это СУБД, работающие на одном компьютере.
К ним относятся dBase, FoxPro, Microsoft Access и т. д.
Сетевые — это СУБД, позволяющие нескольким компьютерам использовать одну и ту же базу данных с помощью технологии клиент-сервер.
Примерами сетевых СУБД являются InterBase, Oracle, Microsoft SQL Server и т. д.
Организация баз данных
База данных содержит данные, используемые некоторой прикладной информационной системой (например, системами "Сирена" или "Экспресс" продажи авиа- и железнодорожных билетов). В зависимости от вида организации данных различают следующие основные модели представления данных в базе:
· иерархическую;
· сетевую;
· реляционную;
· объектно-ориентированную.
В иерархической модели данные представляются в виде древовидной (иерархической) структуры. Подобная организация данных удобна для работы с иерархически упорядоченной информацией, однако при оперировании данными со сложными логическими связями иерархическая модель оказывается слишком громоздкой.
В сетевой модели данные организуются в виде произвольного графа. Недостатком сетевой модели является жесткость структуры и высокая сложность ее реализации.
Кроме того, значительным недостатком иерархической и сетевой моделей является также то, что структура данных задается на этапе проектирования БД и не может быть изменена при организации доступа к данным.
В объектно-ориентированной модели отдельные записи базы данных представляются в виде объектов. Между записями базы данных и функциями их обработки устанавливаются взаимосвязи с помощью механизмов, подобных соответствующим средствам в объектно-ориентированных языках программирования. Объектно-ориентированные модели сочетают особенности сетевой и реляционной моделей и используются для создания крупных БД со сложными структурами данных.
Реляционная модель получила свое название от английского термина relation (отношение) и была предложена в 70-х годах сотрудником фирмы IBM Эдгаром Коддом. Реляционная БД представляет собой совокупность таблиц, связанных отношениями. Достоинствами реляционной модели данных являются простота, гибкость структуры, удобство реализации на компьютере, наличие теоретического описания. Большинство современных БД для персональных компьютеров являются реляционными.
Типы баз данных
Прежде чем рассматривать основные типы баз данных, нужно отметить, что все данные, помещенные в базу данных, каким-либо образом связаны между собой.
Взаимосвязи данных
Взаимосвязи данных могут быть одного из четырех типов:
· один к одному;
· один ко многим;
· много к одному;
· много ко многим.
Вид взаимосвязи один к одному подразумевает, что каждая запись одного объекта базы данных будет указывать на единственную запись другого объекта. Например, с одним клиентом может быть связан только один заказ.
Взаимосвязь один ко многим означает, что одной записи объекта базы данных будет соответствовать несколько записей других объектов. Например, один клиент может иметь несколько квартир. Тогда с записью клиента будут связаны записи о его квартирах.
Вид взаимосвязи много к одному равносилен рассмотренному выше виду «один ко многим» и отличается от него только направлением.
Последний вид взаимосвязи много ко многим устанавливается между двумя типами объектов базы данных. Например, когда у одного банкира может быть несколько клиентов и, одновременно, один клиент может пользоваться услугами нескольких банков.
Основные типы баз данных
По принципу хранения данных все базы данных разделяются на несколько основных типов:
· иерархические;
· сетевые;
· реляционные.
Иерархические базы данных
Иерархические базы данных применялись в начале 60-х годов. Они построены в виде обычного дерева. Данные здесь делятся на две категории: главные и подчиненные. Таким образом, один тип объекта является главным, а остальные, находящиеся на более низких ступенях иерархии, — подчиненными (рис. 1).
Рис. 1.Схема базы данных иерархического типа
Наивысший в иерархии объект называется корневым, остальные объекты носят название зависимых объектов.
База данных, организованная по иерархическому принципу, удобна для работы с информацией, которая соответствующим образом упорядочена. В остальных случаях работа с такой моделью будет достаточно сложной.
Сетевые базы данных
Сетевые базы данных начали применяться практически одновременно с иерархическими. В этих базах данных любой объект может быть как главным, так и подчиненным (рис. 2).
Рис. 2.Схема базы данных сетевого типа
Таким образом, в сетевой модели базы данных каждый объект может иметь сколько угодно связей с другими объектами. Из-за сложности представления данных в таком виде от сетевой модели базы данных в большинстве случаев также пришлось отказаться.
Реляционные базы данных
Именно реляционные базы данных (от англ, relation — отношение) стали широко использоваться в программировании начиная с 70-х годов. В таких базах данных объекты и взаимосвязи между ними представляются в виде прямоугольных таблиц, состоящих из строк и столбцов (рис. 3).
Рис. 3.Схема реляционной базы данных
Каждая таблица здесь представляет собой объект базы данных. Такую базу данных легче всего можно реализовать на компьютере. В дальнейшем мы будем рассматривать именно реляционные базы данных.
Итак, таблицы, которые составляют базу данных, находятся на магнитном диске в отдельной папке. Папка в целом является базой данных, а входящие в нее таблицы хранятся в виде отдельных файлов. С этими файлами можно производить произвольные операции, которые допускаются операционной системой.
Большинство приложений Windows при попытке обращения к одному файлу сразу несколькими приложениями выдают сообщение об ошибке совместного доступа. Для таблиц базы данных такое ограничение крайне неудобно, поэтому им свойственна особенность, которая заключается в том, что несколько приложений могут получить доступ к файлу таблицы одновременно. Такой режим доступа называется многопользовательским.
Если внимательно посмотреть на файлы таблиц базы данных, то можно заметить, что для одной таблицы обычно создается несколько файлов. Это файлы, которые содержат дополнительную информацию, относящуюся к таблице. Объединяет эти файлы одинаковое имя, но при этом они имеют разные расширения. Имя файлов таблицы определяет имя самой таблицы.
Рассмотрим теперь, из чего состоят таблицы базы данных. Как уже упоминалось, в каждой из них структурно выделяются строки и столбцы (рис. 4).
Столбцы таблицы обычно называют полями, а строки — записями. К полям таблицы предъявляются следующие требования:
· поле должно иметь уникальное имя в пределах одной таблицы;
· поле должно содержать данные только одного заранее определенного типа;
· любая таблица должна иметь как минимум одно поле.
Рис. 4.Структура таблицы базы данных
С таблицами реляционной базы данных можно выполнять следующие действия:
· создавать таблицу или определять ее структуру;
· изменять структуру таблицы;
· изменять имя таблицы;
· удалять таблицу с диска.
Форматы таблиц баз данных
Давайте рассмотрим несколько форматов таблиц баз данных, поддерживаемых средой Delphi.
Следует заметить, что Delphi не имеет своего собственного формата таблиц, но содержит средства, позволяющие работать со многими внешними форматами. К числу серверных таблиц баз данных, поддерживаемых Delphi, относятся:
· DB2;
· Informix;
· InterBase;
· Microsoft SQL Server;
· Oracle;
· Sybase.
В число локальных таблиц баз данных, поддерживаемых средой Delphi, входят:
· Microsoft Access;
· dBase;
· FoxPro;
· Paradox.
Наиболее часто используемыми из локальных баз данных являются dBase и Paradox. У каждой из них есть свои особенности, которые рассмотрим. Базы данных dBase были первыми базами данных для персональных компьютеров. Они поддерживаются большинством сред программирования для разработки приложений баз данных. Таблицы, входящие в состав базы данных dBase, являются простыми и используют мало файлов. В таблице 1 перечислены основные расширения файлов таблиц dBase и их назначение.
Таблица 1.Файлы таблиц dBase
Расширение файла | Содержание файла |
*.dbf | Непосредственно данные таблицы |
*.dbt | Большие двоичные данные (BLOB, Binary Large Object). В их число входят двоичные данные, memo-поля и OLE-поля |
*.mdx | Индексы, которые поддерживаются средствами dBase |
*.ndx | He поддерживаемые индексы. Такие индексы должны обрабатываться программно |
Поля в таблице базы данных dBase должны удовлетворять следующим условиям:
· имя поля может состоять из букв и цифр, но начинаться — с буквы;
· не допускается включение в имя поля специальных символов и пробелов;
· максимальное количество символов в имени поля — 10.
В таблице 2 перечислены основные типы полей таблиц dBase, указаны их обозначения в программе Database Desktop и приведено описание.
Таблица 2.Основные типы полей таблиц dBase
Тип поля | Обозначение | Описание в Database Desktop |
Binary | В | Двоичные значения в виде последовательности байтов, хранящейся в файле с расширением *.dbt. Длина не ограничена |
Character | С | Символьная строка. Длина ограничена 255 символами |
Date | D | Значение даты |
Float | F | Число с плавающей запятой в диапазоне от -10308 до 10308. Точность представления — 15 знаков после десятичной точки |
Logical | L | Булевская (логическая) переменная. Может принимать одно из двух значений: true (истина) или false (ложь) |
Memo | M | Неограниченная последовательность символов, хранящихся в файле с расширением *.dbt |
Number | N | Двоично-десятичный формат представления чисел |
OLE | Данные, поддерживаемые технологией связывания и внедрения объектов OLE (Object Linking and Embedding) |
Преимуществом баз данных dBase является поддержка их многими средами программирования. К недостаткам относятся отсутствие контроля целостности связей и отсутствие защиты данных.
Рассмотрим теперь базы данных Paradox. Они являются более развитыми по сравнению с dBase. Таблицы Paradox содержат достаточно большое число типов полей, поддерживают целостность ссылок, автоматически проверяют вводимые данные на совместимость по типу и поддерживают парольную защиту данных. Основные расширения таблиц базы данных Paradox перечислены в табл. 3.
Таблица 3.Файлы таблиц Paradox
Расширение файла | Содержание файла |
*.db | Данные таблицы |
*.mb | Большие двоичные данные (BLOB, Binary Large Object) |
*.px | Ключ (главный индекс) |
*.xg* и *.yg* | Индексы |
*.val | Параметры для проверки типов вводимых данных и целостности ссылок |
*.tv и *.fam | Форматы вывода таблицы в приложении Database Desktop |
*.net | Применяется для контроля доступа к таблице по сети |
Поля в таблице Paradox должны удовлетворять следующим требованиям:
· имя поля может состоять из букв (включая символы кириллицы) и цифр, но начинаться должно обязательно с буквы;
· в имени поля допускается использовать символы пробела, #, $ и другие специальные символы;
· не рекомендуется (хотя и не запрещается) использовать в имени поля символы точки, восклицательного знака и |, так как они зарезервированы средой Delphi;
· максимальная длина имени поля составляет 25 символов;
· ключевые поля таблицы должны быть первыми в ее структуре.
Таблица 4 содержит список полей, которые поддерживаются базой данных Paradox, а также их краткое описание.
Таблица 4.Основные типы полей таблиц Paradox
Тип поля | Обозначение | Описание в Database Desktop |
Alpha | А | Символьная строка, ограниченная 255 символами |
Autoincrement | + | Поле, автоматически увеличивающее значение новой записи. Обычно используется для ключевого поля |
BCD | # | Двоично-десятичная форма представления числа |
Binary | В | Двоичное значение в виде последовательности байтов. Длина не ограничена. Первые 240 байтов хранятся в файле таблицы, остальные — в файле с расширением *.mb |
Bytes | Y | Последовательность байтов длиной до 255 |
Date | D | Значение даты. Значения от 01.01.9999 до н. э. до 31. 12.9999 |
Formatted Memo | F | Неограниченная последовательность форматированных символов |
Graphic | G | Графическое изображение в одном из форматов: *.bmp, *.eps, *.gif, *.pcx, *.tif. После загрузки в поле таблицы изображение преобразуется в формат *.bmp. Значение поля данного типа хранится в файле с расширением *.mb |
Logical | L | Булево значение: true или false |
Longlnteger | I | Целочисленное поле. Диапазон возможных значений от -2 147 483 648 до 2 147 483 647 |
Memo | M | Неограниченная последовательность символов. Первые 240 символов хранятся в файле таблицы, остальные — в файле с расширением *.mb |
Money | $ | Хранит денежные величины. Отличается от типа Number тем, что отображает денежный знак. Символ знака зависит от настроек операционной системы |
Number | N | Число с плавающей запятой. Может принимать значения от -10307 до 10308. Точность — 15 знаков после запятой |
OLE | Хранит данные, поддерживаемые технологией OLE. Значения содержатся в файле с расширением *.mb | |
Short | S | Целое число. Может принимать значения от -32 768 до 32 767 |
Time | Т | Содержит значения времени |
Урок 8. Доступ к базам данных, стандартные системы доступа к базам данных.
План
- Методы доступа к данным — последовательный, прямой, индексно-последовательный;
- Способы доступа к данным — навигационный, реляционный;
- Наборы данных;
- Инструментальные средства.
Методы и способы доступа к данным
Выделяют следующие методы доступа к данным таблиц:
· последовательный;
· прямой;
· индексно-последовательный.
При последовательном методе выполняется последовательный просмотр всех записей таблицы и поиск нужных из них. Этот метод доступа является крайне неэффективным и приводит к значительным затратам времени на поиски, которые прямо пропорциональны размеру таблицы (числу ее записей). Поэтому его рекомендуется использовать только для относительно небольших таблиц.
При прямом доступе нужная запись выбирается из таблицы на основании ключа или индекса. При этом просмотр других записей не выполняется. Напомним, что значения ключей и индексов располагаются в упорядоченном виде и содержат ссылку, указывающую на расположение соответствующей записи в таблице. При поиске записи выполняется не последовательный просмотр всей таблицы, а непосредственный доступ к записи на основании ссылки.
Индексно-последовательный метод доступа включает в себя элементы последовательного и прямого методов доступа и используется при поиске группы записей. Этот метод реализуется только при наличии индекса, построенного по полям, значения которых должны быть найдены. Суть его заключается в том, что находится индекс первой записи, удовлетворяющей заданным условиям, и соответствующая запись выбирается из таблицы на основании ссылки. Это является прямым доступом к данным. После обработки первой найденной записи осуществляется переход к следующему значению индекса, и из таблицы выбирается запись, соответствующая значению этого индекса. Таким образом, последовательно перебираются индексы всех записей, удовлетворяющих заданным условиям, что является последовательным доступом.
Достоинствами прямого и индексно-последовательного методов является максимально возможная скорость доступа к данным, плата за которую — потеря памяти для хранения информации о ключах и индексах.
Указанные методы доступа реализуются СУБД и не требуют специального программирования. Задачей разработчика является определение соответствующей структуры БД, в данном случае — определение ключей и индексов. Так, если для поля создан индекс, то при поиске записей по этому полю автоматически используется индексно-последовательный метод доступа, в противном случае — последовательный метод. При выполнении операций с таблицами используется один из следующих способов доступа к данным:
· навигационный;
· реляционный.
Навигационный способ доступа заключается в обработке каждой отдельной записи таблицы. Этот способ обычно используется в локальных БД или в удаленных БД небольшого размера. Если необходимо обработать несколько записей, то все они обрабатываются поочередно.
Реляционный способ доступа основан на обработке сразу группы записей, при этом если необходимо обработать одну запись, то обрабатывается группа, состоящая из одной записи. Так как реляционный способ доступа основывается на SQL-запросах, то его также называют SQL-ориентированным. Этот способ доступа ориентирован на выполнение операций с удаленными БД и является предпочтительным при работе с ними, хотя его можно использовать также и для локальных БД.
Способ доступа к данным выбирается программистом и зависит от средств доступа к БД, используемых при разработке приложения. Например, в приложениях, создаваемых в Delphi, реализацию навигационного способа доступа можно осуществить посредством компонентов Table или Query, а реляционного — с помощью компонента Query.
Таким образом, методы доступа к данным определяются структурой БД, а способы доступа — приложением.
Наборы данных
Среда Delphi работает с таблицами баз данных, которые физически располагаются на диске. Поэтому такие таблицы мы будем называть физическими. Для доступа к данным, содержащимся в физических таблицах, применяются наборы данных. Набором данных называется совокупность записей, выделенных, но определенным правилам из одной или нескольких физических таблиц базы данных.
Набор данных по определению не будет представлять собой физическую таблицу, поэтому будем называть набор данных логической таблицей. Именно с логическими таблицами работает большинство из стандартных компонентов Delphi. Можно представлять себе взаимодействие физической и логической таблицы по аналогии, как физического файла и файловой переменной. Итак, из всего вышесказанного можно сделать вывод, что нам при создании приложений баз данных придется работать в основном с наборами данных (или логическими таблицами).
ВНИМАНИЕ.Во многих других системах управления базами данных вместо термина набор данных используются выборка или таблица.
Среда Delphi имеет несколько стандартных компонентов для работы с наборами данных. К их числу относятся такие компоненты, как Table, Query, StoredProc и другие.
Доступ к данным в Delphi обеспечивает класс TDataSet, который представляет наборы данных в виде совокупности строк и столбцов. Строки являются записями, а столбцы — полями таблицы базы данных. Класс TDataSet обеспечивает возможность редактирования набора данных, а также предоставляет средства для перемещения (навигации) по записям. Многие из свойств, событий и методов класса TDataSet являются абстрактными. Они называются абстрактными, так как не могут быть использованы непосредственно классом TDataSet, а лишь в его классах-потомках.
Прямым потомком класса TDataSet является класс TBDEDataSet. Этот класс инкапсулирует в себе функциональные возможности Borland Database Engine (BDE) — процессора баз данных фирмы Borland. BDE — это совокупность файлов динамических библиотек (DLL) и драйверов, которые отвечают за доступ к данным.
Класс TBDEDataSet имеет класс-потомок TDBDataSet, в котором определены дополнительные свойства и методы, обеспечивающие возможность связывания набора данных с физическими таблицами базы данных.
Инструментальные средства
Для операций с БД система Delphi предлагает следующий набор инструментальных средств.
- Borland Database Engine (BDE) — процессор баз данных, который представляет собой набор динамических библиотек и драйверов, предназначенных для организации доступа к БД из Delphi-приложений. BDE является центральным звеном при организации доступа к данным.
- BDE Administrator — утилита для настройки различных параметров BDE.
- Database Desktop — программа создания и редактирования таблиц, SQL-запросов и запросов QBE.
- SQL Explorer — Проводник БД, позволяющий просматривать и редактировать БД и словари данных.
- SQL Builder — программа визуального конструирования SQL-запросов.
- SQL Monitor — программа отслеживания порядка выполнения SQL-запросов к удаленным БД.
- Data Pump — программа для переноса данных между БД.
- IBConsole — программа для управления удаленными БД.
- InterBase Server Manager — программа для запуска сервера InterBase.
- SQL Links — драйверы для доступа к удаленным промышленным СУБД, таким как Microsoft SQL Server или Oracle. К промышленному серверу InterBase, который поставляется совместно с Delphi и является для нее родным, доступ также можно организовать напрямую через BDE, не используя драйвер SQL-Links.
- dbExpress — набор драйверов для доступа к базам данных SQL с помощью таких компонентов, какSQLConnection, SQLDataSet, SQLQuery, SQLStoredProc и SQLTabie.
dbExpress включает в свой состав следующие драйверы:
- InterBase — DBEXPINT.DLL;
- DB2 — DBEXPDB2.DLL;
- Oracle — DBEXPORA.DLL;
- MySQL — DBEXPMYS.DLL.
- InterBase Server — клиентская и серверная части сервера InterBase.
Замечание. В Delphi 6 в составе инструментальных средств программа IBConsole введена вместо программы InterBase Windows Interactive SQL (WISQL), имевшей то же назначение.
Программа InterBase Server Manager введена вместо двух отдельных программ локальной (Local InterBase Server) и многопользовательской (InterBase Server for Windows 95) версий SQL-сервера Borland InterBase.
Одни инструментальные средства, например, BDE Administrator и SQL Explorer, можно использовать для работы с локальными и удаленными БД, другие, например, IBConsole — для работы с удаленными БД.