Base de Datos SQL
Base de Datos SQL
Los esquemas de las bases de datos orientadas a objetos suelen necesitar gran nmero de clases.
Frecuentemente, sin embargo, varias de las clases son parecidas entre s. Son parecidas porque
denen iguales atributos y mtodos. No son idnticas porque cada clase dene, adems atributos
y /o mtodos que no comparte con las dems. Sera conveniente denir una representacin de los
atributos y mtodos comunes en un solo lugar. Esto puede hacerse creando una nueva clase,
que contendr solo las caractersticas comunes, y redeniendo las clases originales como
especializaciones
de
la
nueva
clase.
Las clases especializadas adquieren una dependencia de herencia con respecto a la clase general,
ya que heredan los atributos y mtodos denidos en esta. Aparece por tanto el concepto
de jerarqua de clases, que es parecido al de especializacin del modelo entidad-relacin.
Las relaciones entre una clase ms especfica, o
clase genrica o superclase, siempre son de especializacin, es decir, si la clase A deriva de una
superclase B, lo que queremos decir es que A es un tipo particular de B.
Como ejemplo de estas relaciones, se podran denir las clases Persona, Empleado y Cajero,
donde un Empleado es un tipo especial de Persona, y Cajero es un tipo especial de Empleado.
Una ventaja importante de la herencia en los sistemas orientados a objetos es el concepto de
posibilidad de sustitucin: cualquier mtodo de una clase dada A puede ser invocado con cualquier
objeto perteneciente a cualquier subclase de A. De igual forma, los atributos denidos en
la superclase son utilizables en cualquiera de sus derivadas. Si la clase Persona dene el atributo
Nombre, las clases Empleado y Cajero tambin las denen implcitamente, por la herencia.
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 direccin:
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 especificacin final indica que
no se puede crear subtipos de nombre, mientras que la especificacin not final de direccin indica
que se pueden crear subtipos de direccin. Ahora se pueden usar estos tipos para crear atributos
compuestos en las relaciones, con slo declarar que un atributo es de uno de estos tipos. Por
ejemplo,
se
puede
crear
una
tabla
cliente
de
la
siguiente
manera:
Se puede tener acceso a los componentes de los atributos compuestos usando la notacin punto;
por ejemplo, nombre.nombre_pila devuelve el componente nombre de pila del atributo nombre. El
acceso al atributo nombre devolvera 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.
Herencia.
La herencia puede hallarse en el nivel de los tipos o en el nivel de las tablas. En primer lugar se
considerar la herencia de los tipos y despus en el nivel de las tablas:
Herencia de tipos: Los tipos derivados heredan los atributos de superclase; los mtodos tambin
se heredan por sus subtipos, al igual que los atributos. Sin embargo, un subtipo puede redefinir el
efecto de un mtodo declarndolo de nuevo, y esto ser lo que se conoce como sobre escritura
(overriding) del mtodo.
Supngase
que
se
tiene
la
siguiente
definicin
de
tipo
para
las
personas:
_______________________________________________________________________________
La primera instruccin define el tipo Editorial, que tiene dos componentes: un nombre y una
sucursal. La segunda instruccin define el tipo Libro, que contiene ttulo, array-autores, que es un
array de autores, una fecha de publicacin, una editorial (de tipo Editorial) y un conjunto de
palabras clave. (La declaracin de lista-palabrasclave como un conjunto usa la sintaxis extendida y
no est soportada en la norma SQL:1999.) Los tipos ilustrados se denomina tipos estructurados en
SQL:1999. Finalmente, se crea la tabla libros que contiene tuplas del tipo Libro. La tabla es similar
a la relacin anidada libros de la Figura 9.1, excepto en que se ha decidido crear un
array de nombres de autores en lugar de un conjunto. El array permite registrar el orden de los
nombres de autores. Los tipos estructurados permiten la representacin directa de atributos
compuestos de los diagramas E-R.
Tambin se pueden usar tipos fila en SQL:1999 para definir atributos compuestos. Por ejemplo, se
podra haber definido un atributo editorial1 como editorial1 row (nombre varchar(20), sucursal
varchar(29)) en lugar de crear un tipo con nombre Editorial.
Por supuesto se pueden crear tablas sin crear un tipo intermedio para la tabla. Por ejemplo, la tabla
libros se podra tambin definir como:
create table libros
(ttulo varchar(20),
array-autores varchar(20) array [10],
fecha-pub date,
editorial Editorial,
lista-palabras-clave setof(varchar(20)))
Con esta declaracin no hay un tipo explcito para las filas de la tabla 2
Un tipo estructurado puede tener mtodos definidos sobre l. Los mtodos se declaran como parte
de la definicin de tipos de un tipo estructurado.
create type Empleado as (
nombre varchar(20),
sueldo integer)
method incrementar(porcentaje integer)
HERENCIA.
La herencia puede hallarse en el nivel de los tipos o en el nivel de las tablas. En primer lugar se
considerar la herencia de los tipos y despus en el nivel de las tablas.
Herencia de tipos:
Supngase que se dispone de la siguiente definicin de tipos para las personas:
create type Persona
(nombre varchar(20),
direccin varchar(20))
Puede que se desee guardar en la base de datos ms informacin sobre las personas que sean
estudiantes y sobre las que sean profesores. Dado que los estudiantes y los profesores tambin
son personas, se puede utilizar la herencia para definir los tipos estudiante y profesor en
SQL:1999:
create type Estudiante
under Persona
(curso varchar(20),
departamento varchar(20))
create type Profesor
under Persona
(sueldo integer,
departamento varchar(20))
Tanto Estudiante como Profesor heredan los atributos de Persona, es decir, nombre y direccin.
Estudiante y Profesor se denominan subtipos de Persona y sta, a su vez, es un supertipo de
Estudiante y de Profesor.
Los mtodos de un tipo estructurado se heredan por sus subtipos, al igual que los atributos. Sin
embargo, un subtipo puede redefinir el efecto de un mtodo declarando de nuevo el mtodo,
usando overriding method en lugar de method en la declaracin del mtodo.
Supngase ahora que se desea guardar la informacin sobre los ayudantes, que son
simultneamente estudiantes y profesores, quizs incluso en departamentos diferentes. Esto se
puede hacer usando la herencia mltiple, que se estudi en el Captulo 8. La norma
Las subtablas pueden guardarse de manera eficiente sin rplica de todos los campos heredados
de una de las dos siguientes formas:
Cada tabla almacena la clave primaria (que se puede heredar de una tabla padre) y los atributos
definidos localmente. Los atributos heredados (aparte de la clave primaria) no hace falta guardarlos
y
pueden obtenerse mediante una reunin con la supertabla basada en la clave primaria.
Cada tabla almacena todos los atributos heredados y definidos localmente. Cuando se inserta
una tupla se almacena slo en la tabla en la que se inserta y su presencia se infiere en cada
supertabla. El acceso a todos los atributos de una tupla es ms rpido, dado que no se requiere
una reunin. Sin embargo, en el caso de que no se considere la segunda restriccin de integridad
es decir, una entidad se puede representar en dos subtablas sin estar presente en una subtabla
comn de ambas esta representacin puede resultar en duplicacin de informacin.
9.3.3. Solapamiento de subtablas.
La herencia de tipos debe utilizarse con precaucin. Una base de datos universitaria puede tener
muchos subtipos de Persona, como Estudiante, Profesor, JugadorDeFtbol,CiudadanoExtranjero,
etctera.
Estudiante puede a su vez tener subtipos como EstudianteDeDiplomatura,
EstudianteDeLicenciatura y EstudianteATiempoParcial. Evidentemente, una persona puede
pertenecer a varias de estas categoras simultneamente.
Como se mencion en el Captulo 8, a veces se denomina papel a cada una de estas categoras.
Para que cada entidad tenga exactamente un tipo ms especfico habra que crear un subtipo para
cada combinacin posible de los supertipos. En el ejemplo anterior habra subtipos como
EstudianteDeDiplomaturaExtranjero,
Estudiante DeLicenciaturaJugadorDeFtbolExtranjero,
etctera. Lamentablemente, se acabara con un nmero enorme de subtipos de Persona.
Un enfoque mejor en el contexto de los sistemas de bases de datos es permitir que un objeto tenga
varios tipos, sin que tenga un tipo ms especfico. Los sistemas relacionales orientados a objetos
pueden modelar esta caracterstica utilizando la herencia en el nivel de las tablas, en vez de en el
nivel de los tipos, y permitiendo que las entidades estn en ms de una tabla simultneamente.
Por ejemplo, supngase de nuevo que se tiene el tipo Persona con los subtipos Estudiante y
Profesor, y la tabla correspondiente persona, con subtablas profesores y estudiantes. Se puede
entonces tener una tupla en profesores y otra en estudiantes que correspondan a la misma tupla
en persona.
No hay necesidad de tener un tipo Ayudante como subtipo de Estudiante y Profesor. No es
necesario crear el tipo Ayudante a menos que se desee almacenar atributos extra o redefinir
mtodos de especficamente para las personas que sean estudiantes y profesores.
Sin embargo, SQL:1999 prohbe esta situacin debido al requisito de consistencia 2 del Apartado
9.3.2. Dado que SQL:1999 no soporta herencia mltiple, no se puede usar la herencia para
modelar una situacin donde una persona pueda ser estudiante y profesor. Por supuesto se
pueden crear tablas separadas para representar la informacin sin usar la herencia. Habra que
aadir restricciones de integridad referencial apropiadas para asegurar que los estudiantes
y profesores estn representados tambin en la tabla persona.
BIBLIOGRAFIA:
FUNDAMENTOS DE BASES DE DATOS
Cuarta edicin
Abraham Silberschatz
Bell Laboratories
Henry F. Korth
Bell Laboratories
S. Sudarshan
Instituto Indio de Tecnologa, Bombay