Сапа
Здесь может быть ваша реклама
|

 Глава 15. Основы баз данных

Глава 15. Основы баз данных

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

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

 

Рис. 15.1. Основные типы баз данных

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

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

Рис. 15.2. Схема приложения базы данных

Рассмотрим все четыре части приложения баз данных:
интерфейс пользователя - предназначен для взаимодействия вашего приложения с пользователем. На схеме интерфейс пользователя отделен от всех других частей приложения. Отделение его от других частей имеет некоторые преимущества. Таким образом вы делаете свое приложение более гибким, т. к. изменения в данной части не повлекут за собой изменений в модуле данных, и наоборот. В дополнение к вышеописанному, изоляция части пользовательского интерфейса позволит вам использовать формы интерфейса пользователя в похожих приложениях;
источник данных - обеспечивает канал связи между пользовательским интерфейсом и набором данных. Многие компоненты, предназначенные для отображения данных, могут использовать один и тот же источник данных. В этом случае при перемещении по записям базы данных в каждом из таких компонентов синхронно будут отображаться одинаковые данные;
набор данных - это сердце вашего приложения базы данных. Этот компонент представляет набор записей из одной или нескольких таблиц базы данных;
соединение с данными - зависит от используемого набора данных, Среда Kylix обеспечивает поддержку двух типов наборов данных:
клиентский набор данных - хранит данные в памяти, благодаря чему перемещение по данным осуществляется просто и эффективно. Клиентский набор данных обеспечивает простой метод фильтрации записей и объединения данных. Так как данные кэшируются в памяти, этот набор данных может содержать ограниченное число записей. Имеется два типа клиентских наборов данных: общий клиентский набор данных и клиентский набор данных, использующий SQL. Первый обеспечивает доступ к данным, работая напрямую с файлами, расположенными на локальных дисках, соединяясь с другими наборами данных в одном и том же модуле данных или соединяясь с сервером баз данных. Второй может или использовать файлы, расположенные на локальных дисках, или соединяться с сервером базы данных;
однонаправленный набор данных - может читать данные, описанные в запросе SQL или возвращаемые хранимой на сервере процедурой. Этот вид набора данных не хранит данные в памяти и является менее гибким в использовании по сравнению с клиентским набором данных. Единственным направлением перемещения по записям в однонаправленном наборе данных является направление, указанное в SQL-запросе команды ORDER BY. Вы не можете использовать однонаправленный набор данных для обновления данных. Однако этот вид набора данных обеспечивает быстрый доступ к информации, хранящейся на сервере базы данных, и может предоставлять значительно больший объем информации по сравнению с клиентским набором данных.
В дополнение к вышеописанным наборам данных вы можете создать собственный набор данных. Для этого вам придется использовать класс в качестве предка.

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

Рис. 15.3. Структура таблицы базы данных

Любая таблица реляционной базы данных состоит из столбцов (полей) строк (записей). Каждое поле таблицы должно иметь свое уникальное имя.

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

Таблица может содержать разнотипные данные. Например, пусть таблица состоит из четырех полей: Number, Year, Name и Surname. Эти поля будут обозначать: порядковый номер записи, год рождения, имя и фамилию людей, занесенных в нашу таблицу. Таким образом, первое и второе поле будут числовыми, а третье и четвертое - символьными. Заполняя данными эти поля, мы будем заносить записи в таблицу базы данных.
В таблицах могут использоваться ключи и индексы.
Ключ - это одно или несколько полей, содержащих уникальные для каждой шеи данные.
Ключевое поле - это поле, которое определяет ключ.
Таким образом, по известным данным ключевого поля можно найти единственную запись в таблице, содержащую эти данные.
Ключи можно поделить на простые и составные:
простой ключ состоит из одного поля;
составной ключ состоит из нескольких полей таблицы, и значения отдельных его полей (но не всех одновременно) могут повторяться.
Индекс - это поля, предназначенные для сортировки таблицы. Индекс - это своеобразное оглавление таблицы.
Обычно ключевые поля в большинстве баз данных автоматически индексируются.
Kylix поддерживает таблицы баз данных InterBase, Oracle, DB2 и MySQL. Если вы хотите использовать таблицы других типов, вам придется написать собственный драйвер для работы с ними либо преобразовать эти блицы в поддерживаемые средой Kylix.

Средства для работы c базами данных
Среда Kylix предоставляет набор драйверов, необходимых для работы с базами данных, которые описаны выше. Кроме того, Kylix предоставляет программисту несколько компонентов, обеспечивающих работу с базами данных. Мы их кратко рассматривали в восьмой главе книги. Попробуем рассмотреть методику использования этих средств для создания простого приложения. Для этого воспользуемся файлом примера, который поставляется вместе со средой Kylix. Его можно найти в каталоге /kylix/demos/db/fishfact/.
Итак, запустим Kylix и откроем проект Fishfact.dpr. Данный проект представляет собой простой просмотрщик содержимого базы данных. Как вы можете видеть, он написан практически без использования кода. Есть лишь одна команда, которая активизируется при показе главной формы приложения. В листинге 15.1 представлен код главного модуля Ffaсtlin этого приложения.

Листинг 15.1. Модуль Ffactlin
unit Ffactlin;

interface

uses
SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs, QExtCtrls, QDBCtrls, QStdCtrls, DB, DBClient, QGrids, QDBGrids, QButtons;

type
TForm1 = class(TForm)
Panel1: ТPanel;:
DBImage1: TDBImage;
DBText1: TDBText;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
Panel2: TPanel;
Label1: TLabel;
DBText2: TDBText;
Panel3: TPanel;
Panel4: TPanel;
DBGrid1: TDBGrid;
BitBtn1: TBitBtn;
DBMemo1: TDBMemo;
procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var
Form1: TForm1;

lementation
{$R *.xfm}

procedure TForm1.FormCreate(Sender: TObject),
begin
// Указываем файл таблицы базы данных ClientDataSetl.LoadFromFile('biolife.cds');
end;

end.

Внешний вид формы представлен на рис. 15.4.

Рис. 15.4. Форма приложения базы данных

Мы не будем вдаваться в подробности пользовательского интерфейса этого приложения. Рассмотрим лишь те особенности, которые относятся к работе стаблицей базы данных.
Итак, на форме располагаются компоненты Datasource1 и ClientDataset1. Первый компонент обеспечивает взаимосвязь между компонентом ClientDataset1 и компонентами, отображающими данные. Компонент ClientDataset1 нужен для указания имени файла таблицы, из которой будут браться записи. Для отображения данных, находящихся в таблице, применяются компоненты DBImagel, DBTextl, DBText2, DBMemo1 и DBGrid1.
Компонент DBimage1 будет отображать картинки, содержащиеся в таблице. Для этого в его свойство DataField помещено значение Graphic, обозначающее, что будет отображаться содержимое поля с именем Graphic. Компоненты DBText1 и DBText2 служат для отображения текста (длиной не более одной строки). В их свойства DataField помещено значение commonName, также обозначающее название поля таблицы, значение которого будет отображать компоненты. Компонент DBMemo1 предназначен для отображения нескольких строк текста и может содержать горизонтальные и вертикальные полосы прокрутки. Данные берутся из поля Notes таблицы, т. к. именно это значение указано в свойстве DataField этого компонента. Наконец, компонент DBGrid1 - самый важный компонент в данном приложении. Он отображает полную запись таблицы и с помощью него происходит перемещение по записям. Запустим приложение. В результате появится форма с заполненными компонентами (рис. 15.5).

Рис. 15.5. Приложение в работе

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

 
MKPortal©2003-2008 mkportal.it
MultiBoard ©2007-2009 RusMKPortal