Objeto relacional bases datos 2

22
Modelo Lógico Objeto-Relacional

Transcript of Objeto relacional bases datos 2

Page 1: Objeto relacional bases datos 2

Modelo Lógico Objeto-Relacional

Page 2: Objeto relacional bases datos 2

object-relational database management system (ORDBMS)

• Sistema de gestión de bases de datos (DBMS), similar a una base de datos relacional, pero con un modelo de base de datos orientada a objetos.

• Objetos, clases y herencia están soportados directamente en los esquemas de bases de datos y en el lenguaje de consulta.

Page 3: Objeto relacional bases datos 2

• El objetivo básico de la base de datos objeto-relacional es cerrar la brecha entre bases de datos relacionales y las técnicas de modelado orientado a objetos utilizados en los lenguajes de programación como Java, C + +, Visual Basic. NET o C #.

Page 4: Objeto relacional bases datos 2

¿cómo asignar los datos relacionales en objetos?

• Una primera idea podría ser mapear atributos de objetos a los campos en una tabla.

• Desafortunadamente, este enfoque no crea el mapa perfecto por varias razones.– Los objetos no sólo almacenan datos simples en sus

atributos. Pueden almacenar colecciones o relaciones con otros objetos.

– La mayoría de bases de datos relacionales - MySQL y mSQL entre otras- no tienen forma de modelar herencia.

Page 5: Objeto relacional bases datos 2

Reglas generales para el modelado objeto/relacional

• Cada clase persistente tiene una tabla de base de datos correspondiente.

• Campos de objetos con tipos de datos primitivos (enteros, caracteres, cadenas, etc) se asignan a columnas en la tabla de base de datos asociada.

• Cada fila de una tabla de base de datos corresponde a una instancia de su clase persistente asociada.

• Cada relación de objeto de muchos a muchos requiere una tabla de join al igual que las entidades de base de datos con muchos-a-muchos requieren tabla de joins.

• La herencia es modelada a través de una relación uno-a-uno entre las dos tablas que corresponden a la clase y subclase.

Page 6: Objeto relacional bases datos 2

El modelo de datos para una aplicación simple de libreta de direcciones

idPersona(PK)idDireccion(FK)

NombreApellido

titulo

idDireccion(PK)Linea1Linea1Linea3Ciudad

Provincia

personadireccion

SELECT P.Apellido, P.Nombre, D.ciudadFROM persona P JOIN direccion D ON D.idDireccion=P.idDireccionWHERE D.ciudad=“Guayaquil"

Page 7: Objeto relacional bases datos 2

El modelo de objetos para una aplicación sencilla de libreta de direcciones

• El modelo objeto-relacional ofrece una ventaja • Puede hacer uso de las relaciones entre los datos para

obtener fácilmente los registros relacionados.

Nombre: StringApellido: String

Titulo: String

Linea1:StringLinea1:StringLinea3:StringCiudad:String

Provincia:String

persona

direccion

cambiarDirecc()

SELECT P.Nombre FROM Persona P WHERE P.direccion.ciudad=“Guayaquil"

la relación es "comprendida" por el ORDB

Page 8: Objeto relacional bases datos 2

Object Types

• Un tipo de objeto es una especie de tipo de datos. • Se puede usar de la misma manera que los tipos de

datos más conocidos, como NUMBER o VARCHAR2. • Por ejemplo, puede especificar un tipo de objeto como

el tipo de datos de una columna de una tabla relacional, y se pueden declarar variables de un tipo de objeto.

• Puede utilizar una variable de un tipo de objeto que contiene un valor de ese tipo de objeto. Un valor de un tipo de objeto es una instancia de ese tipo. Una instancia de objeto se llama también un objeto.

Page 9: Objeto relacional bases datos 2

• CREATE TYPE tipo_persona AS OBJECT ( id NUMBER, nombre VARCHAR2(30), telefono VARCHAR2(20), MAP MEMBER FUNCTION get_id RETURN NUMBER );

• CREATE TYPE BODY tipo_persona AS MAP MEMBER FUNCTION get_id RETURN NUMBER IS BEGIN

RETURN id; END; END;

Page 10: Objeto relacional bases datos 2

Tipos de Objeto Vs. datos nativos de una base de datos relacional:

• Un conjunto de tipos de objetos no viene ya con la base de datos

• Tipos de objetos están compuestos de partes, llamadas atributos y métodos.– Atributos contienen los datos sobre las características de un objeto de

interés. • Por ejemplo, un tipo de objeto estudiante puede tener atributos como

nombre, carrera y fecha de graduación.

– Los métodos son procedimientos o funciones previstas para permitir realizar a las aplicaciones operaciones útiles sobre los atributos del tipo de objeto.

• Los métodos son un elemento opcional de un tipo de objeto. Ellos definen el comportamiento de los objetos de ese tipo y determinan lo que el tipo de objeto puede hacer.

Page 11: Objeto relacional bases datos 2

Objetos

• Cuando se crea una variable de un tipo de objeto, se crea una instancia del tipo y el resultado es un objeto.

• Un objeto tiene los atributos y los métodos definidos para su tipo.

• Debido a que una instancia de objeto es algo concreto, se pueden asignar valores a sus atributos y llamar a sus métodos.

Page 12: Objeto relacional bases datos 2

• Por ejemplo, podría definir una tabla relacional para realizar un seguimiento de sus contactos:

CREATE TABLE contactos ( contacto tipo_persona,

fecha_contacto DATE );

INSERT INTO contactos VALUES ( tipo_persona (65, 'Luis Gomez', '2234544'), '24 Jun 2011' );

Page 13: Objeto relacional bases datos 2

Métodos de Objeto• Los métodos son funciones o procedimientos que se pueden declarar

en una definición de tipo de objeto para implementar un comportamiento que desea que los objetos de ese tipo lleven a cabo.

• El tipo general de los métodos que se pueden declarar en una definición de tipo son los siguientes:– Miembro– Estático– constructor

• Uno de los usos principales de los métodos es proporcionar acceso a los datos de un objeto. Por ejemplo, la siguiente sentencia SQL utiliza el método get_id () para mostrar el número de identificación de las personas en la tabla de contactos:

SELECT c.contacto.get_id() FROM contactos c;

Page 14: Objeto relacional bases datos 2

SQLJ

• SQLJ es un estándard ISO (ISO/IEC 9075-10) para embeber sentencias SQL en programas de Lenguaje de programación Java.

• Al contrario que JDBC, SQLJ no es un API sino una extensión del lenguaje. Así, los programas SQLJ deben ejecutarse a través de un preprocesador (el traductor SQLJ) antes de que puedan ser compilados.

Page 15: Objeto relacional bases datos 2

Ventajas de SQLJ sobre JDBC:

• Los programas SQLJ son más fáciles de escribir y de mantener. Además tienden a ser más cortos que los programas JDBC equivalentes.

• Es más eficiente que JDBC dado que las sentencias SQL son analizadas y los caminos de acceso son optimizados en tiempo de compilación en lugar de en tiempo de ejecución.

• Suministra mejor control de autorización: La Autorización puede ser concedida a los programas en lugar de a los usuarios.

• Los problemas de rendimiento potenciales, tales como las consultas ineficientes debido a un mal camino de acceso, pueden ser identificados en tiempo de desarrollo.

Page 16: Objeto relacional bases datos 2

Desventajas

• SQLJ requiere un paso de preprocesamiento.• Muchos IDEs no proporcionan soporte SQLJ.• No hay soporte de SQLJ para la mayoría de

frameworks de persistencia comunes, tales como Hibernate.

Page 17: Objeto relacional bases datos 2

Insert

stmt = conn.prepareStatement( "INSERT INTO DSN8710.EMP " + "(EMPNO,

FIRSTNME, MIDINIT, LASTNAME, HIREDATE, SALARY) " + "VALUES (?, ?, ?, ?, CURRENT DATE, ?)"); stmt.setString(1, empno); stmt.setString(2, firstname); stmt.setString(3, midinit); stmt.setString(4, lastname); stmt.setBigDecimal(5, salary); stmt.executeUpdate();

stmt.close();

#sql [ctx] { INSERT INTO DSN8710.EMP (EMPNO, FIRSTNME, MIDINIT, LASTNAME, HIREDATE, SALARY) VALUES (:empno,:firstname,:midinit,:lastname, CURRENT DATE,:salary) };

JDBC SQLJ

Page 18: Objeto relacional bases datos 2

Consulta de una fila

PreparedStatement stmt = conn.prepareStatement( "SELECT MAX(SALARY), AVG(SALARY)" + " FROM DSN8710.EMP"); rs = statement.executeQuery(); if (!rs.next()) { // Error -- no se encontraron filas } maxSalary = rs.getBigDecimal(1); avgSalary = rs.getBigDecimal(2);

if (rs.next()) { // Error -- más de una fila encontrada }

rs.close(); stmt.close();

#sql [ctx] { SELECT MAX(SALARY), AVG(SALARY) INTO:maxSalary,:avgSalary FROM DSN8710.EMP };

JDBC SQLJ

Page 19: Objeto relacional bases datos 2

Consulta de varias filas

PreparedStatement stmt = conn.prepareStatement( "SELECT LASTNAME" + ", FIRSTNME" + ", SALARY" + " FROM DSN8710.EMP" + " WHERE SALARY BETWEEN ? AND ?"); stmt.setBigDecimal(1, min); stmt.setBigDecimal(2, max); ResultSet rs = stmt.executeQuery(); while (rs.next()) { lastname = rs.getString(1); firstname = rs.getString(2); salary = rs.getBigDecimal(3); // Imprimir fila... } rs.close();

stmt.close();

#sql private static iterator EmployeeIterator(String, String, BigDecimal);

EmployeeIterator iter; #sql [ctx] iter = { SELECT LASTNAME , FIRSTNME , SALARY FROM DSN8710.EMP WHERE SALARY BETWEEN:min AND:max }; while (true) { #sql { FETCH:iter INTO:lastname,:firstname,:salary }; if (iter.endFetch()) break; // Imprimir fila... } iter.close();

JDBC SQLJ

Page 20: Objeto relacional bases datos 2

SQLX

• SQLX o SQL/XML es un estándar ANSI / ISO que brinda soporte para el uso del lenguaje XML en el contexto de una base de datos SQL.

• Las empresas y usuarios desean tener la habilidad de integrar sus datos XML a sus datos relacionales, a través de las facilidades del lenguaje SQL.

• SQLX hace posible almacenar documentos XML en una base de datos SQL, consultar dichos documentos usando XPath y XQuery, y "publicar" sus datos SQL existentes en la forma de documentos XML.

Page 21: Objeto relacional bases datos 2

SQLX• XmlElement () Crea un elemento XML.

• XMLFOREST () Crea un fragmento de XML a partir de pasado-en los componentes.

• XMLColAttVal ()Crea un fragmento de XML y luego se expande el XML resultante de manera que cada fragmento de XML tiene el nombre de "columna" con el atributo "nombre"

• ExtractValue () Toma como argumentos una instancia XMLType y una expresión XPath y devuelve un valor escalar del nodo resultante.

• XMLTransform () Toma como argumentos una instancia XMLType y una hoja de estilo XSL, que a su vez es una forma de instancia XMLType. Se aplica la hoja de estilo a la instancia y devuelve un XMLType.

• XMLSequence () Toma de entrada y devuelve un VARRAY de los nodos de nivel superior en la XMLType, o un tipo de XMLSequence un documento XML para cada fila del cursor.

• XMLCONCAT () Toma como entrada una serie de casos XMLType, concatena una serie de elementos de cada fila, y devuelve la serie concatenada.

• UpdateXML () Toma como argumentos una instancia XMLType y un par de XPath de valor, y devuelve una instancia XMLType con el valor actualizado.

Page 22: Objeto relacional bases datos 2

• XMLELEMENT( elementname IN VARCHAR2, [XMLATTRIBUTES(),] value_expr, ...) RETURN XMLType

• XMLATTRIBUTES( value_expr [AS identifier], ...) RETURN XMLType

• SELECT XMLElement("Date", hire_date) FROM hr.employees WHERE employee_id = 203;

XMLELEMENT("DATE",HIRE_DATE) ---------------------------- <Date>1994-06-07</Date>