Unidad 7


Bases de Datos Orientadas a objetos



Visión general

Las aplicaciones tradicionales de las bases de datos consisten en tareas de procesamiento de datos, como la gestión bancaria o de nóminas, con tipos de datos relativamente sencillos que se adaptan bien al modelo relacional.
A medida que los sistemas de datos se fueron usando en un rango más amplio de aplicaciones, como el diseño asistido por computadora y los sistemas de información geográfica, las limitaciones impuestas por el modelo relacional se convirtieron en un obstáculo. La solución fue la introducción de bases de datos basadas en objetos que permiten trabajar con tipos de datos complejos. El primer obstáculo es el limitado sistema de tipos soportado por el modelo relacional. Los dominios de aplicaciones complejos necesitan tipos de datos del mismo nivel de complejidad como los atributos multivaluados y la herencia, que los lenguajes de programación tradicional soportan. El modelo de datos relacional orientado a objetos extiende el modelo de datos relacional ofreciendo un sistema de tipos más rico que incluye tipos de datos complejos y orientados a objetos. Hay que extender de manera acorde los lenguajes de consultas relacionales, para que puedan trabajar con este sistema de tipos más rico. Estas extensiones intentan conservar los fundamentos relacionales mientras extienden la potencia del modelo.
El segundo obstáculo es la dificultad de acceso a los datos de la base de datos desde los programas escritos en lenguajes como C++ o Java. Las diferencias entre el sistema de tipos de las bases de datos y el de los lenguajes de programación hace más complicado el almacenamiento y la recuperación de los datos. Tener que expresar el acceso a las bases de datos mediante un lenguaje (SQL) que es diferente al lenguaje de programación también hace más difícil el trabajo del programador. Es deseable, para muchas aplicaciones, contar con estructuras o extensiones del lenguaje de programación que permitan el acceso directo a los datos de la base de datos, sin tener que pasar por un lenguaje intermedio como SQL.
El término de lenguajes de programación persistentes hace referencia a las extensiones de los lenguajes de programación existentes que añaden persistencia y otras características de las bases de datos usando el sistema de tipos nativo del lenguaje de programación. El término sistemas de bases de datos orientadas a objetos se usa para hacer referencia a los sistemas de bases de datos que soportan sistemas de tipos orientados a objetos y permiten el acceso directo a los datos desde los lenguajes de programación orientados a objetos usando el sistema de tipos nativo del lenguaje.

Tipos de datos complejos

Todos los valores de tipos de datos pueden agruparse en dos categorías principales: simples o complejos.

Un valor simple (o tipo de dato simple) es un valor que ActionScript almacena en el nivel más bajo de abstracción, lo que significa que las operaciones con tipos de datos simples son generalmente más rápidas y eficientes que las operaciones realizadas con tipos de datos complejos. Los siguientes tipos de datos definen un conjunto de uno o varios valores simples: Boolean (booleano), null (nulo), Number (número), String (cadena) y undefined (no definido).

Un valor complejo (o tipo de datos complejo) es un valor que no es simple y que hace referencia a los valores simples. Estos se denominan con frecuencia tipos de datos de referencia. Los valores complejos pertenecen al tipo de datos Object (objeto) o a un tipo de datos basado en el tipo de datos Object. Entre los tipos de datos que definen conjuntos de valores complejos se encuentran Array (matriz), Date (fecha), Error, Function (función) y XML. 

Las variables que contienen datos de tipo simple se comportan en ciertas situaciones de modo diferente a las que contienen tipos complejos. 
ActionScript dispone de los siguientes tipos básicos de datos que puede utilizar en sus aplicaciones:


Tipo de datos
Descripción
Boolean
Simple. El tipo de datos Boolean (booleano) consta de dos valores: true y false. Ningún otro valor es válido para variables de este tipo. El valor predeterminado de una variable booleana declarada pero no inicializada es false. Para más información, consulte Tipo de datos Boolean (booleano).
MovieClip
Complejo. El tipo de datos MovieClip permite controlar los símbolos de clips de película mediante los métodos de la clase MovieClip. Para más información, consulte Tipo de datos MovieClip (clip de película).
null
Simple. El tipo de datos null (nulo) contiene el valor null. Este valor significa "ningún valor", es decir, no hay datos. Puede asignar el valor null en distintas situaciones para indicar que una propiedad o variable no tiene ningún valor asignado. El tipo de datos null es el tipo de datos predeterminado para todas las clases que definen tipos de datos complejos. Una excepción a esta regla es la clase Object, que adopta de manera predeterminada el valor undefined. Para más información, consulte Tipo de datos null (nulo).
Number
Simple. Este tipo de datos representa enteros, enteros sin signo y números de coma flotante. Para almacenar un número de coma flotante, debe incluir una coma decimal en el número. Sin la coma decimal, el número se almacena como un entero. El tipo de datos Number puede almacenar valores entre Number.MAX_VALUE (muy alto) y Number.MIN_VALUE (muy bajo). Para más información, consulte Referencia del lenguaje ActionScript 2.0 y Tipo de datos Number (número)
Object
Complejo. El tipo de datos Object (objeto) se define mediante la clase Object. La clase Object sirve de base para todas las definiciones de clases en ActionScript y le permite organizar unos objetos dentro de otros (objetos anidados). Para más información, consulte Tipo de datos Object (objeto).
String
Simple. El tipo de datos String (cadena) representa una secuencia de caracteres de 16 bits que puede incluir letras, números y signos de puntuación. Las cadenas se almacenan como caracteres Unicode empleando el formato UTF-16. Una operación sobre un valor de cadena (String) devuelve una nueva instancia de la cadena. Para más información, consulte Tipo de datos String (cadena).
undefined
Simple. El tipo de datos undefined (no definido) contiene un valor: undefined. Este es el valor predeterminado de las instancias de la clase Object. Sólo puede asignar el valor undefined a variables que pertenezcan a la clase Object. Para más información, consulteTipo de datos undefined (no definido).
Void
Complejo. El tipo de datos Void (vacío) sólo contiene un valor: void. Este tipo de datos se usa para designar funciones que no devuelven un valor. Void es un tipo de datos complejo que hace referencia al tipo de datos Void simple. Para más información, consulteTipo de datos Void (vacío).



Tipos estructurados y herencia SQL

Antes de SQL: 1999 el sistema de tipos de SQL consistía en un conjunto bastante sencillo de tipos predefinidos. SQL: 1999 añadió un sistema de tipos extenso a SQL, lo que permite los tipos estructurados y la herencia de tipos.
Los tipos estructurados permiten representar directamente los atributos compuestos de los diagramas E-R. Por ejemplo, se puede definir el siguiente tipo estructurado para representar el atributo compuesto nombre con los atributos componentes nombre_pila y apellidos:



create type Nombre as
(nombre_pila varchar(20),
apellidos varchar(20))
final

De manera parecida, el tipo estructurado siguiente puede usarse para representar el atributo compuesto dirección:



create type Direccion as
(calle varchar(20),
ciudad varchar(20),
codigo_postal varchar(9))
not final

En SQL estos tipos se denominan tipos definidos por el usuario. La especificación final indica que no se puede crear subtipos de nombre, mientras que la especificación not final de dirección indica que se pueden crear subtipos de dirección. Ahora se pueden usar estos tipos para crear atributos compuestos en las relaciones, con sólo declarar que un atributo es de uno de estos tipos. Por ejemplo, se puede crear una tabla cliente de la siguiente manera.



create table cliente (
nombre Nombre,
direccion Direccion,
fecha_nacimiento date)

O bien, realizando una estructura más del tipo Cliente y generar la tabla a partir de ella:



create type TipoCliente as
(nombre Nombre,
direccion Direccion,
fecha_nacimiento date)
not final

create table cliente of TipoCliente

Se puede tener acceso a los componentes de los atributos compuestos usando la notación  “punto”; por ejemplo, nombre.nombre_pila devuelve el componente nombre de pila del atributo nombre. El acceso al atributo nombre devolvería un valor del tipo estructurado Nombre.
La siguiente consulta ilustra la manera de tener acceso a los atributos componentes de los atributos compuestos. La consulta busca el apellido y la ciudad de cada cliente.



select nombre.apellido, direccion.ciudad
from cliente

En SQL: 1999 se usan funciones constructoras para crear valores de los tipos estructurados. Las funciones con el mismo nombre que un tipo estructurado son funciones constructoras de ese tipo estructurado. Por ejemplo, se puede declarar una función constructora para el tipo Nombre de esta manera:



create function Nombre(nombre_pila varchar(20), apellidos varchar(20))
returns Nombre
begin
set self.nombre_pila = nombre_pila;
set self.apellidos = apellidos;
end

De manera predeterminada, cada tipo estructurado tiene una función sin argumentos que configura los atributos con sus valores predeterminados. Cualquier otra función constructora hay que crearla de manera específica.
La instrucción siguiente ilustra la manera de crear una nueva tupla de la relación Cliente. Se da por supuesto que se ha definido una función constructora para Dirección, igual que la función constructora que se definió para Nombre.



insert into Cliente
values
(new Nombre(‘Martín’, ‘Gómez’),
new Direccion(‘Calle Mayor 20’, ‘Madrid’, ‘28045’),
date ‘22-8-1960’)

Herencia de tablas

Las subtablas de SQL se corresponden con el concepto de especialización / generalización de E-R Por ejemplo, supóngase que se define la tabla personas de la siguiente manera:



create table personas of Persona

A continuación se puede definir las tablas estudiantes y profesores como subtablas de personas, de la manera siguiente:



create table estudiantes of Estudiante
under personas
create table profesores of Profesor
under personas

Los tipos de las subtablas deben ser subtipos del tipo de la tabla madre. Por tanto, todos los atributos presentes en personas también están presentes en las subtablas.
Además, cuando se declaran estudiantes y profesores como subtablas de personas, todas las tuplas presentes en estudiantes y profesores pasan a estar también presentes de manera implícita en personas. Por tanto, si una consulta usa la tabla personas, no sólo encuentra tuplas directamente insertadas en esa tabla, sino también tuplas insertadas en sus subtablas, es decir, estudiantes y profesores. No obstante, esa consulta sólo puede tener acceso a los atributos que están presentes en personas.
SQL permite hallar tuplas que se encuentran en personas pero no en sus subtablas usando en las consultas “only personas” en lugar de personas. La palabra clave only también puede usarse en las sentencias delete y update. Sin la palabra clave only, la instrucción delete aplicada a una supertabla, como personas, también borra las tuplas  que se insertaron originalmente en las subtablas (como estudiantes); por ejemplo, la instrucción



delate from personas where P

Borrará todas las tuplas de la tabla personas, así como de sus subtablas estudiantes y profesores, que satisfagan P. Si se añade la palabra clave only a la instrucción anterior, las tuplas que se insertaron en las subtablas no se ven afectadas, aunque satisfagan las condiciones de la cláusula where.


SQL soporta dos tipos de conjuntos: arrays y multiconjuntos; los tipos array se añadieron en SQL: 1999, mientras que los tipos multiconjuntos se agregaron en SQL: 2003. Un multiconjunto es un conjunto no ordenado, en el que cada elemento puede aparecer varias veces.

Supóngase que se desea registrar información sobre libros, incluido un conjunto de palabras clave para cada libro. Supóngase también que se deseara almacenar almacenar el nombre de los autores de un libro en forma de array; a diferencia de los elementos de los multiconjuntos, los elementos de los arrays están ordenados, de modo que se puede distinguir el primer autor del segundo autor, etc. El ejemplo siguiente ilustra la manera en que se puede definir en SQL estos atributos como arrays y como multiconjuntos.



create type Editor as
(nombre varchar(20),
sucursal varchar(20))

create type Libro as
(titulo varchar(20),
array_autores varchar(20) array[10],
fecha_publicacion date,
editor Editor,
conjunto_palabras_clave varchar(20) multiset)

create table libros of Libro


Tipos de arreglo multiconjunto en SQL

SQL soporta dos tipos de conjuntos arrays y multiconjuntos. Un multiconjunto es un conjunto no ordenado, en el que cada elemento puede aparecer varias veces. Los multiconjuntos son como los conjuntos, salvo que los conjuntos permiten que cada elemento aparezca, como mucho una vez.
 Estos se pueden definir como arrays y como multiconjuntos:
Créate type Editor as(nombre varchar(20),
sucursal varchar(20))
créate type Libro as
(titulo varchar(20),
array_autores varchar (20) array [10],
fecha_publicacion date,
editor Editor,
conjunto_palabras_clave varchar(20)multiset)
create table libro of Libro
La primera instrucción define el tipo denominado Editor, que tiene dos componentes: nombre y sucursal. La segunda instrucción define el tipo estructurado Libro, que contiene titulo, unarray_autores, que es un array de hasta de diez nombres de autor, una fecha de publicación, un editor y un multiconjunto de palabras clave. Finamente se crea la tabla libros, que contiene las tuplas del tipo libro.

Identidad De Los Objetos Y Tipos De Referencia En SQL

Bases de datos a menudo se mantienen mensualmente como un resumen de muchas cosas como compras de negocios, ventas, gastos y a menudo con raciones útiles. Puede solicitarse con columnas para diferentes rúbricas con las figuras de un libro u otra fuente de información pertinente. Muchas veces esta base de datos es necesaria para mantener en forma mensual para que las cifras que se han registrado puedan dar rápidamente una suma o incluso un total al final del año.

Implementación de las características O-R

La orientación a objetos constituye una nueva forma de pensar acerca de problemas empleando modelos que se han organizado tomando como base conceptos del mundo real.
Los modelos orientados a objetos son útiles para comprender problemas, comunicarse con expertos en esa aplicación, modelar empresas, preparar documentación y diseñar programas y bases de datos.
 Las bases de datos orientadas a objetos unen dos tecnologías:
La de las bases de datos y la de los lenguajes orientados a objetos. Los LPOO aportan gran capacidad en la manipulación de datos, pero no implementan el almacenamiento y consulta de grandes volúmenes de datos.
Por el contrario, las bases de datos convencionales aportan un dominio de las técnicas de almacenamiento y consulta de grandes volúmenes de datos, aunque su capacidad de manipulación es limitada.
Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulación de datos de los LPOO con la capacidad de almacenamiento y consulta de los SGBD.
Ø  Crear objetos
Ø  Crear clases para organizar objetos
Ø  Llamar métodos para acceder objetos específicos
Ø  Estructuras jerárquicas de herencia para organizar clases y sub-clases

No hay comentarios:

Publicar un comentario