Tipos de
datos complejos
Los elementos de datos básicos son registros bastantes
pequeños y cuyos campos son atómicos, es
decir, no contienen estructuras adicionales y en los que se cumple la primera
forma normal.
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.
La posibilidad de usar tipos de datos complejos como los
conjuntos y los arrays puede resultar útil en muchas aplicaciones, pero se debe
usar con cuidado.
Tipos estructurados
y herencia en SQL
Un sistema de tipos extenso a SQL, lo lo que permite los
tipos estructurados y la herencia de tipos.
·
Tipos estructurados
Los tipos estructurados permiten representar directamente los
atributos compuestos de los diagramas E-R. Por ejemplo, de las tablas
anteriores se puede definir el siguiente tipo estructurado para representar el
atributo compuesto nombre con los
atributos componentes nombredepila y apellidos:
create type Nombre as
(nombredepila varchar(20)
apellidos varchar(20)
final
las
especificaciones final y not final están relacionadas con las
subtipificación. Se pueden usar esos tipos para crear atributos compuestos en
las relaciones, con solo declarar que un atributo es de uno de estos tipos. Por
ejemplo, se puede crear la tabla cliente de
la manera siguiente:
create table cliente (
nombreNombre,
direccionDireccion,
fechaDeNacimiento
date)
Se puede tener acceso a los componentes de los atributos compuestos
usando la notación “punto”. Una manera alternativa de definir los atributos
compuestos en SQL, es usar tipos de fila
sin nombre.
Sobre los tipos estructurados se pueden definir métodos. Los métodos se
declaran coo parte de la definición de los tipos de los tipos estructurados.
La clausula for indica el
tipo al que se aplica el método, mientras que la palabra clave instante indica que el método se
ejecuta sobre un ejemplar. La variable
self hace referencia al ejemplar que se invoca el método. 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.
·
Herencia de tipos
Los métodos de los tipos estructurados se heredan por sus subtipos, igual
que los atributos. Sin embargo, cada subtipo puede redefinir el efecto de los métodos
volviendo a declararlos, usando overriding
method en lugar de method en la declaración
del método.
SQL solo soporta la herencia simple, es decir, cada tipo solo se puede
heredar de un único tipo. La herencia múltiple no esta soportado en SQL, el
valor de un tipo estructurado debe tener exactamente un “tipo mas concreto”. Cada
valor debe asociarse, al crearlo, con un tipo concreto, denominado su tipo mas concreto.
Por ejemplo en un a base de datos información adicional sobre las
personas que son estudiantes y sobre las que son profesores. Dado que los
estudiantes y los profesores también son personas se usar la herencia para
definir en SQL los tipos estudiantes y profesor.
create type Estudiante
under Persona
(grado varchar(20)
departamento varchar(20)
create type Profesor
under Persona
(sueldo integer,
departamento varchar(20)
Herencia de tablas
Las subtablas de SQL se corresponden con el concepto de especialización/generalización
de E-R.
Los tipos de las subtablas deben ser subtipos del tipo de la
tabla madre. Todos los atributos presentes también están presentes en las
subtablas. 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, también borra las tuplas que se insertaron originalmente en las
subtablas.
La herencia multiple es posible con las tablas, igual que con
los tipos. Por ejemplo, se puede crear una tabla del tipo ProfesorAyudante:
create table profesores_ayudantes
of ProfesorAyudante
under estudiantes,
profesores
se dice que
las tuplas de una subtabla se corresponden
con las tuplas de la tabla madre si tienen el mismo valor para todos los
atributos heredados. Por tanto, las tuplas correspondientes representan a la
misma entidad.
Los requisitos
de consistencia de las subtablas son:
1. Cada tupla
de la super tabla puede corresponderse, como máximo con una tupla de cada una
de sus subtablas inmediatas.
2. SQL posee
una restricción adicional que hace que todas las tuplas que se correspopnden
entre si deben proceder de una tupla (insertada en una tabla)
Las subtablas
de SQL no se pueden usar para representar las especializaciones que se solapen
de los modelos E-R. Por supuesto, se pueden crear tablas diferentes para
representar las especializaciones o generalizaciones que se solapen sin usar la
herencia. SQL define un nuevo privilegio denominado under, en el cual es necesario para crear subtipos o subtablas bajo
otro tipo o tabla la razón de ser de este privilegio es parecida a la del
privilegio references.
Tipos de arreglo multiconjunto en SQL
SQL soporta dos tipos de conjuntos: arrays y multiconjuntos. Multiconjuntos es un conjunto no ordenado, en el
que cada elemento puede aparecer varias veces. A diferencia de los elementos de
los multiconjuntos, los elementos de los arrays están ordenados
Por ejemplo
se ilustra la manera en que se pueden definir en SQL, estos atributos valorados
con arrays y multiconjuntos.
create type Editor as
(nombre varchar(20)
sucursal vachar(20)
create type Libro as
(titulo vachar (20),
array_autores
vachar (20) array[10],
fecha_publicacion
date,
editor Editor,
conjunto_palabras_clave varchar(20) multiset)
create table
los
atributos multivalorados de los esquemas E-R se pueden asignar en SQL atributos
valorados como multiconjuntos si el orden es importante se pueden usar los
arrays de SQL en lugar de los multiconjuntos.
·
Creación y acceso a los valores de los conjuntos
array[´silberschatz´,´Korth´,
´Sudarshan´]
de manera
parecida se puede crear un multiconjunto de palabras clave de la manera
siguiente:
multiset[´computadora´,
´base de datos´, ´SQL]
·
Consulta de los atributos valorados como conjuntos´
Ahora se
considerara la forma de manejar los atributos que se valoran como conjuntos. Las
expresiones que se valoran como conjuntos pueden aparecer en cualquier parte en
la que pueda aparecer el nombre de una relación, como las clausulas FROM.
Al
desanidar un arrays la consulta anterior pierde información sobre el orden de
los elementos de consulta. Se pueden usar las clausulas UNESTED WITH ORDINALITY
para obtener esta información. La clausulas WITH ORDINALITY genera un atributo
adicional que se registra la posición del elemento en el arrays. Se puede usra
una consulta parecida. Pero sin la clausula WITH ORDINALITY, para generar la relación.
·
Anidamiento y desanidamiento
La transformación
de una relación anidada en una forma con menos atributos de tipos relación (o
sin ellos) se denomina desanidamiento.