Уровень абстракции базы данных ( DBAL [1] или DAL ) — это интерфейс прикладного программирования , который унифицирует взаимодействие между компьютерным приложением и базами данных, такими как SQL Server , IBM Db2 , MySQL , PostgreSQL , Oracle или SQLite . Традиционно все поставщики баз данных предоставляют собственный интерфейс, адаптированный к их продуктам. Программисту приложений приходится реализовывать код для интерфейсов базы данных, которые будут поддерживаться приложением. Уровни абстракции базы данных сокращают объем работы, предоставляя разработчику согласованный API и максимально скрывая специфику базы данных за этим интерфейсом. Существует множество уровней абстракции с различными интерфейсами на многочисленных языках программирования. Если в приложении встроен такой уровень, оно называется не зависящим от базы данных . [2]
Самый низкий уровень подключается к базе данных и выполняет фактические операции, требуемые пользователями. На этом уровне концептуальная инструкция транслируется в несколько инструкций, которые понимает база данных. Выполнение инструкций в правильном порядке позволяет DAL выполнять концептуальную инструкцию.
Реализация физического уровня может использовать API-интерфейсы, специфичные для базы данных, или использовать базовую технологию доступа к базе данных стандарта языка и версию базы данных SQL.
Реализация типов данных и операций на этом уровне наиболее специфична для базы данных.
Концептуальный уровень объединяет внешние концепции и инструкции в промежуточную структуру данных, которая может быть преобразована в физические инструкции. Этот уровень является самым сложным, поскольку он охватывает внешний и физический уровни. Кроме того, он должен охватывать все поддерживаемые базы данных и их особенности, API и проблемы.
Этот уровень знает о различиях между базами данных и способен построить путь выполнения операций во всех случаях. Однако концептуальный уровень подчиняется физическому уровню для фактической реализации каждой отдельной операции.
Внешний уровень доступен пользователям и разработчикам и обеспечивает последовательную схему выполнения операций с базой данных. [3] Операции с базой данных на этом уровне представлены лишь приблизительно как SQL или даже доступ к базе данных.
На этом уровне каждая база данных должна рассматриваться одинаково, без видимых различий, несмотря на различные физические типы данных и операций.
Библиотеки унифицируют доступ к базам данных, предоставляя разработчику приложения единый интерфейс программирования низкого уровня. Чаще всего их преимуществами являются скорость и гибкость, поскольку они не привязаны к определенному языку запросов (подмножеству) и должны реализовать только тонкий слой для достижения своей цели. Поскольку все диалекты SQL похожи друг на друга, разработчики приложений могут использовать все возможности языка, возможно, предоставляя настраиваемые элементы для случаев, специфичных для базы данных, такие как, как правило, идентификаторы пользователей и учетные данные. Тонкий слой позволяет выполнять одни и те же запросы и операторы на различных продуктах баз данных с незначительными накладными расходами.
Популярное использование уровней абстракции базы данных среди объектно-ориентированных языков программирования , которые похожи на уровни абстракции уровня API. В объектно-ориентированном языке, таком как C++ или Java, база данных может быть представлена через объект , чьи методы и члены (или эквиваленты в других языках программирования) представляют различные функциональные возможности базы данных. Они также разделяют преимущества и недостатки с интерфейсами уровня API.
Примером уровня абстракции базы данных на уровне языка может быть ODBC , который является платформенно-независимой реализацией уровня абстракции базы данных. Пользователь устанавливает определенное программное обеспечение драйвера , с помощью которого ODBC может взаимодействовать с базой данных или набором баз данных. Затем пользователь имеет возможность заставить программы взаимодействовать с ODBC, который затем передает результаты туда и обратно между пользовательскими программами и базой данных. Недостатком этого уровня абстракции является увеличение накладных расходов на преобразование операторов в конструкции, понятные целевой базе данных.
В качестве альтернативы существуют тонкие оболочки, часто описываемые как легкие слои абстракции, такие как OpenDBX [4] и libzdb. [5] Наконец, крупные проекты могут разрабатывать собственные библиотеки, такие как, например, libgda [6] для GNOME .
Libgda [...] в основном представляет собой уровень абстракции базы данных и данных и включает расширение пользовательского интерфейса на основе GTK+ и некоторые графические инструменты.