lunes, 10 de diciembre de 2012

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.