Firebird

Содержание:

Повышенная точность хранения и вычисления для типов NUMERIC и DECIMAL

Типы NUMERIC и DECIMAL теперь могут хранить числа с точностью до 38 цифр. Для хранения чисел с точностью более 18 цифр Firebird 4.0 использует тип INT128 (128 битное целое). Кроме того улучшена обработка промежуточных результатов вычислений с типами данных NUMERIC и DECIMAL. В предыдущих версиях Firebird числа, внутренне представленные типом данных
BIGINT (то есть с точностью от 10 до 18 десятичных цифр), умножались/делились с использованием того же типа данных BIGINT для промежуточных вычислений, что могло вызвать ошибки переполнения из-за ограничения доступной точности. В Firebird 4 такие вычисления выполняются с использованием 128-битных целых чисел, что снижает вероятность неожиданных переполнений.

Тип INT128 также доступен для использования.

Технология хранения и индексации

Архитектура нескольких поколений (MGA)

Firebird унаследовал архитектуру хранения Interbase. Чтобы гарантировать свойства ACID транзакций, ядро ​​базы данных хранит разные версии каждой записи, измененные активными пользователями в базе данных. Когда транзакции фиксируются, последняя версия каждой измененной записи помечается как окончательная. Если транзакции откатываются, ядро ​​базы данных сохраняет отметку на исходных версиях записей, оставляя их нетронутыми. В результате количество операций записи на диск Firebird значительно сокращается по сравнению с базами данных, использующими традиционную архитектуру журнала транзакций. Запись транзакций не препятствует чтению, и наоборот, потому что каждая видит свою версию базы данных. Компромисс является то , что некоторые обслуживания ( «подметать») требуется время от времени , чтобы очистить старые версии записей и свободное место на диск.

Архитектура с несколькими поколениями гарантирует, что операции OLTP и DSS / OLAP могут выполняться одновременно без задержек, вызванных механизмами блокировки, присутствующими в других продуктах.

Индексы

Firebird заставляет все индексы базы данных вести себя как хорошо настроенные «кластерные индексы», используемые другими архитектурами. Сегменты индекса Firebird не подвергаются двухфазной блокировке, а логические операции «and» и «или» могут выполняться с промежуточными растровыми изображениями с незначительными затратами, избавляя оптимизатора от необходимости выбирать между альтернативными индексами.

Статьи и часто задаваемые вопросы

Установка и настройка

  • Самостоятельная сборка снапшота Firebird

  • Установка Firebird из снапшота

  • Установка firebird на Linux

  • Скрипт для резервирования базы данных на Python

  • Скрипт для резервирования базы данных на shell

  • Как установить на LINUX второй экземпляр Firebird

  • Подлючение к базе данных из 1С

Полезные запросы SQL

  • SQL000. Математические операции с датой

  • SQL001. Отбор множества записей по ключам

  • SQL002. Является ли строка числом

  • SQL003. Сумма прописью

  • SQL004. Можно ли в Firebird делать запросы к нескольким базам данных

  • SQL005. Как в строку вставить произвольный символ ?

  • SQL006. Как в строку вставить перенос строки (CRLF) ?

  • SQL007. Отбор множества записей по ключам из другой таблицы (обход конструкции IN)

  • SQL008. Полезные хранимые процедуры для обслуживание индексов

  • SQL009. Формирование штрих-кода EAN13 по коду записи в таблице

  • SQL010. Выборка данных из «древовидной таблицы» с учетом иерархии объектов

  • SQL011. Обмен данными между базами с помощью EXTENDENT (экспортируемых) таблиц

  • SQL012. Посчитать контрольный разряд к СНИЛС

Ссылки и дополнительная информация

В списке ниже приведены ссылки на дополнительную информацию о Firebird и связанных с ней инструментах.

Использование Firebird embedded с приложениями FPC/Lazarus

  • Примеры исходного кода приложения Lazarus/Firebird
  • Учебники Firebird/SQLDB:
    • SQLdb Tutorial0
    • SQLdb Tutorial1
    • SQLdb Tutorial2
    • SQLdb Tutorial3
    • SQLdb Tutorial4
  • Учебники по PP4S; включает установку Firebird на Windows, а также

Инструменты администрирования

  • ibconsole : инструмент для управления Firebird и базами данных Interbase с графическим интерфейсом, доступен для Windows и Linux.
  • Lazarus Data Desktop — входит в репозиторий Lazarus (находится в каталоге ‘tools/lazdatadesktop/’).
  • tiSQLEditor — включен в каталог «Support Apps» репозитория tiOPF. Это инструмент, используемый для написания SQL с некоторой поддержкой автозавершения кода, может запускать сценарии, выполнять сценарии обновления для приложений от одной сборки до более поздней сборки, имеет различные удобные функции копирования и вставки для приложений Object Pascal, имеет много функций, которые полезны для tiOPF (создает шаблоны кода Object Pascal из результатов запросов, для классов посетителей tiOPF), экспортирует результаты запросов в CSV и т.д.

2011

2.1 (последний релиз 2.1.4 от 15.03.2011)

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

2.5

Основной целью Firebird 2.5 было заложить основу для многопоточной архитектуры будущих версий. В данной версии в основе двух моделей Firebird Super Server и Firebird Classic лежит общий код, осуществляющий низкоуровневую синхронизацию и потокобезопасность.

Новые возможности SQL в Firebird 2.5

  • Управление пользователями через SQL (CREATE USER/ALTER USER/DROP USER).
  • Модификация представлений через инструкции ALTER VIEW и CREATE OR ALTER VIEW.
  • Возможность изменять вычисляемые поля ALTER COLUMN.
  • Оператор SIMILAR TO позволяет проверять регулярные выражения в условии WHERE, CHECK и в операторе * IF расширения PSQL.

Прочие изменения в Firebird 2.5

  • Поддержка автономных транзакций в PSQL (хранимые процедуры, триггеры, оператор EXECUTE BLOCK.
  • Выполнение гетерогенных запросов через EXECUTE STATEMENT
  • VIEW на основе хранимых процедур
  • Таймауты запросов
  • Улучшенный мониторинг. MON$MEMORY_USAGE и др.
  • Принудительное отключение клиента через MON$STATEMENTS.
  • Новая системная роль RDB$ADMIN позволяет передавать SYSDBA свои привилегии другому юзеру в пределах базы данных.

2.5.1 (последний релиз от 4.10.2011)

Спустя год после выхода СУБД Firebird 2.5 представлен корректирующий релиз Firebird 2.5.1 . Кроме исправления ошибок, в новой версии представлено несколько улучшений:

  • Заметно увеличена производительность восстановления БД (gbak restore) на стадии добавления данных;
  • Добавлена поддержка записи в глобальные временные таблицы для баз, находящихся в режиме только для чтения. Увеличена производительность глобальных временных таблиц и эффективность работы сборщика мусора;
  • В PSQL добавлена поддержка контекстной переменной SQLSTATE, которая может использоваться в блоках WHEN наряду с переменными GDSCODE и SQLCODE для диагностики ошибок;
  • В API добавлены функции предобразования между BLOB.

Как вести логи изменений данных пользователями в базе данных, сохраняя их в другой базе данных

Уважаемые читатели. Это вторая статья из цикла по базам данных. Решил сделать некоторое оглавление по планируемым статьям этого цикла:

  1. Как сделать разный часовой пояс в разных базах данных на одном сервере.
  2. Как вести логи изменений данных пользователями в базе данных, сохраняя их в другой базе данных, для того чтобы основная база данных не забивалась мусором и не росла.
  3. Как создать свою файловую систему на основе blob полей в базе данных. Почему это удобно. Вопросы эффективности хранения файлов: как получить максимальное быстродействие и при этом минимальное занимаемое место.

Я был удивлен количеством комментариев к первой статье, поэтому сразу хочу заметить, что не претендую на единственно правильный способ реализации. Я уверен, что творческие люди найдут еще немало других способов реализовать данную задачу. Но реализуя ее в свое время, я не нашел ни одной статьи с описанием такого функционала и делать данную задачу пришлось с нуля, хотя она на мой взгляд актуальна. Реализация, которую я буду описывать, полностью рабочая и используется мной на практике.
Так же я приветствую конструктивную критику. Бывает люди пишут интересные вещи и ты можешь взглянуть на проблему под углом, о котором не предполагал и как-то улучшить свои механизмы.
Итак начнем.
База данных firebird 3.
Формулировка задачи следующая: необходимо писать подробные логи изменений данных пользователями в базе данных (insert, update, delete), но при этом писать их в другой базе данных на другом сервере. Необходимо это для того чтобы размер основной базы данных не рос как на дрожжах, ее удобно было бекапить, ресторить, чтобы она работала быстро, не накапливала мусора, не содержала лишней и редконужной информации.

Подсистема «Показатели объектов»

Если вашим пользователям нужно вывести в динамический список разные показатели, которые нельзя напрямую получить из таблиц ссылочных объектов, и вы не хотите изменять структуру справочников или документов — тогда эта подсистема для вас. С помощью нее вы сможете в пользовательском режиме создать свой показатель, который будет рассчитываться по формуле или с помощью запроса. Этот показатель вы сможете вывести в динамический список, как любую другую характеристику объекта. Также можно будет настроить отбор или условное оформление с использованием созданного показателя.

2 стартмани

Архитектуры сервера

  • Классик сервер (англ. ClassicServer) — один процесс на одно соединение; поддержка многопроцессорных машин.
  • Суперсервер (англ. SuperServer) — все соединения используют один процесс, меньшие требования к памяти при большем быстродействии; для однопроцессорных машин.
  • СуперКлассик (англ. SuperClassic Server) — один процесс, но свой поток на каждое соединение. Данная архитектура введена в версии 2.5.
  • Встраиваемая (англ. Embedded) версия — весь движок содержится в одной библиотеке с именем клиентской библиотеки сервера, идеально подходит для однопользовательских систем, не требует инсталляции.

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

Некоторые недостатки FireBird

По сравнению со своими аналогами приложение имеет несколько недостатков:

  1. Отсутствие кэша, что мог бы сохранить результаты запросов.
  2. Производительность зависит от фрагментации базы.

Эта платформа все время развивается, и недостатки сводятся к минимуму. Следует отметить положительные моменты.

Положительных моментов намного больше, чем отрицательных:

  1. Можно заносить данные на любой носитель с примечанием «только для чтения.» Таким образом невозможно внести в базу данных какие-либо дополнения.
  2. Резервное копирование упростилась. Для этого не нужно останавливать сервис.
  3. База данных сохраняется в автоматическом режиме после запуска системы.
  4. Утилита может поддерживать много символов. Появилась возможность назначать одновременно большое количество триггеров для любых таблиц.
  5. Переход между операционными системами.
  6. Появились генераторы, что выступают в роли счетчиков. Они работают в автоматическом режиме.
  7. Программа выполняет одновременно несколько операций в пределах одного клиентского приложения.

Firebird является центром управления базы данных. Используют эту программу в основном в сельскохозяйственной и промышленной сферах. Один сервер такой утилиты имеет возможность обработать большое количество информации, связанной с каким-либо коммерческим или промышленным предприятием.

Главные характеристики FireBird:

  1. Соответствует стандартам ACID.
  2. Сервер обрабатывает множество версий одной и той же записи.
  3. Создание сложных хранимых процедур.
  4. Активен генератор событий.
  5. Создание баз только для чтения.
  6. Контролирование транзакций в пределах одного сервера.
  7. Возможность резервного копирования любой информации.
  8. Триггеры.
  9. Создание библиотек на различных языках и простое подключение к серверам в формате DLL/SO.

Также приложение дает возможность продуктивно записывать многоуровневые отношения между разными видами таблиц. Набор символов достаточно широкий и включает в себя международные символы и различные виды сортировки.

Firebird: что это за программа и зачем ее используют?

Firebird – среда для управления и работы с базами данных. Программа кроссплатформенная, подходит для всех настольных ОС. Используется для построения баз данных в промышленных системах. С 2001-го года программа распространяется на бесплатной основе.

Характеристики и возможности

Разберем подробнее, на что способна программа.

Основные особенности:

Открытый код Программу можно использовать бесплатно как для приложений с открытым кодом, так и для коммерческих целей.
Малый вес Firebird не занимает много места на жестком диске. При этом, она работает с базами в сотни раз превышающими ее размер.
Распространенность Firebird собрала вокруг себя сообщество энтузиастов. В любой момент пользователи получают актуальную информацию о ее работе.
Построение баз данных в режиме «только для чтения» СУБД может распространять данные на съемных носителях.
Копирование «на лету» При резервном копировании не нужно останавливать работу сервера. Технология копирования предполагает сохранение базы в момент создания копии. Процесс не мешает работе сервера.

Преимущества СУБД:

  • софт совместим со всеми актуальными ОС;
  • не требует настройки и отладки. Запускается непосредственно после установки;
  • работает в автоматическом режиме;
  • расширение функций за счет внешнего функционала;
  • установщик не занимает много места;
  • поддерживаются хранимые процедуры и триггеры;
  • записи различных версий обрабатываются параллельно с остальными;
  • триггеры создаются на SQL;
  • нет необходимости в участии системных администраторов;
  • поддержка широкого набора языков кодировки.

Не обошлось без минусов. Среди основных такие:

  1. Отсутствует кэш. Не отслеживается история запросов.
  2. Замедление работы с увеличением внутренней фрагментации базы.

Установка и работа

Помимо самой СУБД, для полноценной работы потребуется IBExpert:

  1. Софт скачивается с официального сайта.
  2. Затем устанавливаем Firebird. После установки, СУБД автоматически запускается при включении компьютера.

Совет! 19 апреля 2016 года стала доступна версия Firebird 3.0. Кратко ознакомится с новыми возможностями можно здесь. 

Работа начинается с запуска IBExpert. При первом запуске появится запрос об использовании многотипных элементов интерфейса. Если выбрать многотипный режим, интерфейс копирует инструментарий DELPHI.

Для создания первой базы, выбираем:

  • «База данных»;
  • затем жмем «Создать»;
  • и выбираем «Локальный сервер».

Для работы программа потребует пароль. У Firebird пароль по умолчанию

masterkey

Теперь вы приступите к созданию первого проекта.

Детальная инструкция по работе с базой показана на видео.

Удаление

Первый шаг – остановка программы. Открываем СУБД, запускаем Firebird Server Control, и нажимаем «Stop». После того, как работа остановлена, можно переходить к удалению:

  1. Через «Панель управления» переходим в меню «Установка и удаление программ».
  2. В данном окне выделяем СУБД, и в списке действий выбираем «Удалить».
  3. Подтверждая действие, избавляемся от компонентов программы.

Набор подсистем «Умные таблицы»

Данный набор подсистем – прикладная библиотека, призванная помочь программисту 1С быстрее решать ряд типовых задач бизнес-логики, таких как: ведение статусов объектов, отправка почтовых сообщений в определенное время, ведение произвольных таблиц с возможностью редактирования, сохранения и группировки, ориентированные на расчет бюджетных таблиц (план продаж, ретробонусы B2C, проценты по договорам B2B и договорные условия по КАМ), расчет коммерческой политики для бюджетных таблиц, исполнение произвольных алгоритмов с хранением кода в информационной базе, определение рабочих баз, хранение файлов во внешних СУБД (Postgre SQL, MS SQL и MongoDB) и выполнение произвольного кода после изменений ссылочного объекта вне транзакции изменения.

1 стартмани

Запуск набора тестов базы данных FPC

Может быть полезно запускать среду тестирования базы данных FPC (в каталоге packages\fcl-db\tests), когда вы охотитесь за ошибками, пытаетесь выяснить, как что-то работает или улучшаете код базы данных.

Сообщаем платформе, какую базу данных использовать

Вам нужно будет отредактировать INI-файл db test framework, чтобы сообщить исполняемому файлу теста, что ему нужно использовать вашу встроенную базу данных.
См. для получения инструкций о том, как это сделать.

Создание тестовой базы данных

Если вы настроили среду для использования Firebird, вам нужно будет подготовить среду для тестирования.

Скопируйте библиотеки embedded Firebird и другие файлы для вашей архитектуры в тестовый каталог.

Затем создайте тестовую базу данных — вручную или программно/

Создание базы данных вручную

isql

create database 'test.fdb' user 'SYSDBA' password 'masterkey' page_size 16384 default character set UTF8;
exit;

Программное создание базы данных

Вы можете программно создать базу данных. В приведенном ниже примере создается локальная встроенная база данных, но ее можно легко изменить на удаленную базу данных (измените имя хоста и, если необходимо, путь):

program firebirdembeddedtest;
{$mode objfpc}{$H+}

uses 
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF} 
  Classes, SysUtils,
  sqldb, IBConnection {for Firebird};

const
  // Имя для базы данных. Обязательно укажите одно и то же имя в вашем database.ini
  DatabaseFile = 'test.fdb'; //Разумное имя для тестовой базы данных, верно?
var
  Fire TIBConnection;

begin
  //Подключение к базе данных Firebird
  //Следующая строка нужна для довольно старых версий FPC
  //UseEmbeddedFirebird: = true; 
  //Более новые версии сначала будут искать файл fbembed.dll в каталоге приложения автоматически 
  //Использование встроенного (и fbembed.dll) или обычного клиент/сервера (fbclient.dll) требует использования ibase60dyn
  Fire:=TIBConnection.Create(nil);
  try
    Fire.HostName := ''; //должен быть пустым для embedded Firebird; должен быть заполнен для клиент/сервера Firebird
    Fire.DatabaseName := DatabaseFile; //(путь и ) имя файла
    // Имя пользователя и пароль не имеют значения для аутентификации, но вы получаете авторизацию в базе данных    
    // на основе имени (и, возможно, роли), которое вы даете.
    Fire.Username := 'SYSDBA';
    Fire.Password := 'masterkey'; //пароль для SYSDBA по умолчанию
    Fire.Charset := 'UTF8'; //Отправка и получение строковых данных в кодировке UTF8
    Fire.Dialect := 3; //Никто больше не использует диалекты 1 или 2 (прим.перев.: это справедливо лишь в отношении новых проектов)
    Fire.Params.Add('PAGE_SIZE=16384'); //Мне нравится большой размер страницы (используется при создании базы данных). Полезно для больших индексов ⇒ больший возможный размер столбца
    // Выясните, есть ли база данных в каталоге приложения. 
    // Если нет, создайте его. Примечание: это может не сработать, если у вас недостаточно прав.

    // Если вы используете клиент / сервер, вам явно не нужна эта часть кода.
    if (not FileExists(DatabaseFile)) then
    begin
        writeln('Файл '+DatabaseFile+' не существует.');
        writeln('Создание базы данных Firebird embedded ...');
        // Создаем базу данных, поскольку она не существует
        try
          Fire.CreateDB; //Создаем файл базы данных.
        except
          on E Exception do
          begin
            writeln('ОШИБКА при создании базы данных. Возможно проблемы с загрузкой встроенной библиотеки:');
            writeln('- не все файлы присутствуют');
            writeln('- неправильная архитектура (например, 32 бит вместо 64 бит)');
            writeln('Exception message:');
            writeln(E.ClassName+'/'+E.Message);
          end;
        end;
        Fire.Close;
    end;
  finally
    Fire.Free;
  end; 
end.

Наконец, скомпилируйте и запустите dbtestframework.pas программы тестирования базы данных. Он должен генерировать вывод состояния на консоли и вывод XML в файлах с результатами теста, которые можно проанализировать и отправить разработчикам.

2015

Вышла корректирующая версия СУБД Firebird 2.5.4

1 апреля 2015 года стало известно о выходе в открытый доступ корректирующего релиза реляционной СУБД Firebird 2.5.4.

Firebird распространяется под свободной лицензией MPL и поддерживает стандарты ANSI SQL, в том числе триггеры и хранимые процедуры.

Помимо исправления ошибок в новой версии добавлена низкоуровневая проверка целостности дисковых структур таблиц и индексов с сохранением доступности БД для выполнения других операций (в онлайн-режиме). Реализован механизм раннего освобождения внутренних временных блобов (blob), что помогло высвободить дополнительную память и дисковое пространство.

Варианты

  • Firebird SuperServer имеет один демон / сервер для всех клиентских подключений, многопоточный с общим кешем
  • Firebird SuperClassic также имеет один демон / сервер для всех клиентских подключений, многопоточный с отдельными кешами.
  • Firebird Classic использует inetd для запуска одной копии сервера на каждое клиентское соединение, рекомендуется для систем SMP, но может иметь проблемы с уведомлением о событиях, если доступ осуществляется через брандмауэр.
  • Firebird Embedded для создания каталогов на компакт-дисках, однопользовательских или ознакомительных версий приложений.

Статьи и часто задаваемые вопросы

Установка и настройка

  • Самостоятельная сборка снапшота Firebird

  • Установка Firebird из снапшота

  • Установка firebird на Linux

  • Скрипт для резервирования базы данных на Python

  • Скрипт для резервирования базы данных на shell

  • Как установить на LINUX второй экземпляр Firebird

  • Подлючение к базе данных из 1С

Полезные запросы SQL

  • SQL000. Математические операции с датой

  • SQL001. Отбор множества записей по ключам

  • SQL002. Является ли строка числом

  • SQL003. Сумма прописью

  • SQL004. Можно ли в Firebird делать запросы к нескольким базам данных

  • SQL005. Как в строку вставить произвольный символ ?

  • SQL006. Как в строку вставить перенос строки (CRLF) ?

  • SQL007. Отбор множества записей по ключам из другой таблицы (обход конструкции IN)

  • SQL008. Полезные хранимые процедуры для обслуживание индексов

  • SQL009. Формирование штрих-кода EAN13 по коду записи в таблице

  • SQL010. Выборка данных из «древовидной таблицы» с учетом иерархии объектов

  • SQL011. Обмен данными между базами с помощью EXTENDENT (экспортируемых) таблиц

  • SQL012. Посчитать контрольный разряд к СНИЛС

Основные особенности

  • Полная поддержка хранимых процедур и триггеров
  • Полное ACID совместимых транзакций
  • Ссылочная целостность
  • Многопоколенная архитектура (иногда называемая MVCC)
  • Поддержка внешних функций ( UDF )
  • Активность SQL может отправлять клиентам асинхронные события уведомления.
  • Сторонние инструменты, включая инструменты администрирования с графическим интерфейсом пользователя и инструменты репликации.
  • Тщательная запись — быстрое восстановление, нет необходимости в журналах транзакций
  • Множество методов доступа: native / API, драйверы dbExpress / FireDAC, ODBC, OLE DB, поставщик .NET, собственный драйвер JDBC типа 4, модуль Python, PHP, Perl
  • Инкрементальные резервные копии
  • Полная реализация курсора на PSQL

Создание EDM модели


Создание приложений для СУБД Firebird с использованием различных компонент и драйверов: FireDacconnectionStrings

Замечание о работе с Firebird 3.0
К сожалению текущий ADO .Net провайдер для Firebird (версия 4.10.0) не поддерживает аутентификацию по протоколу SRP (по умолчанию в Firebird 3.0). Поэтому если вы желаете работать с Firebird 3.0, то вам необходимо изменить некоторые настройки в firebird.conf (или в databases.conf для конкретной БД), чтобы Firebird работал через Legacy_Auth. Для этого необходимо поменять следующие настройки:
Сохранить настройки. После чего необходимо создать пользователя SYSDBA и других пользователей с использованием Legacy_UserManager.

Code First Data Annotationspublicvirtual

Configuring/Mapping Properties and Types with the Fluent API

Пример

Без рекурсии:

  WITH
  DEPT_YEAR_BUDGET AS (
    SELECT FISCAL_YEAR, DEPT_NO,
        SUM(PROJECTED_BUDGET) AS BUDGET
      FROM PROJ_DEPT_BUDGET
    GROUP BY FISCAL_YEAR, DEPT_NO
  )
SELECT D.DEPT_NO, D.DEPARTMENT,
  B_1993.BUDGET AS B_1993, B_1994.BUDGET AS B_1994,
       B_1995.BUDGET AS B_1995, B_1996.BUDGET AS B_1996
  FROM DEPARTMENT D
    LEFT JOIN DEPT_YEAR_BUDGET B_1993
      ON D.DEPT_NO = B_1993.DEPT_NO
      AND B_1993.FISCAL_YEAR = 1993
    LEFT JOIN DEPT_YEAR_BUDGET B_1994
      ON D.DEPT_NO = B_1994.DEPT_NO
      AND B_1994.FISCAL_YEAR = 1994
    LEFT JOIN DEPT_YEAR_BUDGET B_1995
      ON D.DEPT_NO = B_1995.DEPT_NO
      AND B_1995.FISCAL_YEAR = 1995
    LEFT JOIN DEPT_YEAR_BUDGET B_1996
      ON D.DEPT_NO = B_1996.DEPT_NO
      AND B_1996.FISCAL_YEAR = 1996
  WHERE EXISTS (
    SELECT * FROM PROJ_DEPT_BUDGET B
    WHERE D.DEPT_NO = B.DEPT_NO)          

с рекурсией:

WITH RECURSIVE
  DEPT_YEAR_BUDGET AS
  (
    SELECT FISCAL_YEAR, DEPT_NO,
        SUM(PROJECTED_BUDGET) AS BUDGET
      FROM PROJ_DEPT_BUDGET
    GROUP BY FISCAL_YEAR, DEPT_NO
  ),
 
  DEPT_TREE AS
  (
    SELECT DEPT_NO, HEAD_DEPT, DEPARTMENT,
        CAST('' AS VARCHAR(255)) AS INDENT
      FROM DEPARTMENT
     WHERE HEAD_DEPT IS NULL
 
    UNION ALL
 
    SELECT D.DEPT_NO, D.HEAD_DEPT, D.DEPARTMENT,
    H.INDENT || '  '
      FROM DEPARTMENT D
      JOIN DEPT_TREE H
        ON D.HEAD_DEPT = H.DEPT_NO
  )
 
  SELECT D.DEPT_NO,
 D.INDENT || D.DEPARTMENT AS DEPARTMENT,
 B_1993.BUDGET AS B_1993,
 B_1994.BUDGET AS B_1994,
 B_1995.BUDGET AS B_1995,
 B_1996.BUDGET AS B_1996
 
  FROM DEPT_TREE D
    LEFT JOIN DEPT_YEAR_BUDGET B_1993
      ON D.DEPT_NO = B_1993.DEPT_NO
      AND B_1993.FISCAL_YEAR = 1993
    LEFT JOIN DEPT_YEAR_BUDGET B_1994
      ON D.DEPT_NO = B_1994.DEPT_NO
      AND B_1994.FISCAL_YEAR = 1994
    LEFT JOIN DEPT_YEAR_BUDGET B_1995
      ON D.DEPT_NO = B_1995.DEPT_NO
      AND B_1995.FISCAL_YEAR = 1995
    LEFT JOIN DEPT_YEAR_BUDGET B_1996
      ON D.DEPT_NO = B_1996.DEPT_NO
      AND B_1996.FISCAL_YEAR = 1996

еще один пример с рекурсией:

WITH recursive temp(n, f1, f2, f3, f4) AS
(SELECT , 1, 2, 3, 4
 FROM rdb$database
 UNION ALL
 SELECT n+1, 1, 2, 3, 4
 FROM temp
 WHERE n < 10)
 
SELECT * FROM temp

Установка Firebird — выбор типа сервера

Сервер Firebird SQL доступен в 3-х вариантах:

  • Firebird Super Server
  • Firebird Classic Server
  • Firebird Embedded

Firebird Super Server

Firebird Super Server — все клиентские подключения обслуживаются одним серверным процессом, имеется общий клиентский кеш. За счет этого достигается меньший расход ресурсов на обслуживание клиентов. Недостатком Firebird Super Server является отсутствие возможности задействовать несколько процессоров для работы Firebird сервера.

Firebird Classic Server

Firebird Classic Server — на каждое клиентское подключение создает отдельный серверный процесс. Архитектура Firebird Classic Server более надежна, т.к. сбой одного серверного процесса не вызывает отказ в обслуживании всех клиентов. Кроме того, Firebird Classic позволяет задействовать многопроцессорную архитектуру. При установке Firebird вы можете выбрать между версиями Firebird Super Server или Firebird Classic Server.

Firebird Embedded

Firebird Embedded Server — предназначен для встраиваемых баз данных. Состоит из одной dll — fbembed.dll, которая включает в себя клиент и сервер Firebird Super Server. Firebird Embedded не требует установки на клиентской рабочей станции. Достаточно просто скопировать fbembed.dll и еще несколько файлов клиенту на компьютер.

Недостаток Firebird Embedded — это невозможность одновременного подключения к одной БД нескольких клиентов. После успешного подключения Firebird Embedded блокирует файл базы данных для монопольного доступа.

Firebird Embedded Server распространяется отдельным дистрибутивом.

Скачать архив с Firebird Embedded.

Если затрудняетесь с выбором

Если вы не уверены в выборе типа установки Firebird, то используйте Firebird Super Server. В дальнейшем вы без труда сможете изменить архитектуру сервера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector