# Capa d'abstracció de base de dades

Una capa d'abstracció de base de dades (DBAL) és un interfície de programació de l'aplicació que unifica la comunicació entre una aplicació d'ordinador i bases de dades com SQL Server, DB2, MySQL, PostgreSQL, Oracle o SQLite. Tradicionalment, tots els proveïdors de bases de dades proporcionen una interfície pròpia per als seus productes, i es deixa al programador d'aplicacións la responsabilitat d'implementar codi per a totes les interfícies de base de dades a qui ell o ella vol donar suport. Les capes d'abstracció de base de dades redueixen la quantitat de feina i esforç als desenvolupadors al proporcionar un API consistent i amagar, tant com sigui possible, darrere d'aquesta interfície, els detalls especifics de la base de dades. Existeixen moltes capes d'abstracció amb interfícies diferents en molts llenguatges de programació. Si una aplicació té una d'aquestes capes, se l'anomena base de dades-agnòstica.

## Nivells d'abstracció de la base de dades
### Nivell físic (nivell més baix)

El nivell més baix es connecta directament a la base de dades i executa les operacions requerides pels usuaris.A aquest nivell, la instrucció conceptual s'ha traduït a diverses instruccions que la base de dades entén. Executar les instruccions en l'ordre correcte permet al DAL executar la instrucció conceptual.
La implementació de la capa física pot utilitzar APIs específiques de la base de dades o utilitzar el llenguatge estàndard propi d'accés a la base de dades i la corresponent versió d'SQL de la base de dades .
La implementació dels tipus de dades i les operacions són molt especifiques de la base de dades en qüestió a aquest nivell.

### Nivell conceptual o lògic (nivell mig)

El nivell conceptual consolida conceptes i instruccions externes en una estructura de dades intermèdia de la que se'n poden derivar les instruccions físiques. Aquesta capa és la més complexa, ja que tracta amb els nivells externs i físics. A més, ha de tindre en compte totes les bases de dades suportades i les seves peculiaritats, APIs i problemes.
Aquest nivell és conscient de les diferències entre les diverses bases de dades i és capaç de construir una ruta d'execució d'operacions en tots els casos. Tanmateix, la capa conceptual difereix de la capa física per la implementació real de cada operació individual.

### Extern o nivell de vista

El nivell extern és exposat a usuaris i desenvolupadors i proporciona un patró consistent per realitzar operacions sobre la base de dades. En aquest nivell les operacions sobre la base de dades es representen de forma simple com intruccions SQL o d'altres formes senzilles.
En aquest nivell, cada base de dades hauria de ser tractada de la mateixa forma i sense cap diferència aparent malgrat els diferents tipus de dades físiques i la varietat d'operacions.

## Abstracció de base de dades en l'API

Les biblioteques unifiquen l'accés a les bases de dades al proporcionar una sola interficie de baix nivell als desenvolupadors d'aplicacións. Els seus avantatges són normalment la velocitat i la flexibilitat perquè no estan lligats a un llenguatge de consulta específic i només s'ha d'implementar una capa lleurega per tal d'assolir el seu objectiu. Com que tots els dialectes d'SQL són similars entre si, els desenvolupadors d'aplicacións poden utilitzar totes les característiques del llenguatge, possiblement proporcionant elements configurables per a cada cas específic de base de dades, tals com IDs d'usuari i credencials. Una capa lleugera permet efectuar les mateixes consultes i ordres sobre una gran varietat de productes de bases de dades sense que això sigui massa costos.
Un ús popular de les capes d'abstracció de base de dades el trobem en els llenguatges orientats a objectes, els quals són similars a les capes d'abstracció a nivell d'API. En llenguatges orientats a objectes com C ++ o Java, una base de dades es pot representar a través d'un objecte, on els seus mètodes i membres (o l'equivalent en altres llenguatges de programació) representen diverses funcionalitats de la base de dades. També comparteixen el avantatges i desavantatges amb les interfícies a nivell d'API.

## Abstracció a nivell de llenguatge

Un exemple d'una capa d'abstracció de base de dades a nivell de llenguatge seria ODBC. ODBC és una implementació independent de plataforma d'una capa d'abstracció de base de dades. L'usuari instal·la un programa driver específic, a través del qual l'ODBC pot comunicar-se amb una base de dades o conjunt de bases de dades. L'usuari llavors té l'habilitat de tenir programes comunicant-se amb ODBC, el qual llavors gestiona la comunicació entre els programes d'usuari i la base de dades. La desavantatge d'aquest nivell d'abstracció és l'augment de sobrecàrrega que suposa transformar les declaracions a construccions que entén la base de dades objectiu.
Alternativament, hi han wrappers (contenidors) senzills, sovint descrits com a capes d'abstracció lleugeres, com OpenDBX i libzdb.Plantilla:Better source .

## Arguments a favor
### Període de desenvolupament

Els desenvolupadors de programari només han de conèixer l'API de la capa d'abstracció de la base de dades en lloc de totes les API de les bases de dades que la seva aplicació ha de suportar. Com més bases de dades s'hagin de suportar, més gran és l'estalvi de temps.

### Potencial més àmpli d'instal·lació

Usar una capa d'abstracció de base de dades permet que no hi hagi cap obligació per a les noves instal·lacions a que utilitzin una base de dades específica, és a dir, els nous usuaris que no vulguin o no puguin canviar la base de dades poden fer ús de l'infraestructura existent.

### Compatibilitat futura

A mesura que sorgeixen noves tecnologies de base de dades, els desenvolupadors de programari no hauran d'adaptar-se a les noves interfícies.

### Testatge

Una base de dades en producció pot ser reemplaçada per una implementació de dades de prova per tal de realitzar proves unitaries.

### Característiques afegides a la Base de dades

Depenent de la base de dades i del DAL, és possible per part del DAL afegir característiques a la base de dades. Un DAL pot utilitzar facilitats de programació de la base de dades o altres mètodes i crear funcionalitat estàndard però no suportada, o afegir funcionalitat completament nova. Per exemple, el DAL de DBvolution implementa la funció de desviació estàndard per diverses bases de dades que no el tenen suportat.

## Arguments en contra
### Velocitat

Qualsevol capa d'abstracció reduirà la velocitat global més o menys depenent de la quantitat de codi addicional que ha de ser executat. Quanta més emulació de característiques no presents a la base de dades, més lentitud en el rendiment. Això és especialment cert en capes d'abstracció de base de dades que intenten unificar el llenguatage de consulta tal com ho fa ODBC.

### Dependència

Una capa d'abstracció de la base de dades proporciona una altra dependència funcional al sistema de programari, és a dir, una capa d'abstracció de base de dades determinada, igual que qualsevol altre cosa, pot amb el temps esdevenir obsoleta o no suportada.

### Operacions emmascarades

Les capes d'abstracció de base de dades poden limitar el nombre d'operacions disponibles i reduir-les a un subconjunt del total d'operacions suportades per la base de dades. En particular, les capes d'abstracció de base de dades poden no suportar plenament algunes característiques d'optimització o correcció d'erros. Aquests problemes es fan grans a mesura que la base de dades creix en mida, escala, i complexitat.

## Vegeu també

* Mapatge d'objectes relacional

## Referències

* ↑ Apress. .
* ↑ http://searchdatamanagement.techtarget.com/definition/database-agnostic
* ↑ http://www.dmst.aueb.gr/dds/etech/db/abstr.htm