Поделиться через


Оценка возможности использования функций базы данных

После того как базовый уровень взаимодействия известен, необходимо учитывать функции базы данных, используемые приложением. Например, какие инструкции SQL будут выполняться приложением? Будет ли приложение использовать прокручиваемые курсоры? Операций? Процедуры? Длинные данные? Сведения о возможностях, которые могут не поддерживаться всеми СУБД, см. в описаниях функций SQLGetInfo, SQLSet Подключение Attr и SQLSetStmtAttr и приложении C: Грамматика SQL. Функции, необходимые приложению, могут исключить некоторые СУБД из списка целевых СУБД. Они также могут показать, что приложение может легко нацеливается на множество СУБД.

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

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

  • Более низкая совместимость, дополнительные возможности. Приложение включает функции, но работает только с СУБД, поддерживающими их.

  • Более высокий уровень взаимодействия, меньше возможностей. Приложение удаляет функции, но работает с дополнительными СУБД.

  • Более высокий уровень взаимодействия, необязательные функции. Приложение включает функции, но делает их доступными только с этими СУБД, которые поддерживают их.

  • Более высокий уровень взаимодействия, больше возможностей. Приложение использует функции с СУБД, поддерживающими их, и эмулирует их для СУБД, которые не выполняются.

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

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

Приложение имеет ряд вариантов на основе того, что драйвер возвращает для параметра SQL_MAX_CONCURRENT_ACTIVITIES в SQLGetInfo:

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

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

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

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