Eine Datenbankabstraktionsschicht (englisch database abstraction layer) ist eine Programmierschnittstelle, welche die Verbindung zwischen einer Software-Anwendung und damit zu verbindenden Datenbanken vereinheitlicht. Damit kann ein Verwalter bei der Installation der Anwendung aus einer Reihe möglicher Datenbankprodukte wählen, ohne dass der Programmcode angepasst werden muss.
Für die verschiedenen Datenbanken und Programmierumgebungen hatten sich mit der Zeit eigene Datenbankschnittstellen entwickelt, die teils spezifische Funktionen der Datenbanken zur Verfügung stellen, teils nur Syntax-Abweichungen abbilden. Durch eine Datenbankabstraktionsschicht werden die Syntaxunterschiede ausgeglichen und die Programmierung und somit auch die Wartbarkeit der Software verbessert. Darüber hinaus ist durch eine Datenbankabstraktionsschicht eine gewisse Datenbankunabhängigkeit sichergestellt, womit der Lock-in-Effekt stark reduziert wird.
Andererseits können über eine Datenbankabstraktionsschicht über den Standard (etwa SQL) hinausgehende Funktionen nicht oder nur eingeschränkt genutzt werden. Als weiterer Nachteil einer Datenbankabstraktionsschicht wird oft der zusätzliche Verarbeitungsaufwand für die Sprach- und Datenumsetzungen zur Laufzeit angesehen; andererseits erhöhen Optimierungsmöglichkeiten der Datenbankabstraktionsschicht wie Caching, Dirty Checking, Connection-Pooling oder Lazy Loading die Leistung.
Für die meisten Programmiersprachen und eine Anzahl von Frameworks stehen heute Datenbankabstraktionsschichten zur Verfügung, etwa:
- Dbx, PDO und SDO, weiterhin ADOdb für PHP
- DBI für Perl
- DBAL für TYPO3
- Database Server bei SAP ERP
- JDBC sowie diverse Java-Persistenzframeworks wie Hibernate, iBATIS oder EclipseLink für Java
Für die Sprache C und C++ wird etwa die Bibliothek OpenDBX angeboten, welche eine hohe Zugriffsgeschwindigkeit sicherstellen soll, während bei der sprach- und plattformübergreifenden Datenbankschnittstelle ODBC mehr Wert auf einheitliche Standards und hohe Verbreitung gelegt wird.
Weitergehende Funktionen eines dba kommen bei objektorientierten Umgebungen zum Einsatz, wo das API auch die Abbildung von Objekten auf die ggf. abweichende, etwa relationale Tabellenstruktur leistet.