Unidad #7
BASE
DE DATOS ORIENTADA A OBJETOS
7.1 VISIÓN
GENERAL
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 orientación a objetos. Hay que
extender de manera acorde los lenguajes de consulta relacionales, en especial SQL, para que puedan trabajar con
este sistema de tipos más rico. Los sistemas de Bases de Datos Relacionales
basadas en objetos, es decir, los sistemas de Bases de Datos basados en el
modelo Objeto-Relación, ofreces un medio de migración cómodo para los usuarios
de las Bases de Datos Relacionales que deseen usar características Orientadas a
Objetos.
Un
obstáculo es la dificultad de acceso a los datos de la Base de Datos desde los
programas escritos en lenguajes de programación como C++ o JAVA. La mera extensión
de sistema de tipos soportado por las bases de datos no resulta suficiente para
resolver completamente este problema. Tener que expresar el acceso a la Base de
Datos mediante un lenguaje (SQL) que es diferente del lenguaje de programación
también hace más difícil el trabajo del programador.
El termino sistemas de Base 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.
7.2 TIPOS DE
DATOS COMPLEJOS
Las aplicaciones de Bases de Datos
tradicionales consisten en tareas de procedimientos de datos, tales como la
banca y la gestión de nominas. Dichas aplicaciones presentan conceptualmente
tipos de datos simples. Los elementos de datos básicos son registros bastante
pequeños y cuyos campos son atómicos, es decir, no contienen estructuras
adicionales y en los que se cumple la Primera Forma Normal. Como ejemplo, considérense los atributos
multivalorados del Modelo E-R. Esos atributos resultan naturales, por ejemplo,
para la representación de números de teléfono, ya que las personas pueden tener
más de un teléfono. La alternativa de la normalización mediante la creación de
una nueva relación resulta costosa y artificial para este ejemplo.
Con sistemas de tipos complejos se pueden representar
directamente conceptos del Modelo E-R, como los atributos compuestos, los
atributos multivalorados, la generalización y la especialización, sin necesidad
de una compleja traducción al Modelo Relacional.
7.3 TIPOS
ESTRUCTURADOS Y HERENCIA EN 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.
Titulo
|
Array_autores
|
Editor
|
Conjunto_palabras_clave
|
|
|
(nombre,
sucursal)
|
|
Compiladores
Redes
|
[Gómez,
Santos]
[Santos,
Escudero]
|
(McGraw,
Nueva York)
(Oxford,
Londres)
|
{Análisis
sintáctico, análisis}
{internet,
web}
|
Relación
de libros que no están en la 1FN, libros.
Titulo
|
Autor
|
Posición
|
Compiladores
Compiladores
Redes
Redes
|
Gomes
Santos
Santos
Escudero
|
1
2
1
2
|
Autores
Titulo
|
Palabra_Clave
|
Compiladores
Compiladores
Redes
Redes
|
Análisis sintáctico
Análisis
Internet
Web
|
Palabras_Clave
Titulo
|
Nombre_Editor
|
Sucursal_Editor
|
Compiladores
Redes
|
McGraw-Hill
Oxford
|
Nueva York
Londres
|
Libros4
Versión
en la 4FN de la relación libros
7.4 HERENCIA DE TABLAS.
Las tablas de SQL se
corresponden con el concepto de especialización general de E-R. Por ejemplo,
supóngase que se define la tabla personas de la manera siguiente:
create
table personas of persona
A continuación no 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
personas 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 o en profesores pasan a estar también presentes de manera implícita
en personas. Por tanto, si una consulta usa la tabla personas, no solo
encuentra tuplas directamente insertadas en esa tabla, si no también tuplas
insertadas en sus subtablas, es decir, estudiante y profesores.
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 súper tabla, como personas, también borra las tuplas que
se insertaron originalmente en las subtablas (como estudiantes); por ejemplo,
la instrucción:
delete
from personas where P
borrara todas las
tuplas de las tablas personas, así como de sus subtablas estudiantes y
profesores, que satisfagan P.
Teóricamente, la
herencia múltiple es posible con las tablas, igual que con los tipos. Por
ejemplo, se puede crear una tabla del tipo Profesor Ayudante:
create
table profesores_ayudantes
of
Profesor ayudante
under
estudiantes, profesores
Como secuencia de la
declaración, todas las duplas presentes en la tabla profesores_Ayudantes
también se hallan presentes de manera implícita en las tablas profesores y
estudiantes y, a su vez, en la tabla personas. Hay que tener en cuenta, no
obstante, que SQL no soporta la herencia múltiple de tablas.
Los requisitos de
consistencia de la subtablas son:
1.- Cada tupla de la súper
tabla puede corresponderse, como máximo, con una tupla de cada una de sus
subtabla inmediatas.
2.- SQL posee una restricción
adicional que hace que todas las tuplas que se corresponden entre sí deben
proceder de una tupla (acertada en una tabla).
Por ejemplo, si la
primera condición, se podrían tener 2 tuplas de estudiantes (o de profesores)
que correspondieran a la misma persona.
Dado que SQL no
soporta la herencia múltiple, las 2da condición impiden realmente que ninguna
persona sea a la vez profesor y estudiante. Aunque se soportara la herencia múltiple,
surgiría el mismo problema si estuviera ausente la subtabla
profesores_Ayudante.
No obstante hay que
tener en cuenta, que por degradación, SQL prohíbe las situaciones de este tipo
debido a segundo requisito de consistencia. Ya que SQL tampoco soporta la
herencia múltiple, no se puede usar la herencia para modelar una situación en
la que alguien pueda ser a la vez estudiante y profesor.
7.5 TIPOS DE ARREGLOS Y MULTICONJUNTOS EN SQL
Creación y acceso a los valores de los conjuntos
En SQL: 1999 se puede crear un array de
valores de esta manera:
Array [‘Silberschartz’,
‘Korth’, ‘Sudarshan’]
De manera parecida, se puede crear
un multiconjunto de palabras clave de la manera siguiente:
Multiset [‘Silberschartz’,
‘Korth’, ‘Sudarshan’]
Por lo tanto, se puede crear
una tupla definido por la relación libros como:
insert intolibros
values
(‘Compiladores’, array
[‘Gómez’, ‘Santos’’],
New Editor (‘McGraw-Hill’, ‘Nueva York’),
Multiset [‘análisis sintáctico’,
‘análisis’])
Se puede tener acceso a los elementos del
array o actualizarlos especificando el índice del array, por ejemplo,
array_autores.
7.6
IDENTIDAD DE LOS OBJETOS Y TIPOS DE REFERENCIA EN SQL
Los lenguajes orientados a objetos ofrecen
la posibilidad de hacer referencia a objetos. Los atributos de un tipo
dado pueden servir de referencia para los objetos de un tipo concreto. Por
ejemplo, en SQL se puede definir el tipo Departamento con el campo nombre y el
campo director, que es una referencia al tipo Persona, y la tabla departamentos
del tipo
Departamento, de la manera siguiente:
Create type Departamento (nombre varchar (20), director ref
(Persona) scope personas)
create table departamentos of
Departamento
En este caso, la referencia
está restringida a las tuplas de la tabla personas. La restricción
del ámbito de referencia a las tuplas de una tabla es obligatoria en SQL, y
hace que las referencias se comporten como las claves externas.
La tabla a la que hace referencia debe tener un
atributo que guarde el identificador para cada tupla. Ese atributo,
denominado atributo autor-referenciable (self-referential attribute), se
declara añadiendo una cláusula
ref is a la instruction create
table :
create table personas of
Persona
ref is id_persona system
generated
En este caso, id_persona
es el nombre del atributo, no una palabra clave, y la instrucción system generated especifica que la
base de datos genera de manera automática el identificador. Para inicializar el
atributo de referencia hay que obtener el identificador de la tupla a la que se
va a hacer referencia. Se puede conseguir el valor del identificador de
la tupla mediante una consulta. Por tanto, para crear una tupla con el
valor de referencia, primero se puede crear la tupla con una referencia nula y luego
definir la referencia de manera independiente:
insert into departamentos values(‘CS’,
null)
update departamentos set director = (select p.id_persona from persona
as p where
nombre = ‘Martín’) where nombre = ‘CS’
Una alternativa a los identificadores
generados por el sistema es permitir que los usuarios generen los identificadores.
El tipo del atributo auto-referencial debe especificarse como parte de
la definición de tipos de la tabla a la que se hace referencia, y la
definición de la tabla debe especificar que la referencia está
generada por el usuario(user generated): create type Persona (nombre varchar(20), dirección varchar(20)) ref using varchar(20) create
table personas of Persona ref is id_persona user generated
Al insertar tuplas en personas hay
que proporcionar el valor del identificador:
insert into personas(id_persona,
nombre, dirección) values
(‘01284567’, ‘Martín’, ‘Av. del Segura, 23’)
7.7 IMPLEMENTACIÓN DE LAS CARACTERÍSTICAS
O-R
Los sistemas de bases de datos relacionales orientadas a objetos son
básicamente extensiones de los sistemas de bases de datos relacionales
ya existentes. Las modificaciones resultan claramente necesarias en muchos
niveles del sistema de base de datos. Las interfaces de programas de aplicación
como ODBC y JDBC se han extendido para recuperar y almacenar tipos estructurados;
por ejemplo, JDBC ofrece el método getObject () que devuelve un objeto Java
Struct, a partir del cual se pueden extraer los componentes del
tipo estructurado. También es posible asociar clases de Java con tipos
estructurados de SQL, y JDCB puede realizar conversiones entre los
tipos.
No hay comentarios:
Publicar un comentario