Для зарегистрированных пользователей |
|
Access и InterBase/Firebird
Что такое FireBird?
История этого сервера баз данных удивительна и загадочна, причем самым невероятным я считаю то, что этот неплохой коммерческий продукт вдруг стал бесплатным. Целиком эту захватывающую историю можно узнать на сервере Epsylon Technologies, который является наиболее полным и полезным источником информации на русском языке по серверу InterBase и его клонам, одним из которых и является FireBird.
Зачем всё это нужно?
Если Вы решили создать клиент-серверную систему, то выбор сервера - первая из возникающих на этом трудном пути проблем. Если для разработки клиентской части используется MS Access, то логично было бы остановить свой выбор на MS SQL Server. Он хорош всем, кроме цены. Другие недочёты - мелочь по сравнению с той суммой, которую требуется выложить как за сам SQL сервер, так и за сервер Windows NT, так как под Linux Microsoft, естественно, ничего не пишет.
Почему FireBird?
Итак, что мы имеем на сегодняшний день из бесплатных серверов БД? Основных вариантов - два: PostgreSQL и InterBase/FireBird. Для тех, кто не читал историческую справку, поясню, что FireBird - это отдельная ветка, отпочковавшаяся от InterBase с открытыми исходниками. Отличия между ними - тема отдельного обсуждения. Если быть уж совсем кратким, то в FireBird баги исправляются и улучшения вносятся быстрее. Borland развивает только платную версию своего сервера InterBase.
PostgreSQL - тоже неплохой сервер, но специальной версии для Win32 не существует. Для проведения опытов его можно установить под Windows в комплекте эмулятора UNIX CygWin.
Третий кандидат - SAP DB. Это довольно мощный сервер, однако он плохо приспособлен для работы с национальными алфавитами, в том числе и с кириллицей.
Есть конечно ещё MySQL, но, несмотря на все свои достоинства, в нынешней версии он способен только выполнять запросы, да и то с некоторыми ограничениями. Хранимые процедуры, триггеры, подзапросы и т.п. будут добавлены в ближайшем будущем, но сейчас ничего этого нет.
Таким образом, из соображений удобства и достаточной функциональности остаётся один FireBird. Вот теперь пришло время рассмотреть его поближе.
Хорошее
Этот сервер может практически всё, что обычно требуется для приложений средней «навороченности». Под этими словами я понимаю то, что сервер должен как минимум поддерживать ANSI SQL-92, транзакции, хранимые процедуры и триггеры, развитую систему разграничения прав доступа, архивирование баз данных, быть надёжным и простым в администрировании, не иметь серьёзных ограничений на размер базы, количество таблиц, полей, индексов и т.п.
Интересной особенностью сервера является то, что он построен на архитектуре множественных поколений записей и использует версионный механизм доступа к данным. Это позволяет избежать блокировок при чтении записей, однако немного замедляет доступ.
В дополнение к этому всему, как результат очень недолгого изучения, хочу отметить:
- Триггеры могут быть Before и After, причем в неограниченном, практически, количестве (срабатывают в последовательности, которую легко указать при создании триггера). В отличие от MS SQL, срабатывают они отдельно для каждой записи, а не единожды для всего кортежа.
- Хранимые процедуры могут возвращать как наборы данных, так и скалярные значения, причём их можно использовать непосредственно в запросах.
- Для создания уникальных идентификаторов предусмотрены генераторы. Это отдельные объекты, не привязанные к конкретным полям или таблицам, что позволяет с лёгкостью создавать идентификаторы, уникальные в любом контексте.
- Кроме хранимых процедур, существуют ещё UDF, оформленные как внешние dll. Стандартный набор UDF и готовые их библиотеки сторонних разработчиков включают в себя практически все функции, какие только могут понадобиться.
- Есть контроль ссылочной целостности.
- Есть полноценная поддержка кириллицы.
Плохое
- Отсутствует денежный тип данных (Money, Currency), но есть десятичный (Decimal, Numeric). Работать с ним можно, но в Access'е такого типа нет и он воспринимает его как Double.
- Не совсем ясна ситуация с ODBC драйвером. На сегодняшний день их довольно много, но одни не бесплатны, другие несовместимы с Access'ом. Единственный пригодный драйвер делает чешская фирма XTG SYSTEMS, но он ещё не совсем готов, хотя для пробы подойдёт. Платные драйверы от Gemini и EasySoft работают хорошо.
- Слабая система защиты. При отсутствии ограничений доступа к файлу, где лежат описания пользователей и групп, отсутствует и защита. Есть и другие дыры.
- Слабый оптимизатор запросов (имеются ввиду сложные запросы с объединением большого количества таблиц). Сам не проверял, но верю. Обходится путём явного задания плана запроса.
- Программы для администрирования существенно уступают Enterprise Manager'у от Microsoft, за исключением, может быть, IBExpert, который на момент написания статьи является бесплатным для пользователей из стран бывшего СССР.
- Управление транзакциями осуществляется на уровне соединения, то есть при подключении таблиц через ODBC и даже при создании дополнительного сеанса ODBC ограничивается простыми ROLLBACK/COMMIT из-за ограничений как Access'а, так и самого стандарта ODBC. Изменение уровня изоляции транзакций и резервирование таблиц недоступно.
В итоге
Мне понравился этот сервер. Он достаточно (а не избыточно!) функционален, прост в установке, настройке и администрировании. По нему много информации и групп новостей в Интернет, в том числе на русском языке. Но, всё же, чего-то не хватает. Система безопасности откровенно слаба. Язык хранимых процедур и триггеров беден, а дополнение его подключаемыми внешними библиотеками не всегда удобно. Очень развитая система управления транзакциями и блокировками недоступна через SQL (к сожалению, как и множество других полезных функций) и может быть задействована только при использовании OLEDB, компонент Delphi или непосредственно клиентского API, то есть применение Access для создания клиентских приложений затруднительно.
|