Наверное, как и многие, кто пишет программы в среде Delphi, я начал свое знакомство с миром SQL с сервера InterBase, который фирма Борланд любезно включила в состав дистрибутива своей среды разработки. Не знаю почему, но с тех пор - InterBase, а сейчас Firebird, моя первая любовь в среде баз данных. Сервер Firebird создан на основании открытых исходных текстов InterBase, и весьма основательно отличается от родителя, а в скором будущем произойдет слияние двух популярных версий сервера InterBase - Firebird и Yaffil. Еще одно преимущество - оригинальный InterBase от Борланд уже давно стал платным, а Firebird - нет.
Свежую сборку под различные ОС также как и исходные тексты всегда можно найти по следующему адресу: http://firebird.sourceforge.net/. C версии 1.5 сервера Firebird произошли значительные изменения, по сравнению в версией 1.0.х: движок переписан на С++, добавлена библиотека внедренного (embedded) сервера, расширен синтаксис языка, как обычно, исправлены старые ошибки, добавлены новые. Также, теперь Firebird полностью отделен от своего предка (Interbase): переименованы все основные модули сервера и клиентские библиотеки. Таким образом, появилась возможность работы на одной машине как с оригинальным InterBase, так и с Firebird. Раньше имена модулей Interbase и Firebird были одинаковыми, в связи с чем и возникали проблемы.
Firebird может быть использован как для создания малых баз данных для использования в домашних условиях, так и для больших организаций, обеспечивая надежность и скорость обработки данных. Многие говорили, ну вот - для работы с базой надо еще и сервер за собой тягать: он и место на диске занимает и в памяти постоянно находится, даже когда не нужен для работы.
Теперь об этих <страхах> можно спокойно забыть. С версии 1.5 Firebird получил возможность работать в качестве embedded (англ. внедренный) сервера, то есть для работы с базами данных нет необходимости иметь запущенный сервер, вся функциональность умещается в одной динамически загружаемой библиотеке. Внедренный сервер обладает теми же особенностями и предоставляет приложению тот же API, что и обычный. Он разработан, чтобы работать как часть существующего приложения.
И что же, мы <безвозмездно, то есть даром> получаем персональную базу данных со всеми возможностями передовых клиент-серверных технологий, таких как хранимые процедуры, триггеры, транзакции. И все это великолепие занимает около двух с половиной мегабайт (естественно, без учета вашей программы и файла базы данных), что значительно меньше примерно восемнадцати мегабайт установленного БДЕ, который обычно используется для доступа к БД dBase, Paradox. Можно возразить, что для небольшой локальной базы не сильно-то и нужны все эти триггеры, транзакции и хранимые процедуры. Может и так, но почему бы один раз правильно не спроектировать базу данных и предоставить серверу самому заниматься управлением целостностью и непротиворечивостью базы.
Теперь немного о том, как настроить для работы то, что так красиво звучит.
Внедренный сервер - это полностью функциональный сервер, который разработан в виде DLL и имеет те же функциональные возможности, что и обычный сервер Firebird. Просто возьмите файл fbembed.dll из дистрибутива, переименуйте его в fbclient.dll или gds32.dll, в зависимости от настроек соединения вашей программы и скопируйте полученный файл в каталог с вашей программой - и все (ну, почти все). Строка подключения к базе данных в ваше программе должна содержать абсолютный путь к локальной базе данных или алиас БД, если он указан в файле конфигурации aliases.conf. Практически, ваше приложение может не знать, работает ли оно с встроенным или обычным сервером БД.
При запуске ваша программа будет использовать внедренный сервер в качестве клиентской библиотеки. При этом можно запускать несколько различных приложений, использующих внедренный сервер, без каких-либо конфликтов между ними, также не обязательно выгружать работающий InterBase или Firebird сервер. Правда, вы не сможете получить доступ к одной базе из нескольких приложений, так как внедренный сервер блокирует базу для эксклюзивного доступа, но ведь для локальной базы нам и не нужен доступ от нескольких клиентов. Тем более, что всегда остается возможность использовать обычный Firebird. Ну, а если есть необходимость использовать библиотеки INTL (поддержка национальных кодировок) или UDF (функции, определяемые пользователем), их необходимо скопировать в каталоги INTL или UDF каталога вашей программы, повторяя структуру каталогов обычного сервера Firebird. Также в каталог с программой можно поместить файл конфигурации firebird.conf и файл сообщений firebird.msg.
Таким образом, мы получаем следующую структуру каталогов:
Каталог моей программы application.exe Каталог моей программы fbclient.dll или gds32.dll Каталог моей программы firebird.conf Каталог моей программы firebird.msg Каталог моей программы intlfbintl.dll Каталог моей программы udffbudf.dll
А теперь немного о грустном - плохие новости для любителей безопасности: внедренный сервер не использует в работе базу данных безопасности security.fdb, поэтому любой пользователь может подключиться к любой базе данных, правда, привилегии (роли) пользователя по-прежнему проверяются.
В заключение, хочу сказать, что с Firebird мы получаем отличную возможность для разработки мощных и надежных, быстрых и эффективных локальных баз данных используя всю мощь языка структурированных запросов не инсталлируя мега- и гига- байты дополнительных файлов, а используя всего несколько дополнительных библиотек. И все это совершенно бесплатно.

Внедряем Firebird
