Уровень абстрактного представления базы данных

Архив WebclubТехнологии2008

Публикация прежнего Webclub · 2008 год. Примеры и сведения сохранены в историческом контексте.

Уровень абстракции, или абстрактного представления, базы данных - это интерфейс, который предоставляет ряд функций для работы с различными базами данных независимо от способа их реализации. Изменив внутренний интерфейс уровня абстракции базы данных, можно легко перейти, например, с формата MySQL на формат Oracle. В языке Perl таким уровнем является DBI (DataBase Interface), а в библиотеке PHPLib - уровень абстрактного представления базы данных, организованный в классе DB_Sql.

Переносимость

Для профессионального программиста, создающего Web-приложения, возможность абстрактного представления базы данных может быть очень полезной и важной. Основой каждого приложения является некая модель данных - множество структур данных, ориентированных на решение наиболее общих задач. Модель данных во многих случаях реализуется непосредственно в базе данных. Пакет PHP поддерживает множество различных баз данных; каждая из них располагает своим интерфейсом прикладных программ. На основе такого программного интерфейса невозможно обеспечить разработку программ, независимых от конкретной базы данных и операционной системы. Если вы не будете использовать некий уровень абстракции, примером которого может служить библиотека PHPLib, то при переводе приложения с MySQL на Oracle вам придется проделать тяжелую работу. В табл. 6.1 представлены различия между программными интерфейсами баз данных в различных системах.

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

Таблица 6.1. Интерфейсы прикладных программ, реализованные в СУБД MySQL и Oracle

Описание MySQL Oracle 7
Соединить (connect) mysql_connect() ora_logon()
Запрос (Query) mysql_query() или mysql_db_query() ora_parse(), затем ora_exec()
Получить следующую строку в результирующем наборе записей mysql_fetch_array() Работает со смещениями: ora_columnname(), ora_getcolumn()
Получить количество строк в результирующем наборе записей mysql_num_rows() Невозможно, потому что Oracle возвращать строки до того, как узнает общее количество строк в результирующем файле
Получить ключевой идентификатор последней вставленной строки mysql_insert_id() Соответствующая функция в пакете PHP отсутствует

Если вашей целью является создание переносимого кода, вы должны за километр обходить все специфические черты конкретных баз данных. Библиотека PHPLib может несколько упростить вашу задачу: в ней, к примеру, предусмотрены механизмы встроенной последовательной обработки записей и блокировки таблиц, которые не зависят от базы данных. Недавно разработчики библиотеки PHPLib добавили к ней класс Query, который предназначен для абстрагирования простых запросов (вставки, обновления, инструкций WHERE и некоторых других; такие запросы обычно составляют примерно 80 % общего числа запросов, адресованных базе данных), что позволяет сделать их независимыми от базы. В настоящее время данный класс работает только с СУБД MySQL и Oracle, начиная с версии 7.

Уровень абстракции базы данных библиотеки PHPLib предоставляет еще две возможности, которые не менее важны, чем экономия времени при выполнении повседневных операций и переносимость приложений. Эти возможности рассматриваются ниже.

Ещё из архива

Архив клуба
веб-разработчиков

HTML, CSS, программирование и история интернета. Публикации прежнего Webclub по своим адресам.

Открыть архив
Сайт на ноутбуке и телефоне