Saltar la navegación

UA03. Conectores

Ejemplo tabla base de datosActualmente, las bases de datos relacionales constituyen el sistema de almacenamiento probablemente más extendido, aunque otros sistemas de almacenamiento de la información se estén abriendo paso poco a poco.

Una base de datos relacional se puede definir, de una manera simple, como aquella que presenta la información en tablas con filas y columnas.

Una tabla o relación es una colección de objetos del mismo tipo (filas o tuplas).

En cada tabla de una base de datos se elige una clave primaria para identificar de manera unívoca a cada fila de la misma.

El sistema gestor de bases de datos, en inglés conocido como: Database Management System (DBMS) gestiona el modo en que los datos se almacenan, mantienen y recuperan.

En el caso de una base de datos relacional, el sistema gestor de base de datos se denomina: Relational Database Management System (RDBMS).

Tradicionalmente, la programación de bases de datos ha sido como una torre de Babel: gran cantidad de productos de bases de datos en el mercado y cada uno "hablando" en su lenguaje privado con las aplicaciones.

Java, mediante JDBC (Java Database Connectivity), permite simplificar el acceso a bases de datos relacionales, proporcionando un lenguaje mediante el cual las aplicaciones pueden comunicarse con motores de bases de datos. Sun desarrolló este API para el acceso a bases de datos, con tres objetivos principales en mente:

  • Ser un API con soporte de SQL: poder construir sentencias SQL e insertarlas dentro de llamadas al API de Java.
  • Aprovechar la experiencia de los API's de bases de datos existentes.
  • Ser lo más sencillo posible.

Desfase objeto-relacional

El desfase objeto-relacional consiste en la diferencia de aspectos que existen entre la programación orientada a objetos y la base de datos. Estos aspectos se puede presentar en cuestiones como:

  • Lenguaje de programación: el programador debe conocer el lenguaje de programación orientado a objetos (POO) y el lenguaje de acceso a datos.
  • Tipos de datos: en las bases de datos relacionales siempre hay restricciones en el uso de tipos, mientras que la programación orientada a objetos utiliza tipos de datos mas complejos.
  • Paradigma de programación: en el proceso de diseño y construcción del software se tiene que hacer una traducción del modelo orientado a objetos de clases al modelo Entidad-Relación (E/R) puesto que el primero maneja objetos y el segundo maneja tablas y tuplas (o filas), lo que implica que se tengan que diseñar dos diagramas diferentes para el diseño de la aplicación.

El modelo relacional trata con relaciones y conjuntos debido a su naturaleza matemática. Sin embargo, el modelo de POO trata con objetos y las asociaciones entre ellos. Por esta razón, el problema entre estos dos modelos surge en el momento de querer persistir los objetos de negocio.

La escritura (y de manera similar la lectura) mediante JDBC implica:

  1. Abrir una conexión.
  2. Crear una sentencia en SQL.
  3. Copiar todos los valores de las propiedades de un objeto en la sentencia, ejecutarla y así almacenar el objeto.

Esto es sencillo para un caso simple, pero complicado si el objeto posee muchas propiedades, o bien se necesita almacenar un objeto que a su vez posee una colección de otros elementos. Se necesita crear mucho más código, además del tedioso trabajo de creación de sentencias SQL.

Este problema es lo que denominábamos desfase Objeto-Relacional, o sea, el conjunto de dificultades técnicas que surgen cuando una base de datos relacional se usa en conjunto con un programa escrito en POO.

Ejemplo

Para entender mejor el concepto, lo que ocurre en nuestra aplicación es que tendremos algo más o menos así:

public class Estudiante {
    private int id;
    private String dni;
    private String nombre;
    private String apellido;
    private int edad;
//constructor
// getters y setters
}
CREATE TABLE estudiante (
    id INT PRIMARY KEY AUTO_INCREMENT;
    dni VARCHAR(50) NOT NULL,
    nombre VARCHAR(50) NOT NULL,
    apellido VARCHAR(100),
    edad INT DEFAULT 10;
);

En lenguaje de programación POO tenemos un objeto llamado "Estudiante", con diferentes atributos. En cambio, en la base de datos, cuando creamos la tabla, normalmente creamos campos que se asemejen a los definidos en el objeto de la clase.

Como podemos ver, no están definidos del mismo modo que en el objeto, sino con un equivalente, y realizamos el mapeo de manera manual. Es decir, cada vez que tengamos que añadir o modificar registros, se tendrán que hacer de manera manual a través de consultas de base de datos.

Además, los tipos de atributos en un objeto y en una tabla no se definen con el mismo tipo, sino con equivalentes.