Sie sind auf Seite 1von 325

r.

I! TV1!
arceta
grupo editorial
Ivn LpezMontalbn
M Jess Castellano Prez
John Ospino Rivas
DAM y
DAW
Bases de Datos
Tcnico
Superior en
Desarrollo de
Aplicaciones Multiplataforma y
Web
arceta
grupoeditorial
Ivn Lpez Montalbn
M3 Jess Castellano Prez
John Ospino Rivas
ISBN: 978-84-9281-291-2
IBERGARCETA PUBLICACIONES, S.L., Madrid 2011
Edicin: 1.
Impresin: 3.
N.de pginas: 328
Formato: 20 x 26 cm
Reservados los derechos para todos los pases de lengua espaola. De conformidad con lo dispuesto en el artculo 270 y siguientes del
cdigo penal vigente, podrn ser castigados con penas de multa y privacin de libertad quienes reprodujeren o plagiaren, en todo o en
parte, una obra literaria, artstica o cientca fijada en cualquier tipo de soporte sin la preceptiva autorizacin. Ninguna parte de esta
publicacin, incluido el diseo de la cubierta, puede ser reproducida, almacenada o trasmitida de ninguna forma, ni por ningn medio,
sea ste electrnico, qumico, mecnico, electro-ptico, grabacin, fotocopia o cualquier otro, sin la previa autorizacin escrita por parte
de la editorial.
Dirjase a CEDRO (Centro Espaol de Derechos Reprogrcos), www.cedro.org, si necesita fotocopiar o escanear algn fragmento de esta
obra.
COPYRIGHT 2011 IBERGARCETA PUBLICACIONES, S.L.
info@garceta.es
Bases de Datos
Ivn Lpez Montalbn, Ma Jess Castellano Prez, John Ospino Rivas
1.edicin, 3.impresin
OI: 0078/2012
ISBN: 978-84-9281-291-2
Deposito Legal: M-33366-2011
Imagen de cubiertazpisotskii fotoIia.com
Impresin:

PRINT HOUSE, marca registrada de Copiar, S. A.
IMPRESO EN ESPAA -PRINTED IN SPAIN
Nota sobre enlaces a pginas web ajenas: Este libro puede incluir referencias a sitios web gestionados por terceros y ajenos a IBERGAR-
CETA PUBLICACIONES, S.L., que se incluyen slo con nalidad informativa. IBERGARCETA PUBLICACIONES, S.L., no asume ningn tipo
de responsabilidad por los daos y perjuicios derivados del uso de los datos personales que pueda hacer un tercero encargado del man-
tenimiento de las pginas web ajenas a IBERGARCETA PUBLICACIONES, S.L., y del funcionamiento, accesibilidad y mantenimiento de
los sitios web no gestionados por IBERGARCETA PUBLICACIONES, S.L., directamente. Las referencias se proporcionan en el estado en
que se encuentran en el momento de publicacin sin garantas, expresas o implcitas, sobre la informacin que se proporcione en ellas.
PRLOGO
Este libro est concebido para formar estudiantes de los ciclos de grado su-
perior DAM (Desarrollo de Aplicaciones Multiplataforma) yDAW (Desarrollo de
Aplicaciones Web). Ms concrementamente, est pensado para cubrir la unidad de
competencia UC0026_3, programar bases de datos relacionales mediante el mdulo
Base de datos comn a ambos ciclos formativos.
Desde nuestra experiencia como administradores de bases de datos en empre-
sas multinacionales, como profesores de educacin secundaria (Informtica) y como
profesores asociados de universidad, hemos compuesto esta herramienta complemen-
taria a las clases del mdulo de formacin profesional e indispensable para lectores
independientes que quieran convertirse en programadores de bases de datos.
El contenido del libro tiene una orientacin puramente prctica, con actividades,
consejos y ejercicios resueltos en Access, MySQL, Oracle y DB2, que facilitan al
profesor del mdulo su completo seguimiento.
El objetivo del libro no es ser una gua de referencia de un solo SGBD, sino la for-
macin de programadores de bases de datos actualizados, verstiles y competentes.
Existe multitud de material disponible para la realizacin de las prcticas pro-
puestas en el blog bbdd-garceta.blogspot . com.
ndice general
1. Los sistemas de almacenamiento de la informacin
1.1. Ficheros

1.1.1. Tipos de cheros y formatos .. . . . . . . . .. . .. . . . . .
1.1.2. Ficheros de texto
1.1.3. Ficheros binarios
Bases de Datos
1.2.1. Conceptos . . . . . . . . . . . .. . .. . . . .. . . . . . . . .
1.2.2. Estructura de una base de datos . . . . .. .. . . .. . . . . .
1.2.3. Usos de las bases de datos
1.2.4. Evolucin y tipos de base de datos
Los Sistemas Gestores de Base de Datos
1.3.1. Concepto de Sistema Gestor de Base de Datos .. .. . .. . .
1.3.2. Funciones de un SGBD . . .. . .. . .. . .. .. . .. . . . .
1.3.3. El lenguaje SQL
1.3.4. Tipos de SGBD . . . . . . . . .. . . . . .. . . . . . . . .. .
Prcticas Resueltas . . .. . . . . . .. . . . . . .. .. . .. . . . . .
Prcticas Propuestas . . . . . .. . .. . . . . . .. . .. .. . . .. .
Resumen . .. . . . . . . . .. . . . .. . . . .. . .. . . .. .. . . .
Test de repaso . .. .. . .. . .. . . . .. . . . .. . . .. .. . . . .
Comprueba tu aprendizaje . .. . . . .. .. . .. . . . .. . .. . . .
1.2.
1.3.
1.4.

1.5.

1.6.

1.7.

1.8.
2. Diseo lgico relacional
2.1. Representacin del problema . . . . .. . . . . . .. . .. . . . . .. .
2.2. El modelo de datos
2.3. Diagramas E/R . . . .. . . . .. .. .. . . . . .. . . .. . . . . ..
2.3.1. Entidad
2.3.2. Ocurrencia de una entidad . . . . . . . .. . . . . . . .. . . .
2.3.3. Relacin . .. . . .. . . . . .. . . . . .. .. . . . . .. . . .
2.3.4. Participacin
2.3.5. Cardinalidad
2.3.6. Cardinalidad de relaciones no binarias
2.3.7. Cardinalidad de las relaciones reexivas . . . . .. . . . . .. .
2.3.8. Atributos yDominios . .. . .. .. .. . .. . . . . .. . . . .
2.3.9. Tipos de atributos
2.3.10. Otras notaciones para. los atributos .. . .. . .. . . . . . ..
2.3.11. Las entidades dbiles . . .. . . . . . .. . . . . . . . . .. . .
2.4. El modelo E/ R ampliado . . . .. . . . . . .. . .. .. .. .. . .. .
Bases de Datos
2.4.1. Generalizacin y Especializacin . . . . . .. . . .. . . . . . .59
2.5. Construccin de un diagrama E/ R . . .. . .. . .. . . . . . . . .. 62
2.6. El modelo relacional . . . .. . . . .. . .. . .. . . . . . . . . .. .64
2.6.1. Las relaciones en el modelo relacional . . . . . . . .. . . .. .65
2.6.2. Otros conceptos del modelo relacional . . .. . .. .. . . . .. 65
2.7. Transformacin de un diagrama E / R al modelo relacional . . . . . . .67
2.8. Normalizacin . . .. . . . .. . . . . . . .. . . .. . .. . . . . . . .73
2.9. Prcticas Resueltas . . . .. . . . . . . .. . . . . . .. . . . . .. .. 77
2.10. Prcticas Propuestas . .. . . .. . . . .. . . . .. . .. . .. . . . .81
2.11. Resumen . . . . .. . .. . .. . . .. . . .. . . .. . .. . . .. . . .88
2.12. Test de repaso . . . . . .. . . . . . . . . . . . . . . . .. . . .. . .. 89
2.13. Comprueba tu aprendizaje .. . . . . . . . . . . . . . . . . . . . . . .90
3. Diseo fsico relacional 91
3.1. Notacin para la sintaxis . . . .. . . .. . . . . .. . .. . . .. . . .92
3.2. Herramientas grcas proporcionadas por los SGBD . . .. . . .. . .93
3.2.1. PhpMyAdmin de MySQL .. . . .. . . . .. . . . .. . . . .93
3.2.2. Oracle Enterprise Manager yGrid Control . .. . . . . .. . .94
3.2.3. DB2 Data Studio . .. . . . . . . . . . . . . . . .. . . . . . .96
3.3. Intrpretes de comandos de los SGBD . .. . . . .. . . . . .. . .. .97
3.3.1. MySQL: El cliente de MySQL-Server .. . . . . . . .. .. . .98
3.3.2. Ejecucin de consultas en MySQL .. . . . . . . . . . .. . . .99
3.3.3. SQL*Plus: El intrprete de comandos de Oracle . . . . . .. . 102
3.3.4. Ejecucin de consultas en SQL*Plus .. .. . .. . . . . . . .103
3.4. El lenguaje de denicin de datos . .. . .. . . . . . . . .. . . . . .104
3.5. Creacin de bases de datos . . . . . .. . .. . . . . . . . . .. . . . .105
3.5.1. Creacin de bases de datos en MySQL . .. . .. . . . . . . .105
3.5.2. Creacin de bases de datos en Oracle . . .. . . .. . . . . .. 107
3.6. Modicacin de una base de datos . . . . . . .. . . .. . .. .. . . .110
3.7. Borrado de bases de datos . .. . .. .. . . .. .. . . . . .. . . . .111
3.8. Creacin de tablas . . .. . . .. . . . . . .. . .. . .. . . .. . . .111
3.8.1. Implementacin de restricciones . . . . . .. . . . . . . . . . .113
3.8.2. Tipos de Datos . . . . . .. . . .. . . . . . . . .. . . . . .. 116
3.8.3. Caractersticas de la creacin de tablas para MySQL . .. . .117
3.8.4. Caractersticas de la creacin de tablas para Oracle . .. . . .118
3.8.5. Consulta de las tablas de una base de datos . . . . . . . . . .119
3.8.6. Consulta de la estructura de una tabla .. . . . .. . . . .. .119
3.9. Modicacin de tablas . . . . .. . . . . . . . . . . . . .. .. . . .. 120
3.10. Borrado de tablas . . . . . .. . . . . . . . . .. . . . . . . . .. . . .122
3.11. Renombrado de tablas . . . . . . . . . . . . . .. . . .. .. . . . . .122
3.12. Prcticas Resueltas . . . . . .. . .. . . . . . . .. . .. . .. . .. .123
VIII
ndice general
3.13. Prcticas Propuestas .. . . . .. . .. . .. . . . .. . .. . . .. . .128
3.14. Resumen . . . . . .. . .. . . . . . .. . . . . . . . . . .. .. . .. .130
3.15. Test de repaso .. . . . . . . . . . . . . . .. . . . .. . . . . . . . . .131
3.16. Comprueba tu aprendizaje . .. . . . . . . . .. . . . . . . . . .. . . 132
. Realizacin de Consultas 133
4.1. El lenguaje DML . .. . . . . . . .. . .. . . . . . .. . . .. . . .. 134
4.2. La sentencia SELECT . . . . . .. . .. . . .. . .. . . . .. . . . .134
4.3. Consultas bsicas .. . .. . .. .. . . . . . .. . .. . . . . . . . . .135
4.4. Filtros . . . . . . . . . .. . . .. . . . . . . . .. . .. . . .. . . . .137
4.4.1. Expresiones para ltros . .. .. . . . .. . . . .. . . . .. . .138
4.4.2. Construccin de ltros . . . . . . . .. . . . . . . .. . . . . .140
4.4.3. Filtros con operador de pertenencia a conjuntos . . . . . .. .141
4.4.4. Filtros con operador de rango . .. . . . . . . .. . . . .. . .142
4.4.5. Filtros con test de valor nulo . .. . . . . . .. . . . .. . .. . 143
4.4.6. Filtros con test de patrn . . . .. . . . . . . . . . . . . . . .143
4.4.7. Filtros por lmite de nmero de registros . . . . . . .. . . . .144
4.5. Ordenacin . .. . . .. . . . . . . .. .. . .. . . .. .. . . . . . .145
4.6. Consultas de resumen . . . . .. . . .. . . . . . . . . . .. . . . . . .147
4.6.1. Filtros de Grupos . . . .. .. . . .. . . . . . . .. .. . . . .151
4.7. Subconsultas . . . . .. . . .. . . .. . .. . . .. . . . . .. . .. .152
4.7.1. Test de Comparacin . . .. . . . .. .. . . . .. . . .. . . .153
4.7.2. Test de pertenencia a conjunto .. . .. . .. . . . .. . . . .154
4.7.3. Test de existencia .. .. . .. .. .. . . . . . .. . . . . . . .154
4.7.4. Test cuanticados ALL y ANY . . . . . . . . . . . . . . . . .156
4.7.5. Subconsultas anidadas . . . .. . . . . .. . . . . . . . . . . .157
4.8. Consultas multitabla . .. . . . . . . . . .. .. . . . . . . . . . . . .158
4.8.1. Consultas multitabla SQL 1 . . . . .. . . . . . .. . . . . . .159
4.8.2. Consultas multitabla SQL 2 . . .. . . . . .. .. . . . . .. .162
4.9. Consultas reexivas . . .. . .. . .. . .. . . . . . . . . . . . . .. .169
4.10. Consultas con tablas derivadas . .. . . . . . . .. . . . . .. .. . .. 170
4.11. Prcticas Resueltas . .. . . . . . . . . . .. .. . . . .. . . . . . . .172
4.12. Prcticas Propuestas . . . . .. .. . . .. . . . . . . . . . . . .. . .176
4.13. Resumen . . . . . . . . .. . . . . .. . .. . . . . .. . . . . . .. . .182
4.14. Test de repaso .. . .. .. . . . . . .. . . . . . . . . . .. .. . .. . 183
4.15. Comprueba tu aprendizaje . . . .. . .. . .. . . . .. . . . .. . . .184
.Tratamiento de los datos 185
5.1. Herramientas grcas para la edicin de los datos . . . . .. . . . . .186
5.1.1. Edicin con phpMyAdmin .. .. . . . .. . . . . .. . .. .. 186
5.1.2. Access como entorno grco para otros gestores . . . .. . .. 187
IX
Bases de Datos
5.2. La sentencia INSERT . . . . . . . .. . . . .. . .. . . . .. . . . . .189
5.3. La sentencia INSERT extendida . . . . .. . . . . . .. .. .. . .. . 191
5.4. INSERT y SELECT .. . . . .. . .. . . . .. . .. .. . .. .. . .191
5.5. La sentencia UPDATE . .. .. . . . .. . . . . . .. . .. . .. . . .192
5.6. La sentencia DELETE .. . . . .. . .. .. . .. . . . . . . . .. . . 193
5.7. La sentencias UPDATE yDELETE con subconsultas . . . .. .. . .193
5.8. Borrado y modicacin de registros con relaciones . . .. .. . . .. .194
5.9. Transacciones . . . . . . . . . . .. . . . . . . . . .. . . . . . .. . .197
5.10. Acceso concurrente a los datos . . . . .. . .. . . . . .. . .. . . . .198
5.10.1. Ejemplo de problemas en el acceso concurrente . . . . . . . . .200
5.11. El acceso a la informacin . . . . . .. . .. . . . . .. . . . . . . . .203
5.12. Las vistas . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . .203
5.13. Los usuarios . . . . . .. .. . . . . . .. .. .. . . . . . . .. . . . .205
5.14. Los privilegios . . . . . . .. .. .. . . . . . . .. . . .. . . . . . . .207
5.14.1. El sistema de privilegios de l\'IySQL .. .. . .. . . . . . . . .208
5.14.2. El sistema de privilegios de Oracle .. . .. . . . .. . . . . .212
5.14.3. El sistema de privilegios de DB2 .. . .. . . . . .. .. . . .. 219
5.15. Prcticas Resueltas . . . . .. . . . . .. . . .. . . . . .. . . . .. .221
5.16. Prcticas Propuestas . .. .. . . . . . . . . . . .. . . . . . . . . . .223
5.17. Resumen . .. . .. .. . . . .. .. .. . .. . . . . . . .. . . .. .. 228
5.18. Test de repaso . . . . . .. . . . . . . . . . .. . . .. .. . .. . . .. 229
5.19. Comprueba tu aprendizaje . .. .. . . .. . . .. . .. . . . . . .. . 230
6. Programacin de bases de datos 231
6.1. Introduccin a la programacin de bases de datos .. .. . . . .. .. 232
6.2. Los lenguajes de programacin de bases de datos . . . . . .. . .. .235
6.3. Tipos de datos, identicadores y variables . . . . .. . . .. . . . . .240
6.4. Operadores y expresiones . .. . . . . . . . . . . . . . .. . .. .. . .243
6.5. Estructuras de control . . .. .. . . . . . . . . . . . .. . . . . . . .245
6.5.1. IF..THEN-ELSIF..THENELSE-END IF . . . . . . . . . . . .245
6.5.2. CASE-WHENTHEN-ELSE-END CASE . .. . . . . .. . . .246
6.5.3. LOOP-EXIT WHEN-END LOOP .. .. . .. . . .. . .. .. 247
6.5.4. WHILE..LOOP-END LOOP . . .. . .. . . .. . .. . . . . .248
6.5.5. FOR..IN..LOOP-END LOOP . . .. . . . .. . . . . . . . . .248
6.6. Gestin de errores . . . . . . .. . . . . . . . . . . .. .. . . .. . .. 251
6.7. Transacciones en scripts . . . . . . . . . . . . . . .. .. . .. . . . .253
6.8. Las secuencias . . . . . .. .. .. . . . .. . . . .. . . . . . . .. . .257
6.9. Prcticas Resueltas . . . .. . . .. . . .. . .. . .. . . . . . . . . .258
6.10. Prcticas Propuestas . . . . . . . .. .. . . . .. . .. . . . . .. . .262
6.11. Resumen . . .. .. . . . . . . .. .. .. . . .. . . . . . . .. . . . . 264
6.12. Test de repaso . . . .. . . . . .. . . . . . . . . . . . . . .. .. . . .265
ndice general
6.13. Comprueba tu aprendizaje .. .. . . . . . .. . .. .. . .. . .. .. 266
.BBDD distribuidas 267
7.1. BBDD y SGBD distribuidos . . . . .. . .. . . . . . . . . . . . .. .268
7.1.1. Componentes de una BBDD distribuida .. .. . .. . . . . .268
7.2. Tcnicas de fragmentacin .. . . . . .. . .. .. . . . . . .. . . . .270
7.3. Consultas distribuidas . .. . . . . . . . . .. . .. . . .. . . . .. .271
7.3.1. DB Links . . . .. . . . . . . .. . .. . . .. . . . . . .. . .271
7.3.2. Ejecucin de consultas distribuidas . .. .. .. . . . . .. . .273
7.4. Transacciones distribuidas . . . . .. . . .. . .. . . . . .. . . . . .275
7.4.1. TWO-PHASE COMMIT . .. . . .. . . . . .. . . . . . . .. 276
7.4.2. Ejemplo de transaccin distribuida . . . . . . . . . . . . . . .277
7.5. Optimizacin de consultas sobre bases de datos distribuidas . . . .. 280
7.5.1. Optimizacin mediante consultas derivadas .. . . . . . .. .. 280
7.5.2. Optimizacin mediante hints . . .. .. . . . . . . . . . .. . .281
7.6. Prcticas Resueltas . .. . . . . .. .. . .. . . . .. . . .. . .. . .283
7.7. Prcticas propuestas .. . . .. . . .. . . .. . . .. . . .. . . . . . 286
7.8. Resumen . . . . . . . . . . . . . . .. . . . . . .. . .. . . . . . . ..289
7.9. Test de repaso . . . . . . .. .. . . . . . . . . . . . . . . . . . . .. .290
7.10. Comprueba tu aprendizaje . . . . . . . .. . .. .. . . . . . . .. .. 291
.BBDD Objeto-Relacionales 293
8.1. Las Bases de datos objetos-relacionales . . .. . .. . . . . . .. . . . 294
8.2. Los atributos multivaluados .. . .. . .. .. . .. . . . .. . . . . .294
8.2.1. Las colecciones . . . . . . . . . . . . . . . . . . . . . . . . . .295
8.2.2. Tablas anidadas .. . . . . .. . . . . . . . .. . . . . . . .. .296
8.2.3. Tipos de Objeto .. .. . . . . .. . . . . . .. . . . .. . . . .298
8.3. Los identicadores de objeto .. . . . .. . .. . . .. . . . .. . . . .300
8.4. Los mtodos . . .. .. . . .. . . . . .. . .. . . . . . . . . . . . . .301
8.5. La herencia . .. . . .. .. .. . . . .. . . .. . . . . . . . . . .. .304
8.6. Operaciones DML .. .. .. . . . .. .. . .. . . . . . . .. . . . . .306
8.7. Las referencias . . . .. . . . . .. . . .. . . . . . . . . . . . . . . . .307
8.8. Prcticas Resueltas . . .. . . . . . . .. . .. .. . .. . . .. .. . . 309
8.9. Prcticas Propuestas .. .. . . .. . . . .. . . .. . . .. . .. .. . 312
8.10. Resumen . . .. .. . . . . .. . .. . . . .. . . .. . . . . .. .. . . 314
8.11. Test de repaso . . . . . . . .. . . . . . . . . .. . . . . . . .. . . . .315
8.12. Comprueba tu aprendizaje .. . . . .. . . .. . . . . . . . . . . .. . 316
XI
CAPTULO 1
Los sistemas de almacenamiento
de la informacin
Objetivos
WAnalizar los sistemas lgicos de
almacenamiento V sus carac-
.tersticas
Contenidos
Identicar los distintos tipos de
Ficheros. Tipos y formatos bases de datos
n? Bases de datos. Conceptos.
. Reconocer la utilidad de un sis-
usos y tipos
tema gestor de base de datos
n? Sistemas gestores de bases de
Describir la funcin de los ele-
datos
mentos de un sistema gestor de
base de datos
Clasicar los sistemas gestores
de bases de datos
Este captulo introduce conceptos sencillos e intuitivos para establecer una
cultura bsica de bases de datos, y poder, de este modo, avanzar a objeti-
vos ms avanzados. E1 estudiante, a modo introductorio, manejar, de forma
muy visual, conceptos tales como tablas yrelaciones. De esta manera, afron-
tar captulos prximos con ms experiencia, yentender yasimilar mejor el
diseo lgico ysico de las bases de datos.
Bases de Datos
1. 1. Ficheros
Un ordenador almacena muchos tipos de informacin, desde datos administrati-
vos, contables o bancarios hasta msica, pelculas, partidas de videojuegos, pginas
webs, etc. Toda esta informacin est almacenada en los dispositivos de almace-
namiento del ordenador, esto es, discos duros, dvds, pen drives, etc. Para poder
organizar la informacin en estos dispositivos, se utilizan los cheros o archivos.
Los cheros son estructuras de informacin que crean los sistemas operativos de los
ordenadores para poder almacenar datos. Suelen tener un nombre y una extensin,
que determina el formato de la informacin que contiene.
1.1.1. Tipos de cheros yformatos
El formato y tipo de chero determina la forma de interpretar la informacin
que contiene, ya que, en denitiva, lo nico que se almacena en un chero es una
ristra de bits (ceros y unos), de forma que es necesaria su interpretacin para dar
sentido a la informacin que almacena. As, por ejemplo, para almacenar una imagen
en un ordenador, se puede usar un chero binario bmp, que almacena un vector de
datos con los colores que tiene cada pixel que forma la imagen. Adems, la imagen
posee una paleta de colores y unas dimensiones, informacin que tambin hay que
almacenar en el chero. Todos estos datos se ordenan segn un formato, y el sistema
operativo, o la utilidad que trate los grcos, debe conocer este formato para poder
extraer los pxeles y mostrarlos por pantalla en la forma y dimensiones correctas. Si
se abre el graco con una utilidad como el bloc de notas, que solo sabe interpretar
texto, el resultado ser ilegible e incomprensible.
<> Actividad 1.1: Busca en tu ordenador un chero con extensin doc (del pro-
cesador de textos Microsoft Word), y brelo con el bloc de notas, pulsando con el
ratn derecho sobre el y seleccionando la opcin Abrir con. Observa que el bloc de
notas no conoce el formato del chero tipo doc, y por tanto, no sabe interpretar el
contenido del chero, cosa que s hace la aplicacin de Microsoft.
Tradicionalmente, los cheros se han clasicado de muchas formas, segn su conte-
nido (texto o binario), segn su organizacin (secuencial, directa, indexada) o segn
su utilidad (maestros, histricos, movimientos).
El contenido de un chero puede ser tratado como texto, o como datos binarios,
es decir, los bits almacenados en un chero pueden ser traducidos por el sistema
operativo a caracteres alfabticos y nmeros que entiende el ser humano, o pueden
Captulo 1. Los sistemas de almacenamiento de Ia informacin
ser tratados como componentes de estructuras de datos ms complejas, como cheros
que almacenan sonido, vdeo, imgenes, etc.
La organizacin de un chero dicta la forma en que se han de acceder a los datos,
as, los datos de un chero con organizacin secuencial, estn dispuestos siguiendo
una secuencia ordenada, es decir, unos detrs de otros. Se caracterizan por tener
que recorrer todos los datos anteriores para llegar a uno en concreto. Los cheros
de organizacin directa, permiten acceder a un dato en concreto sin necesidad de
acceder a todos los anteriores. Finalmente, los de organizacin indexada acceden
a los datos consultando un ndice, es decir, una estructura de datos que permite
acceder a la informacin rpidamente, simulando la forma en que el ndice de un
libro facilita el acceso a sus contenidos. Existen tambin variantes de las anteriores
que mezclan las mejores caractersticas de cada una de ellas.
Por otro lado, la utilidad de un chero indica qu uso se va a hacer de l, por
ejemplo, puede contener datos fundamentales para una organizacin, como los datos
de los clientes, que se almacenan en un chero principal llamada maestro. Si hay
variaciones (altas, modicaciones o bajas de clientes) en los cheros maestros, se
almacenan en los llamados cheros de movimientos que posteriormente se enfrentan
con los maestros para incorporar las modicaciones. Finalmente, cuando existen
datos que ya no son necesarios para su proceso diario pasan a formar parte de los
cheros histricos.
Hoy en da, estas dos ltimas clasicaciones han quedado en desuso. Por ejemplo,
desde la aparicin de las bases de datos modernas, ya no se clasican segn su
utilidad u organizacin.
Actualmente un sistema opera.tivo trata. un chero desde dos puntos de vista:
1. Segn su contenido (texto o datos binarios)
2. Segn su tipo (imgenes, ejecutables, clips de videos, etc.)
1.1.2. Ficheros de texto
Los cheros de texto suelen llamarse tambin cheros planos o cheros ascii. El
vocablo ascii es un acrnimo de American Standard Code for Information Inter-
change. Es un estndar que asigna un valor numrico a cada carcter, con lo que se
pueden representar los documentos llamados de Texto Plano, es decir, los que son
directamente legibles por seres humanos.
Bases de Datos
La asignacin de valores numricos a caracteres viene dada por la famosa tabla
de cdigos ascii, que es la ms extendida, aunque existen otras. Se caracteriza por
utilizar 1 byte para la representacin de cada carcter. Con x bits se pueden generar
2combinaciones distintas de caracteres, y como 1 byte =8 bits, existen 28 =256
caracteres en la tabla de cdigos ascii, numerados del 0 al 255.
<> Actividad 1.22 Conctate a Internet, y busca una tabla de cdigos ascii de 8
bits. Observa las siguientes caractersticas:
- Los 32 primeros caracteres, se llaman caracteres no imprimibles y se utilizaban
tradicionalmente para el control de transmisiones.
ILa distancia entre maysculas y minsculas es exactamente 32 caracteres.
n Hay caracteres que son numricos, y cuyo valor ascii es el resultado de sumarle
48. Por ejemplo, 6+48=54. 54 es el cdigo ascii del carcter 6.
Algunos alfabetos, como el katakana japons utilizan ms de 256 caracteres. En
estos casos, se requieren las tablas de caracteres unicode, que reservan dos bytes para
cada carcter.
o Actividad 1.32 Conctate a http://mm.unicode.org/charts/ y descrgate
las tablas de cdigos Latin (alfabeto latino) y Katakana (alfabeto japons). Observa
las siguientes curiosidades:
n La tabla de cdigos Latin ,es exactamente idntica a la tabla de cdigos ascii
de 8 bits, solo que los bits del primer byte unicode, estn todos a 0.
ILa tablas de cdigos Latin y Katakanatienen mltiples extensiones, como
Katakana Phonetic Extensions o Latin Extended Additional.
Los cheros de texto, aunque no necesitan un formato para. ser interpretado,
suelen tener extensiones para conocer qu tipo de texto se halla dentro del chero,
por ejemplo:
- Ficheros de conguracin: Son cheros cuyo contenido es texto sobre con-
guraciones del sistema operativo o de alguna aplicacin. Estos pueden tener
extensin .ini, .inf ,.conf
Captulo 1. Los sistemas de almacenamiento de la informacin
IFicheros de cdigo fuente: Su contenido es texto con programas informticos.
Ejemplos: sql, .c, .java
n Ficheros de pginas web: Las pginas webs son cheros de texto con hipertexto
que interpreta el navegador. html, php, .css, .xml
n Formatos enriquecidos: Son textos que contienen cdigos de control para ofre-
cer una visin del texto ms elegante: .rtf, .ps ,.tex
Sabas que .. . 7XML es un lenguaje estndar para el intercambio de
datos entre aplicaciones informticas. Se estn desarrollando actualmente las
llamadas bases de datos nativas XML. cuyo foco principal es el aI1nacenamien-
to de documentos de texto con cdigo en XML. y no las relaciones entre la
informacin, como sucede con las bases de datos relacionales que se estudian en
el presente libro. Por ejemplo, DB2 incorpora dentro de su motor una nueva ca-
racterstica que potencia el XML: XQuery, esto es, un lenguaje innovador para
hacer consultas directamente sobre documentos XML guardados directamente
en la base de datos.
1.1.3. Ficheros binarios
Los cheros binarios son todos los que no son de texto, y requieren un formato
para ser interpretado. A continuacin se muestran algunos tipos de formatos de
cheros binarios:
IDe imagen: jpg, gif, .tiff, .bmp, .wmf, .png, .pcx; entre muchos otros
n De vdeo: .mpg, .mov, .avi, .qt
IComprimidos o empaquetados: .zip. .Z, .gz, tar, .lhz
IEjecutables o compilados: exe. .com, .cgi, .0, .a
IProcesadores de textos: .doc, .odt
lEl hipertexto es una forma de escritura no secuencial, con bifurcaciones, que permite que el
lector elija qu secuencia seguir yque es presentado en una pantalla interactiva para facilitar la
navegacin.
Bases de Datos
Generalmente los cheros que componen una base de datos son de tipo binario,
puesto que la informacin que hay almacenada en ellos debe tener una estructura
lgica y organizada para que las aplicaciones puedan acceder a ella de manera univer-
sal, esto es, siguiendo un estndar. Esta estructura. lgica y organizada, generalmente
es muy difcil de expresar mediante cheros de texto, por tanto, la informacin de
una base de datos se suele guardar en uno o varios cheros:
u El software de gestin de base de datos Oracle guarda la informacin en mlti-
ples tipos de cheros, llamados datales, temples, logles, etc.
IUn tipo de tablas del gestor l\iI;vSQL guarda su informacin en 3 cheros de
datos binarios, con extensin frm, myd y myi.
n Access guarda toda la informacin de una base de datos con extensin mdb.
<> Actividad 1.4: La siguiente imagen es una captura de una carpeta en el sistema
operativo Windows 7. Indica qu tipo de chero es cada uno de ellos y qu contiene.
HcmL-re Fecha de nmzhwcecicn Tnpc Tamahc
u
112i l E Battlestar Galactica -lxLavi 3-3 22v]? "LJ hp de dee 6&#39;
-4

11

a



u

r

J

"n

1

.

o_.
__ (omojnstalantxt
i- DSCN0776JPG
5&#39; eclipseexe
l 1
v. q
.
tn
1a
If L
__ eclipseini
c:

t.

a

VI
J -
.-- img_xp_sp3.iso
_lcencia_windows.bct
,4

(r

i >

Tn

,_.

u; u;
U} (LI u ul
in
Lu
Qmicrochipilv
i] noticehtml
a part|ogic-0.69-iso.zip
__ prc3.2.sq|
tema 1.pdf
-
(n su
4.634 l EJ
\

U

II.
"nzzet Cc. "L4 l. v
1.2. Bases de Datos
Una Base de Datos es una coleccin de informacin perteneciente a un mismo
contexto (o problema), que est almacenada de forma organizada en cheros.
Una base de datos est organizada mediante tablas 2, que almacenan informacin
concerniente a algn objeto o suceso. Estas tablas se relacionan formando vnculos o
relaciones 3entre ellas, que ayudan a mantener la informacin de los diversos objetos
en las bases de datos relacionales se llaman relaciones base
en las bases de datos relacionales se llaman relaciones derivadas
Captulo 1. Los sistemas de almacenamiento de la informacin
de forma ordenada y coherente (sin contradicciones). Cada una de estas tablas es
una estructura que se parece a las hojas de clculo, pues est dispuesta mediante
las y columnas. De este modo, cada la almacena un registro con tantos campos
como columnas tenga la tabla. Por ejemplo, se podra tener una tabla de Empleados,
donde cada la o registro es un empleado de la empresa y cada columna o campo
representa un trozo discreto de informacin sobre cada empleado, por ejemplo el
nombre o el nmero de telfono.
jmpliidv - - Y
CodngoEmple v Nombre v Apellidol v Apellndoz v Extension v Email v codugoo :
1 Marcos Magaa Perez 3897 marcos@jardnneria.es TAL-ES 4
2Ruben Lpez Martinez 2899 rlopez@jardmeria.es TAL-ES
3Alberto Soria Carrasco 2837 asoria@}ardineria.es TAL-ES _
4Maria Sols Jerez 2847 msolis@jardineria.es TAL-ES E
5 Felipe Rosas Marquez 2844 frosas@jardineria.es TAL-ES l
6 Juan Carlos 0m: Serrano 2845 cortiz@jardnnerua.es TAL-ES l
7Carlos Soria Jimenez 2444 csorxa@jardmeria.es MAD-ES x
8 Mariano Lpez Murcia 2442 mlopezcenardmenaes rvlAD-ES
9 Lucio Campoamor Mann 2442 lcampoamorczjardineriaes MAD-ES
10 Hilario Rodriguez Huertas 2444 hrodrlguez@jardineria.es MAD-ES
11 Emmanuel Magaa Perez 2518 manu@ardinena.es BCN-ES
12 Jos Manuel Martinez De la Osa 2519 mmanhotmarles BCN-ES
13 David Dalma Aceituno 2519 dpalma@jardneria.es BCN-ES
14 Oscar Palma Aceituno 7519 opalma@jardineria.es BCN-ES
15 Francois Fugnon 9981 ffignonQgardeningxom PAR-FR
16 Lionel Narvaez 9982 lnarvaez@gardening.com PAR-FR
17 Laurent Serra 9982 lserra@gardening.com PAR-FR
18 Michael Bolton 7454 mboltoncagardeningmom SFC-USA
___ ___19 W_a|_e_r_ Santuag Sanchez Lopez 7454 wssanchez@gardenlng.com SFC-USA v
Registro: H 446231 P N P -Buscar 4 ml I
Figura 1.1: Ejemplo de tabla en Microsoft Access.
1.2.1. Conceptos
Uno de los grandes problemas al que se enfrentan los informticos cuando comien-
zan su aprendizaje, es el gran nmero de trminos desconocidos que debe asimilar,
incluyendo el enorme nmero de sinnimos y siglas que se utilizan para nombrar la
misma cosa. Tratando, a modo de resumen, de aclarar algunos de lo componentes
que se pueden encontrar en una base de datos, y que se vern en prximos captulos,
se denen los siguientes conceptos:
Dato: El dato es un trozo de informacin concreta sobre algn concepto o suceso.
Por ejemplo, 1996 es un nmero que representa un ao de nacimiento de una
persona. Los datos se caracterizan por pertenecer a un tipo.
Tipo de Dato: El tipo de dato indica la naturaleza del campo. As, se puede te-
ner datos numricos, que son aquellos con los que se pueden realizar clculos
aritmticos (sumas, restas, multiplicaciones. . .) y los datos alfanumricos, que
7
Bases de Datos
son los que contienen caracteres alfabticos y dgitos numricos. Estos datos al-
fanumricos ynumricos se pueden combinar para obtener tipos de datos ms
elaborados. Por ejemplo, el tipo de dato Fecha contiene tres datos numricos,
representando el da, el mes y el ao de esa fecha.
Campo: Un campo es un identicador para toda una familia de datos. Cada campo
pertenece a un tipo de datos. Por ejemplo, el campo F echaNacimiento repre-
senta las fechas de nacimiento de las personas que hay en la tabla. Este campo
pertenece al tipo de dato Fecha. Al campo tambin se le llama columna.
Registro: Es una recoleccin de datos referentes a un mismo concepto o suceso.
Por ejemplo, los datos de una persona pueden ser su NIF, ao de nacimiento,
su nombre, su direccin, etc. A los registros tambin se les llama tuplas o las.
Campo Clave: Es un campo especial que identica de forma nica a cada registro.
As, el NIF es nico para cada persona, por tanto es campo clave. Hay varios
tipos de campos clave como se explicar en la. seccin 2.6.2.
Tabla: Es un conjunto de registros bajo un mismo nombre que representa el con-
junto de todos ellos. Por ejemplo, todos los clientes de una base de datos se
almacenan en una tabla cuyo nombre es Clientes.
Consulta: Es una instruccin para hacer peticiones a una base de datos. Puede ser
una bsqueda simple de un registro especico o una solicitud para seleccionar
todos los registros que satisfagan un conjunto de criterios. Aunque en cas-
tellano, consulta tiene un signicado de extraccin de informacin, en ingls
query, una consulta es una peticin, por tanto, adems de las consultas de
bsqueda de informacin, que devuelven los campos y registros solicitados,
hay consultas (peticiones) de eliminacin o insercin de registros, de actuali-
zacin de registros, cuya ejecucin altera los valores de los mismos.
ndice: Es una estructura que almacena los campos clave de una tabla, orga-
nizndolos para hacer ms fcil encontrar y ordenar los registros de esa tabla.
El ndice tiene un funcionamiento similar al ndice de un libro, guardando pa-
rejas de elementos: el elemento que se desea indexar y su posicin en la base
de datos. Para buscar un elemento que est indexado, solo hay que buscar en
el ndice de dicho elemento para, una vez encontrado, devolver el registro que
se encuentre en la posicin marcada por el ndice.
Vista: Es una transformacin que se hace a una o ms tablas para obtener una
nueva tabla. Esta nueva tabla es una tabla virtual, es decir, no est almacenada
en los dispositivos de almacenamiento del ordenador, aunque s se almacena
su denicin.
Captulo 1. Los sistemas de almacenamiento de la informacin
Informe: Es un listado ordenado de los campos y registros seleccionados en un
formato fcil de leer. Generalmente se usan como peticiones expresas de un
tipo de informacin por parte de un usuario. Por ejemplo, un informe de las
facturas impagadas del mes de enero ordenado por nombre de cliente.
Guiones: o scripts. Son un conjunto de instrucciones, que ejecutadas de forma
ordenada, realizan operaciones avanzadas de mantenimiento de los datos al-
macenados en la base de datos.
Procedimientos: Son un tipo especial de script que est almacenado en la base
de datos y que forma parte de su esquema.
1.2.2. Estructura de una base de datos
Una base de datos almacena los datos a travs de un esquema. El esquema
es la denicin de la estructura donde se almacenan los datos, contiene todo lo
necesario para organizar la informacin mediante tablas, registros (las) y campos
(columnas). Tambin contiene otros objetos necesarios para el tratamiento de los
datos (procedimientos, vistas, ndices, etc.) y que se estudiarn en este libro. Al
esquema tambin se le suele llamar metainformacin, es decir, informacin sobre la
informacin o metadatos.
mysq1> select table_schema, tab1e_name, tab1e_rows
-> from information_schema.tables
-> where tab1e_schema=jardineria;
+ ------------ --+ -------------- --+ ---------- --+
I tab1e_schema I tab1e_name I tab1e_rows
jardineria Clientes
jardineria Deta11ePedidos
jardineria Empleados
jardineria GamasProductos
jardineria Oficinas
jardineria Pagos
jardineria Pedidos
jardineria Productos
9 rows in set (0,01 sec)
Figura 1.2: Consulta de un esquema de una base de datos en MySQL.
Los gestores de bases de datos modernos Oracle, MySQL y DB2, entre otros,
almacenan el esquema de la base de datos en tablas, de tal manera que el propio
9
Bases de Datos
esquema de la base de datos se puede tratar como si fueran datos comunes de le.
base de datos. Vase gura 1.2.
1.2.3. Usos de las bases de datos
Las bases de datos son ubcuas, estn en Cualquier tipo de sistema informtico.
a continuacin se exponen solo algunos ejemplos de sus usos ms frecuentes:
IBases de datos Administrativas: Cualquier empresa necesita registrar y rela-
cionar sus clientes, pedidos, facturas, productos, etc.
IBases de datos Contables: Tambin es necesario gestionar los pagos, balances
de prdidas y ganancias, patrimonio, declaraciones de hacienda. . .
IBases de datos para motores de bsquedas: Por ejemplo Google o Altavista.
tienen una base de da.tos gigantesca donde almacenan informacin sobre todos
los documentos de Internet. Posteriormente millones de usuarios buscan en la
base de datos de estos motores.
- Cientcas: Recoleccin de datos climticos y medioambientales, qumicos.
genmicos, geolgicos. . .
IConguraciones: Almacenan datos de conguracin de un sistema informtico.
como por ejemplo, el registro de windows.
n Bibliotecas: Almacenan informacin bibliogrca, por ejemplo, la famosa tien-
da virtual amazon o la. biblioteca de un instituto.
ICensos: Guardan informacin demogrca de pueblos, ciudades ypaises.
IVirus: Los antivirus guardan informacin sobre todos los potenciales software
maliciosos.
IOtros muchos usos: Militares, videojuegos, deportes, etc.
Sabas que . . . 7La &#39;WDCC (World Data Climate Center), centro mun-
dial para datos del clima, es la base de datos ms grande del mundo. Almacena
alrededor de 6 petabytes de informacin, esto es 6144 Terabytes de informa-
cin sobre clima, predicciones y simulaciones. La base de datos de Google
est situada como la 4a ms grande del mundo (Abril-QOIO).
10
Capitulo 1. Los sistemas de almacenamiento de la informacin
<> Actividad 1.5: Busca en Internet las 10 bases de datos ms grandes del mundo.
Anota su nombre y su tamao, y, en una hoja de clculo, genera un grco que
muestre la comparativa del tamao de estas bases de datos.
El consejo del buen administrador. . .
Siempre hay que hacer copias de seguridad regularmente ya ser posible, de
varios tipos. Cuando una base de datos tiene un tamao brutalmente grande
como las del WDCC o Google, hacer copias de seguridad se convierte en al-
go prcticamente imposible, puesto que se tardarian semanas en realizarlas,
y, adems, es complicado encontrar dispositivos capaces de almacenar estas
copias, por lo que en lugar de hacer copias de seguridad, se recurre a sistemas
tolerantes a fallos, que logran que la probabilidad de perder un solo dato, sea
prcticamente nula.
1.2.4. Evolucin ytipos de base de datos
La clasicacin de las bases de datos en tipos, est. ligada a su evolucin histrica.
Segn ha ido avanzando la tecnologa, las bases de datos han mejorado cambiando
la forma de representar y extraer la informacin.
De esta manera, se presenta la evolucin sufrida por las bases de datos desde las
pocas prehistricas de la informtica hasta la actualidad:
En la dcada de 1950 se inventan las cintas magnticas, que solo podan ser
ledas de forma secuencial y ordenadamente. Estas cintas, almacenaban cheros con
registros que se procesaban secuencialmente junto con cheros de movimientos para
generar nuevos cheros actualizados. Estos sistemas se conocen como aplicaciones
basadas en sistemas de cheros y constituyen la generacin cero de las bases de
datos, pues ni siquiera entonces exista el concepto de bases de datos.
En la dcada de 1960 se generaliza el uso de discos magnticos, cuya caracterstica
principal es que se poda acceder de forma directa a cualquier parte de los cheros,
sin tener que acceder a todos los datos anteriores. Con esta tecnologa aparecen las
bases de datos jerrquicas y en red, que aprovechan la capacidad de acceso directo a
la informacin de los discos magnticos para estructurar la informacin en forma de
11
Bases de Datos
listas enlazadas y rboles de informacin. La losofa de las bases de datos en red es
que un concepto principal o padre puede tener numerosas relaciones con conceptos
secundarios o hijos. Las bases de datos jerrquicas, evolucionan para admitir varios
padres para un concepto hijo.
Sabas que . . . 7En octubre de 1969 se concibe el primer modelo de
base de datos en red. conocido como CODASYL (Conference on Data Systems
Language), que posteriormente IBM rena. y mejora mediante el modelo IMS
(Information Management System) para el programa Apollo de la NASA.
Edgar Frank Codd, cientco informtico ingls de IBM, publica en 1970 en un
artculo Un modelo relacional de datos para grandes bancos de datos compartidos
(A Relational Model of Data for Large Shared Data Banks), donde deni el modelo
relacional, basado en la lgica de predicados y la teora de conjuntos. Nacieron, de
esta forma, las bases de datos relacionales, o segunda generacin de bases de datos.
Larry Ellison, fundador de Oracle. se inspir en este artculo para desarrollar el
famoso motor de base de datos, que comenz como un proyecto para la CIA (Central
Intelligence Agency) americana. La potente base matemtica de este modelo, es el
gran secreto de su xito. Hoy en da, el modelo relacional de Codd, pese a tener
muchas alternativas, sigue siendo el ms utilizado a todos los niveles.
Sabas que . . . 7Las leyes de Codd son un conjunto de 13 reglas (de la
regla Oa la regla 12) cuya nalidad es establecer las caractersticas que debe
tener una base de datos relacional. Actualmente. todos los gestores de bases
de datos implementan estas reglas. Puedes buscar en Internet estas reglas y
leerlas con detenimiento.
<> Actividad 1.6: Busca en Internet la biografa de los siguientes personajes, y
comenta su principal contribucin a la evolucin de las bases de datos:
J Edgar Frank Codd J Bill Gates
J Larry Ellison J Michael Monty Widenius
J Roger Kent Summit
12
Captulo 1. Los sistemas de almacenamiento de la informacin
En la dcada de 1980 IBM lanza su motor de bases de datos DB2, para la pla-
taforma MVS. Unos aos despus, IBM crea el SQL (Structured Query Language),
un potente lenguage de consultas para manipular informacin de bases de datos
relacionales.
A medidados de 1990, IBM lanza una versin de DB2 que es capaz de dividir una
base de datos enorme en varios servidores comunicados por lneas de gran velocidad,
crendose de este modo las bases de datos paralelas. Aesta versin se le llam DB2
Parallel Edition, que ahora, ha evolucionado hasta el DBZ Data Partition Feature,
nico SGBD de este tipo en sistemas distribuidos.
A nales de 1990 IBM y Oracle incorporan a sus bases de datos la capacidad de
manipular objetos, creando as, las bases de datos orientadas a objetos. Estas bases
de datos orientadas a objetos se basan en la existencia de objetos persistentes que
se almacenan para su procesamiento mediante programas orientados a objetos. En
lugar de la losofa de almacenar relaciones y tablas, se almacenan colecciones de
objetos que, adems de informacin, tienen comportamientos (instrucciones sobre
cmo procesar los datos).
La aparicin de Internet y el comienzo de la era de la informacin, crean nuevos
requirimientos para bases de datos. La cantidad de informacin comienza a crecer en
proporciones desconocidas hasta el momento. De esta forma, se crean las bases de da-
tos distribuidas, que consisten en multiplicar el nmero de ordenadores que controlan
una base de datos (llamados nodos), intercambindose informacin y actualizaciones
a travs de la red. Este increible aumento de datos a almacenar, organizados muchas
veces en datos estadsticos recopilados con el trascurso de los aos, hizo necesaria
la aparicin de un software llamado Software de ayuda a la decisin. Este software
avanzado trata de dar respuestas concretas examinando mltiples datos estadsticos
que se han recopilado a lo largo del tiempo en bases de datos multidimensionales,
formando lo que se denominan cubos de informacin.
Ventas del 2do 172010
Espaa, Huelva
Jamn de Bellota Q4
empo
z/broducto
Provincia &#39;
Figura 1.3: Ejemplo de cubo en una base de datos multidimensional.
13
Bases de Datos
Tambin, a lo largo de la corta historia de la informtica, han surgido otros tipos
de bases de datos que se enumeran a continuacin:
- Bases de datos espaciales o geogrcas: Son bases de datos que almacenan
mapas vsmbolos que representan supercies geogrcas. Google Earth es
u
una aplicacin que lanza consultas a bases de datos de este tipo.
n Bases de datos documentales: Permiten la indexacin de texto para poder
realizar bsquedas complejas en textos de gran longitud.
IBases de datos deductivas: Es un sistema de bases de datos que almacena
hechos y que permite, a travs de procedimientos de inferencia, extraer nuevos
hechos. Se basan en la lgica, por ello tambin se suelen llamar bases de datos
lgicas.
Base de datos Datos almacenados
Sistemas de cheros Datos en cheros
Jerrquicas Estructuras de datos (listas y rboles) varios cheros
En red Estructuras de datos (rboles y grafos)
Relacionales Teora de conjuntos y relaciones
Orientadas a objetos Objetos complejos con comportamiento
Geogrcas Puntos, Lneas y Polgonos una o varias BBDD
Deductivas Hechos y Reglas
Documentales Documentos
Distribuidas Mltiples varias BBDD en
Multidimensionales Cubos varios ordenadores
Cuadro 1.1: Resumen de los tipos de bases de datos.
1.3. Los Sistemas Gestores de Base de Datos
1.3.1. Concepto de Sistema Gestor de Base de Datos
Se dene un Sistema Gestor de Base de Datos, en adelante SGBD, como el
conjunto de herramientas que facilitan la. consulta, uso y actualizacin de una base
de datos. Un ejemplo de software Gestor de Base de Datos es Oracle 11g, que
incorpora un conjunto de herramientas software que son capaces de estructurar en
mltiples discos duros los cheros de una base de datos, permitiendo el acceso a sus
datos tanto a partir de herramientas grcas como a partir de potentes lenguajes de
programacin (PL-SQL, php, c++. . .).
14
Captulo 1. Los sistemas de almacenamiento de 1a informacin
1.3.2. Funciones de un SGBD
Los SGBD del mercado cumplen con casi todas funciones que a continuacin se
enumeran:
1. Permiten a los usuarios almacenar datos, acceder a ellos y actualizarlos de
forma sencilla y con un gran rendimiento, ocultando la complejidad y las ca-
ractersticas fsicas de los dispositivos de almacenamiento.
2. Garantizan la integridad de los datos, respetando las reglas y restricciones que
dicte el programador de la base de datos. Es decir, no permiten operaciones
que dejen cierto conjunto de datos incompletos o incorrectos.
3. Integran, junto con el sistema operativo, un sistema de seguridad que garantiza
el acceso a la informacin exclusivamente a aquellos usuarios que dispongan
de autorizacin.
4. Proporcionan un diccionario de metadatos, que contiene el esquema de la base
de datos, es decir, cmo estn estructurados los datos en tablas, registros y
campos, las relaciones entre los datos, usuarios, permisos, etc. Este diccionario
de datos debe ser tambin accesible de la misma forma sencilla que es posible
acceder al resto de datos.
5. Permiten el uso de transacciones, garantizan que todas las operaciones de la
transaccin se realicen correctamente, y en caso de alguna incidencia, deshacen
los cambios sin ningn tipo de complicacin adicional.
6. Ofrecen, mediante completas herramientas, estadsticas sobre el uso del gestor,
registrando operaciones efectuadas, consultas solicitas, operaciones fallidas y
cualquier tipo de incidencia. Es posible de este modo, monitorizar el uso de la
base de datos, y permiten analizar hipotticos malfuncionamientos.
7. Permiten la concurrencia, es decir, varios usuarios trabajando sobre un mismo
conjunto de datos. Adems, proporcionan mecanismos que permiten arbitrar
operaciones conflictivas en el acceso o modicacin de un dato al mismo tiempo
por parte de varios usuarios.
8. Independizan los datos de la aplicacin o usuario que est utilizndolos, ha-
ciendo ms fcil su migracin a otras plataformas.
9. Ofrecen conectividad con el exterior. De esta manera, se puede replicar y
distribuir bases de datos. Adems, todos los SGBD incorporan herramientas
15
Bases de Datos
estndar de conectividad. El protocolo ODBC4 est muy extendido como forma
de comunicacin entre bases de datos y aplicaciones externas.
10. Incorporan herramientas para la salvaguarda y restauracin de la informacin
en caso de desastre. Algunos gestores, tienen sosticados mecanismos para
poder establecer el estado de una base de datos en cualquier punto anterior en
el tiempo. Adems, deben ofrecer sencillas herramientas para la importacin
y exporta.cin automtica de la informacin.
<> Actividad 1.72 Busca en Internet las leyes de Codd para el funcionamiento de
sistemas gestores de bases de datos relaciones y establece una relacin entre cada
una de las leyes de Codd y las funciones que proporcionan los SGBD actuales.
1.3.3. El lenguaje SQL
La principal herramienta de un gestor de base de datos es la interfaz de progra-
macin con el usuario. Este interfaz consiste en un lenguaje muy sencillo mediante
el cul el usuario realiza preguntas al servidor, contestando este a las demandas del
usuario. Este lenguaje comnmente se denomina SQL, Structured Query Language,
est estandarizado por la 1805, es decir, todas las bases de datos que soporten SQL
deben tener la misma sintaxis a la hora de aplicar el lenguaje. Se divide en 4 su-
blenguajes, el total de todos ellos permite al SGBD cumplir con las funcionalidades
requeridas por CODD:
- Lenguaje DML: o lenguaje de manipulacin de datos (Data Manipulation
Language). Este lenguaje permite con 4 sentencias sencillas seleccionar deter-
minados datos (SELECT), insertar datos (INSERT), modicarlos (UPDATE)
o incluso borrarlos (DELETE). En captulos posteriores se desarrollar la sin-
taxis de cada una de estas sentencias.
ILenguaje DDL: o lenguaje de denicin de datos (Data Denition Langua-
ge). Este lenguaje permite crear toda la estructura de una base de datos ( desde
tablas hasta usuarios). Sus clusulas son del tipo DROP (Eliminar objetos) y
CREATE (Crear objetos). En captulos posteriores se detallar la sintaxis de
cada una de estas sentencias.
ODBC signica Open Database Connectivity, y es un estndar de acceso a datos desarrollado
por Microsoft
5180 es el acrnimo de International Organization for Standardarization
16
Captulo 1. Los sistemas de almacenamiento de la informacin
- Lenguaje DCL: o lenguaje de control de datos (Data Control Language).
Incluye comandos (GRANT y REVOKE) que permiten al administrador ges-
tionar el acceso a los datos contenidos en la base de datos.
- Lenguaje TCL: o lenguaje de control de transacciones. El propsito de este
lengua.je es permitir ejecutar varios comandos de forma simultnea como si fue-
ra un comando atmico o indivisible. Si es posible ejecutar todos los comandos,
se aplica la transaccin (COMMIT), y si, en algn paso de la ejecucin, sucede
algo inesperado, se pueden deshacer todos los pasos dados (ROLLBACK).
<> Actividad 1.82 Busca en la Wikipedia el trmino SQL e indica las revisiones
que ha sufrido el lenguaje a lo largo del tiempo. A continuacin, busca el signicado
del trmino SQL Injection e indica por qu un administrador debe protegerse frente
a l.
1.3.4. Tipos de SGBD
Se pueden clasicar los SGBD de muchas formas, por ejemplo, segn las bases de
datos que gestionan, clasicando los SGBD segn traten bases de datos relacionales,
bases de datos orientadas a objetos, etc. Puesto que en la actualidad, la mayora de
los SGBD integran mltiples losas y tipos de funcionamiento, en este libro se
clasican los de gestores de bases de datos segn su capacidad y potencia del propio
gestor:
Los Gestores de Bases de Datos omticas son aquellos que manipulan
bases de datos pequeas (omticas) orientadas a almacenar datos domsticos o de
pequeas empresas. Incluso estos gestores permiten construir pequeas aplicaciones
para ayudar a un usuario inexperto a manipular los datos de una base de datos de
forma sencilla e intuitiva. Un ejemplo de un SGBD omtico es Microsoft Access,
que posee tanto una interfaz de usuario muy sencilla como un potente lenguaje de
programacin (VBA=Visual Basic for Aplications) para ofrecer a usuarios avanzados
otras posibilidades de gestin mucho ms especcas.
Los Gestores de bases de datos Corporativas son aquellas que tienen la
capacidad de gestionar bases de datos enormes, de grandes o medianas empresas
con una carga de datos y transacciones que requieren un servidor de grandes di-
mensiones (generalmente un Servidor Unix, o un Windows 2OOX Server con altas
prestaciones). Estos gestores son capaces de manipular grandes cantidades de datos
17
Bases de Datos
de forma muy rpida y eciente para poder resolver la demanda de muchos (cientos)
de usuarios. Un ejemplo tpico de servidor de base de datos Corporativas es el antes
comentado Oracle, actualmente, junto con DB2, el servidor de base de datos ms
potente del mercado (tambin el ms caro). Precisamente, ese coste tan alto es el
que ha desencadenado que se haya recurrido a una solucin intermedia entre gesto-
res de base de datos omticas y corporativas. Entre estas soluciones intermedias se
encuentra MySQL, un gestor de base de datos que, adems de ser gratuito y senci-
llo, es capaz de manipular gran cantidad de datos cumpliendo prcticamente todos
los estndares de la arquitectura ANSI SPARC. Aunque implementa SQL, no tiene
un lenguaje de programacin propio como SQL Server u Oracle (aunque est en
desarrollo), pero a cambio se integra fcilmente en las tpicas soluciones XAMPP,
que son paquetes que incluyen, adems de MySQL, una versin del servidor Web
Apache y varios lenguajes de script (php, perl. . .) que dotan a MySQL de potentes
herramientas para acceso y publicacin de los datos.
Contabilidad Administracin
Usuario 1
Figura 1.4: Esquema tpico de organizacin de un SGBD corporativo.
18
Captulo 1. Los sistemas de almacenamiento de 1a informacin
1.4. Prcticas Resueltas
Prctica 1.1: Introduccin a Microsoft Access.
En esta prctica, se aprender a manipular de forma bsica el gestor de bases de da-
tos Access de Microsoft. Abre la base de datos Neptunoaccdbque puedes descargar
de www. garcetaes, y realiza las siguientes acciones. Ser necesario modicar algn
objeto de la base de datos, por tanto guarda una copia con el nombre practicalaccdb
7y conserva la original para repetir 1a prctica cuantas veces desees.
f I
\J&#39;\/_
Organizar vNueva carpen
lEscritorio i: rw- Fama es niue. Tip:
,4 Sitios recientes
a Neptuncuccdb " Z LC .5" Hicrcscft Fi-ze ..
E] Vehiculosaccdb 3 I JLC . ":r;;:v:
d, Biblioteeas _
1 Documentos s_
hImagenes
v Musica
A! _
Administrar B deos
n; Grupo en el hogar
1&#39;- Equipc - 4
Hombre de archivo: Neptuncmccdb vi Microsoft Office Access (mccd v]
rm
_

Herramientas v ICancelar |
Abre Microsoft Access ypulsa el botn de Office. Selecciona la opcin abrir, yen el cuadro de dilogo, busca
la base de datos neptuno.
1. Qu tipo de informacin almacena la base de datos?
Neptuno es una base de datos que incorporan las versiones antiguas de Microsoft Access (hasta
Access 2003)
7accdb es la extensin de las bases de datos de Access 2007
19
Bases de Datos
Observando las tablas de la base de datos Neptuno, se puede ver que hay tablas de Clientes, Emplea-
dos, Pedidos, Productos, Proveedores, etc. Al abrir las tablas haciendo doble clic sobre ellas, se muestra la
infonnacin que contiene, por ejemplo, la tabla de productos almacena informacin sobre alimentacin y de-
rivados, por tanto, Neptuno es el sistema de informacin de una empresa que importa y eazportacomestibles
especialesde todo el mundo.
2. Qu objetostiene la basede datos?
rSBaTM---wl < Id.d Todos losObJQOS deAccess
Dplazarse l lacategora 13m -
6
De leyar C""&#39;*
s formularios
Iipodeobjeto . m;
Catalogo
i

Si
Personalizado
e

7) K(( (4
Iablasyvistas relacionadas
Fecha dereacion Etiquetas decliente
fechademodi cacion nm".
Desplegandola lista del pa-
nel lateral izquierdo de Ac-
cess, se puede obtener un
listadodetodoslosobjetos 5""
de la base de datos clasi- E""&#39;-"5
cados por tipos, es decir, Worms
tablas, consultas, formula- Eaginas
rios, informes, etc. Macro;
Mdulos
Todos losobjetos deAccess
Filtrar porgrupo Lista alfabtica deproductos
EEEGEEEGEGGHG
Twin Productos porcategora
Resumen deventas porao
Resumen deventas portrimestre
Subintorme Catalogo
Subiriorme ventas porao
4400404044
Subiriionrie ventas porcategoria 4
4
TOMQS d!VGHIS D0!Cllidld
o
ventas deempleado porpas
ventas porao
3. Explora todos los objetos de la basede datos, poniendoespecialnfasisen el
diseode cadaobjeto, esdecir, en la forma en la que estnconstruidos.
Todos losobietos deAccess <r j pjd
- --r-- --- -- r >EtE|l: e e c:
Consultas
Consuita depedidos J pu,
A
Para explorar el conte-
nido de un objeto, bas-
ta con hacer un do-
ble clic con el botn
izquierdo del ratn y
examinar el panel fron-
tal. Para ver el diseo
se pulsa con el botn
derecho del ratn y
se selecciona la opcin
Diseo. Por ejemplo,
la consulta Subtotales
por pedido consiste en
un listado de los pedi-
dos con su coste total.
Detalle depedidos condescuento 7&#39;P&#39;" i
Precioumdad L_
Facturas

Filtro acturas
Lista ambetica deproducto:
Lista deproductos actual
Losdie: productos mas caros
C-mpo: iapeaiao Subtotal: SumaICMonedaIMetE
Tabla: Detalles depedidos
Productos por categoria l Total: ihqrupnr por Expresion
Orden:
Productos sobre elprecio medio Mostrar: T}
Pedidos trimestrales
Resumen d!VEMM D0! IO cmem: i
Resumen deventas portrimestre
E Zoom
Subtotalesporpedido &#39; &#39; y. " l
STototaI: scanamdonedaweooLx-udadlcmhdadll- Totales deventas por cantidad r mnuwvloo lili iik ii il iriii
20
Captulo 1. Los sistemas de almacenamiento de Ia informacin
4. Aade el campo Destinatario a la consulta Subtotales por pedido.
Entra en modo diseo y pulsando con el botn derecho en el panel superior, selecciona la opcin Mostrar
Tabla. Despus, aade la tabla pedido. Vers cmo aparecen las dos tablas relacionadas, en una, los campos
genricos del pedido (FechaPedido,FechaEntrega, etc.) y en la otra, el detalle de cada uno de los pedidos.
A continuacin, arrastra el campoDestinatario de la tabla Pedido al panel inferior (en la tercera columna).
Deale: de[ELIZJC a
eaidr:
FecnaEntiega
FechaEnvio

FoimaEnvo -
Cnigo 1 :
Destinatario-
DirecdonDe stin
riunannminn&#39;
i Ianeaiao
9ldPiodueto

PreeioUnidId

Cantidad

Descuento
Subtotal. SumnCMonednIPvecioUmdad]cnntidldlu-[Descueiito]i100r100) Destinatario i;
Pedidos
impresion Agiupnr por
3.
5. Aade el campo Email a latabla Clientes, es un campo de tipo Texto y de
longitud 75. Examina las distintas propiedades del campo y consulta laayuda de
Accessen cada uno de ellos pulsando la tecla F1.
Entra en modo diseo y aparecer la lista de campos de la tabla. Aade una nueva la y completa el nombre
de campo, el tipo y la descripcin. A continuacin, rellena las propiedades del campo. Puedes, por ejemplo,
poner una regla de validacin para quelos emails tengan el formato nombre@dominio, esdecir, que tengan
una @en el terio del email. Para poner la regla de validacin, pon Como *@* en el campo Regla de
validacin

Nombre de! campo Tipo de datos Descripcin
i Idcliente Texto Cdigonicobasadoenel nombredel cliente.
Nombrecompaa Texto
Nombrecontacto Texto
Cargocoritacio Texto
Direccin Texto Ca|leoapartado de correos.
Ciudad Texto
Regin Texto Estadooprovincia.
cdPostal Texto
Pas Texto
Telefono Texto incluyecdigo de pasode rea.
Fax Texto Incluyecodigo de pasode rea.
Email Texto NuevoCampoaadido
Propiedaues delcampo
General asqueu
Tamao del campo 75
Formato
Mascara deentrada
Ttulo
VIIaIpredeterminado
Regla de vahaacin Como "e"
Texto de validacin
Requerido No
Permitir longitud (ero S
Indendo No
Compresin Unicode Si
ModoIME SinControles
Modo de oraciones IMENada
Etiquetas inteligentes
21
Bases de Datos
6. Examina las relacionesde las tablas que contienela.basede datos Neptuno.
&#39;.,u- (te 12.1; re:;1c.=:_1 l W-V
nIaProuucto WIWGO uldPeaido " Mm
rlombrePvodu l l PW-W atinente Nmh"c"p&#39;&#39;
ldProveedor P&#39;&#39;U"&#39;3 ldEmpIeIdo Nmb"cm&#39;d
ldcategovu ("5" FechaPedndo C"(""
CanhdaaPovU " FecmEntrega D_""""
Preuounuaao FecnaEnvo (Wa
UnndadesEnb ,_.__4__ FonnaEnvio Sa?"
unidadesEnPi &#39; r _&#39; u Cargo al
d .
* &#39; Empleada Duhnltlno p
-
A ua _ .
p. &#39; o L DvremonDest
a Nombre CIudadDemn.
HoaeDFODICUBUQS Cargo I
Tratamiento Rlolonmmn" J * &#39;
. Depenaenuas delObjl (ogpoggmpg; ldcm9"&#39;""&#39;5
Fechannrnlent- . qompucomn &#39;
53&#39; 5""J" FecnacontratnaPmoemrm" 1,,na I
l &#39;l"rvr :c."-- Direccin v
4
z-ncehxseamic;
Las relaciones dictan cmo se puede enlazar la informacin de diferentes tablas para obtener informacin
ms elaborada. Para ver las relaciones de la base de datos, se pulsa en Herramientas de Bases de Datos
y a continuacin en el botn Relaciones
7. Un formulariova siempreasociadoa las operacionesquesehacenconuna tabla,
a las que comnmentesellama mantenimientode tabla, observael funcionamiento
del formulario Clientes y comentaqu operacionessonestas.Realiza al menosuna
vez cada una de las operacionesque permite el formulario.
Las 4 operaciones queforman el mantenimiento de una tabla son la insertin o alta, eliminacin o baja,
modi cacin o actualizacin y bsqueda o consulta de un registro. Todas estas opemciones se pueden
realizar de forma muy sencilla y visual a travs del formulario.
8. Inserta un nuevo cliente en la base de datos.
Y
lo.declientev Nombredecompaia v Nombredelcontact-
Insertar un cliente es muy sencillo, WANDK DiewandemdeKuh RitaMuller
se puede hace-r a travs del forfnularo VJRTH Wla Herkku Dnrkxo KOSKIXBO
&#39;C[ien3 o abendo [a tabla (jaen- WELLI Wellington Importadora PaulaParents
tes! y desplazarseal ltimo mgistm_ WHKTC whiteCloverrvlarkets Karllablonsku
WRLMK wllmanKala MaruKamunen
WOLZA wclskaZaiazd Zbyszek DIestrzenIev_
ILMSR LaCantina deSanRoman AntonioLopez b
Registro. K 492 de 92Do . Busur 1Lv
En una la vaca, se agregan los va-
lonescorrespondientes a cada campo.
9. Elimina el registrocorrespondienteal cliente Rancho Grande. Esposible?Si
no esposible.Quhabra que hacerpara poder eliminarlo?
22
Captulo 1. Los sistemas de almacenamiento de la informacin
Para eliminar el cliente, hay que buscar el cliente Rancho Grande . A continuacin, se seala. la la
con el botn derecho del ratn y se escoge la opcin Eliminar Registro. Access mostrar una advertencia
indicando que no es posible eliminar el registro puesto que hay pedidos de ese cliente. Para poder eliminar
denitivamente el cliente, habra que eliminar previamente todos sus datos asociados.
j Clientes -- Y
Nombredecompaia v Nombredel contact- Cargodelcontacto - e
Jensen re-IMML SergioGutirrez Representante deventas Av.da
Num mgism nGrocery Paula wilson Representante agente ventas 2817i
"""" "WW i MaurizioMoroni Asistentedeventas Strad.
CMI! JaneteLimeira AsistentedeagentedeventaAv.Cr:
5gp." Michael Holz Gerentedeventas Greni
AleandraCamino Gerentedecontabilidad Gran"
Rancho Gun I l D
nodefila... i l
10. Modica el valor del campo Nombre de Contacto del registro correspondiente
al cliente Romero y Tomillo. A continuacin, modica el campo Id. de Cliente
cambindolo su valor a ROMMY. Es posible modicar el Id. de Cliente? Si es
posible, conservael cliente an sus pedidos?
Pana modicar el cliente, se localiza su la y se sita el cursor del ratn en el campo que se desea
modicar. Despus, cambiar el valor del campo. En este caso, es posible modicar ambos campos, el primero,
el Nombre de Contacto no tiene conicto alguno puesto que no est implicado en ninguna relacin. Modicar
el campo Id. de Cliente podra suponer la. prdida de pedidos si no se actualizara a su vez todos los pedidos
del cliente. Access efecta esta modicacin automticamente al cambiar el identicador del cliente, por
tanto, no hay prdida de pedidos.
3 [lie-ita - Y
ld. decliente Nombredecompaia - Nombredelcontact- Cargodel contacto DirA
QUEEN QueenCozlnha LciaCarvalho Asistentedemarketing Alamedad(
QUlCK QUICK-Stop Horst(loss Gerentedecontabilidad Taucnerstre
RANCH Rancho grande SergioGutierrez Representante deventas Av.delLibe
RATTC Rartlesnake CanyonGrocery PaulaWilson Representante agenteventas2817Miltor
REGGC Reggiani Caseifici MaurizioMoroni Asistentedeventas Stradaprev:
RICAR RicardoAdocicados JaneteLimeira AsistentedeagentedeventaAv,Copacai:
Richter Supermarkt Michael Holz Gerentedeventas Grenzacher
I t Romerovtomillo JoseModificado Gerentedecontabilidad GranVa,1
.__*-SANTG__ __janteourmet_,_.__.__-, __._.__.Jonas Beraulisen Drooietario Erlinzskaki&#39;
Registro: I< 469de92 D Ni. eroyTomillo 1 . l D
11. Abre la tabla de proveedores y consulta qu productos proveeel proveedor Leka
Trading
Primero, se localiza el proveedor en la tabla de Proveedores mediante el cuadro Buscar. A continuacin,
se pulsa el icono + del campo Id de Proveedor para desplegar las relaciones que tiene con Productos.
18AuxJOyEUX ecclesiastiques GuyleneNodier Gerentedevent
19NewEnglandSeafoodCannery RoboMerchant Agentedecuent
20LekaTrading ChandraLeka Propietario
ld. deproducto- Nombredeproducto Categoria - CantidadporUnida v
TallarinesdeSingapur Granos/Cereales 32- 1kgpaq.
43CafedeMalasia Bebidas 16- latas500g
44Azucar negraMalacca Condimentos 20 - bolsas2kg
(Nuevo)
,_..___,_ ,-.s.... .___.__i- __.
egistro: I< l de3 DH 0 - LeknTnding4 l
23
Bases de Datos
12. Consulta la ayuda de Access y comenta los diferentes tipos de datos que puede
almacenar un campo en Access (Texto, Memo, Numrico).
En Access existen 10 tipos de datos bsicos:
Datos adjuntosComo fotos digitales. En cada registro es posible adjuntar varios archivos. Este tipo de
datos no estaba disponible en versiones anteriores de Access.
AutonumrcoNmeros que se generan automticamente para cada registro.
Moneda Valores monetarios.
Fecha/HoraFechas yHoras
HpervnculoComo direcciones de pginas web.
MemoBloques de tezto largos ytezto que emplean formato de texto. Una utilidad tpica de un campo Memo
sera una descripcin de producto detallada.
Objeto OLEObjetos OLE (objeto OLE: objeto que admite el protocolo OLEpara la vinculacin e in-
crustacin de objetos. Un objeto OLE de un servidor OLE (por ejemplo, una imagen de Paint de
Windows o una hoja de clculo de licrosoft Excel), se puede vincular o incrustar en un campo,
formulario o informe.
Texto Valores alfanumricos cortos, como un apellido o una direccin.
Nmero Valores numricos, como distancias. Hay que tener en cuenta que existe un tipo de datos inde-
pendiente para la moneda.
S/No Valores Booleanos o Lgicos. Admiten nicamente el valor Si y el valor No.
13. Qu subtpos de datos tiene el campo numrico en Access?
El tipo numrico se puede dividir en subtpos dependiendo del tamao de campo que se eli-
ja. Asi, los campos numricos almacenarn un rango de valores muy distinto dependiendo del
tamao del campo que se seleccione. Por ejemplo, los tamaos byte (1 byte), entero (2 by-
tes), entero lango (4 bytes), simple y doble precisin (coma otante de 4y 8bytes), etc.
GEMFN Bsqueda
Tamao del campo Entero lar -
Lugares decimales "NFO
Mascara de entrada Eme) &#39;90
Titulo

Valor predeterminado
Regla de validacin
i Texto de validacin
Requerido No
Indexado No
Etiquetas inteligentes
Alineacin del texto General
Doble
Id. de replica
Decimal
24
Captulo 1. Lossistemasde almacenamientode 1ainformacin
14. Quvaloresadmitira un camponumricode 1 byte?
Como 1 byte son 8 bits, se estima que los valores numricos que se pueden almacenar en un campo de este
tipo sondel 0 al 28-1, es decir del 0 al 255. Si se insertan en el campode tipo Byte valorespor encima
o por debajo del 0 y del 255, Microsoft Accesslos rechazar. Ntese que este clculo se hace sin tener en
cuenta el signo del valor, puesto que el valor byte, no admite signo. Para utilizar nmeros con signo ha
de escogerseel tipo Entero y pam utilizar nmems reales, con.decimales, debe seleccionarse un campo en
formato decomaotante (simpleo doble)o el campodecimal.
15. Crea una tabla llamada Test conun nicocamponumricode 1 byte. Quva-
loresmximo y mnimo sepuedenalmacenar?Prueba a insertar registrospara ve-
ri carlo.
-/ Crear Datos externos HICIO
La . &#39;.
l 3 _ Nombre delcampo Tupo dedaios
Para crear unatabla! sepulsa TablaPlantnllas Lnstasae DISEO Numem
en la pestaa Crear y se selec- 0mm Shmpm"! &#39; d!"
. . . v, . pn wca a
czonael iconoTabla. A contz- 3m _ &#39; &#39; &#39; &#39; &#39; e e
nuacin se pulsa el botn Ver 5mm _,Bs9us9I__AA__ ___
y se seleccionala opcinDi- - Cree unanuevstablaracxa Puede a...nlos T"""" "" 5V
- campcs uuenamente enunanueva abla o F""
seno SePone7mm? a l ta con! launla envlsxa Duseo. Luoms netimnlesAutomnko
bla, y se modi ca la lnea que l _ Mnsaradunivldl
a anece conelnombreId ti L: m: mu
P y po _J Valor predelermmado
autonumico para poner los &#39;Huevo Aguggr campo; Regll aevaludauon
datosdel campo.En Tamao Ei, 3&#39;39 m ""&#39;
Requerido No
delcampohayqueseleccionar 2 &#39; l indexado snsm GUDIICIGOS]
Byte _ 4 Etiquetas inteligentes
Ahnenaon del texto Genem
Para insertar los valores de prueba, se abre la tabla y se insertan varios valores. Cuando se inserta un valor
fuera del rango[0-255], seproduceel siguienteerror:
Elvalor quehaespeci cado nacoincide (uneltipodedatos Nmero deestaeolumm.
Especi que unvalor nuevo.
Ayuda conlostipos dedatos yformatos.
25
Bases de Datos
Prctica 1.2: Manipulacin de informacin en Access.
Descarga de www. garcetaes 1a base de datos de Vehculos (Vehiculosaccdb) y bre-
la. Ser necesario modicar algn objeto de la base de datos, por tanto guarda una
copia con el nombre practicalaccdb y conserva la original para repetir la prctica
cuantas VECES CGSGGS.
1. Cuntos modelos de vehculos hay?
xr
Modelo -censor-nro":
Se abre la tabla en modo Vista 1A|a Romeo 147 1.6 rs 16V 10s cv 3/5 8.1
de Hoja de Datos , y, se con- 2 Alfa Romeo 147 1.o rs 15v 12o cv 3/5 3,2
sulta el contador de 3Alfa ROMEO 147 1.9 JTD IZ CV 3/5
que hay en a parte nm-o, el 4Alfa Romeo 147 1.9 no M-JET 15o cv 3/5
paneL En este caso, 3654 mo_ 5 Alfa Romeo 147 2.0TS 16v 3/5
d l . Alfa Romeo 147 2.0 TS 16V Selespeed 3/5
eos. , , , , _ _ ,,_ , ,,_ _ _
Mkagmro. If @ Nv. _ V
Desde el modo Vista de Hoja de Datos, hay que ordenar de mayor a menor (forma descendente)
la. tabla por el campo Consumo. Los 5primeros modelos que apanecen son los que ms consumen.
x
Mocelo -ioosumo -1 yFmamnnac .v._ ,JU, . -
19 Ferran 612 agua. 20&#39;s Qrdenar de menor amayor
s20 Ferran raao/ =43osp 13.2 il Ovenvdc mmrnmenw
821 Ferran F599 GTB 17,5 -_ gopm
1406 Maserati Coup Granspor 17.5 3 ge,
&#39; 3 Hummer H2 6,2 VS 13"17.4 L1
1262 Jeep gnerokee 3.7V 16,5
1657 Mercedes-Ben m. 63 AMG Autom. (1641 16,5
Agcno de tolumna,
Qculuv columnas
3. Inserta un nuevo modelo de automvil completando todos los campos.
Se pulsa el icono insertar registro y, a continuacin, se rellenan todos los datos menos el
campo Id, que es autonumrico ypor tanto se rellena automticamente. El campo magen
se rellena haciendo doble clic sobre el dato adjunto yse selecciona una imagen de tipo bmp.
juanma
Id -I Marca - 7 7Mooeio y N- Consumo -1 Emnsrones - nt d 7A
3652 Volvo xcsc vs AWD AUT 7A 13.5 322
3653 volvo xcsc vs AWD Am EXECUTPJE/SDOR 13.3 317
3554 votvo xcso vs AWD AUT 13 3317
" 3655 Ferrari Tesarossa 22.27
Huevo,-
Regstra N4365? M3655 &#39;0-
J,

J.

m;
26
Captulo 1. Los sistemas de almacenamiento de la informacin
4. Crea y ejecuta una consulta para ver los automviles de la marca Seat, repite
el procedimiento para los automviles de la marca Toyotay Volkswagen.
miente nao QmmrooS"d&#39;mumfmhDesea ma wnsuudeoetaloeoremwm?
(QHSUKBS

Nedededensdeuwmuhodia.
Automvnes Seal
1-:
llmmaem4, sta es toda la mfovmaon que natura el sustenta para crear la consutn.
l Imagenoelags
flmagmyneumg l Desea abnr la mnsulm omowcar ei dxseo de la COHSUG
gImagenFneTmeSmw
<1 e enFueT _ .
ilzagmeg yagravante consulta para ver nxmoco. .......... m
g iodca el dzseo oe A
Se puede crear una consulta de varias formas: con el
asistente para creacin de consultas, con vista diseo
o creando una consulta en modo SQL. En esta solu-
cin se opta por la primera opcin, se pulsa en la pes-
taa Crear yse selecciona la opcin Asistente pam Consumo
consultas. Primero, se selecciona la opcin Asistente E"""
para consultas sencillas y despus se eligen los cam-
pos que se mostrarn en la consulta, Marca, Modelo,
Consumo yEmisiones. En segundo lugar se elige la :[Luna] {Consumo}
opcin Detalle ynalmente se da un nombre a la Automoviles Lutomovules utomovules
tabla. Para tenninar, se seleccionar la opcin Mo-
dicar diseo de la consulta.
Acontinuacin, se establece el criterio a ltm para la
bsqueda de los automviles de la marca Seat. ponien-
do en el campo Criteriosde la columna Marca, el
valor =Seat". Puedes crear las consultas para To- : ALHAMBRA L8AUT.5
yota y Volkswagen siguiendo la vista Diseo, pues se ALHAMBRA 1.8 MAN.6
realiza de forma idntica a cuando se modi ca el di- -HA&#39;\4BRA1.9TD|AUT.5
sea de la consulta. . LHAMBR 1.9 l MA. 5
Sea. A_r-;ANBF.A 2.0 NAAN. 6 y
Regnstvc N 1 de 93 bDI p .Busca:
27
Bases de Datos
5. Abre el formulario Catlogo Ferrari en modo Diseo y describe cmo seenlazan
sus campos a la base de datos.
Para abrir el formulario en modo diseo. se selecciona el objeto Catlogo Ferrari en el pa-
nel lateral y pulsando con el botn derecho del ratn se elige la opcin Diseo del For-
mulario. A continuacin, se selecciona cualquiera de los campos y se pulsa en. el botn Ho-
ja de Propiedades que esta. situado en la pestaa de Diseo para mostrar las propiedades de
los controles del formulario. En la hoja de propiedades aparece la opcin Origen del control.
j (alogofarui &#39;
-n-|-I&#39;2"I&#39;3"I-4 - -&#39; &#39; &#39; &#39; &#39; &#39; &#39; &#39; -- n-
HC]! d: prcpmoades
Tipodeselecclcn Cuadro oe(eno
Maru
FormnoUNOSEventos01m oaus
ngendelcontrol
u . y
Mascara deentrada
movpredeterminado
Regla devahdaclon
6. Crea una tabla llamada Propietarios con los Campos DNI, Nombre, Apellidos,
Fechade Nacimiento, Direccin y Telfono. DNI ser el Campo clave de la tabla.
De la pestaa Crear, se escoge la opcin Diseo de tabla, y se rellenan las las con cada uno de los
campos que va a tener la tabla. Se ha de poner atencin en. el tamao de cada uno de los campos.
DNI - Texto (10)
nNombre - Texto (20)
Apellidos Texto (70)
Fecha de Nacimiento - Fecha/Hora
nDireccin - Texto (255)
I Telfono - Tezto(15)
Se seleccionar la la correspondiente al DNI, y se pulsar el icono Clave principal para designarlo como
campo clave. Para terminar. Access preguntar si se desea guardar los cambios y pedir la asignacin del
nombre de la tabla.
_T; __: -.:; Nombre delcampo
t i V DNI exto Doc
ama manana: una: aeDueoNombre Texto Nor
detam: SharePoint &#39; de abla Apemdos Texto Ap
l FechadeNaccmuenio erre/Hora Fec
DITECCIH Texto Dire
Telefono Texto Tele
28
Captulo 1. Lossistemasde almacenamientode la informacin
7. Creaunatabla llamadaPropietariosAutomoviles conloscamposDNI (del pro-
pietario), Id(del automvil) y Fecha de Compra. Establececomo clave principal de
la tabla, loscamposDNI e Id.
Se repite el procedimiento de la cuestin anterior, esta vez, teniendo en cuenta que el tipo y tamao de
loscamposDNI e Iddebe ser igual al de las tablasPropietariosy Automviles,esdecir, DNI - Texto(10)
e Id (Numrico, Entero Largo). El campoFecha de Compraser de tipo Fecha/Hora. Para establecerla
clave principal se seleccionan las doslas correspondientes a los camposId y DNI y se pulsa el botn Clave
Principal. Finalmente, se asigna el nombre a la tabla.
8. Establece las relaciones entre las tres tablas de la. base de datos.
Hay que pulsar en el icono relaciones del panel Herramientas de base de datos. A continuacin, se-
leccionar las tres tablas y agregarlas al panel de relaciones. Para enlazar el campo Id de las tablas de Au-
tomviles y PropietariosA-utomviles se selecciona el campo Id de esta ltima y se arrastra hasta el campo
Id Automviles. En la pantalla modicar relaciones que aparece, se marca las opciones Ezigir Integridad
Referencial y Actualizar en cascada los registros relaciones, para erigir que los propietarios que estn
relacionados con Vehculos (Id) realmente existan en la base de datos, y, para actualizar el campo Id en la
tabla PmpietariosAutomviles de forma automtica si se modica en la tabla Automviles. Se repite este
procesopara el DNI. Observa el mapa de relaciones como se ilustra a continuacin.
Henarmentas debase dedatos . __ r
"-*&#39;-&#39; - 5- " ;:.x &#39;. : ZCEEIILL
. bld gDm
e4 .
- Dependencias delcrudo th". "WW"
EHCIOHGS Idoaela pelhdos
C"W" Fecha deNacnmierr
Llamar u ccpha: Emisnones mamon
""9" Telefono
J Egg: nmgndad reference!
yV&<sa.=2n_ rs.e99922

arma en cascada los regsros relacionados
29
Bases de Datos
9. Crea un formulario con todos los campos de Propietarios mediante el asistente
de creacin de formularios. Usa la opcin de diseo Justicado y un estilo a tu
eleccin.
Crear
En la pestaa Crear hay lghmmaazgsm
que desplegar el men Ms , i
fonulaoa ydespus se- i snstente panformularuos
leccionar la opcin Asia- &#39; y
tente para formularios. apagones
Se siguen los pasos indica-
dos por el asistente, selec-
cionando todos los campos &#39;
yeligiendo la distribucin I:4 I,mmm,
Justicado ycualquier es- L
tilo, por ejemplo, el estilo
Tcnico.
a
V
Quadro de dialogo modal
Asistentzponfomulum
cQadsvbuondeseawlvcunlfotmalab
Euuuela Datos
30
Captulo 1. Lossistemasde almacenamientode 1ainformacin
10. Inserta 5 registrosen la tabla de propietariosa travs del formulario creado
en el apartado anterior. y a Continuacin.inserta registrosen la tabla Propieta-
riosAutomvilespara hacer dueode dosmodelosde vehculosa cada uno de los
propietariosquehasinsertado.
Se abre el fonnulario Propietarios creado en el apartado anterior y se completan, todos los campos. Se
repite la operacin para cada una de los 5 registros.
Propietarios
DNI Nombre Acelncos
52201928 Joscarlos Garcia Perez
Fecha deNacimiento
Dueccnn
C/Loslamos, 15.Madnd, 28034
Teltono

912234732!
LRegnstra I;
Para el caso de PropietariosAutomviles, se abre la tabla y se insertan los registros manualmente. Es
fundamental que los valores insertados en el campo DNI de la tabla conesponda exactamente con alguno
de los propietarios insertados. De igual modo, los valores del campo Id deben corresponder con la clave
del Automvil del que es propietario, por ejemplo, Jos Carlos Garca Prez , con DNI .52201928, es
propietario de los vehculos 89 y 98, es decir, del Audi A3 1.4 TFSI AUT. 7V y del Audi A3 1.9 TDIe
v Fechacomup v Agregar nuevo (yaZampas dnzpoynmles enpma: seI/agonacays
52201928 s9 0335552010 &#39;""" 53" W
, 52201928 98 02/04/2010: oPvopnetanos Eartaurama
i?
31
Bases de Datos
11. Realiza, con el asistente para la creacin de informes, un informe con los propie-
tarios de los vehculos que hay en la base de datos, mostrando qu vehculos posee
cada propietario.
En la pestaa Cnear hay que seleccionar la opcin Asistente para informes. Se selecciona el campo
Nombrede la tabla propietarios yla marca yel modelo de la tabla Automviles.
Crear
1r:: gEtcqueias
JL] Intorme en blanco - -
lnvorme Dueo de Tabla. metano:
[1 Asmente para mormes mmm Tabu: wwewmvhmbs
_. LAS
gL""!I1&#39;HHE3L;,
._*_ en
14:791 -&#39;
Fecha de Neumann)
Dnrecon
Telfono Ilmagenenate
&#39; lmogernFlelags
lntaoenieatne

jlmapemevrsesmm
Canceluv
Cmo desea mr las datos?
nor Aummvnes
Se siguen los pasas indi-
cadas por el asistente, se- gr m,N, mu
leccionando cmo se desea
ver los datos, si se pree-
re el informe agrupado por
algn nivel, la ordenacin
de los registros ynalmen-
te, la distribucin, orienta-
cin yestilo. Para termi-
nar, se abre el informe en
vista previa.
Propietarios
Aud A3 197D e MAN. S
Aun: A5 14FS AU . 7V
muqrzolnx. :5 de n-Iv: 5| SCJ:
32
Captulo 1. Los sistemasde almacenamientode la informacin
12. Crea una consulta para ver el modelo y la marca de los vehculosdel primer
propietarioqueinsertaste.
En la pestaa Crear hay
que seleccionar la opcin
Diseo de consulta. A
continuacin, se seleccio- ia Nom
nan las tres tablas de la ,_ ,,,,,,,,,,,, Apellidos
base de datos, mostrndo- Consumo . \ """&#39;""""
seaslasrelaciones entre "mmm gggr"
ellas. Para seleccionar _
los campos que salen . La
en la consultahay que (nuvo: umarn Modelo rlombve DNI
aTTa-tm? las alumnas Tlbll: Automovxles Amomvnles Pvopuetanos Propuetarios
Marca,Modelo,Nombne y M::" , ,
o m: y ,_; J y
DNI delastablasal panel (mmm: E1931
inferior. o:l
Posteriormente se aade
en la la Criterios y
columna DNI el valor
= 52201 928 . Para _
terminar, con el botn l &#39; Nombre v DN;
derecho sobre el ttulo un A31.4TFS|AUT.7V Joscarlos 52201923
de la consulta, se elige la A31.9TDIeMAN.5 Josecarlos 52201925
opcin guardar y se escribe
un nombre. Finalmente,
se puede ejecutar para ver
los resultados.
33
Bases
1.5.
de Datos
Prcticas Propuestas
Prctica 1.3: Base de datos de un instituto
Crea en Microsoft. Access 2007 una base de datos llamada lnstituto.accdby realiza
los siguientes ejercicios.
1.
10.

11.

12.
13.
34
Crea una tabla llamada Alumnos con los campos DNI, Nombre, Direccin,
Fecha de nacimiento, foto, grupo y curso. Elige cuidadosamente el tipo de
datos para cada campo.
.Inserta 6 registros a travs de un formulario creado al efecto, tres registros
para el curso 1 y otros dos para el curso 2.
.Crea una consulta que muestre el campo DNI, Nombre yCurso, ordenado por
Curso y Nombre.
Crea una consulta que muestre todos los campos de la tabla Alumnos, con el
criterio Curso=2.
. Crea un informe para visualizar los alumnos de cada grupo.
.Crea la tabla Asignatura con los campos NombreAsignatura, Codigo, Ciclo.
Crea la tabla Notas con los campos sucientes para insertar la nota de un
alumno en una asignatura.
.Establece las relaciones entre las tablas Notas, Asignaturas y Alumnos.
Insertar mediante un formulario 4 asignaturas para dos ciclos distintos.
Crea consultas distintas para ver qu asignaturas tiene cada ciclo.
Inserta 2 notas para cada alumno anteriormente introducido.
Intenta insertar notas para alumnos y asignaturas que no existan Qu pro-
blema hay?
Realiza una consulta para sacar la nota media de cada asignatura.
Captulo 1. Los sistemas de almacenamiento de 1a informacin
Prctica 1.4: Base de datos de mascotas
Crea una base de datos llamada Mascotasaccdby realiza los siguientes ejercicios:
1.
es
10.

11.
12.
13.
Crea una tabla llamada Animales con los campos Nombre, Tipo, Raza, Peso
y Color. Aade a la tabla un campo clave.
. Inserta 5registros en la tabla Animales.
Crea una consulta para ver los Animales de tipo Perro.
. Aade una nueva columna ala tabla Animales llamada Dueo.
.Completa el Dueo de cada uno de los Animales de la tabla.
.Aade una nueva columna a la tabla Animales llamada PrecioDeCompra. Es-
ta columna contendr un valor nulo (sin informacin) cuando el Animal fue
adquirido gratuitamente.
. Crea una tabla llamada Vacunaciones con los campos FechaVacunacion, Des-
cripcnVacuna, Veterinario y un campo que relacione la vacunacin con el
animal vacunado.
Crea las relaciones entre la tabla Animales y la tabla Vacunaciones.
.Inserta, para uno de los animales, 3 vacunas puestas por tres diferentes vete-
rinarios.

Crea un informe para listar las vacunaciones de los animales.
Crea un informe basado en la consulta del tercer ejercicio para ver las vacu-
naciones de los perros.
Crea un formulario en vista diseo para poder aadir vacunaciones de los
animales.
Mediante la pestaa Datos Externosde Access, exporta los datos de la tabla
Animales a hlicrosoft Excel. Con la misma pestaa, crea una pgina web con
los datos exportados del informe de vacunaciones.
35
Bases de Datos
1.6.
36
Resumen
Los conceptos clave de este captulo son los siguientes:
Un chero es una estructura de informacin que crea el sistema operativo para
almacenar informacin.
El tipo y formato del chero determina la forma de interpretar la informacin
que contiene. Se clasican segn su contenido, organizacin y utilidad.
Los cheros de texto no requieren un formato para ser interpretado puesto
que contienen nicamente texto, sin embargo, los cheros binarios, como al-
macenan mltiples formas de datos (texto, imgenes, vdeo. .. ) requieren una
aplicacin que sepa cmo est estructurada la informacin en ellos.
Una base de datos est organizada mediante tablas. Las tablas contienen re-
gistros de informacin o las. Cada registro est compuesto por mltiples
campos o columnas. Las tablas se relacionan entre s para dar cierto sentido a
la informacin almacena.da en ellas.
Una base de datos almacena multitud de objetos como tablas, consultas, ndi-
ces, vistas, informes, guiones y procedimientos.
Las bases de datos tienen mltiples aplicaciones, contables, administrativas,
motores de bsquedas, cientcas, bibliotecas, censos, virus, etc.
Las bases de datos se crean siguiendo un modelo o losofa. As, han evolu-
cionado desde las bases de datos jerrquicas y en red hasta las ms modernas
bases de datos distribuidas. Las ms comunes y utilizadas son las basadas en
el modelo relacional que propuso el ingeniero de IBM Edgar F. Codd.
Un SGBD es el conjunto de herramientas software que manipulan bases de da-
tos. Ofrecen a los usuarios funciones como almacenar y acceder datos, garanti-
zan la integridad y seguridad de los mismos y ofrecen, adems, otras funciones
avanzadas como la concurrencia, conectividad, generacin de estadsticas, etc.
El lenguaje SQL es una interfaz de programacin entre el usuario y la base de
datos. Se compone de varios sublenguajes: DML, DDL, DCL y TCL.
Los gestores de bases de datos que manipulan bases de datos pequeas se lla-
man gestores de bases de datos omticas, y los que manipulan bases de datos
medianas o grandes se denominan gestores de bases de datos corporativos.
Captulo 1. Los sistemas de almacenamiento de la informacin
1.7. Test de repaso
1. El contenido de un chero binario
a) Es legible y se puede abrir con un editor
de textos
b) Debe ser interpretado mediante un forma-
to
c) Son caracteres imprimibles del cdigo AS-
CII
d) Es un conjunto de pixels con colores
2. Un chero de texto contiene
a) Cualquier tipo de informacin
b) Caracteres codicados en cdigo ASCII o
UNICODE
c) Los datos de una base de datos
d) Datos que han de ser accedidos secuencial-
mente
3. Las tablas de cdigos ascii
a) Usan 2 bytes para representar cada
carcter
b) Distancian las maysculas de las minscu-
las en 64 unidades
c) Tienen 256 caracteres distintos
d) Todas las anteriores son correctas
4. Seala el chero que no es binario
Un chero .avi
Un chero .html
a)
b)

c) Un chero .mp3
d) Un chero .doc
5. Un campo clave es
a) Un campo numrico
b) Un campo especial que puede repetir un
mismo valor
c) Un campo especial que no puede repetir
ningn valor
d) Un campo alfanumrico
6. Una query es
a) Un comando o peticin que se enva a la
base de datos
b) Una. bsqueda de informacin
c) Una operacin de ordenacin
d) Una estructura de informacin
7. Un ndice es til para
a Insertar informacin
b Borrar informacin
C
d
Buscar y ordenar informacin
)

)

)

) No repetir valores
8. Una vista es una tabla virtual que
a Almacena los datos en la BBDD
)
b) No se almacena en la BBDD
)

)
c Se almacena solo la denicin
d Ninguna de las anteriores
9. La metainformacin
a) Son las tablas de la BBDD
b) Es informacin especial de las bases de da-
tos cientcas
c) No es usada por Oracle o DB2
d) Almacena el esquema de la BBDD
10. El lenguaje SQL se subdivide en:
a) DML, DCL, TCL y FCL
b) DML, DDL, DCL yTTL
c) DML, DDL, DCL YXTL
d) DML, DDL, DCL y TCL
Pm&#39;entreour.v&#39;9o&#39;9q&#39;r&#39;a&#39;sq&#39;z&#39;q&#39;I mauozonlvs
37
Bases de Datos
1.8.
1.
Comprueba tu aprendizaje
N ombra los distintos tipos de bases
de datos que existen segn el mo-
delo que siguen.
.Enumera 10 usos que puede tener
una base de datos.
.Explica para qu sirven las tablas
UN ICODE.
.Clasica los tipos de chero segn
su contenido.
Dnde almacenan las bases de da-
tos la informacin?
.Nombre 6 tipos de objetos que pue-
de contener una base de datos.
.Qu es un script o guin?
. Qu es una vista? En qu se di-
ferencia de una consulta?
. Dene los siguientes conceptos:
IDato
n Tipo de Dato
ICampo
IRegistro
-Tabla
IRelacin
- Consulta
IProcedimiento
10. Qu tienen en comn Larry Elli-
38
son y Bill Gates?
11.
12.
13.
14.
15.
16.

17.
18.
19.
20.
21.
22.
23.
24.
Conoces alguna base de datos que
almacene conguraciones?
En qu consiste la funcin de se-
guridad de una BBDD?
Cmo garantiza la integridad de
los datos un SGBD?
Qu es el diccionario de metada-
tos?
Qu quiere decir que una base de
datos soporta transacciones?
Qu es ODBC?
Qu quiere decir que una base de
datos permita concurrencia?
Cul es la funcin del lenguaje
TCL? Yla del lenguaje DML?
Cul es la extensin de un che-
ro que contiene una base de datos
Access?
Qu operaciones forman el mante-
nimiento de una tabla?
Describe dos formas de crear un
formulario en Access.
Cul es el tipo de datos que usa
Access para los valores monetarios?
Nombre 5 tipos de datos que per-
mite Access.
Describe dos formas de crear una
consulta en Access.
CAPTULO 2
Diseo lgico relacional
Objetivos
WIdenticar el signicado de la
simbologa de los diagramas
E/ R
Contenidos

Identicar las tablas del diseo
Representacin del problema lgico
hodelo de datos Identicar los campos que for-
Diagranlas E/R man parte de las tablas
.Identicar las relaciones entre
l l
E mode o E/R anphado tablas del diseo lgico
El modelo relacional Identicar los campos clave
Transformacin E /R al modelo
relacional Aplicar reglas de integridad
. . ,Identicar reglas de normaliza-
Normahzaclon , ,
cion

Identicar y documentar reglas
que no se pueden plasmar en el
diseo lgico
En este tema se trata a fondo e] diseo de una. base de datos, desde 1a inter-
pretacin yanlisis de un problema hasta el diseo ypropuesta de un modelo
que d solucin al problema planteado.
39
Bases de Datos
2.1. Representacin del problema
Una base de datos representa la informacin contenida en algn dominio del
mundo real. El diseo de base de datos consiste en extraer todos los datos relevantes
de un problema, por ejemplo, saber qu datos estn implicados en el proceso de
facturacin de una empresa que vende vehculos agrcolas, o, qu datos son necesarios
para llevar el control veterinario de los animales de un zoolgico.
Para extraer estos datos, se debe realizar un anlisis en profundidad del dominio
del problema, y saber, de esta forma, qu datos son esenciales para la base de datos y
descartar los que no son de utilidad. Una vez extrados los datos esenciales comienza
el proceso de modelizacin, esto es, construir, mediante una herramienta de diseo
de base de datos, un esquema que exprese con total exactitud todos los datos que
el problema requiere almacenar.
Tpicamente, los informticos analizan un problema a travs de diversas reuniones
con los futuros usuarios del sistema. Ntese, que generalmente, el problema no solo
se resuelve poniendo una base de datos a disposicin de un usuario, sino tambin
un conjunto de aplicaciones de software que automaticen el acceso a los datos y su
gestin. De estas reuniones, se extrae el documento ms importante del anlisis de un
sistema informatico, el documento de Especicacin de Requisitos Software
o E.R.S. A partir de esta E.R.S. se extrae toda la informacin necesaria para la
modelizacin de los datos.
<> Actividad 2.1: Busca en Internet la estructura del documento estndar IEEE
830 SRS o Software Requirements Specication. Descarga de internet algn ejem-
plo de SRS y examina cmo los analistas de software organizan los requisitos de una
aplicacin extrados de las conversaciones con usuarios.
2.2. El modelo de datos
La modelizacin consiste en representar el problema realizando mltiples abs-
tracciones 1 para asimilar toda la informacin de un problema, y de esta manera,
generar un mapa donde estn identicados todos los objetos de la base de datos.
Una de las acepciones de la RAE para abstraer es: Separar por medio de una operacin
intelectual las cualidades de un ob jeto para considerarlas aisladamente o para considerar el mismo
objeto en su pura esencia o nocin
40
Captulo 2. Diseo lgico relaciona]
Para modelar un problema de base de datos es necesario tener en cuenta las
siguientes consideraciones:
- Casi con toda probabilidad, la persona que realiza la modelizacin es un analis-
ta informtico, por lo que puede no ser un experto en el dominio del problema
que debe resolver (Contabilidad, Medicina, Economa, etc.). Se ha de con-
tar con la experiencia de un futuro usuario de la base de datos que conozca
a fondo todos los pormenores del negocio, y que, a su vez, puede no tener
conocimientos de informtica.
- Hay que modelar siguiendo unas directrices o estndares, es decir, usando una
losofa estndar para que el resto de la comunidad informtica pueda entender
y comprender el modelo realizado. De esta manera, ser posible aprovechar las
herramientas informticas software del mercado para realizar diseos.
n La base de datos estar gestionada por un SGBD que tendr unas caractersti-
cas tcnicas, de esta manera, no se tratar igual la implantacin de la base de
datos en un sistema l\&#39;I_ySQL que en uno DB2.
Para satisfacer estas necesidades, se suele recurrir a tres modelados:
1. El modelo conceptual. Es un modelo que tiene un gran poder expresivo para
poder comunicarse con un usuario que no es experto en informtica. Tiene una
gran potencia para representar el dominio del problema tal y como el usuario lo
concibe. El modelo que se usar en este libro ser el modelo Entidad /Relacin.
2. El modelo lgico. Este modelo es ms tcnico que el anterior. Los conceptos
expresados por este modelo, suelen ser difciles de entender por los usuarios y
generalmente tienen traduccin directa al modelo fsico que entiende el SGBD.
El modelo lgico elegido depender de la implementacin de la base de datos,
as, no es lo mismo modelizar una base de da.tos orientada a objetos, que
modelizar una base de datos relacional. El modelo que se usar en este libro
ser el Modelo Relacional.
3. El modelo fsico. Es el resultado de aplicar el modelo lgico a un SGBD concre-
to. Generalmente est expresado en un lenguaje de programacin de BBDD
tipo SQL. Este libro transformar el Modelo Relacional en modelo fsico a
travs del sublenguaje DDL de SQL.
La interaccin entre estos tres modelos es fundamental para un diseo de calidad:
1. Primero, se negocia con el usuario el modelo conceptual.
41
Bases de Datos
USUARIO
EXPERTO
MODELO lN FORMTIC
CONCEPTUAL DIS EADOR BBD D
PROGRAMADOR

BBDD
DOMINIO

DEL
PROBLEMA
Figura 2.1: Interaccin entre modelos.
2. Segundo, se pasa el modelo conceptual al modelo lgico, realizando una serie de
transformaciones necesarias para adaptar el lenguaje del usuario al del gestor
de base de datos.
3. Finalmente, se transforma el modelo lgico en fsico, obteniendo de esta forma
la base de datos nal.
En ocasiones, los diseadores experimentados, realizan el diseo de Ia base de
datos directamente en el modelo relacional. Esto puede representar un ahorro \
de tiempo si el problema a resolver es relativamente sencillo. Pero, general- l
mente, en problemas ms complejos, saltarse el diseo conceptual yla opinin
del usuario, da como resultado diseos incompletos e incoherentes.
El consejo del buen administrador. ..
2.3. Diagramas E/R
Para representar el modelo conceptual se usar el modelo Entidad/Relacin.
Este modelo consiste en plasmar el resultado del anlisis del problema mediante
diagramas entidad-relacin. 2
Tambin llamados en otras fuentas diagramas Entidad-Interrelacin, o en ingls Entity-
relationship
42
Captulo 2. Diseo lgico relacional
Estos diagramas fueron propuestos por Peter P. Chen a mediados de los aos 70
para la representacin conceptual de los datos y establecer qu relaciones existan
entre ellos.
La notacin es muy sencilla, y, precisamente, esta sencillez, permite representar
el mundo real de forma que el usuario pueda validar si el modelo propuesto se ajusta
perfectamente a la resolucin del problema.
A continuacin, se presentan las deniciones necesarias para comprender el mo-
delo entidad relacin.
2.3.1. Entidad
Cualquier tipo de objeto o concepto sobre el que se recoge informacin: cosa,
persona, concepto abstracto o suceso. Se representan mediante un cuadrado. Por
ejemplo: coche, casa, empleado, cliente, etc. Las entidades se representan grca-
mente mediante rectngulos y su nombre aparece en el interior (generalmente en
singular). Un nombre de entidad solo puede aparecer una vez en el diagrama.
Emple ados
Figura 2.2: Ejemplos de entidades.
Hay dos tipos de entidades: fuertes (o regulares) y dbiles. Las entidades dbiles
se representan mediante un cuadro doble. Una entidad dbil es una entidad cuya
existencia depende de la existencia de ot.ra entidad. Una entidad fuerte es una en-
tidad que no es dbil, es decir, existe por mritos propios. Un ejemplo tpico es la
existencia de dos entidades para la representacin de un pedido. Por un lado, la
entidad pedido representa informacin genrica sobre el pedido como la fecha del
pedido, fecha de envo, el estado, etc. Por otro lado, la entidad Detalle de Pedido
recopila las lneas de informacin especca sobre los artculos y unidades pedidas.
En este caso, Detalle de Pedido es una entidad dbil, puesto que la eliminacin del
pedido implica la eliminacin de las lneas de detalle asociadas al pedido, es decir,
no tiene sentido almacenar informacin especca del pedido si se ha eliminado ese
pedido.
Entidad Fuerte Entidad Dbil
Figura 2.3: Entidad fuerte y dbil.
43
Bases de Datos
2.3.2. Ocurrencia de una entidad
Es una instancia de una determinada entidad, esto es. una unidad del conjunto
que representa la. entidad. Ejemplo: La entidad coche tiene varias instancias, una
de ellas es el vehiculo seat ibiza con matrcula 1222FHD de color negro y con 5
puertas.
2.3.3. Relacin
Una relacin (o interrelacin), es una correspondencia o asociacin entre dos o
ms entidades.
Cada relacin tiene un nombre que describe su funcin. Normalmente debe utili-
zarse un nombre que exprese con totalidad la nalidad de la relacin, evitando poner
un nombre que pueda signicar muchas cosas, por ejemplo, tener, hacer, poseer.
Las relaciones se representan grcamente mediante rombos y su nombre aparece
en el interior. Generalmente este nombre de relacin corresponde a un verbo, pues
las relaciones suelen describir las acciones entre dos o ms entidades.
Las relaciones estn clasicadas segn su grado. El grado es el nmero de en-
tidades que participan en la relacin. Atendiendo a esta clasicacin, existen los
siguientes tipos de relaciones:
IRelaciones binarias: (grado 2), son aquellas que se dan entre dos entidades.
Figura 2.4: Ejemplo de relacin binaria.
n Relaciones ternarias: (grado 3), son aquellas que se dan entre tres entidades.
Figura 2.5: Ejemplo de relacin ternaria.
44
Captulo 2. Diseo lgico relacional
n Relaciones unarias o reexivas: (grado 1), Es una relacin donde la misma enti-
dad participa ms de una vez en la relacin con distintos papeles. El nombre de
estos papeles es importante para determinar la funcin de cada participacin.
Figura 2.6: Ejemplo de relacin reflexiva.
IRelaciones n-arias: (grado >3) Son aquellas donde participan ms de 3 enti-
dades. Aparecen en muy raras ocasiones, puesto que generalmente se pueden
descomponer en varias de grado 2 o de grado 3.
El consejo del buen administrador. . .
Si en tu diagrama entidad relacin aparecen relaciones de grado >3, es posible
que la interpretacin del problema sea incorrecta. Incluso si aparecen relaciones
de grado 3, intenta descomponerlas en varias de grado 2 para simplicar tu
modelo. Eso S, asegrate de que no es posible descomponerlas en varias de
grado 2 sin perder semntica.
2.3.4. Participacin
La participacin de una ocurrencia de una entidad, indica, mediante una pareja
de nmeros, el mnimo y mximo nmero de veces que puede aparecer en la relacin
asociada a otra ocurrencia de entidad. Las posibles participaciones son:
Participacin Signicado
Mnimo cero, Inximo uno
Mnimo uno. mximo uno
Mnimo cero, mximo n (Muchos)
Mnimo uno, mximo n (l\Iuchos)
Las reglas que denen la participacin de una ocurrencia en una relacin son las
reglas de negocio, es decir, se reconocen a travs de los requisitos del problema.
45
Bases de Datos
La notacin que se utiliza para expresar las participaciones en el diagrama entidad
relacin es poner al lado de la entidad correspondiente, la pareja de nmeros mximo
y mnimo de participaciones. Por ejemplo, los empleados pueden trabajar para varios
proyectos, o pueden estar de vacaciones (sin proyecto). Por otro lado, en un proyecto
trabajan de 1 a varios trabajadores. En este caso, la participacin de proyecto es
de (O,n), puesto que un empleado puede tener asignados de 0 a n proyectos. La
participacin del empleado es de (1,11) puesto que en un proyecto puede haber de 1
a n empleados. De esta manera, se indica al lado de la entidad proyecto, el par (0,n)
y al lado de la entidad empleado el par (Ln).
Figura 2.7: Participaciones de ocurrencias en una relacin.
<> Actividad 2.2: En un supermercado hay productos organizados en categoras
(frutas, ultramarinos, carnes, pescados, etc.). Cada producto pertenece a una nica
categora, ypuede haber categoras que todava no tengan ningn producto asignado,
sin embargo, no puede haber productos sin categora. Calcula las participaciones de
cada entidad en la relacin Producto Pertenece a Categora
Un producto puede ydebe pertenecer a una nica categora (mnimo 1 ymximo 1), por tanto la partici-
pacin de categora en la relacin con el producto es de (1,1). Auna categora pueden pertenecer muchos
productos (mximo n), ypuede no tener productos (mnimo 0), por tanto, los productos participan en las
categoras con cardinalidad (0.71).
n--. ..-.-
46
Captulo 2. Diseo lgico relaciona]
<> Actividad 2.32 Las pginas web contienen controles de muchos tipos (campos
de texto, listas desplegables, etc.). Si se quiere almacenar en una base de datos, cada
pgina web, qu tipos de controles tiene. qu participaciones habra que asignar?
Justica tu respuesta respondiendo a preguntas del tipo un control, (por ejemplo,
un cuadro de texto), en cuntas pginas puede estar como mximo y mnimo?
<> Actividad 2.4: Los clientes pueden realizar pedidos a travs de sus represen-
tantes de ventas. Indica las entidades que hay, relaciones y sus respectivas partici-
paciones.
2.3.5. Cardinalidad
La cardinalidad de una relacin se calcula a travs de las participaciones de sus
ocurrencias en ella. Se toman el nmero mximo de participaciones de cada una de
las entidades en la relacin. Por ejemplo, la relacin organiza de la actividad 2.2,
tendra una cardinalidad de 1:N, puesto que por el lado de las categoras, el mximo
de (1,1) es 1, y por el lado de los productos, el mximo de (O,n) es N.
y 1:N un
Ars 30m5
Figura 2.8: Clculo de la Cardinalidad de una relacin.
De esta manera, se clasican las siguientes cardinalidades:
a Cardinalidad 1:1 Esta cardinalidad especica que una entidad A puede estar
vinculada mediante una relacin a una y solo una ocurrencia de otra entidad
B. A su vez una ocurrencia de la entidad B solo puede estar vinculada a
una ocurrencia de la entidad A. Por ejemplo, se puede limitar el nmero de
directores de departamento mediante una relacin 1:1. As, un empleado solo
puede ser jefe de un departamento, y un departamento solo puede tener un
jefe.
47
Bases de Datos
contabilidad
administracin

informtica

rrhh
Figura 2.9: Ejemplo de cardinalidad 1-1.
ICardinalidad 1:N (o 1:Muchos) Esta relacin especica que una entidad
A puede estar vinculada mediante una relacin a varias ocurrencias de otra
entidad B. Sin embargo, una de las ocurrencias de la entidad B solo puede
estar vinculada a una ocurrencia. de la entidad A. Por ejemplo, un represen-
tante gestiona las carreras de varios actores, y un actor solo puede tener un
representante .
fernando
Figura 2.10: Ejemplo de cardinalidad 1-N.
ICardinalidad M:N (o Muchos:Muchos) O tambin N zM, esta cardinali-
dad especica que una entidad A puede estar vinculada mediante una relacin
a varias ocurrencias de la entidad B. ya su vez, una ocurrencia de la entidad
B puede estar vinculada a varias de la entidad A. Por ejemplo. un empleado
48
Captulo 2. Diseo lgico relacional
puede trabajar para varios proyectos; al mismo tiempo, en un mismo proyecto,
pueden trabajar varios empleados.
Figura 2.11: Ejemplo de cardinalidad N-M.
Como puede observarse en las guras anteriores, la notacin para representar el tipo
de relacin segn su cardinalidad, consiste en escribir el tipo de cardinalidad justo
encima del rombo. Existen numerosas alternativas a esta nomenclatura, siendo muy
tpicas las dos siguientes:
u Puntas de echa: En esta notacin. la lnea de la relacin que termina en echa,
indica la rama N de la cardinalidad de la relacin.
Figura 2.12: Ejemplo de notacin puntas de echa.
n Notacin classic de MySQL Workbench: En esta notacin, las relaciones se
expresan con un pequeo rombo, rellenando en negro la mitad de la gura, en
7
el lado de la entidad cuya cardinalidad es l\
Equlpm
asquoo INT l
Name vuaonnus)
Jugador
icuuqanor INT
Not-mn VARCHARQS)
Dasal INT
Eutincsjcmho INT (FK)
Figura 2.13: Ejemplo de Iiotacin classic de MySQL Workbench.
49
Bases de Datos
<> Actividad 2.5: Hay multitud de notaciones distintas para realizar los diagramas
entidad relacin. Todas ellas, tratan de expresar los conceptos expuestos en este libro,
pero de diferentes formas y con diferentes elementos grcos. Busca en Internet otros
tipos de notaciones para realizar diagramas entidad relacin. Puedes buscar, entre
otros, las notaciones de Alartin, [DEF 1X o Pies de cuervo (Crows foot).
2.3.6. Cardinalidad de relaciones no binarias
Para calcular la Cardinalidad de una relacin ternaria se tomar una de las tres
entidades y se combinan las otras dos. A continuacin, se calcula la participacin de
la entidad en la combinacin de las otras dos. Posteriormente, se har lo mismo con
las otras dos entidades. Finalmente, tomando los mximos de las participaciones se
generan las cardinalidades.
CardinaIidad=max(0,1):max(1,1):max(0,n)

=1:1:N
EMISA
EIEZENTE
Figura 2.14: Cardinalida.d de una relacin ternaria.
Por ejemplo, en la gura 2.14 se distinguen tres participaciones, la que se produce
entre empresa y auditora-expediente, la que se distingue entre auditora y empresa-
expediente, y por ltimo la de expediente con auditora-empresa:
- Una empresa Cuntos expedientes puede tener con una auditora? Puede tener
un mnimo de 0 y un mximo de n. Participacin de Empresa (,n).
IUna. auditora Cuntos expedientes puede tener con una empresa? Puede tener
un mnimo de O y un mximo de 1. Participacin de Auditora (0,1).
u Un expediente A cuntas empresas auditadas por la auditora puede pertene-
cer? Un expediente solo puede pertenecer a una empresa auditada (1,1), por
tanta Participacin de Expediente (1.1).
50
Captulo 2. Diseo lgicorelaciona]
<>Actividad 2.5: Calculala cardinalidad delasiguiente relacinternaria:
Hay que contestar a las siguientes preguntas: Cuntos autores puede tener un determinado libro publicado
en una detenninada editorial?
Mnimo1, mximon, participacindeAutor (1,n).
Cuntos libms puede tener un detenninado autor publicados en una determinada editorial?
Mnimo 0, mximo n, participacin de Libro (0,11).
En cuntas editoriales puede un detenninado autor publicar un mismo libm?
Mzimo 1, mximo I. Participacin de Editorial (1,1).
Tomando los mximos de cada participacin se obtiene que la cardinalidad de la relacin de de 1:N:N
oActividad 2.72 Calculala cardinalidad delas siguientes relaciones binarias:
I Hombre est casadocon Mujer, en una sociedad1nonogmica.
I Hombre est casadocon Mujer, en una sociedadmachistapoligmica.
- Hombre est casadoconMujer, en una sociedad poligmica liberal.
- PescadorpescaPez.
- Arquitecto disea Casa.
I Piezas forman Producto.
I Turista viaja Hotel.
I Jugador juega en Equipo.
u Poltico gobiernaen Pas.
51
Bases de Datos
<> Actividad 2.8: Calcula la Cardinalidad de las siguientes relaciones ternarias:
IMecnico arregla Vehculo en Taller.
n Alumno cursa Ciclo en Instituto.
IVeterinario administra [bledicacin al Animal.
2.3.7. Cardinalidad de las relaciones reexivas
En las relaciones reexivas, la misma entidad juega dos papeles distintos en la
relacin. Para calcular su Cardinalidad hay que extraer las participaciones segn
los dos roles existentes. Por ejemplo, en la relacin reflexiva Es jefe, la entidad
Empleado aparece con dos Roles. El primer rol es el empleado como jefe, y el se-
gundo rol el empleado como subordinado. As, se puede calcular las participaciones
preguntando:
ICuntos subordinados puede tener un jefe? Un jefe puede tener un mnimo
de 1 y un mximo de n: (Ln)
ICuntos jefes puede tener un subordinado? Un mnimo de O (un empleado
sin jefes sera el responsable de la empresa) y un mximo de 1 (suponiendo
una estructura, tpicamente piramidal): (0,1).
Por tanto, la relacin sera de Cardinalidad 1:N
1:N
(0,1)
Figura 2.15: Cardinalidad de una relacin reflexiva.
52
Captulo 2. Diseo lgico relacional
<> Actividad 2.9: Justica cul seran las participaciones y la cardinalidad de la
siguiente relacin, teniendo en cuenta que:
n Una gura puede contenerse a s misma (como en el ca.so de los fractales).
IUna gura puede estar formada por mltiples tipos distintos de guras.
2.3.8. Atributos yDominios
Los atributos de una entidad son las caractersticas o propiedades que la denen
como entidad. Se representan mediante elipses conectadas directamente a la entidad.
Por ejemplo, para representar la entidad HOTEL. son necesarias sus caractersti-
cas, esto es, el nmero de plazas disponibles, su direccin, la ciudad donde se en-
cuentra, etc.
Figura 2.16: Ejemplo de atributos.
Atributo Clave
En la gura anterior, aparece el atributo cdigo, subrayado. Este atributo se
denomina clave, y designa un campo que no puede repetir ninguna ocurrencia de
entidad. Se dice. que este campo identica unvocamente a una entidad, es decir,
53
Bases de Datos
que con la sola referencia a un campo clave se tiene acceso al resto de atributos de
forma directa. Ejemplo: El DNI es el campo clave de una persona, pues ninguna
persona tiene el mismo DNI. Por tanto, si se especica el DNI de esa persona se
sabe exactamente a qu ocurrencia de persona se reere. Todas las entidades fuertes
deberan tener, al menos, un atributo clave. Ntese que una entidad puede formar
la clave mediante varios atributos, en este caso, se dice que la clave de la entidad
es la suma de esos atributos y que la entidad tiene una clave compuesta. Si la
clave est formada por un nico atributo se dice que es atmica. Por ejemplo, para
identicar de forma nica una oferta de trabajo se necesitara el nombre del puesto
y el nombre de la empresa que lo oferta.
Atributo de relacin
Un atributo de relacin es aquel que es propio de una relacin y que no puede
ser cedido a las entidades que intervienen en la relacin. Por ejemplo, un mecnico
repara un vehculo, la reparacin se realiza en una determinada fecha.
Figura 2.17: Ejemplo de atributo de relacin.
Dominios
Cada una de las caractersticas que tiene una entidad pertenece a un dominio.
El dominio representa la naturaleza del dato, es decir, si es un nmero entero, una
cadena de caracteres o un nmero real. Incluso naturalezas ms complejas, como una
fecha o una hora (con minutos y segundos). Por ejemplo, los siguientes atributos de
la entidad empleado pertenecen a los siguientes dominios:
Atributo
DNI Cadena de Caracteres de longitud 10
Nombre Cadena de Caracteres de longitud 50
Fecha_Nacin1iento Fecha
Direccin Cadena de Caracteres de longitud 100
Sueldo Nmeros reales
Nmero de hijos Nmeros enteros
Departamento Departamentos
54
Captulo 2. Diseo lgico relaciona]
Si un dominio se especica mediante el tipo de datos, como en el caso de DNI,
Nombre o Fecha_Nacimiento se dice que se dene por zntensin. Si se especica
mediante un conjunto de valores, como en el dominio Departamentos, que puede
tener los valores (RRHH, Informtica. Administracin o Contabilidad), la definicin
del dominio es por extensin.
2.3.9. Tipos de atributos
Se pueden clasicar los atributos segn las siguientes restricciones:
Atributos obligatorios: Un atributo debe tomar un valor obligatoriamente.
Atributos opcionales: Un atributo puede no tomar un valor porque sea desco-
nocido en un momento determinado. En este caso, el atributo tiene un valor
nulo.
Atributos compuestos: Un atributo compuesto es aquel que se puede descompo-
ner en atributos ms sencillos, por ejemplo, el atributo hora_de_salida se puede
descomponer en dos (hora y minutos).
Atributos univaluados: Un atributo que toma un nico valor.
Atributos multivaluados: Estos atributos pueden tomar varios valores, por ejem-
plo el atributo telfono puede tomar los valores de un telfono mvil y un
telfono jo.
Atributo derivado: Son aquellos cuyo valor se puede calcular a travs de otros
atributos. Por ejemplo, el atributo Edad, se puede calcular a partir de la fecha
de nacimiento de una persona.
Al igual que con la mayora de las notaciones, no existe unanimidad a la hora de
dibujar en un diagrama los tipos de atributos. Una de las ms extendidas entre los
diseadores de bases de datos es la siguiente:
Figura 2.18: Notacin para los distintos tipos de atributos.
55
Bases de Datos
2.3.10. Otras notaciones para los atributos
Al igual que para las entidades, los atributos tienen multitud de notaciones,
y, aunque la original adoptada por Peter Chen es la ms usada hasta ahora, por
simplicar la construccin de mapas a travs de herramientas software, se opta
por usar otras notacones que producen mapas ms manejables. Por ejemplo, la
herramienta MySQL Workbench utiliza una sintaxis muy similar a la que usa la
notacin UML para representar las caractersticas de un objeto:
Nombre de la
entidad
Dominio
Nombre del atributo
Eqniposjcqubo INT (PK)
Figura 2.19: Otras formas de representar atributos
<> Actividad 2.1Z Justica qu tipo de atributos son los siguientes atributos de
la entidad Persona:
n Fecha de Nacimiento (p.ej. 24/11/1976)
ILugar de Nacimiento (p.ej. Zaragoza)
- Edad (p.ej. 36 aos)
IEsMayorDeEdad (p. ej: S)
nDNI (p.ej. 55582739A)
nTelfonos (p.ej. 925884721, 657662531)
- Apellidos
56
Captulo 2. Diseo lgico relacional
2.3.11. Las entidades dbiles
Como se ha expuesto anteriormente, las entidades dbiles dependen de una en-
tidad fuerte mediante una relacin. La relacin que une ambas entidades tambin
es dbil, puesto que tambin desaparece si desaparece la entidad fuerte. En estos
casos, la relacin tiene una dependencia que puede ser de dos tipos:
nDependencia de existencia: Este tipo de dependencia. expresa que, las ocu-
rrencias de una entidad dbil, no tienen ningn sentido en la base de datos sin
la presencia de las ocurrencias de la entidad fuerte con la que estn relacio-
nadas. Por ejemplo, las transacciones que se dan en una cuenta bancaria, no
tienen sentido si no existe la cuenta bancaria a la que estn asociadas.
CBIIA EAN CAE.
Figura 2.20: Ejemplo de entidad dbil con dependencia de existencia.
- Dependencia de identicacin: Este tipo se produce cuando, adems de
la dependencia de existencia, la entidad dbil necesita a la fuerte para poder
crear una clave, de tal manera que pueda completar la identicacin de sus
ocurrencias. Por ejemplo, una empresa fabricante de software crea aplicaciones:
1. La compaa se identica por su nombre (por ejemplo, Microsoft).
2. Las aplicaciones se identican por su nombre comercial, por ejemplo
(Office).
3. Cada compaa de software pone un nombre a ca.da una de sus aplicacio-
nes.
c: M; ANIA :E : TwAifz-Z
Figura 2.21: Ejemplo de entidad dbil con dependencia de identicacin.
De esta forma puede ocurrir que haya dos aplicaciones con el mismo nombre y que
pertenezcan a dos compaas distintas (Ofce de Microsoft y Office de Sun). En
57
Bases de Datos
este caso para identicar a cada aplicacin de forma nica, hace falta el nombre
de la aplicacin y adems, el nombre de la compaa. As, Aplicacin depende en
identicacin de la Compaa yel nombre de la aplicacin es una clave dbil. Se
expresa de la siguiente forma:
Una vez ms, para representar las dependencias, cada herramienta usa su propia
notacin. Por ejemplo, en el caso de MySQL Workbench, no diferencia entre enti-
dades fuertes o dbiles (las llama a todas tablas). y crea las relaciones con lneas
discontinuas en caso de no tener dependencia de identicacin (non identifying re-
lationship), y con lnea continuas en caso de tener dependencia de identicacin
(identifying relationship).
Rel-cinn
&#39;=""&#39; --- """.&#39;
Norma vmoweids) kmlucmn
i___-_&#39;
Relacin con
dependencia de
identicacin
cuenta Banca: INT
Codigosuursal VARCJ-MRu)
000m Entidad VARCHRM)
Doftoi VA-M?)
Nuneroctiena VAHAHW)
DN Jldar VARG-IARUO)
idfrmsaodon INT
CidDECNAL
Debe-IBM VAHZHAHH
Cuenta Buuajtnumta Bancaria NT (PK)
Figura 2.22: Ejemplo de notacin. Dependencias en MySQL Workbench.
<> Actividad 2.11: Qu tipo de relacin de dependencia tienen las siguientes
entidades?
IUn toro (entidad dbil) pertenece a una ganadera (entidad fuerte). Al toro se
le identica por el nmero de toro, y el nombre de su ganadera, puesto que
puede haber varios toros con el mismo nmero, pero pertenecientes a distintas
ganaderas.
IEn el acceso al parking de una empresa un empleado (entidad fuerte) tiene un
vehculo (entidad dbil).
58
Captulo 2. Diseo lgico relacional
El consejo del buen administrador. ..
Muchos diseadoresseabstraen del hecho de tener entidades fuertes y dbiles
y, tal y como hace A-IySQL Workbencli, no distinguen entre entidades fuertes y
dbiles. En general, es buena idea simpli car el diseo ( losofa KISS - Keep
it simple, sir), pero se ha de ser consciente de la prdida de semntica que
implica.
<>Actividad 2.12: Descargael software DIA parala creacindediagramasde
diversos tipos. Puedes encontrarlo de forma gratuita en la pgina web
http: //sourceforge .net/projects/dia-installer/.
"5DiagramILdiI (causeiswinwigng) -dua
Arthivo Editar1er Lupi: QbjetosSelecciona!
Q C Crea un diagrama nuevo y con los smbolos
iii] 9&#39;&#39;"1- " c.-. delosdiagramas entidad relacin delanota-
cinChen(ER)modelalarelacinCliente-
adquiere-Producto con los atributos que sete
ocurran. Identi ca el icono de cada gura con
los smbolos Entidad, Entidad Dbil, Atribu-
to (consusmltiples tipos) y Relacin.
2.4. El modelo E / R ampliado
La primera concepcin del modelo entidad relacin tuvo, por las limitaciones
tecnolgicas de la poca, un alcance bastante limitado, que, con los aos, se ha ido
desarrollando hasta alcanzar un nivel satisfactorio para los diseadores de basesde
datos. El modelo Entidad-Relacin Extendido, o Ampliado, incorpora todos los ele-
mentos del modelo entidad relacin incluyendo los conceptos de subclase, superclase
junto a los conceptos de especializacin y generalizacin.
2.4.1. Generalizacin y Especializacin
Una entidad E es una generalizacin de un grupo de entidades E1, E2, En, si
cada ocurrencia de cada una de esas entidades es tambin una ocurrencia de E.
59
Bases de Datos
GENERALIZACIN ESPECIALIZACIN
Figura 2.23: Generalizacin y Especializacin.
Todas las propiedades de la entidad genrica E son heredadas por las subenti-
dades. Adems, cada subentidad tendr sus propios atributos independientes de la
generalizacin.
Las subentidades son especializaciones de la entidad general, se puede decir que
las subentidades o subclases tienen una relacin del tipo ES UN con la entidad padre
o superclase.
La relacin de generalizacin se representa mediante un tringulo ssceles pe-
gado por la base a la entidad superclase. En la gura siguiente Empleado es la
superclase y los directivos, comerciales y tcnicos son subclases. En la relacin se
adjunta un atributo que indica cmo debe interpretarse la relacin de la superclase
con la subclase. La generalizacin Empleado que puede ser un directivo, un tcnico
o un comercial. Cada subentidad tiene sus propios atributos yrelaciones, pero todas
heredan los atributos nombre y DNI de la entidad padre (Empleado).
IIF JITZTC
Figura 2.24: Ejemplo de generalizacin.
60
Captulo 2. Diseo lgico relaciona]
Tipos de especializacin
Se puede agregar ms semntica al diagrama entidad relacin extendido co1nbi-
nando los siguientes tipos de especializacin:
IEspecializacin Exclusiva: En este caso, cada una de las ocurrencias de la su-
perclase solo puede materializarse en una de las especializaciones. Por ejemplo,
si un empleado es un directivo, no puede ser un tcnico o un comercial. Para
representar esta especializacin exclusiva, el tringulo de la jerarqua lleva un
arco.
Figura 2.25: Especializacin exclusiva.
IEspecializacin Inclusiva: Se produce cuando las ocurrencias de la supercla-
se pueden materializarse a la. vez en varias ocurrencias de las subclases. En
este caso, el empleado directivo, podra ser tambin tcnico y comercial. Se
representa sin el arco, como en la gura 2.24.
IEspecializacin Total: Se produce cuando 1a entidad superclase tiene que ma-
terializarse obligatoriamente en una de las especializaciones. Se representan
aadiendo un pequeo crculo al tringulo de la generalizacin:
Figura 2.26: Especializacin Total.
n Especializacin Parcial: La entidad superclase no tiene por qu materializarse
en una de las especializaciones (es opcional). Se representa sin el pequeo
circulo, como en la gura 2.24.
61
Bases de Datos
<> Actividad 2.13: Crea un E/R para almacenar datos de los distintos tipos de
ordenadores que puede tener una organizacin. Clasifcalos en Sobremesa, Porttiles
y Servidores, y asigna correctamente los atributos: NSerie, Procesador, Memoria,
CapacidadDisco, TipoBatera, DuracinBatera, NProcesadores y TipoProxy.
2.5. Construccin de un diagrama E/ R
A cont.inuacin se presenta una gua metodolgica. para crear un entidad relacin
a partir de un anlisis de requisitos:
1. Leer varias veces el problema hasta memorizarlo.
2. Obtener una lista inicial de candidatos a entidades, relaciones y atributos. Se
realiza siguiendo los siguientes consejos:
n Identicar las entidades. Suelen ser aquellos nombres comunes que son im-
portantes para el desarrollo del problema. Por ejemplo, empleado, vehcu-
lo, agencia, etc. En principio, todos los conceptos deberan estar perfec-
tamente especicados en el documento de requisitos, pero, de no existir
el documento ERS, quiz solo se disponga de extractos de conversacio-
nes con usuarios en las que se hacen referencias vagas a ciertos objetos,
teniendo que hacer un importante ejercicio de abstraccin para poder dis-
tinguir si son entidades, atributos, etc. Por ejemplo, un mecnico que tan
solo habla de ciertos modelos de vehculos pertenecientes a determinadas
personas, pero que nunca hace referencia a los vehculos Diesel que sern
fundamentales identicar para el correcto diseo de la base de datos.
- No hay que obsesionarse en los primeros pasos por distinguir las entidades
fuertes de las dbiles. Si es trivial, se toma nota de aquellas que parezcan
claramente entidades dbiles. De lo contrario, se apuntan como entidades
sin especicar si son fuertes o dbiles.
n Extraer los atributos de cada entidad, identicando aquellos que pueden
ser clave. Se suelen distinguir por ser adjetivos asociados a un nombre
comn seleccionadas como entidades. Por ejemplo, color, que es un adje-
tivo, puede ir asociado a la entidad vehculo. Adems, se debe establecer
el tipo de atributo, seleccionando si es opcional, obligatorio, multivaluado,
compuesto o derivado. Si es compuesto se indica su composicin, y si es
derivado, cmo se calcula. Es bastante til apuntar sinnimos utilizados
para el atributo para eliminar redundancias.
62
Captulo 2. Diseo lgico relacional
IEs fcil identicar las generalizaciones si se obtiene un atributo que es
aplicable a ms de una entidad. En ese caso, se puede intentar aplicar
una generalizacin /especializacin, indicando cul es la superclase y cul
las subclases. Adems, se deben especicar los tipos de especializacin
(inclusiva, exclusiva, parcial, total).
IIdenticar los atributos de cada relacin. Se suelen distinguir, al igual
que los de entidad, por ser adjetivos, teniendo en cuenta que para que
sean de relacin, solo deben ser aplicables a la relacin y no a ninguna
de las de las entidades relacionadas.
ITambin es posible que los nombres comunes contengan muy poca in-
formacin y no sea posible incluirlas como entidades. En este caso, se
pueden seleccionar como atributos de otra entidad, por ejemplo, el autor
de un libro puede ser una entidad, pero si solo se dispone del nombre del
autor, no tiene sentido incluirlo como una entidad con un nico atributo.
En este caso, se puede incluir como atributo de la entidad Libro.
n Extraer los dominios de los atributos. Siempre es buena prctica, ir apun-
tando, aunque en el diagrama entidad relacin no se exprese explcita-
mente, a qu dominio pertenece cada atributo. Por ejemplo, el Salario
pertenece a los nmeros reales (Salario: Reales), o el color de un objeto
puede ser verde, amarillo o rojo (Color: Verde, Amarillo, Rojo).
- Identicar las relaciones. Se pueden ver extrayendo los verbos del texto del
problema. Las entidades relacionadas sern el sujeto y el predicado unidos
por el verbo que hace de relacin. Por ejemplo, agente inmobiliario vende
edicio. En este caso el agente inmobiliario representara una entidad el
edicio la otra entidad y vende sera la relacin.
IUna vez identicada las relaciones, hay que anar cmo afecta la relacin
a las entidades implicadas. Este es el momento de distinguir las fuertes de
las dbiles haciendo preguntas del tipo tiene sentido esta ocurrencia de
entidad si quito una ocurrencia de la otra entidad? se pueden identicar
por s solas las ocurrencias de cada entidad? Si a la primera pregunta
la respuesta es negativa, las dos entidades son fuertes, si no, alguna de
ellas es dbil. Si la respuesta a la segunda es positiva, dependern solo en
existencia, si es negativa, alguna de las dos depende en identicacin de
la otra.
3. Averiguar las participaciones y cardinalidades. Generalmente se extraen del
propio enunciado del problema. Si no vienen especicadas, se elegir la que
almacene mayor cantidad de informacin en la base de datos.
63
Bases de Datos
4. Poner todos los elementos listados en el paso 2en un mapa y volver a considerar
la pertenencia de cada uno de los elementos listados a su categora. As, se
replantear de nuevo si cierto atributo es una entidad, o si cierta entidad
puede ser una relacin, etc.
5. Renar el diagrama hasta que se eliminen todas las incoherencias posibles,
volviendo a los pasos anteriores en caso de encontrar algn atasco mental o
conceptos dudosos que diculten la continuacin del anlisis. Es bueno, en
estas circunstancias discutir con compaeros u otros expertos sobre el diseo
realizado.
6. Si hay dudas sobre el enunciado o sobre los requisitos, o se han quedado algunas
cosas en el tintero, ser necesario acudir al responsable del documento ERS o
volver a concertar una entrevista con el usuario para aclarar conceptos. En este
caso, se aclararn las dudas y se volver al punto 2 para reiniciar el anlisis.
Sabas que . . . 7En muchas ocasiones, cuando no se sabe cmo continuar,
o no se encuentra la solucin de un problema, basta con explicarle el problema
a otra persona, aunque esa persona no tenga ni idea del tema o no sea experta
en la materia. Automticamente, la solucin aparece. Se ha iniciado incons-
cientemente un proceso mental para ordenar las ideas que ha desembocado en
la resolucin del problema.
2.6. El modelo relacional
El objetivo principal del modelo relacional es proteger a.l usuario de la obligacin
de conocer las estructuras de datos fsicas con las que se representa la informacin
de una base de datos. Desvincular estas estructuras de datos. que son complejas por
naturaleza, del diseo lgico (Modelo Relacional), permite que la base de datos se
pueda implementar en cualquier gestor de bases de datos relacional (Oracle, MySQL,
DB2, etc.) A continuacin se enumeran las caractersticas fundamentales del modelo
relacional:
n La relacin es el elemento fundamental del modelo. Los usuarios ven la base
de datos como una coleccin de relaciones. Estas relaciones se pueden operar
mediante el Algebra Relacional.
-El modelo relacional es independiente de la forma en que se almacenan los
datos y de la forma de representarlos, por tanto, la base de datos se puede
64
Captulo 2. Diseo lgico relacional
implementar en cualquier SGBD y los datos se pueden gestionar utilizando
Cualquier aplicacin grca. Por ejemplo. se pueden manejar las tablas de una
base de datos MySQL u Oracle con Microsoft Access. Vase prctica 5.3.
IAl estar fundamentado en una fuerte base nlatemtica. se puede demostrar la
ecacia del modelo a la hora de operar conjuntos de datos.
2.6.1. Las relaciones en el modelo relacional
Se dene una relacin como un conjunto de atributos. cada uno de los cuales per-
tenece a un dominio, y que posee un nombre que identica la relacin. Se representa
grcamente por una tabla con columnas (atributos) ylas (tuplas). El conjunto de
tuplas de una relacin representa el cuerpo de la relacin y el conjunto de atributos
y el nombre representan el esquema.
Relacin:lmpue5roVehculos Nombte jrEsquema)
m Telfonooueo man
Seat Ibiza TDI 19einer-w &#39; . 1
Volskwaen Polo TDI 1.o 918773621 4231 mo
Renault La ; una Coup m 929883762 741mm
Fiat Punto 1.o 646553421 923mm:
Figura 2.27: Denicin de Relacin.
Sabas que . . . 7Actualmente, los modelos lgicos ms extendidos con
diferencia son el modelo relacional y los diagramas de clases que utiliza UML
para modelar las bases de datos orientadas a objetos. El modelo relacional de
Codd se ajusta a la perfeccin al modelo entidad/relacin de Chen creado en
la fase de modelizacin conceptual. No as el modelo de UML, que requiere
tcnicas ms complejas y especcas como los casos de uso o los diagramas de
transicin de estados.
2.6.2. Otros conceptos del modelo relacional
A continuacin se denen los conceptos necesarios para transformar el modelo
conceptual (diagrama entidad-relacin) en el modelo lgico (modelo relacional).
uAtributo: Caractersticas que describen a una entidad o relacin.
IDominio: Conjunto de valores permitidos para un a.tributo. Por ejemplo,
cadenas de caracteres. nmeros enteros, los valores S o No, etc.
65
Bases de Datos
- Restricciones de semntica: Condiciones que deben cumplir los datos para
su correcto almacenamiento. Hay varios tipos:
o Restricciones de clave: Es el conjunto de atributos que identican de
forma nica a una entidad.
o Restricciones de valor nico (UNIQ UE): Es una restriccin que impide
que un atributo tenga un valor repetido. Todos los atributos clave cum-
plen esta restriccin. No obstante es posible que algn atributo no sea
clave y requiera una restriccin de valor nico. Por ejemplo, el nmero
de bastidor de un vehculo no es clave (lo es la matrcula) y sin embargo,
no puede haber ningn nmero de bastidor repetido.
o Restricciones de integridad referencial: Se da cuando una tabla tiene una
referencia a algn valor de otra tabla. En este caso la restriccin exige
que exista el valor referenciado en 1a otra tabla. Por ejemplo, no se puede
poner una nota a un alumno que no exista.
o Restricciones de dominio: Esta restriccin exige que el valor que puede
tomar un campo est dentro del dominio denido. Por ejemplo, si se
establece que un campo DNI pertenece al dominio de los nmeros de 9
dgitos +1 letra , no es posible insertar un DNI sin letra, puesto que la
restriccin obliga a poner al menos 1 letra.
o Restricciones de vericacin (CHECK): Esta restriccin permite compro-
bar si un valor de un atributo es vlido conforme a una expresin.
o Restriccin de valor NULO (NULL o NOT NULL): Un atributo puede
ser obligatorio si no admite el valor NULO o NULL, es decir, el valor falta
de informacin o desconocimiento. Si admite como valor el valor NULL,
el atributo es opcional.
o Disparadores o triggers: Son procedimientos que se ejecutan para hacer
una tarea concreta en el momento de insertar, modicar o eliminar infor-
macin de una tabla.
o Restricciones genricas adicionales o aserciones (ASSERT). Permite va-
lidar cualquiera de los atributos de una o varias tablas.
IClave: Una clave es un conjunto de atributos que identican de forma nica
una ocurrencia de entidad. En este caso, las claves pueden ser simples (atmi-
cas) o compuestas. Adems, hay varios tipos de clave:
o Superclave: Identican a una entidad (pueden ser no mnimas). Por ejem-
plo, para un empleado, las superclaves posibles son el DNI, o el DNI+Nombre.
o el DNI+Nombre+Numero de la Seguridad Social, etc.
66
Captulo 2. Diseo lgico relacional
o Clave Candidata: Es la mnima Superclave (en el caso anterior el DNI, O
el Nmero de la seguridad social).
o Clave Primaria: Es la clave candidata elegida por el diseador como cla-
ve denitiva (en el ejemplo anterior se elegira el DNI por ser la. ms
representativa para un empleado).
o Clave fornea: Es un atributo de una entidad, que es clave en otra entidad.
Por ejemplo. la nota en un mdulo de una asignatura corresponde a un
DNI, que es clave de Otra entidad. En este caso el DNI es una clave fornea
en la tabla notas.
2.7. Transformacin de un diagrama E / R al mo-
delo relacional
MODELO CONCEPTUAL (CHEN) *MODELO RELACIONAL (CODD)
Figura 2.28: Transformacin del modelo E/ R en relacional.
Para realizar esta transformacin se siguen las siguientes reglas:
Transformacin de entidades fuertes
Para cada entidad A, entidad fuerte. con atributos ((11,612, .. .,a,,) se crea una
tabla A (con el nombre en plural) con n Columnas correspondientes a los atributos
de A, donde cada la de la tabla A corresponde a una ocurrencia de la entidad A.
La clave primaria de la tabla A la forman los atributos clave de la entidad A.
Figura 2.29: Paso a tablas de entidades fuertes.
En el diagrama E-R de la gura 2.29, las tablas generadas son:
CATEGORIAS
67
Bases de Datos
Transformacin de entidades dbiles
Para cada entidad dbil D, con atributos Cd1,Cd2,. .. ,cd,d+1,dt+2,.. .,d,,, donde
cdl, Cdg, .. .,cd, son los atributos clave de la entidad D, y una entidad fuerte F de la
que depende D con atributos clave (c f1, c f2, . . .,cfm): se crea una tabla D con m+n
columnas Cd1,Cd2,. . . ,cd,,, d+1,d+2, .. .,d,,,cf1,cf2, .. ., cfm correspondientes a los
atributos de D y a los atributos clave de F. Si solo tiene dependencia de existencia, la
clave primaria de la tabla Dser la unin de los atributos clave de la entidad D. Si la
entidad dbil D, adems, tiene una dependencia de identicacin, la clave primaria
de la tabla D ser. la unin de los atributos cd, Cdg, . . . , cdt, cfl, Cfg, .. .,cf,,,, es decir,
la unin de los atributos clave de la entidad dbil D y de la entidad fuerte F.
Figura 2.30: Paso a tablas de una entidad dbil.
En el diagrama E-R de la gura 2.30. las tablas generadas son3:
CUENTAS_BANCARIAS(NCuenta, saldo)
TRANSACCIONES(Cdigo,Tipo,Cantidad)
Transformacin de relaciones
Por cada relacin R entre entidades E1, E2, . . ., EN.
La clave de E,- es C,- =a,-1,a,2, . . .,a,-N.
Regla general para las relaciones: se crea una tabla con todos los campos claves
de las entidades relacionadas y los atributos de la relacin. La clave primaria de la
tabla generada es la suma de los atributos claves de las entidades relacionadas, y
cada clave incorporada a la tabla. ser una clave fornea que referencia a la tabla
de la que se importa.
Por ejemplo, en la gura 2.31 hay una relacin ternaria con dos entidades con
clave compuesta, aula y asignatura, y otra, estudiante. que tiene una clave simple. La
transformacin al modelo relacional exige la creacin de una tabla para la relacin.
La tabla ESTUDIOS, tendr como columnas los atributos clave del aula, los de
asignatura y el atributo clave de estudiante, todos ellos formando la clave primaria y,
3Falta incorporar en la gura el atributo NCuenta a la tabla TRANSACCIONES, aqu se
ha omitido para centrar la atencin en los atributos de las entidades. Consultar la seccin de
excepciones en la transformacin de relaciones.
68
Capitulo 2. Diseo lgico relacional
al mismo tiempo, actuando como claves forneas de sus respectivas tablas. Adems,
se incorpora el atributo de relacin hora.
Figura 2.31: Paso a tablas de una relacin.
AULAS(Numero, Planta. Situacin)
ESTUDIANTES(N1\Iatricu1a,NombreDireccion)
ASIGNATURAS(Nombre, Ciclobescripcion)
ESTUDIOS(Numero, Planta. NI\Iatricu1a, Nombre, Ciclo,Hora)
El consejo del buen administrador. ..
Aunque en teora, 1a tabla ESTUDIOS tiene como clave primaria Ia suma de
las claves primarias de las tablas que relaciona, tener en una base de datos
tablas con claves tan complejas, hace que e] sistema pueda funcionar ms
lento de 1o esperado debido a 1a multitud de comprobaciones que el gestor
debe realizar cuando se inserta o modica un dato. Si es un sistema cuyo
funcionamiento se base en Ia insercin o modicacin constante de datos, ms
que en 1a consulta delos mismos, quiz, en estos casos, se pueda saltar la teora
ycrear un campo sencillo adiciona], identicador de Ia la, ysustituirlo por Ia
clave primaria compuesta origina]. De esta forma, se simplica enormemente
Ia clave primaria en pos de un funcionamiento ms eciente. Ntese, que en
estos casos, se pierde mucha semntica que, o se ignora o habra que controlar
de otros modos.
No siempre se aplica la regla general para crear una tabla por cada relacin.
Generalmente, se pueden encontrar las siguientes excepciones a la regla general
69
Bases de Datos
1. Relaciones con cardinalidad 1:N. En este caso. no se crea una tabla para la
relacin, sino que se aade a la tabla de la entidad que acta con participacin
mxima N la clave de la entidad que acta con participacin mxima 1 (como
clave fornea). Si adems, la relacin tuviera atributos se importaran tambin
a la entidad que acta con participacin mxima N:
N
REPRE SENTANTE S(N_LcencaNmbe) CORE S(Cdigo.NombreAnstico,NombreReal,

_Licencia_Representante, Contrato)
O
Figura 2.32: Excepcin I. Relaciones l-N.
La transformacin quedara como se ilustra en la Figura 2.32. Se puede obser-
var que en este caso, no se ha creado una tabla para la relacin, sino que se ha
aadido a la tabla ACTORES la clave fornea N_Licencia_Representante que
referencia al campo N_Licencia de la tabla REPRESENTANTES. Tambin se
ha aadido el campo Contrato, atributo de la relacin, a la tabla ACTORES.
ACTORES(Codigo, NombreArtsitico, NombreReal,
N_Licencia_Represent ante,Contrato)
REPRESENTANTES(N_Licencia.Nombre)
2. Relaciones reexivas con cardinalidad l-N. En este caso, tampoco se
crea una tabla para la relacin. Hay que crear una tabla con el nombre de la
entidad, aadiendo otra vez la clave cambiada de nombre.
Figura 2.33: Excepcin II. Relaciones reexivas 1-N.
70
Captulo 2. Diseo lgico relacional
En el ejemplo de la Figura 2.33, el empleado solo puede tener un jefe, por
tanto, se incorpora el DNI del jefe del empleado (DNISupervisor) como clave
fornea.
EMPLEADOS(DNLNombre,DNISupervisor)
<> Actividad 2.14: En las relaciones reexivas con cardinalidad m-n, se
aplica la regla general para la transformacin de relaciones. Expresa cmo
sera la regla para crear tablas con relaciones reexivas con cardinalidad m-
n. Despus, aplica esa regla para transformar la Figura 2.33 suponiendo que
tuviera cardinalidad m-n.
3. Relaciones 1-1. Este tipo de relaciones tampoco generan tabla. El paso a
tablas se realiza de forma muy parecida a las relaciones 1-N .En este caso,
tampoco se genera tabla para la relacin y se tiene la libertad de poder incor-
porar la clave de una de las dos entidades a la otra.
Figura 2.34: Excepcin III. Relaciones 1-1.
En este caso existen las siguientes opciones:
IIncorporar la clave de Personajes como clave fornea en la tabla actores:
ACTORES(Codigo, Nombre, CodigoPersonaje)
PERSONAJES(CodigoNombrePelcula)
IIncorporar la clave de Actores como clave fornea en la tabla Personajes:
ACTORES(Codigo, Nombre)
PERSONAJES(Codigo,Nombre.Pelcula.CodigoActor)
- Incorporar la clave de Actores como clave fornea en la tabla Persona-
jes y la. clave de Personajes a la tabla de Actores como clave fornea:
ACTORES(Codigo. Nombre,CdigoPersonaje)
PERSONAJES(Codigo.Nombre.PelculaCodigoActor)
4Tngase en cuenta, que en este caso se est introduciendo una pequea redundancia, pero que
puede ser de mucha utilidad para simplicar futuras consultas.
71
Bases de Datos
Participaciones O,x
Normalmente las participaciones son importantes para calcular la cardinalidad
de la relacin, y transformar conforme a las reglas expuestas hasta ahora. Incluso en
muchas ocasiones, las participaciones se omiten en los diagramas entidadrelacin.
No obstante, es necesario tener en cuenta cundo la participacin tiene un mnimo
de O, para adoptar un campo de una tabla como opcional NULL, u obligatorio NOT
NULL.
Generalizaciones yespecializaciones
Para transformar las generalizaciones se puede optar por 4 opciones. Cada op-
cin se adaptar mejor o peor a los diferentes tipos de especializacin (Exclusiva,
Inclusiva, Total, Parcial).
Figura 2.35: Paso a tablas de generalizaciones.
1. Se puede crear una tabla. para la superclase y otras tantas para cada subclase,
incorporando el campo clave de la superclase a las tablas de las subclases.
EMPLEADOS(DNI, NombrePuesto)
DIRECTIVOS(DNI,Dpto)
TECNICOS(DNI.l\Iquinas)
COMERCIALES(DNLComisin)
2. Se puede crear una tabla para cada subclase incorporando todos los atributos
de la clase padre, y no crear una tabla. para la superclase.
DIRECTIVOS(DNLNombrePuestoDpto)
TECNICOS(DNI,Nombre,Puest.o,Mquinas)
COMERCIALES(DNI,Nombre,Puesto.Comisin)
3. Se puede crear una sola tabla para la superclase, incorporando los atributos de
todas las subclases y aadir, para distinguir el tipo de la superclase, un campo
72
Captulo 2. Diseo lgico relacional
llamado tipo, que contendr el tipo de subclase al que representa cada tupla.
Este tipo de opcin se adapta muy bien a las especializaciones exclusivas.
EMPLEADOS(DNI, NombrePuesto. Dpto, Mquinas, Comisin, Tipo)
4. Se puede crear una sola tabla para la superclase como en la opcin anterior,
pero en lugar de aadir un solo campo tipo, se aaden varios campos que
indiquen si cumple un perl, de este modo se soportan las especializaciones
inclusivas.

EMPLEADOS(DNI, Nombre,Puesto, Dpto, Mquinas, Comisin,
EsDirectivo, EsTcnico, EsComercial)
2.8. Normalizacin
Habitualmente, el diseo de una base de datos termina en el paso del modelo
entidad-relacin al modelo relacional. No obstante, siempre que se disea un sistema,
no solo una base de datos, sino tambin cualquier tipo de solucin informtica,
se ha de medir la calidad de la misma, y si no cumple determinados criterios de
calidad, hay que realizar, de forma iterativa, sucesivos renamientos en el diseo,
para alcanzar la calidad deseada. Uno de los parmetros que mide la calidad de
una base de datos es la forma, normal en la que se encuentra su diseo. Esta forma
normal puede alcanzarse cumpliendo ciertas restricciones que impone cada forma
normal al conjunto de atributos de un diseo. El proceso de obligar a los atributos
de un diseo a cumplir ciertas formas normales se llama nomnalizacin.
r----/ \---&#39;7
;:" cotzzsasl
. LGICO
PROBLEMA/ (Entldad/ (Relacional)
v, :z
A: Wl
____ s

g ,
al
BASE . NT L;
DE MODELO Fisco SUFIC ENTEME E J
NORMALIZADO?
Figura 2.36: Renamiento de un diseo de base de datos.
Las formas normales pretenden alcanzar dos objetivos:
73
Bases de Datos
1. Almacenar en la base de datos cada hecho solo una vez, es decir, evitar la
redundancia de datos. De esta manera se reduce el espacio de almacenamiento.
2. Que los hechos distintos se almacenen en sitios distintos. Esto evita ciertas
anomalas a la hora de operar con los datos.
En la medida que se alcanza una forma normal ms avanzada, en mayor medida se
cumplen estos objetivos. Hay denidas 6 formas normales, cada una agrupa a las
anteriores, de forma que, por ejemplo, la forma normal 3 cumple la forma normal 2
y la forma normal 1.
Antes de abordar las distintas formas normales, es necesario denir los siguientes
conceptos 5:
Dependencia funcional: Se dice que un atributo Ydepende funcionalmente de
otro atributo X, o que X> Y, si cada valor de X tiene asociado en todo
momento un nico valor de Y. Tambin se dice que Ximplica Y, y por tanto,
que Xes el implicante. Por ejemplo:
PRODUCTOS (CdigoProducto, Nombre, Precio, Descripcion)
CdigoProducto + Nombre, puesto que un cdigo de producto solo puede
tener asociado un nico nombre, dicho de otro modo, a travs del cdigo de
producto se localiza un nico nombre.
Dependencia funcional completa: Dado una combinacin de atributos X(X 1, X 2, . .
se dice que Ytiene dependencia funcional completa de X, o que X=> Y, si
depende funcionalmente de X, pero no depende de ningn subconjunto del
mismo. Por ejemplo:
COMPRAS (CdigoProducto, CdigoProveedor, Cantidad, FechaCompra)
CdigoProducto,CdigoProveedor => FechaCompra, puesto que la FechaCom-
pra es nica para la combinacin de CdigoProducto y CdigoProveedor (se
puede hacer un pedido al da de ca.da producto a cada proveedor), y sin em-
bargo, se pueden hacer varios pedidos del mismo producto a diferentes provee-
dores, es decir, CdigoProductvoweFecha.
Dependencia funcional transitiva: Dada la tabla T, con atributos (X,Y,Z), don-
de X > Y, Y+ Ze Y4+ X 6, se dice que X depende transitivamente de Z,
o que, X > Z.
5No es objetivo del libro entrar en los detalles matemticos del proceso de normalizacin, y
s proporcional al lector una idea intuitiva del mismo.
GY no depende de X.
74
Captulo 2. Diseo lgico relacional
Ejemplo 1:
PRODUCTOS (CdigoProducto, Nombre, Fabricante, Pas)
CdigoProducto > Fabricante
Fabricante > Pas
CdigoProducto > Pas, es decir, CdigoProducto depende transitivamente
de Pas.
Ejemplo 2:
PRODUCTOS (CdigoProducto, Nombre, Fabricante, Pas)
CdigoProducto > Nombre
Nombre > CdigoProducto
CdigoProducto -v Nombre
A continuacin, se describe de forma intuitiva las siguientes formas normales:
FN 1: En esta forma normal se prohbe que en una tabla haya atributos que puedan
tomar ms un valor. Esta forma normal es inherente al modelo relacional,
puesto que las tablas gestionadas por un SGBD relacional, estn construidas
de esta forma. Por ejemplo, en la Figura 2.37 se puede ver la diferencia entre
una tabla que cumple 1a fnl y otra que no:
La amenaza Fantasma 1999 Ewan McGregor La amenaza Fantasma 1999 Ewan McGregor
Liam Neeson
Natalie Portman
Blade Runner 1982 Harrison Ford
Rutger Hauer
Avatar 2009 Sam Worthington
Zoe Saldana
Sigourney Weaver
Figura 2.37: Primera Forma Normal.
75
Bases de Datos
FN 2: Un diseo se encuentra en FN 2 si est en F N1 y adems, cada atributo que
no forma parte de la clave tiene dependencia completa de la clave principal.
Ejemplo:
COMPRAS (CdigoProducto, CdigoProveedor, NombreProducto, Cantidad,
FechaCompra).
CdigoProducto > NombreProducto, por tanto, al no ser dependencia fun-
cional completa, no est en F N2.
FN 3: Un diseo se encuentra en FN3 si est en F N2 y adems, no hay ningn
atributo no clave que depende de forma transitiva de la clave.
Ejemplo:
PRODUCTOS (CdigoProducto, Nombre, Fabricante, Pas).
CdigoProducto > Fabricante
Fabricante > Pas
CdigoProducto +> Pas
Pas depende transitivamente de CdigoProducto, por tanto, no est en tercera
forma normal.
FNBC: Esta forma normal, llamada Forma Normal de Boyce-Codd, exige que el
modelo est en FN3, y que adems, todo implicante de la tabla, sea una clave
candidata.
Ejemplo:
NOTAS (DNIAlumno, DNIProfesor,NombreProfesor, Nota).
DNIProfesor > NombreProfesor
NombreProfesor > DN IProfesor
DNIProfesonDNIAlumno > Nota
En este caso, la tabla est en 3FN porque no hay dependencias funcionales
transitivas, y sin embargo no est en FNBC porque NombreProfesor y DNI-
Profesor son implicantes, y no son claves candidatas. Para obtener la tabla en
F NBC habra que quitar de la tabla los atributos DNIProfesor y NombrePro-
fesor.
Otras formas normales: Existen ms formas normales (FN4, F N5, FNDK, FN6
76
cuyo alcance excede el de este libro y cuya aplicacin en el mundo real es
nicamente terica). Las formas normales 4 y 5, se ocupan de las dependencias
entre atributos multivaluados, la Forma Normal Dominio Clave (FNDK) trata
las restricciones y los dominios de los atributos, y nalmente la FN6 trata
ciertas consideraciones con las bases de datos temporales.
2.9.
Captulo 2. Diseo lgico relaciona]
Prcticas Resueltas
Prctica 2.1: Startrekfanscom v.1.0
Un club de fans de la famosa pelcula startrek, ha decidido crear una pgina web
donde se pueda consultar informacin referente a todas las pelculas y captulos de
la saga. El dominio startrekfans.com se redirigir a un servidor web que consulte
una base de datos con la siguiente informacin:
Actores: Es necesario conocer el Nombre completo del actor, el personaje que
interpreta, la fecha de nacimiento y su nacionalidad.
Personajes: De los personajes es necesario saber el nombre, su raza y gradua-
cin militar que desempea (ca.ptn. teniente, almirante, etc.). Es importante
conocer el actor que interpreta el personaje, teniendo en cuenta que, un perso-
naje solo puede ser interpretado por un actor, y un actor solo puede interpretar
un personaje. Adems, ser necesario conocer el personaje del que depende di-
rectamente en graduacin militar.
Captulos: Hay que almacenar todos los captulos, indicando a qu temporada
pertenece cada captulo, el ttulo, el orden en el que fue rodado, fecha de
su primera emisin en televisin y los personajes que participaron en cada
captulo.
Pelculas: Se debe almacenar tambin, todas las pelculas que se proyectaron
en cines, cada una con su ao de lanzamiento, ttulo y director. Tambin hay
que guardar los personajes que aparecen en cada pelcula y cul de ellos fue el
protagonista.
Planetas: En cada captulo, se visita 1 o varios planetas, hay que almacenar el
cdigo del planeta, su nombre, galaxia a la que pertenece, y el problema que se
resolvi en esa visita y la nave con la que se viaj al planeta. Para la descripcin
del problema ser suciente con un campo de texto de 255 caracteres. De la
nave se almacenar el nombre, cdigo y nmero de tripulantes.
1. Realizar un diagrama entidad relacin que modele el diseo de la base de da-
tos. Puedes hacerlo en papel, con dia, con Visio. o con cualquier otro software de
diagramas.
2. Realizar la conversin al modelo relacional del diagrama realizado en el primer
Apartado, indicando qu claves primarias y forneas se han de crear.
77
Bases de Datos
78
Paso a tablas:
ACTORES(Cdigo,Nombre,Fecha, Nacionalidad)
PERSONA JES(Cdigo.Nombre,Raza, Grado, CdigoActor, CodigoSupeor)
PLANETAYCdigo,GalazimNombne)
CAPTULOS(Temporada, Orden,Ttulo,Fecha)
PELCULASYCdigo, Ttulo,Director,Ao)
PERSONAJESCAPITUL OS(CdigoPersonaje,Temporada.Orden)
PERSONA JESPELICULA S(CdigoPersonaje, CdigoPelicula)
VISITAS(CdigoNave, CdigoPlaneta, Temporada, Orden)
NA VES(Cdigo,N Tripulantes,Nombre)
Obsrvese que:
En el enunciado no aparece explcitamente el campo Cdigo para los personajes y actores, pero es necesario
incluirlo para dotar de un atributo clave a estas entidades.
La clave de la entidad Captulo es compuesta, por tanto en las relaciones se importan los dos atributos
que forman la clave.
La relacin ternaria tiene cardinalidad M:N:P, es decir, Aluchos-Aluchos-Aluchos.
En la relacin interpreta se podra haber incorporando los dos campos claves a las entidades opuestas.
Aunque introduce redundancia de datos, es til para agilizar consultas.
Ntese que a las dos relaciones Apanece, se les ha cambiado el nombre por una combinacin de las dos
entidades que relaciona, para evitar la posible ambigedad.
El nombre de las tablas aparece en plural, mientras que el de las entidades aparece en singular. Esto es
debido a que la entidad representa un concepto abstracto y la tabla un conjunto de datos.
Captulo 2. Diseo lgico relaciona]
Prctica 2.2: Startrekfanscom v.2.0
El club de fans de Startrek ha pensado ampliar los requisitos de la pgina web para
hacer una segunda versin. Esta segunda versin consiste en incluir informacin ex-
tra para los personajes. De esta manera, si el personaje es un humano, se indicar su
fecha de nacimiento y ciudad terrquea donde naci. Si el personaje es de la raza
Vulcano, se almacenar el nombre del mentor y la fecha de graduacin, y si es de
raza Klingon, se guardar su planeta natal y la fecha de su ltimo combate.
1. Realizar una generalizacin de la entidad Personaje indicando las especializa-
ciones necesarias.
2. Transforma al modelo relacional la generalizacin del apartado anterior.
PERSONAJEYCdigmNombre,Grado, CdigoActor.CodigoSuperior, Raza. Ciudad. F_Nacim, Planeta,
F. UlLCombate, ltlentor, Fecha_Grado)
Obsnrese que:
k Se ha optado por una de las 4opciones que hay. En este caso. se ha creado una nica tabla con
el campo Raza como discriminante de tipo. que indicar los campos a rellenar segn su tipo. Por
ejemplo, si la raza es Klingon, tan solo se rellenarn los campos Planeta yF_Ult_Combate. Esto
generar 4valores nulas por personaje, pero evitar complejidad en el modelo al no tener tablas
extra.
Al tratarse de una especializacin total yexclusiva. cada personaje solo puede pertenecer a una de
las razas, yadems tiene que pertenecer a una de manera obligatoria.
79
Bases de Datos
Prctica 2.3: Startrekfanscom v.3.0
El club de fans de Startrek quiere la tercera versin de la base de datos de la si-
guiente forma:
En cada captulo, 1a nave que viaja a un planeta, puede disponer de una nave pe-
quea llamada lanzadera con la que bajan a la supercie del planeta. La existencia
de la lanzadera, solo tiene sentido si existe la nave a la que pertenece. Se identi-
car cada lanzadera mediante un nmero entero y el cdigo de la nave. Es necesario
conocer la capacidad en personas de la lanzadera.
1. Incorporar los cambios de la tercera versin al modelo conceptual y lgico de
las prcticas anteriores.
Paso a, tablas:
LANZA DERA S(CdigoNave, Nmero, Personas) NA VES(Cdigo, N7Hpulantes,Nombre)
Obsrvese que:
iAl ser una relacin 1-N se importa a LANZADERAS el atributo CdigoNave.
k El campo Nmero es una clave dbil.
k Al tratarse de una dependencia de identicacin, el CdigoNave forma parte de la clave primaria.
de la tabla LANZADERAS.
80
2.10.
Captulo 2. Diseo lgico relaciona]
Prcticas Propuestas
Prctica 2.4: Peluquera
Una peluquera desea llevar el control de sus empleadas y de sus clientes as como
de los servicios que se prestan. Se desea almacenar la siguiente informacin:
Empleadas: DNI, Nombre, Especialidad (Masaje, Corte, Color, Brushing, Ma-
nicuras, Rulos, etc.)
Clientes: Datos personales (DNI, Nombre, Profesin, Telfono y Direccin) y
los tratamientos mdicos a los que est sometido el cliente.
Servicios prestados: Qu empleada atendi a qu cliente, y qu tipo de servicio
le prest en qu fecha y hora.
Citas: Fecha y Hora en la que se cita al cliente y empleada que realizar el
servicio.
Cosmticos: Cdigo, Nombre, Cantidad y Precio.
Ventas de cosmticos: Una empleada vende un cosmtico a un cliente, obte-
niendo una comisin.
.Realiza. una lista de candidatos a entidades, relaciones y atributos, indicando
en cada entrada, si se admite o se rechaza como tal razonando el porqu de tu
decisin. Por cada relacin, razona su tipo y cardinalidad.
.Modeliza mediante un diagrama E/ R.
.Realiza el paso a tablas del modelo E/ R.
81
Bases de Datos
Prctica 2.5: Reyes Magos sin fronteras
La ONG Reyes Magos sin fronteras desea hacer una base de datos para que esta
Navidad todos los nios pobres de Espaa puedan recibir sus regalos la noche de los
Reyes Magos. La ONG contacta con vecinos de distintos barrios para disfrazarlos
de Reyes Magos y organizarlos en grupos ldicos que realicen eventos para que los
nios los visiten y puedan formular sus peticiones. Cada nio es recibido por un Rey
Mago y puede hacer una nica peticin, la cual queda anotada en la base de datos
para posteriormente, el da 6 de enero, entregar esa peticin. La ONG comprar los
regalos con el dinero que distintas organizaciones bencas aportarn a la causa.
Los datos que interesa almacenar son los siguientes:
82
De los vecinos: DNI, Nombre y apellidos, Rey Mago al que encarna y los
vecinos a los que ha conseguido convencer para que se unan a la causa.
De los nios: Nombre, Direccin y el Regalo que pide al Rey Mago. (Los nios,
no tienen DNI, y necesitarn un dato identicativo).
De los grupos de vecinos se necesita saber a qu Barrio pertenecen, nmero de
integrantes del grupo y los Eventos que han organizado.
De los eventos interesa conocer la Ubicacin fsica, la Fecha, la Hora y los
nios asistentes.
. Realiza una lista de candidatos a entidades, relaciones y atributos, indicando
en cada entrada, si se admite o se rechaza como tal justicando el porqu de
tu decisin. Por cada relacin, razona su tipo y cardinalidad.
.Realiza el diagrama entidad-relacin y el paso al modelo relacional.
Captulo 2. Diseo lgico relaciona]
Prctica 2.6: Mundial de ftbol
Disear una base de datos para organizar el campeonato mundial de ftbol. Consi-
derar los siguientes aspectos:
IJugadores: un jugador puede pertenece a un nico equipo y puede actuar en
varios puestos distintos, pero en un determinado partido solo puede jugar en
un puesto.
Irbitros: En un partido intervienen 3 rbitros titulares, linier derecho, izquier-
do, principal y un rbitro secundario. Un rbitro puede realizar una funcin
en un partido y otra distinta en otro partido.
-Estadsticas: Se desea saber los goles que ha marcado un jugador en qu partido
y en qu minuto, tambin se desea poder describir cmo sucedi el gol.
IPorteros: Se desea almacenar cuntas paradas ha realizado, en qu minuto,
y en qu situacin se han producido: penalti, tiro libre, corner o jugada de
ataque.
IPartidos: Todos generan un acta arbitrar donde se pueden incluir todo los
comentarios que el rbitro considere oportuno: lesiones, expulsiones, tarjetas,
etc.
1. Realiza una lista de candidatos a entidades, relaciones y atributos, indicando
en cada entrada, si se admite o se rechaza como tal, justicando el porqu de
tu decisin. Por cada relacin, razona su tipo y cardinalidad.
2. Realiza el diagrama entidad-re1a.cin y el paso al modelo relacional.
83
Bases de Datos
Prctica 2.7: Supermercado virtual
Se va a desarrollar una aplicacin informtica para wwwxvirtualmarkecom cuya
interfaz de usuario estar basada en pginas web para que los clientes puedan realizar
compras desde sus casas. La empresa dispone de una serie de repartidores que se
encargan de distribuir los pedidos a los clientes. A continuacin se muestra el informe
de un analista tras una entrevista con el cliente:
La aplicacin permitir registrar nuevos clientes. Para usar la aplicacin, un
cliente deber registrarse indicando sus datos personales (DNI, Nombre, Direccin,
Cdigo Postal, Telfono de contacto, email y password) a travs de un formulario de
registro. Una vez registrado podr acceder a la realizacin de pedidos con su email
y su password.
Los productos que oferta el supermercado estn divididos en diversas categoras.
Los datos necesarios para cada categora son: nombre de la categora, condiciones
de almacenamiento (fro, congelado, seco) y observaciones. Los datos de los produc-
tos son: nombre, marca, origen, dimensiones (volumen y peso), una fotografa, la
categora y unidades disponibles 7.
La aplicacin permitir visualizar un listado de productos ordenado por cate-
gora, permitiendo seleccionar los productos que desee comprar mediante una caja de
texto donde se indicar el nmero de unidades seleccionadas. La aplicacin llevar la
cuenta (cesta de la compra) de los productos que el cliente ha ido seleccionando.
La aplicacin permitir tambin efectuar un pedido con todos los productos que
lleve almacenados en su cesta de la compra. Los datos del pedido son: cdigo del
pedido, fecha del pedido, cliente, direccin de entrega, productos pedidos, importe
total del pedido y datos de pago (nmero de tarjeta y fecha de caducidad)?
Para poder generar un pedido se debern dar dos situaciones:
IEl cliente deber pertenecer a una zona (Cdigo Postal) donde existan repar-
tidores. Un repartidor se ident.ica mediante un nombre, nmero de matrcula
de la furgoneta y zona donde reparte.
-Debe haber unidades sucientes por cada producto para satisfacer las deman-
das de cada pedido.
Una vez generado el pedido se mostrar al usuario una pgina con los datos de su
pedido, se restarn del stock las unidades pedidas y se emitir una nota de entrega
7El control del stock est supervisado por otra aplicacin subcontratada, y por tanto no es
necesario preocuparse por l.
SEI pago del pedido est automatizado mediante otro software que proporciona el banco.
84
Captulo 2. Diseo lgico relaciona}
(albarn) a los responsables de almacn para. que sirvan ese pedido.
Se pide:
1.
Diseo Conceptual. Realizar el diagrama entidad relacin de la aplicacin. Se
ha de tener en cuenta que el entrevistado narra todo el proceso que necesita
la lgica de su negocio. Se debern separar los procedimientos de los datos.
Diseo Lgico. Realizar el paso al modelo relacional.
.En qu forma normal est la tabla Clientes?
Prctica 2.8: Requisitos de una aplicacin
Busca alguna persona que tenga un negocio. Puedes trabajar haciendo equipo con
otros compaeros. Tenga informatizado el negocio o n, pdele que sea tu cliente y
realiza las siguientes tareas de anlisis:
Entrevstale, si es necesario graba la entrevista e intenta extraer una lista de
requisitos.
Extrae de esta lista de requisitos los que versen sobre almacenamiento de la
informacin en bases de datos y realiza un diagrama entidad relacin que
satisfaga todos esos requisitos.
Renete de nuevo con el cliente y pdele que verique tu modelo E-R.
Repite este proceso hasta que el cliente de el visto bueno.
Cuando el cliente haya validado tu modelo, realiza el diseo de base de datos, trans-
formando el modelo E-R al modelo relacional ydespus, implementando ese modelo
en Access. <>
85
Bases de Datos
Prctica 2.9: MySQL Workbench
El objetivo de esta prctica es conocer en profundidad un software de diseo de
base de datos de licencia GNU. Debes tener en cuenta que los diagramas de MySQL
Workbench son una mezcla del modelo conceptual de Chen y del modelo relacional
de Codd, incluso ms orientado al modelo relacional. Por ejemplo, no existen las
relaciones ternarias, y a las entidades las llama tablas, como en el modelo relacional.
Toda su nomenclatura est orientada a comunicarse con un SGBD sin necesidad de
transformaciones previas. Adems, aunque tiene el apellido MySQL, este software
est basado en DB Designer, programa genrico de diseo de base de datos, y por
tanto se puede conectar a cualquier SGBD (Oracle, DB2, Access. . y no solo a
MySQL.
1. Conectarse a la pgina web de l\rIySQL Workbench. http://wb.mysq1.com/
2. Seleccionar 1a opcin Download Workbench y mientras se descarga, selec-
ciona el enlace About - Screenshots y comenta para qu sirve el software.
3. Buscar en google MySQL Workbench manualy descrgate el manual de
instrucciones de MySQL Workbench.
4. Instalar el software. El proceso de instalacin es muy sencillo.
5. Iniciar la aplicacin y seleccionar la opcin Add Dzagram para comenzar a
dibujar un diagrama entidad relacin (EER (Extended Entity Relationship
- Entidad Relacin Extendido). En la opcin de men Model, seleccionar la
notacin para los ob jetos y para las relaciones. Seleccionar la opcin Classic
y compararlas con las otras notaciones.
6. Insertar los objetos necesarios para representar el siguiente diagrama E-R:
Se puede usar el panel inferior para incorporar los atributos y as, del panel
lateral izquierdo, poder seleccionar los objetos. Debe quedar as:
86
10.
Captulo 2. Diseo lgico relacional
File Edit View Arrnnge Model Dnabne Plugins Tools Community Htip
H H F7
I} MySQL Model V Dlagram
<7
J m1 1 -.-,
T 0:69am
u Nanhrevmmmqs) _
A mydb
u bles
g + :1 Ecume-
_ .:1 Jugador.
Selecciona aqu las
tablas yrelaciones
_ Routme Groups
Atributos
i

I

i _* JI en!
i

7 i
Coum Dennis
_, <domuednd< to overwue mula
n (OIQO Column i
E _ 1
5Dorsu . e e _
in Nombre RCHARHS} cmmems,
l
Equmcjcdngo
c w O
Tnble Columns Xndexes Foreign Keys Truggers Partmonan; Ovtxnns lns 4 y JDcpcn iwal
iRelationship between Jugador nd Equipo created.
en la tabla jugador que representa el equipo en el que juega.
.Observar que al generar la relacin, automticamente se crea una clave fornea
. Experimentar con el diseo para crear la relacin juega como n-m en lugar
de 1 n. Qu sucede? Observar que automticamente crea una nueva tabla.
. Descargar el chero sakila-db.zip de la pgina web de MySQL. Se encuentra
muy fcil escribiendo sakila-dazip en google. Descomprimir y abrir el archi-
vo sakilamwb. Observar cmo estn organizadas en regiones las tablas y las
relaciones del modelo.
Realizar los diagramas de las prcticas anteriores con MySQL Workbench y
mediante la opcin de men Database, Forward Engineer, generar automti-
camente los scripts de creacin de base de datos.
87
Bases de Datos
2.11.
88
Resumen
Los conceptos clave de este captulo son los siguientes:
u Modelizar un problema consiste en realizar mltiples abstracciones. En bases
de datos, se utilizan tres modelos: el modelo conceptual, o diagrama entidad-
relacin, que es ms cercano al usuario, el modelo lgico, que es un modelo
ms tcnico y que tiene traduccin directa al modelo fsico que soportan los
SGBD.
Los componentes que hay que detallar en un diagrama entidad relacin son:
Entidades, Atributos, Relaciones, Participaciones, Cardinalidades y Generali-
zaciones.
Los tipos de Entidades son fuertes cuando su existencia no depende de ninguna
otra, y dbiles, cuando su existencia depende de otra. Esta dependencia puede
ser ampliada si la entidad tambin depende en Identicacin, es decir, necesita
el atributo clave de la entidad fuerte para poder identicar de forma nica cada
ocurrencia de entidad.
Los atributos pueden ser clave o no clave, univaluados, multivaluados, com-
uestos derivados obli atorios u o cionales.
77
Las relaciones pueden ser, segn su grado, binarias, ternarias, reexivas o
n-arias.
La cardinalidad de una relacin se calcula tomando las participaciones mxi-
mas y mnimas de las ocurrencia de una entidad en la rela.cin. Estas pueden
ser 1-1, l-N o M-N.
Las generalizaciones pueden dar lugar a cuatro tipo de especializaciones, ex-
clusivas, inclusivas, totales o parciales.
El modelo relacional expresa, mediante relaciones, todos los conceptos deta-
llados en el modelo conceptual.
Se puede transformar el modelo entidad relacin en un modelo relacional ge-
nerando una tabla para las relaciones de tipo NzM y las n-arias. Para las
relaciones de tipo l-N se importan los atributos clave de la entidad cuya car-
dinalidad es 1 a la que tiene como cardinalidad N. Las relaciones 1:1 y las
generalizaciones tienen varias opciones de transformacin.
La normalizacin es un proceso que sirve para medir la calidad de un diseo,
la forma normal que cumple cada tabla es un indicador que se usa para evitar
redundancia; de datos.
2.12. Test de repaso
1. Cul es el modelo que ms se apro-
xima a la visin del usuario?
a) El modelo conceptual
b) El modelo lgico
c) El modelo fsico
)
d El lenguaje SQL
2. Una relacin reflexiva es una entidad
de grado
a)Ob)1c)2d)3
3. La participacin de una entidad en la
relacin es:
a) El mximo de ocurrencias que pueden apa-
recer en la relacin
b) El mnimo de ocurrencias que pueden apa-
recer en la relacin
c) El mximo ymnimo de ocurrencias que
pueden aparecer en la relacin
d) El mximo y mnimo de ocurrencias de la
entidad
4. Aqu participaciones corresponde
una cardinalidad 1:N
a) (0a1)y(11)
b) (1,11) y (0,11)
C) (171) y (lan)
d) (0,1) y(n,n)
5. Si un empleado puede trabajar en
mltiples proyectos
a) Trabajar es 1:1
b) Trabajar es N:N
c) Trabajar es NzM
l
d Trabajar es 1:N
Captulo 2. Diseo lgico relaciona]
6. Un atributo de relacin es
a) Consecuencia de la relacin
b) Consecuencia de una de las entidades
c) De las dos entidades
d) Son atributos compuestos
7. La dependencia de identicacin
a
b
) Incluye la dependencia de existencia
) No incluye la dependencia de existencia
c) No se aplica a entidades dbiles
)
d Slo es posible cuando hay dos entidades
fuertes
8. Una especializacin inclusiva es aque-
lla que
a) Puede materializarse en ms de una sub-
clase
b) Puede materializarse en solo una clase
c) Puede no materializarse en alguna clase
d) Tiene que materializarse en una clase
9. La transformacin de una relacin con
cardinalidad 1-N al modelo relacional
a) Genera una tabla para la relacin
b) Se incorpora una clave a la entidad 1
c) Se incorpora una clave a la entidad N
)
d No se incorpora clave
10. Con la normalizacin:
a) Se rena el modelo conceptual
b) Se rena el modelo lgico
C) Se rena el modelo fsico
)
d No sirve para. nada
qmr6?&#39;se&#39;v&#39;9o&#39;9o&#39;v&#39;9&#39;2&#39;qzv&#39;I sauoromos
Bases de Datos
2.13.
10.
90
.Nombra los distintos tipos de rela-
ciones que puede haber atendiendo
a su grado.
.Explica para qu sirve cada uno de
los modelos expuestos en el tema
para el diseo de una base de da-
tos.
.Pon un ejemplo de cada uno de los
tipos de cardinalidades.
.Qu son las relaciones reflexivas?
.Qu diferencia hay entre ocurren-
cia de entidad y entidad?
. Cundo una entidad es dbil? Y
cundo lo es una relacin?
Qu signica que una entidad
fuerte tenga una relacin depen-
diente en existencia de otra entidad
dbil? Pon un ejemplo.
.Cundo dos entidades tienen de-
pendencia de identicacin?
.Qu elementos incorpora el mode-
lo entidad-relacin extendido?
Dene los siguientes conceptos:
IAtributo Clave
IAtributo Derivado
ISuperclave
IClave Candidata
- Dependencia Funcional
11.
12.
13.
14.
15.
16.

17.

18.
19.
20.
Comprueba tu aprendizaje
- Dependencia Funcional Com-
pleta
IDependencia Funcional Tran-
sitiva
Qu diferencia hay entre una es-
pecia.lizacin total y otra parcial?
Qu diferencia hay entre una espe-
cializacin exclusiva y otra inclusi-
va?
Crea una lista con los pasos que hay
que dar para pasar un diagrama en-
tidad relacin al modelo relacional.
Qu es el lgebra Relacional?
Para qu sirve?
Comenta cual es la utilidad de las
restricciones de integridad referen-
cial en una base de datos.
Qu es el valor NULO?
Qu es una clave fornea?
Pon un ejemplo de especializacin
y comenta 4 formas distintas de ge-
nerar las tablas.
Cmo representa MySQL Work-
bench las relaciones? Y las depen-
dencias?
Haz un cuadro resumen con ca-
da uno de los elementos grcos
que puede haber en un diagrama
entidad-relacin.
CAPTULO 3
Diseo fsico relacional
Objetivos
Denir las estructuras fsicas de
almacenamiento
Contenidos Crear tablas
@Herramientas grcas y de Seleccionar tipos de datos ade-
texto proporcionadas por los cuados
SGBD
Denir campos Claves en las ta-
El lenguaje de denicin de da- blas
tos

Implantar las restricciones es-
Creacin, modicacin y elmi- tablecidas en el diseo lgico
nacin de BBDD
Vericacin mediante conjun-
Creacin. modicacin y elmi- tos de pruebas
nacin de tablas _ _
Uso de asistentes y herramien-
Implementacin de restriccio- tas grcas
nes . _ _
Uso del lenguaje de denicin
de datos (DDL)
Denir y documentar el diccio-
nario de datos
En este tema se detalla e] proceso de implantacin denitiva, o diseo fsico,
de la base de datos en un sistema. informtico. Se describe e] uso del lenguaje
SQL distinguiendo las peculiaridades de los principales SGBD.
91
Bases de Datos
3.1. Notacin para la sintaxis
En informtica, cuando se quiere utilizar cualquier tipo de lenguaje de programa-
cin, se necesita una sintaxis para. denir cmo construir sentencias en ese lenguaje
de programacin. Para expresar la sintaxis se utiliza una notacin. Esta notacin
est compuesta por componentes lxicos o tokens. Estos tokens pueden ser palabras
clave del lenguaje, deniciones de otros elementos sintcticos ms bsicos, expresio-
nes, variables, etc. La notacin utilizada en este libro es la siguiente:
92
-Palabras en maysculas. Estas son las palabras reservadas del lenguaje. Por
ejemplo SELECT, DROP, CREATE son palabras reservadas, esto quiere decir
que no pueden utilizarse para nombrar objetos de la base de datos porque
tienen una misin especca.
Palabras en minscula. Se utiliza para realizar descripciones de sintaxis ms
en detalle. Por ejemplo, el token especicacion_de_ltro se puede desplegar en
ms deniciones para. realizar ltros en las consultas.
Corchetes. Un elemento sintctico entre corchetes indica opcionalidad. Es de-
cir, lo que est encerrado entre corchetes se puede incorporar a la sentencia
o no, dependiendo de lo que el programador quiera expresar. Por ejemplo,
en la denicin CREATE [TEMPORARY] TABLE, se puede indicar de for-
ma opcional el token TEMPORARY para crear una tabla temporal, que solo
durar en memoria mientras el usuario permanezca conectado. Si varios ele-
mentos van separados mediante el token pipe | , se puede elegir uno de ellos.
Llaves. Indica alternativa obligatoria. Se debe elegir entre los elementos se-
parados mediante el token pipe | . Por ejemplo, en la denicin de sintaxis
para crear una base de datos, CREA TE {DA TABASE |SCHEMA}nombre_bd,
hay que escribir uno de los dos token entre llaves. Se puede optar bien por
CREATE DATABASE nombre.bd o por CREATE SCHEMA nombre-bd.
Puntos suspensivos. Signica repeticin, es decir, el ltimo elemento sintctico
puede repetirse varias veces. Por ejemplo, para codicar una consulta se usa
la denicin SELECT columna columna] ...FROM tabla. Los puntos sus-
pensivos signican que se puede repetir el token columna] tantas veces como
se desee. Asi, es posible escribir SELECT Nombre, Direccion, Codigo FROM
Clientes.
3.2.

SGBD
Captulo 3. Diseo sico relacional
Herramientas grcas proporcionadas por los
Es muy sencillo manipular una base de datos compleja si se dispone de un interfaz
grca de usuario que ayude al DBA, Database Administrator, a enviar comandos
de administracin de forma automtica y sin necesidad de conocer su sintaxis:
3.2.1. PhpMyAdmin de MySQL
MySQL dispone de un interfaz basada en pginas web llamada PhpMyAdmin,
que a travs de un servidor Web, por ejemplo Apache, permite administrar las bases
de datos de un servidor desde cualquier equipo de la red.
ig/gffsl) LU Servidor: localhost Dgil Base de datos: ardineria
EME o raciones &#39; Privilo ios XEliminar
Base de datos 1.5 un khl
ardmena (8) V
amimna (a) Client-s S 2"" T >< 3
E mas DculloPodldos -i X 195
2351??Empleados ES Ei 7 31
g""GamasPmductos E; Si X 1
m?Ocinas : X 9
Productos pg Si X 26
Pedidos l X 115
Productos 73 ii X 375
8tablals) Nmero de filas 7"
t Marcar todos/as IDesmarcar todos
&#39;._ Vista de mDFESlO 3, Dncoonano de datos
Nombre:
g Crear nueva tabla en la base de datos jardineria
ve
lnnoDB

lnnoDB

lnnoDB

lnnoDB

lnnoDB

lnnoDB

lnnoDB

lnnoDB
MyISAM latin1_swodish_ci
Cotojamcnto
latin1_swedish_c

latm1_swedish_ci

latml_swedish_ci

Iabn1_swedish_ci

latm1_swedish_ci

Iatin1_swedish_ci

Iatnn1_swedish_ci

latin1_swedish_ci
Para los elementos que estn marcados: v
Nmero de campos:
ihlcwn (SOL Buscar Generar una consulta anar lmErtar fbseador
Tamao Roald:

a
depara
16.8 KB
16.6 KB
16.6 KB
16.8 KB
16.8 KB
16.6 KB
16.9 KB
128.0 KB
zum n o m
Continuar
Figura 3.1: Interfaz web de PhpMyAdmin.
Este software dispone de opciones para realizar prcticamente cualquier opcin
que se pueda realizar va SQL. Permite gestionar las bases de datos de un servidor,
crear, borrar y modicar tablas, lanzar comandos SQL, exportar e importar infor-
macin, recopilar estadsticas, hacer copias de seguridad, etc. Adems, dispone de
un pequeo diseador, tipo MySQL Workbench que permite gestionar las relaciones
de las tablas.
93
Bases de Datos
3.2.2. Oracle Enterprise Manager y Grid Control
El SGBD Oracle dispone de dos herramientas grcas, ambas con interfaz web
y montadas sobre un servidor web propietario de Oracle.
Enterprise Manager. Esta herramienta est incorporada directamente en el soft-
ware de Oracle, y es congurada por el asistente de creacin de base de datos.
Es capaz de manipular todas las funciones bsicas de una base de datos (crea-
cin de tablas, usuarios, exportacin e importacin de informacin, etc.)
Archivo Editar yet Hostnnal Marta Herramimxas nda
a v a a (till/alunoesk(ooilsaiem/Snsoleciambase/i nstonceIs:Kcrnapeveniaouzadmargewnba umricasryp Av Clv .;
ORACLE Enlernnse Manager Hg >@A"&#39; &#39; &#39; -&#39;--""""&#39; 5-4" h-h &#39;"
z- -. v- Base un Datos
Cvweiaoa ti: f CJi-J.
Instancia de Base de Datos: nbaalumno
Inido Rorrlodo Dasnnhaaa Senasa Esouema Mov monto ne Dam; Sotwme Sie
=a.. =c-rb;;:nu; -jurv-QOHJ Mu cast 9,5,5", vov Datos Marais-Juanma ng; v
General CPU del Host Sesiones Aciivas Tiempo de Respuesla SOL
e - &#39; 10a: 4.o 1.o
Estan Activo 75 l ultima Recgglacnon
IEsaa I
Activa msm Han-EW 1G!!! CES? 5o Otros o IE CyUSM" 0,5 sgyucs
Namnmlo maru nn Irma Recgglacrrr de
mm "min 25 REWHGCAB segundos
Ha! anumwcesnzg 0- -
uUSFENER alumno
Cvl 2;unieron tg Romano Banco |tiempo oe Respuesta sol. mi ya)
Ve, mas mmma: Emu. Pecopulacum ae Peruana:
Resumen de Diagnostico: Resumen ue Espacio Alla Disponibilidad
Log un Novus No m, m3.: evvov DRA Tamao oe la Base de Onzas (GB) consola Detalles
mans Mm,og rn-spaces Pvuiofndtcu g _namas horacio nl
pm.su cm. 9Roca-mucosas no! Autor un segmentos g umma cop-a oo 509mm wo
W801i OI d&#39;un 4C Rogsno du numeric un San on Dans Desaczwnca
m. no vanesa: una en rs
VAlertas
Categoria Tono "n Cvmu o Amancio o
4 _
Tennmado &#39; &#39; &#39; " " &#39; &#39; alunm-deskmpzusa a
Figura 3.2: Enterprise Manager de Oracle.
<> Actividad 3.1: A travs de una mquina virtual con un sistema operativo
de tipo Linux, por ejemplo, Ubuntu, instala los paquetes de mysql server y los
paquetes de phpmyadmin. Para ello, escribe en un terminal el comando sudo
apt-get install mysql-server y despus, el comando sudo apt-get ins-
tall phpmyadmin. Es posible que antes de realizar esta operacin necesites
actualizar el repositorio de paquetes mediante el comando sudo apt-get up-
date. Selecciona que la instalacin congure phpMyAdmin automticamente
para apache yescribe una. contrasea de usuario. Cuando termine la instala-
cin, ya puedes abrir un navegador en la mquina virtual y escribir la direccin
9-1
Captulo 3. Diseo fsico relacional
http: \\127 .O. O .1\phpmyadmin\index.php. Introduce el usuario phpmyad-
min y la. contrasea que hayas escrito en la conguracin. Finalmente, explora
las opciones que te da la interfaz de usuario. Si lo preeres, puedes descargar
del blog del libro la mquina virtual de prcticas, donde ya est instalado
mysql-server y phpmyadmin. Crea una base de datos que contenga dos tablas
de la temtica que elijas.
<> Actividad 3.2: Arranca el Enterprise Manager de la mquina virtual de
prcticas (Linux) y accede al servidor web para consultar cada una de las pes-
taas de las que dispone y examinando la informacin de la base de datos que
te proporciona. Abre un terminal y con el usuario oracle, utiliza el comando
emctl start dbconsole para arrancar el enterprise manager. A continuacin,
escribe en un navegador de internet la direccin http:\\1oca1host:1158\em
o directamente pulsa dos veces en el enlace que hay en el escritorio. En el
cuadro de usuario y password introduce SYSMAN y manager.
Grid Control. Se ha de instalar aparte del software de Oracle. Permite gestionar
mltiples bases de datos en diversos servidores, permitiendo consultar el estado
y rendimiento de todas y cada una de ellas.
ORACLE Enterprise Manager 10g - asume:
mui Flill!" Destinos Despliegues Alertas Politicas Trabaos Informes
Busqueda de Destino
Vsn Gener Buscar WW ____s _,_ __ h, ____ _, _ _o _
Total de Destinos Controlados 12
551m0 (e 10305105 Desunos Violaciones de Poimca de Seguridad

Crtico x .i_6
Advenencia a
informativo i 2
trueno en las ltimas 24 Horas 1
IAgiirg

Asesores de Parches Criricos para Directorios Raiz de Oracle
Asesores de Parches 0
Directorios Raiz de Oracle Afectados O
credenciales de Oracle rAetaLink ug Cgng vagas
Alertas de Todos los Desimcis
Critico x 1
Advertencia ) 1RS"EE"&#39;E_, ,__,__ ,%,,_W
Errores En 0Ver Instalaciones de Base de Datos v
Jiolaciones de Poliiica rie Todos los Ziesrinas
Cnico X
AIEWEWC IB L. Insialacioiies de Base de Daios
"fmmalm i Z Oracle Daiabase 10g 10 1 0 40
Trabajos de Todos los Destinos onde amaba19g 1o 2o 3 o
Eiecuciones problemticas [ltimos 7 das) J0
Ejecuciones suspendidas (ltimos 7das) r 0
Figura 3.3: Grid Control de Oracle.
95
Bases de Datos
Ambas herramientas son extremadamente pesadas en trminos de Consumo de
recursos, por lo que en muchas ocasiones se ha de administrar la base de datos sin
su ayuda.
3.2.3. DB2 Data Studio
Este software sustituir en un futuro prximo a una herramienta ms antigua
llamada Control Center. Permite manipular los objetos de bases de datos DB2 e
Informix y sus permisos. Soporta la administracin avanzada de DB2 tanto en Win-
dows como en Linux, y simplica la construccin de consultas SQL. Su gran potencia
es que facilita la creacin de Servicios Web que distribuyen datos de consultas SQL
a las aplicaciones cliente.
QDatabase Administration -.sqlxeditor_projectlscript1 .sql - |BM Data Studio
Edu hawgete Sern Prayer. Szrot ama-a. web
"&#39; a_= gOptrrsoluuorvs Vi &#39; &#39;_ &#39; &#39; &#39;,&#39; ;&#39; &#39;
5533:: SOJYCE E1301? u L; Sanmsqi L3
j- L i : su &#39; 7 :e.e:: &#39; :::.-:. =.-r:_:;-.:::
a-._- :-::a:es:C:e::a"s p &#39;3; (v; -;
,4 .&#39;..- 71- - -
. - Re se". -e
r- a! 54-95 EMV xxx. La. en: &#39;.. -::r: s m7, L Sa! c? -5
; @Leste-te
i -I, s&#39;-&#39;-&#39;=&#39;.s s-ac 2- zosw-t. o
l 0 _Se? Does
9 =e:e&#39;a&#39;.e: 3855552 Dsgens
v _mas
r b este 95-2-59:
l o _951m" 61.95 ,
: v__ ioes 1m- v
| ,- __ Srras irse-e o
! n- -.. u
&#39; " l- -Reaeze D
i o _&#39; nases _
r Q: mae-ces "erem"&#39;
593W??? Crzrt-ssss: (vr-Saez
l &#39; * "ha" Caer-z: Cr -S&#39;=::S:sa:e
5 * _"T5 =o--a::-Q- c:- -sw=-.=
| &#39; _&#39; em-nes ogeca-m-v: Caro:
| o DSW 95-25-95 ._ . . .... ...
. - x- -a a.e esquema SV .3:
l o_, Se:.r:es
,5:, 5,01;,.62 envase soaste...
&#39; "m _ q.-:1
| -_ ves " "V
y , -C- _ Se:S:a2-"e":&#39;e-".-.e::&#39;
E , Crko; C1 xaiceze eve lee&#39;e&#39;*:es
Figura 3.4: Interfaz de Data Studio para DB2.
<> Actividad 3.3: De la pgina web httpJ/www-Ol . ibm. com/software/data/
db2/ descarga el DB2 express. Debers registrarte para poder descargar tres cheros:
db2exc_971_WIN_x86.zip

ibm_data_studio_standalone_win.zip
db2exc_vsai_971_WIN_x86.exe
96
Capitulo 3. Diseo fisico relacional
Para arrancar el asistente de la instalacin. haz doble clic sobre db2exc_971_WIN_
x86.zip\EXPC\image\setup.exe, pulsa sobre Instalar un producto y sigue los
pasos del asistente para realizar una instalacin tpica. Una vez nalizada la instala-
cin, con el Editor de mandatos, ejecuta el comando list db directory para comprobar
alguno de sus parmetros.
mznwruvaapamuaro b .3 -ra-e".esaeac-<wsrazc eme-a b
a r Bol a -r&#39;*a*ie-:as se zcrFgxazo D&#39;
I i l- Pl
a ...,...,...a_......... .
l Eawdemmdatos Seleccionado Eater ver Henmertas Awda , _ _ Vi
m1 Q V_ _h j erre-zas se smc-uso- . a "resaca-carmen ce virutas l
n i i _ A wJ ". va , &#39; i
1- 71-& E; JA H :3 hvnuoe [IQ ueezawecemrsatos l
Maristas
lnia-m viamrae
y
las: db dxzcczoz
Minera de cnctadAx en dxrcccorxe I1
lnzrad; J. dc han de datos:
una: dc bno de datos ISAMPLE
Xonbxc de base de datos ISLIM!
Dztoctorio do lanus duos Locuu - C:
Plural {alonso dc baso dl datos r(1.00
Figura 3.5: Editor de mandatos para DB2.
El consejo del buen administrador. . .
Muchos administradores solo conocen las herramientas grcas de gestin y
administracin de una base de datos, puesto que es ms cmodo y ms intuiti-
vo, y adems, aprender los lenguajes de programacin de bases de datos es una
tarea difcil y laboriosa. Sin embargo, conocerlos comandos y las instrucciones
que proporciona un SGBD, otorga una visin extra que posibilita automatizar
tareas rutinarias y permite solucionar problemas que no se pueden solucionar
solo con las herramientas grcas. Aun administrador que conoce a la perfec-
cin todos estos comandos, le resulta muy sencillo actualizarse en los continuos
cambios de versiones en estas herramientas grcas.
3.3. Intrpretes de comandos de los SGBD
La utilidad principal de un SGBD es su intrprete de comandos. Es una aplica-
cin cliente cuya nica misin es enviar comandos al SGBD y mostrar los resultados
devueltos por el SGBD en pantalla. El cliente del servidor l\IySQL (mysql-server)
se llama mysql, el de Oracle se llama sqlplus y el de DB2 se llama db2. Para invo-
97
Bases de Datos
carlos desde el sistema operativo (Windows o Unix), tan solo hay que escribir en un
terminal su nombre con ciertas opciones.
3.3.1. MySQL: El cliente de MySQL-Server
mysql [options] [database]
options:
--help Visualiza la ayuda
{-p I --password}[=frase] Password con la que se conecta
{-P I --port}[=numero] Puerto TCPIP remoto al que se conecta
{-h I --host}[=numero] Nombre Host o IP al que se conecta
{-u I --user}[=usuario] Usuario con el que se conecta
{-s I --socket}[=nombre_fich] Fichero socket con el que se conecta
#ejemplo tpico:
mysql -u root -p
Enter password: *********
Welcome to the MySQL monitor. Commands end with ;or \g.
Your MySQL connection id is 37
Server version: 5.0.75-Oubuntu10.2 (Ubuntu)
Type help; or \h for help. Type \c to clear the buffer.
El comando puede ir acompaado de dos tokens opcionales, options, que permite
especicar una serie de parmetros de conexin y database, que especica en qu base
de datos se ejecutarn los comandos introducidos. Las opciones que aqu se muestran
son solo algunas de las disponibles, para ms informacin consultarla documentacin
de MySQL:

ILa opcin help muestra un resumen de las opciones disponibles.
- La opcin -u o user permite especicar el usuario de conexin, por ejemplo
-u paco.
- La opcin -p o password permite introducir un password para la conexin
del usuario. Se puede escribir -p frase_password o solo -p para que el gestor la
solicite y la oculte con asteriscos para que nadie pueda espiar.
ILa opcin -h o host permite seleccionar el host donde est el gestor de base de
datos. Puede ser localhost o 127.0.0.1 si la base de datos est en el ordenador
98
Captulo 3. Diseo sico relacional
local y se desea conectar va tcp-ip u otra direccin IP. Si se omite, por defecto
se conecta al servidor por named pipes (o tuberas con nombre) que no salen
a la interfaz local de la tarjeta de red y son mecanismos de comunicacin ms
rpidos, pues son internos al ordenador.
n La opcin -P o p permite especicar el nmero de puerto al que conectarse (si
se conecta va TCP-IP al ordenador remoto). Si no se indica este parmetro,
por defecto se conecta al puerto 3306.
- Permite especicar el nombre del socket por defecto. esto ser necesario cam-
biarlo cuando exista ms de una versin del gestor de base de datos ejecutando-
se en un ordenador.
A continuacin se muestran unos cuantos ejemplos de conexin:
#conexin sin usuario y password (se conecta como annimo y sin password)
mysql
#conexin con usuario y password (se conecta como root y su password )
mysql -u root -p
Enter password: *********
#conexin con usuario y password en claro a la base de datos jardineria
mysql -u root -pPasswordDe1Usuario jardineria
#conexin con usuario y password en claro a la base de datos jardineria
#del host 192.168.3.1OO
mysql -u root -pPasswordDe1Usuario -h 192.168.3.1OO jardineria
#conexin con usuario y password en claro a la base de datos jardineria
# del host 192.168.3.1OO con puerto 15300
mysql -u root -pPasswordDe1Usuario -h 192.168.3.1OO jardineria -P 15300
3.3.2. Ejecucin de consultas en MySQL
Para ejecutar una consulta, tan solo es necesario arrancar el cliente mysql y
conectarse a una base de datos del gestor. A continuacin, escribir en la consola el
comando SQL que se desea ejecutar y se obtienen los resultados. Cuando una lnea
es precedida. del carcter #, el resto de la lnea se ignora. Estas lneas se llaman
comentarios y son tiles para documentar las acciones realizadas. Por ejemplo:
99
Bases de Datos
itselecciona la version del gestor y la fecha actual
mysql> select version() ,current_date();
+------------------ --+ -------------- --+
I version() I current_date() l
+------------------ --+ -------------- --+
I 5.0.75-Oubuntu10.2 I 2009-8-20 I
+ ------------------ --+ -------------- --+
1row in set (0.00 sec)
Este comando ilustra distintas cosas:
IUn comando consiste en una sentencia SQL terminada en punto y coma.
ICuando se escribe un comando, mysql lo manda al servidor para que lo ejecute,
muestra los resultados y vuelve al prompt, indicando que est listo para recibir
ms consultas.
IMuestra los resultados en forma de tabla (las y columnas). La primera fila
contiene las etiquetas para las columnas y las las siguientes muestran los
resultados de la consulta.
nMuestra las las devueltas y cunto tiempo tard en ejecutarse, lo cual puede
ofrecer una idea de la eciencia del servidor, aunque estos valores pueden ser
imprecisos pues dependen de muchos factores, tales como la carga del servidor,
velocidad de comunicacin, etc.
Las palabras claves pueden ser escritas en maysculas o minsculas, y los identi-
cadores de tabla, campo, ndice, etc son sensitivos a las maysculas y minsculas en
las versiones de unix (no as en Windows). Por ejemplo, las siguientes consultas son
equivalentes:
mysql> SELECT VERSINO ,CURRENT_DATE();
mysql> SELect version() ,current_Date();
mysql> select version() ,current_date();
Es posible escribir ms de una consulta por lnea, siempre y cuando estn sepa-
radas por punto y coma:
mysql> select userOzselect nowO;
+ -------------- --+
I user() I
+-------------- --+
I rootmocalhost I
+ -------------- --+
Captulo 3. Diseo fsico relacional
+------------------- --+
I now() I
+ --+
I 2009-10-20 09:53:29 I
+ ------------------- --+
No es necesario escribir un comando en una sola lnea, as que los comandos que
requieran de varias lneas no son un problema. MySQL determinar donde naliza
la sentencia cuando encuentre el punto y coma, no cuando encuentre el n de lnea:
mysq1> select user() ,
-> current_date();
+ -------------- --+ -------------- --+
I user() I current_date() I
+ --+ -------------- --+
I root1oca1host I 2009-10-20 I
+ -------------- --+ -------------- --+
Si no se desea terminar de escribir la consulta, por ejemplo, por haber cometido
un error en la sintaxis, se escribe para terminarla sin ejecutar:
mysq1> select
-> user(),
-> \c
mysq1>
El prompt se comunica con el usuario dndole informacin sobre qu ocurre, por
ejemplo:
-> Espera la siguiente lnea del comando
> Espera que se cierre una comilla sencilla
"> Espera que se cierre una comilla doble
mysq1> Listo para una nueva consulta
Otra forma de ejecutar comandos SQL es almacenarlos en un chero de texto y
mandarlo a ejecucin mediante el comando source, que recibe como parmetro un
chero de comandos y ejecuta uno por uno todos los comandos que tenga el chero:
tejecucin del script de creacin crear_bbdd_startrek.sq1
mysq1> source /home/ivan/crear_bbdd_startrek .sql
Por ltimo, tambin es posible ejecutar los comandos de un chero de texto
desde la shell, esto es, en modo batch. redirigiendo al cliente mysql un chero de
entrada. Esto es til para tareas administrativas donde se ejecutan varios cheros
le comandos, adems de otras tareas de maxitenimiento del servidor a travs de un
shell script:
101
Bases de Datos
#ejecucion en modo batch
"S mysql -u root -pPassWdUsuario <crear_bbdd_startrek.sql
#ejecucion en modo batch almacenando resultados
"S mysql -u root -pPasswdUsuario <crear__bbdd_startrek.sq1 >resu1tado
<> Actividad 3.4: Descarga de la pgina Web de l\IySQL la ltima versin disponi-
ble para Windows. A continuacin. instala el software. Asegrate de recordar la clave
que eliges para el usuario root. Ejecuta la interfaz de comandos de mysql. Podrs ha-
cerlo desde un terminal de MS-DOS (smbolo del sistema) o desde el men de inicio.
Ejecuta una consulta para ver el usuario con el que te has conectado, la versin de
base de datos y la hora actual. Realiza las mismas consultas en la mquina virtual
Linux disponible en el blog del libro (http:\\bbdd-garceta.b1ogspot .com)
3.3.3. SQL*Plus: El intrprete de comandos de Oracle
El intrprete de comando de Oracle es el programa sqlplus. Se puede invocar
desde el sistema operativo con la siguiente sintaxis:
sqlplus [{usuario[/password>] [<identificador_conexin>] | /| /no1og }]
[AS {SYSDBA I SYSOPERH
En Oracle, cada instancia est referenciada por uno o ms identicadores de
conexin. dGTZCGdOTLCOTLCITZ es el nombre de esta referencia.
#conexin a la instancia jardineria con el usuario paco
sqlplus paco/password_pacojardineria
La opcin /nolog arranca sqlplus sin conectarse a la base de datos.
#arrancar sqlplus sin conexin
sqlplus /nolog
La opcin /conecta a la instancia sin usuario. Suele usarse para tareas adminis-
trativas:
#conexin a la instancia SRACLE_SID como SYSDBA
sqlplus /as SYSDBA
Cada usuario se puede conectar representando un rol: estos roles son el de adminis-
trador de la base de datos (SYSDBA) y operador de base de datos (SYSOPER).
SYSDBA y SYSOPER tienen privilegios para conectarse a la base de datos cuando
no est abierta, pudiendo de este modo. realizar tareas de administracin y mante-
nimiento.
102
Captulo 3. Diseo sico relacional
3.3.4. Ejecucin de consultas en SQL*Plus
Al igual que en MySQL. una vez conectado sqlplus a una base de datos con un
usuario, password y nombre de servicio, se procede a escribir las consultas terminadas
en punto y coma, con las siguientes consideraciones:
ISQL*PLUS no es sensible a maysculas y minsculas ni en las palabras reser-
Vadas, ni en los nombres de los objetos.
ISe puede escribir una consulta en mltiples lneas:
SQL> select *
2 from
3 nbajugadores; "comentario de lnea
- Los comentarios de lnea se realizan precediendo una lnea de dos caracteres -
IExisten los comentarios de bloque. es decir, que afectan a ms de una lnea.
Comienzan con los caracteres /* yterminan con los caracteres */
n Existe una tabla llamada Dual que est disponible para todos los usuarios, y
sirve para seleccionar variables del sistema o para evaluar una expresin:
SQL> select sysdate, user from dual;
SYSDATE USER
27/06/10 SYS
SQL> select 5+4 from dual;
5+4
Sabas que . . . 7Existe un intrprete de comandos grco en Oracle lla-
mado iSQL*Plus. con interfaz web. Se instala aparte del software de Oracle,
descargando de la pgina Web de Oracle (wvv\v.oracle.com) el paquete isql-
plus.zip.
<> Actividad 3.5: Arranca la mquina xirtual Ubuntu yabre un terminal. Concta-
te con el usuario oracle mediante el comando:
103
Bases de Datos
su oracle
Contrasea: oracle
Acontinuacin, arranca sqlplus con el usuario nba y la passwordnba:
sqlplus nba/nba
Despus, ejecuta las siguientes consultas:
SQL> select tab1e_name from user_tab1es;
SQL> select tab1e_name from dba_tables;
Lee laseccin 3.8.5 ycomenta brevemente qu hacenlas sentenciasanteriores y en
qu se diferencian.
3.4. El lenguaje de denicin de datos
El sublenguaje de SQL que permite ladenicin de datos es el DDL (Data
Denition Language). Las funciones de este sublenguaje son:
- Crear tablas, ndices yotros objetos de la base de datos (como vistas, sinni-
mos, etc.)
n Denir lasestructuras fsicas donde sealmacenarn los objetosde lasbases de
datos (espacios de tablas(tablespaces), cheros de datos (data les), etc.)
Por ejemplo, para crear el esquema de laprctica resuelta 2.1 se puede escribir
el siguiente cdigo:
CREATE TABLE Actores(
Codigo INTEGER PRIMARY KEY,
Nombre VARCHAR(40),
Fecha DATE,
Nacionalidad VARCHAR(20),
CodigoPersonaje INTEGERREFERENCESPERSONAJES(Codigo)
);
CREATETABLEPersonajes(
CodigoPersonaje INTEGER,
Nombre VARCHAR(30),
Raza DATE,
Grado VARCHAR(20),
CodigoActor INTEGERREFERENCESActores(Codigo),
Codigosuperior INTEGERREFERENCESPersonajes(Codigo)
J;
104
Captulo 3. Diseo sico relaciona]
En el cdigo anterior, las palabras reservadas del lenguaje se han escrito en
maysculas (CREATE. DATE, VARCHAR). ylos nombres de objetos (Actores,
Grado, Nombre) se han escrito en minsculas para que el lector pueda identicar
fcilmente qu parte de la sintaxis se debe respetar ycul se puede variar.
DDL tiene 3 instrucciones bsicas:
CREATE tipo_objeto Nombre Denicin. Crea un objeto de un determinado
tipo (DATABASE, TABLE, INDEX, etc.) con un nombre (por ejemplo Actores
o Personajes) y una denicin (CodigoPersonaje, Nombre, etc.).
DROP tipo_objeto Nombre. Elimina un tipo de objeto especicado mediante
un nombre. Por ejemplo, la sentencia DROP TABLE Actores, borrara de la
base de datos la tabla Actores junto con todos sus datos.
ALTER tipo_objeto Nombre Modicacin. Modica la denicin de un obje-
to. Por ejemplo, la sentencia ALTER TABLE Actores DROP COLUMN Fecha,
eliminara la columna Fecha de la tabla Actores.
3.5. Creacin de bases de datos
3.5.1. Creacin de bases de datos en MySQL
En MySQL, para crear una base de datos se usa el comando CREATE DATA-
BASE:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] nombre_db
[especificacin_create [, especificacin_create] ...]
especificacin_create:

[DEFAULT] CHARACTER SET juego_caracteres
I [DEFAULT] CDLLATE nombre_co1acin
Por ejemplo, para crear la base de datos Startrek, en MySQL, habr que teclear,
en la consola de comandos, la instruccinl:
CREATE DATABASE Startrek CHARACTER SET Latinl CDLLATE 1atin1_spanish_ci;
Ntese que el trmino a elegir puede ser o DATABASE o SCHEMA, en cualquier
caso, el efecto es el mismo; MySQL usa algunos sinnimos para hacer ms compa-
tible su sistema de gestin con otros SGBD. Por otro lado, el parmetro opcional
lTodas las sentencias mysql deben terminar en un carcter punto ycoma (2)
105
Bases de Datos
(especicacin_create) permite elegir el juego de caracteres que va a usar la base de
datos (utf8, latinl, latin2, etc.), y la colacin, que especica cmo tratar el alfabeto
del juego de caracteres, es decir, cmo se ordena (por ejemplo, la despus de la m
y n y no conforme a la tabla de cdigos ascii), y cmo se comparan los caracteres
(por ejemplo, si A es igual a )
Para poder utilizar una base de datos, primero hay que establecer que las opera-
ciones que se realicen a continuacin se realicen sobre esta, es decir, hay que usarla.
Para usarla se utiliza el comando USE dbmame
Por ejemplo, para empezar a manipular la base de datos Startrek, habr que
ejecutar el comando USE Startrek;
Otro comando muy til para ver cuntas bases de datos est controlando el gestor
es el comando SHOW DATABASES, que obtiene un listado de las bases de datos
activas en el servidor.
mysql> snow DATABASES;
+------------------ --+
I Database I
+ ------------------ --+
I information_schema I
I Startrek
I mysql
+ ------------------ --+
Tras la ejecucin de este comando se puede ver que, adems de NBA y Star-
trek, hay otras dos que estn siempre presentes, "information_schemay mysqlque
almacenan metadatos (datos sobre los datos) e informacin de usuarios y permisos.
<> Actividad 3.6: Ejecuta los siguientes comandos en la mquina virtual Ubuntu
para crear una base de datos y una tabla:
mysq1> CREATE DATABASE Veterinario;
mysq1> USE Veterinario;
mysq1> CREATE TABLE Mascotas (
Nombre VARCHAR(10),
106
Captulo 3. Diseo fsico relacional
FechaNacim DATE,
Amo VARCHAR(40) );
A continuacin, prueba a crear una tabla llamada Vacunas, con una fecha y una
ilfa para cada mascota. Si es necesario, lee la Seccin 3.8
3.5.2. Creacin de bases de datos en Oracle
El proceso de creacin de una base de datos en Oracle es bastante ms elaborado.
En MySQL, una sola instancia controla todas las bases de datos, pero en Oracle,
ada base de datos est asociada a una. instancia. Una instancia es el conjunto de
procesos de Oracle que estn en ejecucin en el sistema operativo y cuya misin
es controlar todo lo referente a la gestin de la base de datos. Para crear una base
de datos, primero hay que crear una instancia para proceder a invocar el comando
reate database pertinente. Oracle dispone de la utilidad grca dbca (database con-
guration assistant )que facilita este proceso. No obstante, a continuacin se detalla
el procedimiento para crear una base de datos Oracle en un sistema operativo Unix
de forma manual:
#desde el sistema operativo
su oracle #conecta con el usuario oracle
cp SORACLE_HOME/dbs/init.ora SRACLE_HDME/dbs/initjardineria.ora
export 0RACLE_SID=jardineria #se conectar a la instancia jardineria
#editar los parmetros del fichero init que contiene los parmetros de
#inicio de la base de datos.
#Debe llamarse con el nombre initNombreInstancia.ora
gedit SORACLE_HUME/dbs/initjardineria.ora
#cambiar los siguientes parmetros
db_name=jardin
memory_target=100M

processes =40
audit_file_dest=/var/oracle/product/11.2.0/

audit_trail =db
db_b1ock_size=8192

db_domain=

db_recovery_file_dest=/var/oracle/product/11.2.0/lash_recovery_area

db_recovery_fi1e_dest_size=2G
diagnostic_dest=/var/oracle/product/11.2.0

dispatchers=(PRTDCOL=TCP) (SERVICE=0RCLXDB)
open_cursors=4O

remote_login_passwordfi1e=EXCLUSIVE
undo_tablespace=UNDOTBS1
sqlplus /as sysdba #invocar a sqlplus como sysdba
107
Bases de Datos
--dentro de SQL PLUS, conectarse sin montar la base de datos
SQL> Startup nomount
ORACLE instance started.
Total System Global Area 104611840 bytes
Fixed Size 1334828 bytes
Variable Size 83886548 bytes
Database Buffers 16777216 bytes
Redo Buffers 2613248 bytes
--a continuacin, se invoca el comando CREATE DATABASE
SQL> CREATEDATABASEjardin
MAXINSTANCES 1
MAXLGFILES 16
MAXLGMEMBERS 3
MAXDATAFILES 100
CHARACTER SET WE8ISO8859P15
DATAFILE /var/oracle/datos/jardineria/system01.dbf
SIZE 300M EXTENT MANAGEMENT LOCAL
UNDO TABLESPACE UNDOTBSI DATAFILE
/var/oracle/datos/jardineria/undotbsol.dbf
SIZE 550M SYSAUX DATAFILE
/var/oracle/datos/jardineria/sysauxol.dbf SIZE 300M
DEFAULT TEMPORARY TABLESPACE TEMP
TEMPFILE /var/oracle/datos/jardineria/tempO1.dbf SIZE 100M
LDGFILE GROUP1 (/var/oracle/datos/jardineria/redoO1.1og) SIZE 512OOK,
GROUP2 (/var/oracle/datos/jardineria/redo02.log) SIZE 51200K,
GROUP3 (/var/oracle/datos/jardineria/redo03.log) SIZE 5120OK;
>Database created.
--Finalmente, se crea el catalogo de metadatos
SQL>Q/rdbms/admin/Catalog.sql
SQL> G/rdbms/admin/catproc.sq1
SQL> G/rdbms/admin/ut1rp.sq1
Las opcionesde CREATE DATABASE para Oracle sonlas siguientes
I MAXINSTAN CES indica el nmero mximo de instanciasque puedenestar
usandoa la vez la basede datos objeto de la creacin. Un valor distinto de
1 implicara que la. basede datos puedeser usadaen RAC, Real Application
Cluster, lo cual signi ca que la basede datospuedeestar montada, abierta y
en uso desde ms de un servidor.
- MAXLOGFILES esel nmeromximodegruposde cheros delogquepueden
crearse.Un chero logregistratodaslasoperacionesquerealizanlosusuarios.
I INIAXDATAFILES indica el nmeromximo de cheros de datosque pueden
usarse.
- DATAFILE esel chero para el tablespaceSYSTEM.
108
Captulo 3. Diseo fsico relacional
MAXLOGMEMBERS es el nmero mximo de cheros de los miembros de
un grupo. Los cheros log se combinan en grupos.
UNDO TABLESPACE es el tablespace que almacenar los datos originales
presentes en cualquier tabla o ndice antes de hacer cualquier transaccin que
suponga una modicacin sobre aqullos.
SYSAUX TABLESPACE es un nuevo tablespace aparecido en la versin 10g de
Oracle que permite independizar de SYSTEM objetos de aplicaciones, como el
Enterprise Manager, que antiguamente se alojaban en el tablespace SYSTEM.
DEFAULT TEMPORARY TABLESPACE es el tablespace temporal que uti-
lizarn los usuarios que no tengan explcitamente asignado otro tablespace
temporal.
LOGFILE GROUP es la denicin de los grupos de cheros log.
CHARACTER SET especica el juego de caracteres que la base de datos.
utilizar para almacenar los datos (por ejemplo el WE8ISO8859P15 es el juego
que incluye todos los caracteres presentes en los idiomas de Europa Occidental,
incluyendo el signo del euro, , acentos y la
Todo este farragoso proceso se puede simplicar utilizando el asistente de crea-
cin de base de datos de Oracle (dbca, database conguration assistant). Este asis-
tente conduce al administrador automticamente por el proceso de creacin de una
instancia con su base de datos. Adems, congura automticamente un repositorio
para poder ejecutar Enterprise Manager. Para invocar este asistente tan solo hay
que escribir en un terminal de un sistema operativo el comando dbca.
<> Actividad 3.72 Abre la mquina virtual Ubuntu y con un terminal, haz login
con el usuario oracle (su oracle). Acontinuacin, ejecuta el comando dbca y sigue
los pasos para Crear una nueva instancia y su base de datos asociada.
109
Bases de Datos
---&#39;.&#39;...L.:u.a\ v- dagu" 2&#39; LIaLgJL"JJUJLI3""1&#39;J"
Seleccione laoperacin quedesearealizar
i crearBasedeDatos
l ::n:&#39;: :: >_-z tul&#39;
I&#39;m-n" :1 ;;=&#39;
r Gestionar Plantillas
Las operaciones decon guracin deASM sepueden realizar mediante elAsistente
. &#39; deCon guracin deGestin deNmacenamiento Automtico (ASMCA) desdeel
directorio razde9nddeOracle.
Cancelar 44 AWG
Figura 3.6: Database Con guration Assistant.
3.6. Modi cacin de una base de datos
El comando ALTER DATABASE permite cambiar las caractersticasde funcio-
namientode una basede datos. Por ejemplo,en MySQL. tan solosepuedecambiar
el juego de caracteres y su colacin:
#cambia la colacin de una base de datos
ALTER DATABASEStartrek COLLATE latin1_spanish_ci;
En Oracle, se puede cambiar cualquiera de susmltiples parmetros, aqu se
muestranalgunosejemplos:
--Cambia el tamao del fichero de datos del sistema
SQL> ALTER DATABASE DATAFILE
/var/oracle/datos/jardineria/systemoi.dbf&#39; SIZE 1G;
--Cambia el modo de acceso a la base de datos a solo lectura
SQL> ALTER DATABASEopen read only;
-Desactiva la opcin de recuperacin rpida
ALTER DATABASE flashback off;
110
Captulo 3. Diseo sico relacional
3.7. Borrado de bases de datos
El comando DROP DATABASE es el utilizado para eliminar bases de datos. En
INIySQL, el comando se acompaa del nombre de la base de datos a eliminar:
>mysq1 -u root -p
drop database Proveedores;
En Oracle, no hay que especicarlo, tan solo es necesario conectarse a la instancia
y escribir:
>sq1p1us /as sysdba
shutdown abort; --parada de la instancia
Startup mount exclusive restrict; --reinicio en modo exclusivo
drop database; --borrado
exit; --salir
Otra forma menos elegante de borrar una base de datos consiste en borrar fsi-
camente todos los cheros binarios de la base de datos.
3.8. Creacin de tablas
Para crear tablas se usa el comando CREATE TABLE:
CREATE [TEMPDRARY] TABLE [esquema.]nombre_tab1a
[(definicin_create, . ..)]
[opciones_tab1a]
def inicin_create :
definicin_columna
I [CNSTRAINT [smbolo]] PRIMARY KEY (nombre_co1umna,...)
I [CNSTRAINT [smbo1o]] FDREIGN KEY (nombre_co1umna,...)
[def inicin_referencia]
definicin_co1umna:

nombre_columna tipo_datos [NOT NULL l NULL] [DEFAULT valor]
[UNIQUE [KEY] [PRIMARY] KEY]
[def inicin_referencia]
definicin_referencia:

REFERENCES nombre_tab1a [(nombre_columna, ...)]
[ON DELETE {CASCADE I SET NULL I NO ACTION} ]
[ON UPDATE {CASCADE | SET NULL I ND ACTION} ]
111
Bases de Datos
El formato que aqu se presenta es un formato reducido, compatible con la mayora
de los gestores de bases de datos, para ms informacin sobre un comando CREATE
TABLE para un gestor en particular, se debe recurrir al manual de referencia del
gestor.
La porcin de sentencia (denicincreate, . . .) especicar. la denicin de los cam-
pos que va a contener la tabla y sus restricciones. Los puntos suspensivos sugieren
que deniciucreate se puede repetir tantas veces como sea necesario, por ejemplo
si hay una tabla con 5columnas, habr que especicar 5 veces denicin_create.
El token opcional TEMPORARY se utiliza para crear tablas temporales (esto
es, una tabla invisible al resto de usuarios y que se borrar en el momento de la
desconexin del usuario que la cre). La primera clusula que lleva la denicin es
denicincolumna, donde se especicar la denicin de un campo o columna de la
tabla:
definicin_co1umna:

nombre_columna tipo_datos [NOT NULL I NULL] [DEFAULT valor]
[UNIQUE [KEY] I [PRIMARY] KEY]
[definicingreferencia]
Se indica el nombre de columna yel tipo de datos, por ejemplo, el Codigo Postal
podra ser un tipo NUMERIC(5,0) de MySQL, puesto que los cdigos postales
tienen 5 dgitos enteros y O decimales.
NOT NULL y NULL especican que la columna admite o no admite valores nulos,
es decir si un campo puede quedar sin valor, o con valor desconocido.
DEFAULT indica el valor por defecto que toma el campo si no es especicado de
forma explcita. Por ejemplo, si se declara la. siguiente columna:
CodigoPostal Numeric(5,0) NT NULL DEFAULT 28941
Se indica que el campo Cdigo Postal es un nmero de 5 dgitos enteros, que no
admite valores nulos, y que en caso de no especificarlo, por ejemplo, en una insercin,
el valor que tomar es 28941.
UNIQUE KEY especica la creacin de un ndice, esto es, una estructura de datos
que permite un acceso rpido a la informacin de una tabla y adems, controla que
no haya ningn valor repetido en el campo. Se producir un error si se intenta
insertar un elemento que ya coincida con un valor anterior. A efectos prcticos, la
diferencia con una clave primaria es bsicamente que un campo UNIQUE puede
admitir valores NULL, mientras que un campo que se dene como clave primaria
no puede admitir nulos (debe ser NOT NULL).
112
Captulo 3. Diseo sico relacional
PRIMARY KEY indica que la columna denida es la clave primaria. Una tabla
tan solo puede tener una clave primaria. Si se especica. a nivel de colummdenition,
la clave solo puede tener un campo, si la clave se dene a nivel de tabla, la clave
puede ser multicolumna.
3.8.1. Implementacin de restricciones
En la sintaxis de CREATE TABLE, denicinJeferencia sirve para crear una
clave fornea. De esta manera, se enlaza el campo a su campo origen, es decir se
crea una referencia:
Si existe la siguiente tabla creada:
create table c1ientes(
dni varchar(9) PRIMARY KEY,
nombre varchar(50),
direccion varchar(60)
);
Se puede crear otra tabla mascotas que contenga el registro de las mascotas de
una tienda veterinaria y con un campo que haga referencia al dueo de la mascota:
create table mascotas(
codigo integer PRIMARY KEY,
nombre varchar(50),
raza varchar(50),
cliente varchar(9) REFERENCES c1ientes(dni)
);
Las opciones ON DELETE y ON UPDATE establecen el comportamiento del
gestor en caso de que las las de la tabla padre (es decir, la tabla referenciada) se
borren o se actualicen. Los comportamientos pueden ser CASCADE, SET NULL y
NO ACTION.
ISi se usa NO ACTION y se intenta un borrado o actualizacin sobre la tabla
padre, la operacin se impide, rechazando el borrado o la actualizacin.
ISi se especica CASCADE, la operacin se propaga en cascada a la tabla hija,
es decir, si se actualiza la tabla padre. se actualizan los registros relacionados
de la tabla. hija, ysi se borra un registro de la tabla padre, se borran aquellos
registros de la tabla hija que estn referenciando al registro borrado.
113
Bases de Datos
ISi se indica SET NULL, se establece a NULL la clave fornea afectada por un
borrado o modicacin de la tabla padre.
create table mascotas(
codigo integer PRIMARY KEY,
nombre varchar(50),
raza varchar(50),
cliente varchar(9) REFERENCES c1ientes(dni)
UN DELETE CASCADE ON UPDATE SET NULL
Si no se especica ON DELETE u ON UPDATE por defecto se acta como NO
ACTION.

Oracle no implementa la opcin ON UPDATE por lo que hay que recurrir a otros
mtodos para realizar las acciones de actualizacin, como por ejemplo, mediante
TRIGGERS (disparadores).
La siguiente parte de la sintaxis de CREATE TABLE hace referencia a las de-
claraciones globales sobre la tabla, esto es, restricciones, claves primarias y forneas
compuestas, etc.
[CNSTRAINT [smbo1o]] PRIMARY KEY (nombre_co1umna,. ..)
I [CONSTRAINT [simbo1o]] FOREIGN KEY (nombre_co1umna, . ..)
[definicimreferencia]
En SQL, todas las restricciones pueden tener un nombre para facilitar su poste-
rior referencia, por tanto cuando aparezca el opcional CONSTRAINT [smbolo] se
indica que la denicin de una restriccin tiene un nombre.
PRIMARY KEY sirve para especicar la creacin de una clave primaria a nivel de
tabla. Existe la opcin de crearla a nivel de columna, mediante denicincolumna
o denirla aqu. Por ejemplo, es posible denir la siguiente tabla de dos formas:
#primera forma -nivel de columna
create table vehicu1o(
matricula varchar(7) primary key,
marca varchar(20),
modelo varchar(20),
precio numeric(7,2)
Captulo 3. Diseo sico relacional
#segunda forma -nivel de tabla
create table vehicu1o(
matricula varchar(7),
marca varchar(20),
modelo varchar(20),
precio numeric(7,2)
primary key (matricula)
);
Ambas formas son equivalentes. la diferencia es que mediante la segunda forma,
es posible crear claves primarias compuestas por varios campos. Ejemplo:
#Clave primaria =dni + n_ss
create table emp1eado(
dni varchar(9),
n_ss varchar(15),
nombre varchar(40),
PRIMARY KEY (dni,n_ss) #compuesta
De forma anloga, tambin se puede crear claves forneas a. nivel de tabla, ha-
ciendo uso de:
[CONSTRAINT [symbo1]] FREIGN KEY (index_col_name, . ..)
[referencejefinition]
create table mascotas(
codigo integer PRIMARY KEY,
nombre varchar(50),
raza varchar(50),
cliente varchar(9),
FOREIGN KEY (cliente) references clientes(dni)
);
<> Actividad 3.8: Conctate a MySQL y prueba a ejecutar los comandos CREA-
TE TABLE anteriores. Posteriormente, Conctate a. Oracle mediante SQL*Plus y
ejectalos de nuevo. Son compatibles?
115
Bases de Datos
Para terminar, cada gestor de base de datos efecta sus propias modicaciones
al formato de la sintaxis create table. La clusula opcionesiabla permite especicar
las peculiaridades de cada gestor con respecto al almacenamiento en soporte fsico
de sus tablas. Adems, cada gestor incorpora diversas caractersticas, por ejemplo,
Oracle y DB2 implementan tipos de datos distintos a MySQL o a SQL Server y
Access.
3.8.2. Tipos de Datos
Los tipos de datos que pueden usarse tanto para MySQL como para Oracle en
la denicin de una. columna son los siguientes:
MySQL
X
TINYINT [UNSIGNED] Entero
SMALLINT [UNSIGNED] Entero
MEDIUMIN T [UNSIGNED] Entero
INT [UNSIGNED] Entero
BIGINT [UNSIGNED] Entero
INTEGER [UNSIGNED] Entero
DOUBLE [UNSIGNED] Real Aproximado 8 bytes
FLOAT [UNSIGNED] 4 bytes
DECIMAL(longituddecimales) Real Exacto Variable
NUMERIC(longitud,decimales) Real Exacto Variable
NUMBER(longitudLdecimales]) Real Exacto Variable
DATE Fecha aaaa-mm-dd
TIME Hora hhzmmzss
TIMESTAMP Fecha y Hora aaaa-mm-dd hhzmmzss
DATETIME Fecha y hora aaaa-mm-dd hh:mm:ss
CHAR(longitud) caracteres Longitud Fija
VARCHARUongitud) caracteres Longitud Variable
VARCHAR2(longitud) caracteres Longitud Variable
BLOB Objetos binarios Longitud Variable
TEXT Campos Memo Longitud Variable
CLOB Campos Memo Longitud Variable
EN UM(valor1,valor2,valor3...) Enumeraciones Lista de valores
SET(valor1, valor2, valor3. . . )Conjuntos Conjuntos de valores
Cuadro 3.1: Tipos de datos en MySQL y Oracle/DBZ
xxxx xxxxx
Puede verse que no todos los tipos de datos estn en todos los gestores. As por
ejemplo, el tipo de datos ENUM no est disponible en Oracle y si en MySQL.
Se utiliza para crear enumeraciones, es decir, campos que admiten solo valores fijos,
por ejemplo Color EN UM (rojo , hmavillo , verde ). En Oracle, en su lugar, se puede
implementar utilizando la directiva CHECK.
116
Captulo 3. Diseo fisico relacional
3.8.3. Caractersticas de la creacin de tablas para MySQL
Las opciones de tabla para l\vIySQL son las siguientes:
opciones_tab1a: opcin_tab1a [opcin_tab1a]
opcin_tab1a:

ENGINE =nombre_motor
l AUT_INCREMENT =valor
I [DEFAULT] CHARACTER SET juego_caracteres [COLLATE colacin]
I CHECKSUM = {o I 1}
| COMMENT = string
l MAX_ROWS =valor
I MIN_ROWS = Valor
El almacenamiento fisico de una tabla en MySQL est controlada por un softwa-
re especial denominado Motor de almacenamiento. Mediante la opcin ENGINE=
nombreJnotorse indica el motor de almacenamiento para la tabla. Puede ser, en-
tre otros, innodb, que son tablas transaccionales con bloqueo de registro y claves
forneas, mylsam por defecto usado por MySQL y que genera tablas operadas a
gran velocidad, pero sin control de integridad referencial y Memory, que genera
tablas que estn almacenadas en memoria en lugar de un archivo fsico.
La opcin AUTOJNCREMENT permite indicar el valor inicial para campos de
tipo AUTOJNCREMENT. AUTOJNCREMENT indica que ese campo es auto-
incrementado despus de cada. insercin. Un campo denido como autojncrement
debe ser numrico; de esta manera, cuando en ese campo se indica el valor NULL en
una insercin, el campo toma automticamente el ltimo valor incrementado en una
unidad. Este campo es muy til para los campos cdigo donde se especican valores
clave autogenerados. En MySQL para denir un campo AUTOJNCREMENT se
especica la palabra clave justo a continuacin del tipo de datos. Para simular este
comportamiento en Oracle, se utiliza una secuencia (SEQUENCE).
DEFAULT] CHARACTER SETEspecica el conjunto de caracteres para la ta-
bla y COLLATE dene la colacin por defecto de la tabla. Si se especica CHECK-
SUM, MySQL mantiene una suma de vericacin para todos los registros. El co-
mando CHECKSUM TABLE muestra esa suma de vericacin (solo para motores
de almacenamiento 1\ilyISAl\l).
COMMENT es un comentario para la tabla, hasta 60 caracteres. Tambin es posi-
ble crear comentarios para cada una de las columnas. Mediante el token COMMENT
117
Bases de Datos
se puede documentar el diccionario de datos. MySQL dispone de este token para
comentar no solo tablas, sino tambin columnas.
MAX_ROWS es el mximo nmero de registros que se quiere almacenar en la
tabla. No es un lmite absoluto, sino un indicador que la tabla debe ser capaz de
almacenar al menos estos registros. MIN_ROWS es el mnimo nmero de registros
que se planea almacenar en la tabla.
Por ltimo, al igual que en la creacin de base de datos, MySQL dispone de la
clusula IF NOT EXISTS, para que solamente se cree la tabla si no est creada
previamente.
#Ejemp1o de creacin de tabla en MySQL
create table if not exists Pedido(
codigo int auto_increment primary key,
fecha datetime,
estado enum(Pendiente,Entregado,Rechazado)
)
comment = tab1a de pedidos a proveedores
auto_increment =10000
max_rows=100000O
checksum=1
engine=innodb;
3.8.4. Caractersticas de la creacin de tablas para Oracle
En Oracle, la mayora de las opciones tienen que ver con su almacenamiento
fsico. Por ejemplo, las tablas deben ser almacenadas en un contenedor llamado
tablespace (Espacio de tablas). Por defecto, si no se indican opciones de almacena-
miento, la tabla se ubica en el tablespace del usuario, pero si se quiere ubicar en otro
tablespace, se puede incluir la opcin tablespace nombre para designar otro tables-
pace. Adems, se puede denir cmo se reserva. el espacio en disco para controlar
el crecimiento desmedido del tamao de una tabla mediante la clusula storage.
Estas y muchas otras opciones. son propias de Oracle. Por ltimo, cabe destacar la
capacidad de Oracle de permitir la creacin de restricciones de tipo CHECK, que
permite validar el valor de un campo mediante una expresin.
--Ejemplo de creacin de tablas con opciones propias de Oracle
create table Pedido(
codigo integer primary key,
fecha date,
estado varchar(10).
118
Captulo 3. Diseofsicorelaciona]
constraint c_estado
check (estado IN ( Pendiente , Entregado , Rechazado ))
)
tablespace Administracion
storage (initial 100k next 100k minextents 1
maxextents unlimited pctincrease 0);
3.8.5. Consulta de las tablas de una base de datos
Para consultarlas tablas disponiblesde una basede datosen MySQL, seutiliza
el comando SHOW TABLES
mysq1> show tables;
+-------------------- --+
I Tab1es_in_jardineria I
+-------------------- --+
| Clientes
I Deta11ePedidos
I
I Productos
+ -------------------- --+
En Oracle, sepuedenconsultarlasvistasuser_tables, dbajcables y alLtables. En
Oracle, lasvistasquecomienzanpor usen, aportaninformacinsobrelosobjetosque
poseeel usuarioconectado.Las vistas que comienzanpor dba- sonsoloaccesibles
por los administradoresde basesde datos y muestraninformacinsobretodoslos
objetos.Finalmente, lasvistasquecomienzanpor all- muestranla informacinsobre
losobjetosa losqueel usuariotiene acceso,seansuyoso no.
SQL> select table_name from user_tables;
TABLE_NAME
PARTIDOS
ESTADISTICAS

JUGADORES
EQUIPOS
3.8.6. Consulta de la estructura de una tabla
Para conocerla estructurade una tabla ya creadaesposibleutilizar el comando
119
Bases de Datos
DESCRIBE [esquema .] nombre_tab1a
Este comando muestra un listado con las Columnas de la tabla. aportando informa-
cin sobre los tipos de datos, restricciones, etc.
SQL> describe nba.equipos;
NOT NULL VARCHAR2 (20)
VARCHARQ (20)
CONFERENCIA VARCHARQ (4)
DIVISION VARCHAR2(9)
3.9. Modicacin de tablas
El comando para modicar una tabla es ALTER TABLE y su sintaxis tambin
es bastante compleja:
ALTER TABLE nombre_tab1a
especificacin_a1ter [, especificacin_a1ter]
especificacin_a1ter:

ADD definicin_co1umna [FIRST I AFTER nombre_co1umna ]
I ADD (definicin_columna,...)
I ADD [CNSTRAINT [smbolol]
PRIMARY KEY (nombre_co1umna,...)
I ADD [CONSTRAINT [smbo1o]]
UNIQUE (nombre_co1umna,...)
IADD [CONSTRAINT [simbo1o]]
FOREIGN KEY (nombre_co1umna,...)
[definicin_referencia]
I CHANGE [COLUMN] anterior_nombre_co1umna definicin_co1umna
[FIRSTIAFTER nombre_columna]
RENAME COLUMN anterior_nombre_co1umna TD nuevo_nombre_co1umna
MDDIFY definicin_columna [FIRST I AFTER nombre_columna]
DRP COLUMN nombre_co1umna
DROP PRIMARY KEY
DROP FOREIGN KEY fk_smbo1o
opciones_tabla
120
Captulo 3. Diseo fsico relacional
Al ver esta sintaxis se puede caer en la tentacin de pensar que es mejor borrar
una tabla y volver a crearla haciendo las modicaciones oportunas. Esto es posible
si la tabla no tiene datos, pero. .. qu ocurre si hay un centenar o un millar de
registros? No queda otra opcin que ejecutar una sentencia ALTER TABLE para
evitar la prdida de datos.
ILa opcin ADD permite aadir una columna, se puede especicar el lugar
donde se va a insertar mediante las clusulas AFTER (despus de una colum-
na) y FIRST (la primera columna). Oracle no admite las clusulas AFTER y
FIRST.
ICon la opcin MODIFY se cambia el tipo de datos de una columna y se aaden
restricciones.
ICon la opcin DROP se pueden eliminar las restricciones de claves forneas y
primarias, dejando el tipo de dato y su contenido intacto.
- Las opciones de tabla, al igual que en CREATE TABLE varan con cada
SGBD, y sirven principalmente para modicar las caractersticas del almace-
namiento fsico.
- Para cambiar el nombre de una columna, Oracle usa la clusula RENAME y
MySQL la clusula CHANGE.
Por ejemplo, en MySQL, para aadir a la tabla mascotas el campo especie des-
pus del campo Raza, habra que ejecutar la siguiente instruccin:
ALTER TABLE Mascotas ADD Especie VARCHAR(10) AFTER Raza;
Para eliminar la columna con clave primaria CodigoCliente de la tabla Clientes
en Oracle y establecer como clave primaria. el campo NIF , hay que ejecutar las
siguientes sentencias:
ALTER TABLE Clientes DRDP PRIMARY KEY;
ALTER TABLE Clientes DROP CodigoC1iente;
ALTER TABLE Clientes ADD CLUMN Nif VARCHAR(10) PRIMARY KEY FIRST ;
121
Bases de Datos
3.10. Borrado de tablas
El formato de instruccin en l\IySQL para el borrado de una tabla es muy sencillo:
DRDP [TEMPORARY] TABLE
tb1_name [, tbl_name]
Ejemplo:
DRDP TABLE Mascotas;
DRDP TABLE Clientes, Empleados;
En Oracle, cambia un poco pero es muy similar:
DRDP [TEMPORARY] TABLE tbl_name [CASCADE CNSTRAINT]
No se permite el borrado de varias tablas en la misma sentencia, y, de forma opcional,
CASCADE CONSTRAINT exige a Oracle que elimine las claves forneas de las
tablas relacionadas (en cascada).
--Elimina la tabla Partidos
DRDP TABLE Partidos;
--Elimina la tabla Jugadores y
--borra las claves forneas de otras tablas
DRDP TABLE Jugadores CASCADE CONSTRAINT;
3.11. Renombrado de tablas
Para renombrar una tabla en MySQL se usa el comando RENAME TABLE:
RENAME TABLE nombre_tabla TD nuevo_nombre_tab1a
[, nombre_tabla TD nuevo_nombre_tab1a]
Ejemplo:
RENAME TABLE Mascotas TD Animales;
En Oracle, no hay que indicar el token TABLE. basta con poner:
RENAME Jugadores T0 Baloncestistas;
122
Captulo 3. Diseo sico relacional
3.12. Prcticas Resueltas
Prctica 3.1: Modelo fsico para stratrekfanscom v.1.0
En un chero de texto con nombre startreklsql, escribe las sentencias SQL para
crear el modelo fsico de la prctica 2.1. Despus, crea una base de datos llamada
startrek en un servidor MySQL yejecuta las sentencias con comando source. A
continuacin, Conctate a Oracle con el usuario administrador (sqlplus /as sysdba)
y crea un usuario en una instancia de oracle con el comando:
CREATE USER startrek IDENTIFIED BY startrekpwd
QUOTA UNLIMITED ON USERS;
.Dale permisos al usuario startrek para iniciar sesion y crear tablas con:
GRANT CREATE SESSION,CREATE TABLE TO startrek;
Con ese usuario, Conctate a sqlplus y ejecuta el chero que has creado.
startrek1.sq1
CREATE TABLE Actores(
Codigo integer PRIMARY KEY,
Nombre varchar(50) NOT NULL,
Fecha DATE NOT NULL,
Nacionalidad varchar(20) DEFAULT EEUU
);
CREATE TABLE Personajes(
Codigo integer PRIMARY KEY,
Nombre varchar(50) NOT NULL,
Raza varchar(20) NOT NULL,
Grado varchar(20) NOT NULL,
CodigoActor integer NOT NULL,
Codigosuperior integer NULL,
FOREIGN KEY (CodigoActor) REFERENCES Actores(Codigo),
FOREIGN KEY (Codigosuperior) REFERENCES Personajes(Codigo)
);
CREATE TABLE P1anetas(
Codigo integer PRIMARY KEY,
Galaxia varchar(50) NULL,
Nombre varchar(50) NOT NULL
);
CREATE TABLE Capitulos(
Temporada integer,
N Orden integer,
Titulo varchar(50) NOT NULL,
123
Bases de Datos
Fecha date NOT NULL,
PRIMARYKEY (Temporada, Orden)
);
CREATE TABLE Pe1iculas(
Codigo integer PRIMARY KEY,
Titulo varchar(50) NOT NULL,
Director varchar(30) NOT NULL,
Anyo Date NULL
);
CREATETABLEPersonajesCapitu1os(
CodigoPersonaje integer PRIMARY KEY,
Temporada integer NOT NULL,
Orden integer NOT NULL,
FOREIGNKEY (Temporada,Orden) REFERENCES Capitulos(Temporada,Orden)
);
CREATE TABLE PersonajesPe1icu1as(
CodigoPersonaje integer REFERENCES Personajes(Codigo),
CodigoPelicu1a integer REFERENCES Pe1icu1as(Codigo)
);
CREATE TABLE Naves(
Codigo integer PRIMARY KEY,
NTripu1antes integer NULL,
Nombre varchar(50) NOT NULL
);
CREATE TABLE Visitas(
CodigoNave integer REFERENCES Naves(Codigo),
CodigoP1aneta integer REFERENCES P1anetas(Codigo),
Temporada integer NOT NULL,
Orden integer NOT NULL,
FOREIGN KEY (Temporada,Orden) REFERENCES Capitulos(Temporada,Orden)
Con el chero anterior llamado startreILsqI, en mysql:
mysql> CREATE DATABASE Startrek; USE Stratrek;
mysql>source stratrelczsql
En Oracle: sqlplus / as sysdba
SQL> CREA TE USER startrek IDENTIFIED BY startrekpwd;
SQL> GRANT CREATE SESSIOMCREATE TABLE TO startrek; SQL>ezit
sqlplus startrek/startrekpwd
SQL> @startrek.sql
124
Captulo 3. Diseo fsico relacional
Prctica 3.2: Restricciones para startrekfanscom v.1.0
Se desea imponer las siguientes caractersticas al modelo fsico, pero son dependien-
tes del gestor de base de datos donde se van a codicar, as que se codican en
cheros independientes. Para MySQL se desea:
IQue todas las tablas tengan el motor de almacenamiento innodb para que las
claves forneas no sean ignoradas.
-Que las claves primarias numricas sean de tipo autojncrement.
n Que el campo Galaxia de la tabla Planetas sea una enumeracin de los valores
(Via LcteaAndrmedafsombrero).
Para Oracle se desea:
-Que las tablas se encuentren ubicadas en el tablespace STARTREK.
IQue el campo NTripulantes de la tabla Naves solo pueda tener un valor entre
1 y 500.
IQue el campo Galaxia de la tabla Planetas solo pueda tener los valores (Via
Lctea,Andrmeda,Sombrero).
Las sentencias SQL para efectuar los cambios en MySQL son:
Cambios en MySQL
#Las tablas se pueden cambiar de dos formas:
ALTER TABLE Actores ENGINE=innodb;
, si estn vacas se puede hacer:
DRP TABLE Actores;
CREATE TABLE Actores(
) ENGINE=innodb;
#Para cambiar a auto_increment la clave primaria
#se usa:
ALTER TABLE Actores MODIFY
Codigo integer auto_increment PRIMARY KEY;
#Para cambiar el campo Galaxia a una enumeracin:
ALTER TABLE Planetas MODIFY
Galaxia ENUM (Via Lctea,Andrmeda,Sombrero);
Las sentencias SQL para efectuar los cambios en Oracle son:
125
Bases de Datos
Cambios en Oracle
-- Asignar el tablespace STARTREK a las tablas, solo se puede
--hacer si estn vacas, y recrearlasz
drop table actores cascade constraints;
CREATE TABLE Actores(
Codigo integer PRIMARY KEY,
Nombre varchar(50) NOT NULL,
Fecha DATE NOT NULL,
Nacionalidad varchar(20) DEFAULT EEUU
) TABLESPACE STARTREK;
-- Para cambiar el campo NTripu1antes:
ALTER TABLE Naves MDDIFY NTripu1antes integer
check (NTripu1antes>=1 and NTripu1antes<=500);
-- Para aadir la restriccin a galaxia:
ALTER TABLE Planetas MDDIFY Galaxia varchar(10)
CHECK (Galaxia IN (Via Lctea,Andrmeda,Sombrero));
Prctica 3.3: Modelofsicoparastratrekfanscom v.2.0 Enun
chero de texto connombrestartreklsql, escribelassentenciasSQL para modi car
el modelofsicodela prctica 2.2. Despus,creauna basede datosllamada startrek
en un servidorMySQL. Ejecuta lassentenciasdel chero en un servidorde MySQL
conel comandosource.A continuacin,Conctatea Oracle conel usuariostartrek
y ejecutael chero que hascreado.
startrek2.sq1
ALTER TABLE Personajes ADDCiudad varchar(50);
ALTER TABLE Personajes ADD FNacim date;
ALTER TABLE Personajes ADDPlaneta integer REFERENCES P1anetas(Codigo);
ALTER TABLE Personajes ADDFU1tCombate date;
ALTER TABLE Personajes ADDMentor varchar(50);
ALTER TABLE Personajes ADD FechaGrado date;
Can el chero anterior llamado startrek2.sql, en mysql:
mysql> USE Stratrek;
mysql>source stratreksql
En Oracle: sqlplus startrek/startrekpwd
SQL> @startrek2. sql
126
Captulo 3. Diseo fsico relacional
Prctica 3.4: Modelo fsico para stratrekfanscom v.3.0 En un
chero de texto con nombre startrek3.sql, escribe las sentencias SQL para modicar
el modelo fsico de la prctica 2.2. Despus, crea una base de datos llamada startrek
en un servidor MySQL. Ejecuta las sentencias del chero en un servidor de MySQL
con el comando source. A continuacin, Conctate a Oracle con el usuario startrek
y ejecuta el chero que has creado.
startrek3.sql
CREATE TABLE Lanzaderas(
CodigoNave integer,
Numero integer,
Personas integer,
PRIMARY KEY(CodigoNave,Numero),
FOREIGN KEY(CodigoNave) REFERENCES Naves(Codigo)
Can el chero anterior llamado startreksql, en mysql:
mysql) USE Stratrek;
mysql>source stratrekzsql
En Oracle: sqlplus startrek/starirekpwd
SQL> @startrek2. sql
127
Bases de Datos
3.13. Prcticas Propuestas
Prctica 3.5: Modelo fsico para jerarquas
Dado el diagrama E / R de la gura siguiente, genera el modelo fsico, codicando en
SQL todas las sentencias para crear las tablas de dos maneras posibles, generando
una tabla para cada especializacin. y generando una sola tabla para los empleados.
Ejecuta los dos modelos tanto en Oracle como en l\IySQL.
Prctica 3.6: Ms modelos fsico
Para los modelos lgicos creados en las prcticas 2.4. 2.5. 2.6 y2.7, crea el modelo
fsico asociado mediante varios cheros con extensin sql. En l\&#39;IySQL crea una base
de datos para cada modelo y ejecuta el chero correspondiente, y en Oracle, crea un
usuario distinto que contenga cada uno de los esquemas de las diferentes prcticas. <>
128
Captulo 3. Diseo sico relacional
Prctica 3.7: Parque Ecolgico
Un parque ecolgico quiere informatizar la gestin de su sistema de informacin
para poder obtener datos ms concluyentes sobre las especies migratorias que se
establecen en su territorio. El parque desea clasicar todas las especies animales
y contabilizar el nmero de individuos de cada especie que se establecen en el te-
rritorio en cada poca del ao. Se desea que la base de datos almacene datos de
nuevas especies y nuevos individuos de cada especie animal. Para cada especie, se
requiere el nombre de la especie, caractersticas generales de un individuo tipo y sus
periodos migratorios. Para cada individuo se tendr en cuenta el peso, dimensiones,
y un cdigo que identique de forma nica cada individuo dentro de su especie.
Esta forma de identicacin, ir almacenada en un pequeo dispositivo con una
batera autnoma implantada en el animal, y que servir para detectar cuando el
individuo sale o entra en el territorio gracias a unas torretas de control instaladas
en el permetro del parque. Estas torretas informan va inalmbrica al sistema de
las idas y venidas de cada individuo. De esta manera, se pueden contabilizar sus
migraciones y los posibles descontroles que sufran en el periodo migratorio. Toda la
informacin sobre migraciones de individuos de determinadas especies ser enviada
cada tres meses a un grupo de expertos bilogos, encargados de hacer una valoracin
sobre futuros periodos migratorios y posibles alteraciones del comportamiento de las
especies. De los bilogos, se quiere almacenar, el nombre, la direccin, provincia y su
fecha de titulacin. En principio, no se conoce todava si se implementar en Oracle
o MySQL por lo que el diseo debe ser compatible para ambos gestores de bases de
datos. <>
Prctica 3.8: BuscoPareja.net
Se va a crear una pgina Web de contactos en el dominio BuscoPareja.net. Cuando
un usuario se registra en el sistema, se almacenan sus datos personales, concreta-
mente su email, su nombre, direccin, ciudad, pas, su sexo y orientacin sexual, su
foto y una password que utilizar junto con su email para acceder al sistema. El
usuario a continuacin rellena una lista de preferencias o gustos. De cada gusto o
preferencia se almacenar el tipo (Deporte, Msica, Evento Social), la fecha de la
ltima. vez que hizo una actividad de ese estilo y si le gustara o no que su pareja
tuviera la misma preferencia. A partir de esta informacin se organizan citas entre
los contactos en distintas ubicaciones. Se desea registrar las citas entre los contactos
almacenando quin se cita con quin. en qu lugar y a qu hora, y si la cita fracas.
Se desea realizar el diseo conceptual. lgico y fsico de la base de datos, creando el
modelo fsico para Oracle y para MySQL. <>
129
Bases de Datos
3.14.
130
Resumen
Los conceptos clave de este captulo son los siguientes:
Las herramientas grcas ayudan al informtico a gestionar los componen-
tes de una base de datos, pero adems, un buen administrador debe conocer
los comandos necesarios para hacer las tareas administrativas. Entre las he-
rramientas grcas que dispone el mercado, se encuentran PhpMyAdmin, de
MySQL, Enterprise Manager y Grid Control, de Oracle y Data Studio de DB2.
Un intrprete de comandos enva comandos en modo texto al SGDB y muestra
los resultados en una consola. Estos intrpretes de comandos suelen permitir
la ejecucin remota de comandos a travs de protocolos TCP-IP. Entre otros
estn, mysql y SQL*Plus e iSQL*Plus(Oracle).
El DDL o Data Denition Language de SQL dene la sintaxis de los comandos
CREATE, DROP y ALTER, para crear, borrar y modicar objetos de una
BBDD.
El comando CREATE DATABASE permite crear bases de datos en los SGBD.
Algunos SGBD permiten manipular varias BBDD mediante una sola instan-
cia, otros, como Oracle, permiten solo manipular una BBDD por instancia.
Adems, existen asistentes grcos (como dbca de Oracle), que permiten de
forma sencilla crear bases de datos.
El comando ALTER DATABASE permite modicar ciertos parmetros de
funcionamiento de la BBDD. Estos parmetros dependen del funcionamiento
y de la arquitectura del SGBD, por tanto, no son estndar.
El comando DROP DATABASE borra una base de datos de un servidor.
Los comandos CREATE TABLE, ALTER TABLE y DROP TABLE estn
denidos en el estndar SQL para poder crear, modicar y borrar tablas, y,
salvo pequeas diferencias, se pueden escribir estos comandos compatibles para
la mayora de los SGBD.
Para implementar restricciones se usan las clusulas PRIMARY KEY (cla-
ves primarias) y REFERENCES (para claves Forneas). Hay dos formas de
crearlas, a nivel de tabla y a nivel de columna. A nivel de tabla es posible
especicar claves compuestas. Es posible tambin, denir otras restricciones
como las UNIQUE, CHECK, NULL o NOT NULL, etc.
Los comandos DESCRIBE y RENAME sirven para mostrar la estructura de
una tabla y cambiarle el nombre a un objeto.
3.15. Test de repaso
1. Qu funcin no permite realizar
phpMyAdmin?
a) Ejecucin remota de comandos
b
) Copias de seguridad
c) Creacin y borrado de tablas
)
d Parar y arrancar el servidor
2. Oracle Grid Control no permite
a Controlar el estado de mltiples BBDD
Creacin y borrado de tablas
)
b) Controlar mltiples servidores
c)

)
d Parar y arrancar un SGBD
3. El comando CREATE DATABASE
no
a) Es una sentencia DDL
b) Es compatible entre los distintos SGBD
)
Permite especicar los tablespaces de una
BBDD
C
d) Permite especicar el juego de caracteres
4. Una clave fornea
a) Se dene con FOREIGN KEY
b) Se dene con REF ERENCES
c) Puede ser compuesta
d) Todas las anteriores son correctas
5. Para arrancar el Enterprise Manager
a) No hay que hacer nada, viene instalado por
defecto
b) Hay que arrancarlo con el comando ernctl
start dbconsole
c) Hay que arrancarlo con el comando emctl
stop dbconsole
d) Es un entorno grco basado en ventanas
Captulo 3. Diseo sico relacional
6. La opcin ON DELETE CASCADE
del comando CREATE TABLE
a) No funciona en Oracle
b) No funciona en MySQL
c) Permite borrar registros relacionados en
cascada
d) Permite borrar claves forneas en cascada
7. A una restriccin
a) No se le puede poner nombre
b) Se le puede poner nombre mediante
CONSTRAINT
c) Se le puede poner nombre mediante RES-
TRICTION
d) Se le puede poner nombre mediante RE-
FERENCES
8. autojncrement es una opcin
a) Slo de MySQL
b) Para incrementar valores numricos de for-
ma automtica
c) Se suele aplicar a las claves primarias
d) Todas las anteriores son correctas
9. Con el comando ALTER, no se puede
a Borrar una columna
b Modicar el tipo de dato de una columna
c Cambiarle el nombre a la tabla
d Todas las opciones anteriores son posibles
)

)

)

)
&#39;36P&#39;8q&#39;L39&#39;q&#39;9&#39;P&#39;i><&#39;83&#39;ZP&#39;I 53!3lS
131
Bases de Datos
3.16.
132
. Nombra los distintos tipos de ins-
trucciones DDL que puede haber,
distinguiendo el tipo de objeto que
se puede crear, borrar o modicar.
.Pon un ejemplo de un tipo de dato
numrico, otro alfanumrico y otro
de fecha/hora.
. Cmo se instala phpMyAdmin en
Linux? Necesitas algn otro soft-
ware para poder instalarlo?
Nombra tres herramientas gr-
cas y sus correspondientes gestores.
Aade alguno de los que no aparez-
can en el tema (por ejemplo, MMC
de SQL Server).
.Por qu es fundamental para un
administrador de bases de datos
(DBA) conocer los comandos SQL
adems de saber usar las herra-
mientas grcas?
. Escribe, sin mirar la sintaxis, un
comando CREATE TABLE para
crear una tabla de alumnos con 5
campos a tu eleccin.
. Escribe, sin mirar la sintaxis, un
comando ALTER TABLE para
aadir un campo a la tabla. ante-
I&#39;lOI&#39;.
. Escribe, sin mirar la sintaxis, un
comando CREATE TABLE pa-
ra crear la tabla Notas y luego.
un comando ALTER TABLE para
11.
.Comenta para qu
Comprueba tu aprendizaje
aadir una clave fornea a la tabla
anterior.
. Qu tipos de columna dene Ora-
cle que no son compatibles con
MySQL?
. Dene para qu sirven los siguien-
tes tokens de la creacin de tablas
en l\IySQL:
a ENGINE
nAUTOJNCREMENT
ICOLLATION
nCHARACTER SET
Qu diferencia hay entre VAR-
CHAR y CHAR?
.Qu diferencia hay entre un cam-
po F LOAT y uno NUMBER?
.Dene para qu sirven los tokens
de crea.cin de bases de datos TA-
BLESPACE y DATAFILE en Ora-
cle.
sirven las
clusulas ON DELETE y ON UP-
DATE de REFERENCES.
.Para las clusulas anteriores exis-
ten tres opciones SET NULL, CAS-
CADE y NO ACTION. Comenta
qu efecto tiene sobre los borrados
y las modicaciones de registros en
tablas relacionadas.
CAPTULO 4
Realizacin de Consultas
Objetivos
WIdenticar herramientas y sen-
Contenidos . .
tencias para reahzar consultas
WLa sentencia SELECT .
Identicar y crear consultas
B? Consultas bsicas, ltros y or- Simples 50m9 una tabla
denacin _
Identicar y crear consultas
Consultas resufnen que gGHCHH valores resumen
subconsmtas Identicar y crear consultas
con composiciones internas y
Consultas multitabla. Compo- externas
siciones internas y externas

Identicar y crear subconsultas
Consultas reexivas

Valorar las ventajas e inconve-
COHSUWS COTI tablas deiVadas nientes de las distintas opciones
vlidas para realizar una con-
sulta
Con este tema, se detalla Ia sintaxis completa de 1a sentencia SELECT en
toda su extensin. Se proporciona a1 estudiante mtodos para construir con-
sultas simples y complejas de forma estructurada, con ltros, agrupaciones y
ordenaciones.
133
Bases de Datos
4.1. El lenguaje DML
Las sentencias DML del lenguaje SQL son las siguientes:
- La sentencia SELECT, que se utiliza para extraer informacin de la base de
datos, ya sea de una tabla o de varias.
ILa sentencia INSERT, cuyo cometido es insertar uno o varios registros en
alguna tabla.
ILa sentencia DELETE, que borra registros de una tabla.
ILa sentencia UPDATE, que modica registros de una tabla.
Cualquier ejecucin de un comando en un SGBD se denomina. CONSULTA, trmino
derivado del anglosajn QUERY. Este trmino debe ser entendido ms que corno
una consulta de informacin, como una orden, es decir, las QUERYS o CONSULTAS
no son solo SELECT, sino tambin cualquier sentencia de tipo UPDATE, INSERT,
CREATE, DROP, etc, entendidas todas ellas como peticiones al SGBD para realizar
una operacin determinada.
4.2. La sentencia SELECT
La sentencia SELECT es la sentencia ms verstil de todo SQL, y por tanto la
ms compleja de todas. Como se ha expuesto anteriormente, se utiliza para consultar
informacin de determinadas tablas. Es posible ejecutar sentencias muy sencillas que
muestran todos los registros de una tabla:
#esta consulta selecciona todos los campos y muestra todos los
#registros de la tabla empleados
SELECT * FROM empleados;
O incluso consultas que obtienen informacin ltrada de mltiples tablas, usando
relaciones entre tablas e incluso tablas virtuales creadas a partir de una consulta.
#esta consulta obtiene el total de los pedidos
#de los clientes de una tienda
SELECT NombreC1iente,tot.Cantidad
FROM C1ientes,Pedidos,
(SELECT sum(Cantidad*PrecioUnidad) as Cantidad,NumeroPedido
FROM Deta11ePedidos GROUP BY NumeroPedido) tot
WHERE Clientes.NumeroC1iente=Pedidos.NumeroC1iente
AND Pedidos.numeroPedido=tot.NumeroPedido ORDER BY Cantidad;
134
Captulo 4. Realizacin de Consultas
4.3. Consultas bsicas
El formato bsico para hacer una consulta es el siguiente:
SELECT [DISTINCT] se1ect_expr [,select_expr] [FROM tabla]
select_expr:
nombre_co1umna [AS alias]
| 4:
I expresin
nombre_columna indica un nombre de columna, es decir, se puede seleccionar de
una tabla una serie de columnas, o todas si se usa *, o una expresin algebraica
compuesta por operadores, operandos y funciones.
El parmetro opcional DISTINCT fuerza que solo se muestren los registros con
valores distintos, o, dicho de otro modo, que suprima las repeticiones.
En la pgina siguiente, se muestran algunos ejemplos del uso de la sentencia
SELECT. Hay que prestar atencin a algunas curiosidadesl:
n En la consulta 4 se selecciona una columna calculada (1+5), con la seleccin
de los registros de una tabla, incorporndose esa nueva columna creada al
conjunto de las devueltas por el gestor.
- En la consulta nmero 5 se hace uso de una expresin algebraica para crear
una columna cuyo resultado ser el de sumar 1 y6. Para hacer esto, en MySQL
no es necesario indicar la clusula FROM, pero en Oracle, hay que poner la
clusula FROM con la tabla dual. Al no haber una tabla real seleccionada, el
resultado ser una nica la con el resultado.
- En la consulta 3 se hace uso de la funcin concat cuyo cometido es concatenar
dos columnas creando una nica columna. En Oracle, la funcin concat solo
admite dos parmetros, mientras que en MySQL se puede concatenar mltiples
parmetros. Para concatenar en oracle mltiples columnas se puede hacer uso
del operador I I. Vase Seccin 6.4.
IEn las consultas 6 y7 se muestran las marcas de los vehculos. La diferencia en-
tre ambas consultas est en el uso del DISTINCT, que elimina las repeticiones.
Hay dos vehculos seat en la consulta 6 y uno en la 7.
La ejecucin de las consultas que se muestra a continuacin est realizada en MySQL, pero son
perfectamente compatibles con Oracle, excepto la consulta 5, que hay que aadir FROM dual.
135
Bases de Datos
#consu1ta 4
#consu1ta 1 SELECT matricula, mode1o,1+5
SELECT * FROM vehiculos; FROM vehiculos;
+ --------- + -+-----+
I matricula I modelo I 1+5 I
+ --+ --+--- -+
I 1129FGT ibiza gt I 1129FGT I ibiza gt I 6I
I 1132GHT leon tdi 105cv I 1132GHT I leon tdi 105cv I 6I
I M6836YX corolla g6 I M6836YX I corolla g6 I 6I
I 7423FZY coupe I 7423FZY I coupe I 6I
I 3447BYD a3 tdi 130cv I 3447BYD I a3 tdi 130cv I 6I
+ + -------------- --+-----+
#consu1ta 5
SELECT 1+6;
#consu1ta 2 +-----+
SELECT matricula, modelo I 1+6 I
FROM vehiculos; +-----+

I 7 I
+-- -+
1129FGT ibiza gt #consu1ta 6
I 1132GHT leon tdi 105cv I SELECT marca FROMvehiculos;
I M6836YX corolla g6 I + ------- --+
| 7423FZY coupe | marca I
I 3447BYD a3 tdi 130cv +------- --+
I seat I
I seat I
l toyota I
I hyundai I
#consu1ta 3 I audi I
SELECT matricula, + ------- --+
concat(marca,mode1o) as coche
FROM vehiculos;
+ --------- --+ ------------------- +
#consu1ta 7
SELECT DISTINCT marca
I matricula I FROMvehiculos;
1129FGT seatibiza gt
I 1132GHT seatleon tdi 105cv
I M6836YX toyotacorolla g6
I 7423FZY hyundaicoupe
I 3447BYD audia3 tdi 130CV
136
Captulo 4. Realizacin de Consultas
<> Actividad 4.1: Crea una tabla en MySQL con la siguiente estructura:
MASCOTAS(Nombre, especie, raza, edad, sexo).
Introduce 6 registros2 y, a continuacin, codica las siguientes querys:
IMuestra el nombre y la especie de todas las mascotas.
n Muestra el nombre y el sexo de las mascotas poniendo un alias a los campos.
IMuestra el nombre y la fecha de nacimiento aproximada de las mascotas (con-
sulta la documentacin de MySQL y usa la funcin date_sub y now).
Realiza el mismo procedimiento creando 1a tabla en Oracle.
4.4. Filtros
Los ltros son condiciones que cualquier gestor de base de datos interpreta para
seleccionar registros y mostrarles como resultado de la consulta. En SQL la palabra
clave para realizar ltros es la clusula WHERE.
A continuacin se aade a la sintaxis de la clusula SELECT la sintaxis de los
ltros:
SELECT [DISTINCT] select_expr [,select_expr]
[FROM tabla] [WHERE filtro]
ltro es una expresin que indica la condicin o condiciones que deben satisfacer
los registros para ser seleccionados.
Un ejemplo de funcionamiento sera el siguiente:
itselecciona los vehculos de 1a marca seat
SELECT *FROM vehiculos
WHERE marca= seat ;
+--------- --+ -------------- --+ ----- -+
| matricula l modelo
+--------- --+ -------------- --+ ----- --+
I 1129FGT I ibiza gt
| 1132GHT l leon tdi 105cv I seat
+--------- --+ -------------- --+ ----- --+
2 Vase Captulo 5si es necesario.
137
Bases de Datos
4.4.1. Expresiones para ltros
Los ltros se construyen mediante expresiones. Una expresin, es una combina-
cin de operadores, operandos y funciones que producen un resultado. Por ejemplo,
una expresin puede ser:
#expresin 1(oracle): (2+3)*7
SELECT (2+3)*7 from dual;
ttexpresin 2 (mysql): (2+3)>(6*2)
SELECT (24-3)>(6*2);
#0 =falso, es falso que 5>12
itexpresin 3 (mysql): 1a fecha de hoy -31 aos;
SELECT date_sub(now(), interval 31 year);
+ --------------------------------- +
I date_sub(now(), interval 31 year) |
Se detalla a continuacin los elementos que pueden formar parte de las expresio-
nes:
IOperandos: Los operandos pueden ser constantes. por ejemplo el nmero en-
tero 3, el nmero real 2.3, la cadena de caracteres Espaao la fecha C2010-
01-02; tambin pueden ser variables, por ejemplo el campo edad o o el campo
NombreMascota; y pueden ser tambin otras expresiones 3.
IOperadores aritmticos: +, -, *, /, 7c. El operador + yel operador -se utilizan
para sumar o restar dos operandos (binario) o para poner el signo positivo o
negativo a un operando (unario). El operador * es la multiplicacin de dos
operandos yel operador /es para dividir. El operador %o resto de la divisin
entera a7ob devuelve el resto de dividir a entre b.
3Todas los operandos numricos ya sean reales o enteros van sin comilla simple, ycualquier otra
cosa que no sea nmero, por ejemplo, cadenas de caracteres o fechas, van entre comillas simples.
138
Captulo 4. Realizacin de Consultas
- Operadores relacionales: >, <, <>, >=, <=, =. Los operadores relacionales
sirven para comparar dos operandos. As, es posible preguntar si un campo
es mayor que un valor, o si un valor es distinto de otro. Estos operadores
devuelven un nmero entero, de tal manera que si el resultado de la expresin
es cierto el resultado ser 1, y si el resultado es falso el resultado ser O. Por
ejemplo, la expresin a >b devuelve 1 si a es estrictamente mayor que b y O
en caso contrario. La. expresin d<>e devuelve 1 si d y e son valores distintos.
IOperadores lgicos: AND, OR, NOT. Los operadores lgicos toman como ope-
randos valores lgicos, esto es, cierto o falso, en caso de SQL, 1 o O. Los
operadores lgicos se comportan segn las siguientes tablas de verdad:
Operando 1 Operando 2 Opl AND Op2 Opl OR Op2 NOT Opl
falso falso falso falso cierto
falso cierto falso cierto cierto
cierto falso falso cierto falso
cierto cierto cierto cierto falso
Cuadro 4.1: Tabla de verdad de los operadores lgicos.
Por otro lado, se necesita un tratamiento de los valores nulos; hay que incluir
como un posible operando el valor nulo:
Operando 1 Operando 2 Opl AND Op2 Opl OR Op2 NOT Opl
falso falso falso falso cierto
falso cierto falso cierto cierto
cierto falso falso cierto falso
cierto cierto cierto cierto falso
nulo Xnulo nulo nulo
nulo nulo nulo
Cuadro 4.2: Tabla de verdad de los operadores lgicos con valores nulos.
-Parntesis: Los operadores tienen una prioridad, por ejemplo, en la ex-
presin 3+4*2, la multiplicacin se aplica antes que la suma, se dice que el
operador * tiene nas prioridad que el operador +. Para alterar esta prioridad,
se puede usar el operador parntesis, cuyo cometido es precisamente dar mxi-
ma prioridad a una parte de una expresin. As, (3+4)*2, no es lo mismo que
3+4*2.
139
Bases de Datos
u Funciones: date_add, concat, left, right. . .. Cada SGBD incorpora su propio
repertorio de funciones que en pocas ocasiones coincide con el de otros SGBD.
En la tabla que se muestra a continuacin aparecen los resultados que provoca
la ejecucin de algunos de los operadores descritos:



(1o>=1o AND o<=1)+2
Cuadro 4.3: Tabla resumen de los operadores usados en expresiones.
4.4.2. Construccin de ltros
A continuacin, se muestran ejemplos de construccin de ltros para una base de
datos de jugadores de la liga americana de baloncesto (NBA), todos ellos compatibles
para Oracle y MySQL:
#1a tabla jugadores contiene todos los jugadores de la nba
describe jugadores;
+

l

l

l

l

l

l

l

l

l

l

l

l

l

l

l +

l

l

l

l

l

l

l

l

l

l

l

l

l
int(11)
varchar(30)
Procedencia varchar(20)
Altura varchar(4)
Peso int(11)
Posicion varchar(5)
varchar(20)
#Consu1ta que selecciona los nombres de los jugadores de los Lakers
SELECT Nombre FROM jugadores WHERE Nombre_equipo=Lakers;
+ -------------------- --+
I Nombre |
+ -------------------- --+
I Ron Artest |
140
Captulo 4. Realizacinde Consultas
I Kobe Bryant I
|
I Pau Gasol I
+ -------------------- --+
#Consu1ta que selecciona los jugadores espaoles de los Lakers
SELECT codigo,Nombre,Altura
FROMjugadores WHERENombre_equipo=Lakers
and Procedencia=Spain;
+------ --+ --------- --+ ------ --+
I codigo I Nombre | Altura I
+ ------ --+ --------- --+ ------ --+
I 66 I Pau Gasol I 7-0 I
+ ------ --+ --------- --+ ------ --+
#Consulta que selecciona los jugadores espaoles y eslovenos de los lakers
SELECT Nombre, A1tura,Procedencia FROMjugadores
WHERENombre_equipo=Lakers
AND (Procedencia=Spain ORProcedencia=S1ovenia);
+ --+ ------ --+ --+
I Nombre I Altura I Procedencia |
4.4.3. Filtros con operador de pertenencia a conjuntos
Ademsdelosoperadorespresentados anteriormente(aritmticos, lgicos, etc.)
sepuedehacer usodel operadorde pertenenciaa conjuntosIN, cuya sintaxisesla
siguiente:
nombre_co1umna IN (Valuel, Va1ue2, ...)
Este operadorpermite comprobarsi una columnatiene un valor igual que cual-
quier de los que estn incluidosdentro del parntesis,as por ejemplo, si se desea
seleccionarlosjugadoresespaoles,eslovenoso serbiosde losLakers, secodi cara
as
# versin larga
SELECT Nombre, Altura,Procedencia
FROMjugadores WHERENombre_equipo=Lakers AND
(Procedencia=Spain

ORProcedencia=S1ovenia
ORProcedencia=Serbia & Montenegro);
141
Bases de Datos
I Pau Gasol
I Vladimir Radmanovic I Serbia & Montenegro I
I Sasha Vujacic I Slovenia
#versin corta (con el operador IN)
SELECTNombre, A1tura,Procedencia FROM jugadores
WHERENombre_equipo=Lakers AND
Procedencia IN (Spain,S1ovenia,Serbia & Montenegro);
+------------------- -+ -+ ------------------- -+
I Nombre I Altura I Procedencia
+------------------- -+ ------ -+ ------------------- -+
I Pau Gasol I
I Vladimir Radmanovic I Serbia & Montenegro I
I Sasha Vujacic I Slovenia I
+ ------------------- -+ ------ -+ ------------------- -+
4.4.4. Filtros con operador de rango
El operador de rango BETWEEN permite seleccionarlos registrosque estn
incluidosen un rango. Su sintaxises:
nombre_co1umna BETWEEN Valuel AND Va1ue2
Por ejemplo, para seleccionarlosjugadoresde la nba cuyopesoestentre 270 y
300 libras secodi cara la siguientequery:
SELECT Nombre,Nombre_equipo,Peso FROM jugadores
WHERE Peso BETWEEN 270 AND 300;
+ -------------- -+ ------------- -+ ---- -+
I Nombre I Nombre_equipo I Peso l
I Chris Richard I Timberwolves
I Paul Davis | Clippers
I |
I David Harrison I Pacers
#sera equivalente a
SELECT Nombre,Nombre_equipo FROMjugadores
WHEREPeso >= 970 AND Peso <=300;
142
Captulo 4. Realizacin de Consultas
<> Actividad 4.2: Saca el peso en kilogramos de los jugadores de la NBA que
pesen entre 120 y 150 kilos. Una libra equivale a 0.4535 kilos.
4.4.5. Filtros con test de Valor nulo
Los operadores IS e IS NOT permiten vericar si un campo es o no es nulo
respectivamente. De esta manera, es posible comprobar, por ejemplo, los jugadores
cuya procedencia es desconocida:
SELECT nombre,Nombre_equipo
FROM jugadores WHERE Procedencia IS null;
I Nombre_equipo I
+ -------------- --+ ------------- --+
I Anthony Carter I Nuggets I
+ -------------- --+ ------------- --+
#1a query contraria saca el resto de jugadores
SELECT nombre,Nombre_equipo
FROM jugadores WHERE Procedencia IS NOT null;
+-------------------- --+ ------------- --+
I nombre I Nombre_equipo I
+-------------------- --+ ------------- --+
I Corey Brever I Timberwolves I
I Greg Buckner I Timberwolves I
IMichael Doleac I Timberwolves I
| C.J. Watson | Warriors
I Brandan Wright I Warriors
+-------------------- --+ ------------- --+
4.4.6. Filtros con test de patrn
Los ltros con test patrn seleccionan los registros que cumplan una serie de ca-
ractersticas. Se pueden usar los caracteres comodines 7o y _para buscar una cadena
de caracteres. Por ejemplo, seleccionar de la tabla de vehculos aquellos vehculos
cuyo modelo sea t.di:
SELECT * FROM vehiculos where modelo like %tdiZ;
+--------- --+ -------------- --+ ----- --+
143
Bases de Datos
I matricula I modelo I marca I
+ --------- --+ --+ --+
I 1132GHT | leon tdi 105cv I seat I
I 3447BYD I a3 tdi 130cv I audi I
+ --------- --+ -------------- --+ ----- --+
El carcter comodn %busca coincidencias de cualquier nmero de caracteres,
incluso cero caracteres. El carcter comodn _busca coincidencias de exactamente
un carcter.
Para ilustrar el funcionamiento del carcter _,se consultan aquellos equipos que
empiecen por R, que terminen por Sy que tengan 7 caracteres.
SELECT Nombre,Conferencia
FROM equipos WHERE Nombre like R_____s;
+ ------- --+ ----------- --+
I Nombre I Conferencia I
+ ------- --+ ----------- --+
I Raptors I East I
I Rockets I West
+------- --+ ----------- --+
Ambos comodines se pueden usar en un mismo ltro, por ejemplo, para sacar
aquellos equipos que en su nombre como segunda letra la o, se usara el patrn:
SELECT Nombre,Conferencia
FROM equipos WHERE Nombre like _o%;
+ --+ ----------- --+
I Nombre I Conferencia I
+ --+ --+
I Bobcats I East I
I Hornets I West I
I Rockets I West I
+------- --+ ----------- --+
4.4.7. Filtros por lmite de nmero de registros
Este tipo de ltros no es estndar ysu funcionamiento vara con el SGBD.
Consiste en limitar el nmero de registros devuelto por una consulta. En MySQL,
la sintaxis es:
144
Captulo 4. Realizacin de Consultas
[LIMIT [desplazamiento ,] nf ilas]
nlas especica. el nmero de las a devolver y desplazamiento especica. a partir
de qu la. se empieza a contar (desplazamiento).
#devuelve las 4primeras filas
SELECT nombre,Nombre_equipo
FROM jugadores limit 4;
+ -------------- --+ ------------- --+
I nombre I Nombre_equipo I
+-------------- --+ --+
I Corey Brever I Timberwolves
I Greg Buckner I Timberwolves
I Michael Doleac I Timberwolves
I Randy Foye | Timberwolves
+ --+ ------------- --+
#devue1ve 3 filas a partir de la sexta
SELECT nombre,Nombre_equipo
FROM jugadores LIMIT 5,3;
+ ----------------- --+ ------------- --+
I nombre | Nombre_equipo I
+ ----------------- --+ ------------- --+
I Marko Jaric I Timberwolves
I A1 Jefferson I Timberwolves
I Mark Madsen I Timberwolves
+----------------- --+ ------------- --+
Oracle limita el nmero de las apoyndose en una pseudo columna, de nombre
rownum:
--Saca los 25 primeros jugadores
SELECT *
FROM jugadores
WHERE rownum <= 25;
4.5. Ordenacin
Para mostrar ordenados un conjunto de registros se utiliza la clusula ORDER
BY de la sentencia SELECT.
145
Bases de Datos
SELECT [DISTINCT] select_expr [,se1ect_expr]
[FROM tabla]
[WHERE filtro]
[ORDER BY {nombre_co1umna I expr l posicin} [ASC I DESC] ,...]
Esta clasula permite ordenar el conjunto de resultados de forma ascendente
(ASC) o descendente (DESC) por una o varias columnas. Si no se indica ASC
o DESC por defecto es ASC. La columna por la que se quiere ordenar se puede
expresar por el nombre de la columna, una expresin o bien la posicin numrica
del campo que se quiere ordenar. Por ejemplo:
#estructura de la tabla equipos
DESCRIBE equipos;
I Nombre varchar(20)
ICiudad varchar(20)
I Conferencia varchar(4)
lDivision varchar(9)
#obtener los equipos de la conferencia oeste de la nba ordenados por divisin
SELECT Nombre,Division
FROM equipos wHERE Conferencia=west
RDER BY Division ASC;
+------------- --+ --------- --+
I Nombre I Division I
+ ------------- --+ --------- --+
I Jazz I Northwest I
I Nuggets I Northwest I
I Trail Blazers I Northwest I
I Timberwolves I Northwest I
I Supersonics I Northwest I
I Clippers I Pacific I
I Kings I Pacific I
I warriors I Pacific I
I Suns I Pacific |
Lakers I Pacific I
| Hornets I Southwest I
I Spurs I Southwest I
I Rockets I Southwest I
I Mavericks I Southwest I
I Grizzlies I Southwest I
+ ------------- --+ --------- --+
146
Captulo 4. Realizacinde Consultas
#se puede ordenar por varios campos, p.ej: adems de que cada
#divisin est ordenada ascendentemente se ordene por nombre
#de equipo
SELECT Division,Nombre FROMequipos
WHERE Conferencia= west
ORDER BY Division ASC,Nombre DESC;
+ --------- --+ ------------- --+
I Division I Nombre I
+ --------- --+ ------------- --+
I Northwest I Trail Blazers I
| Northwest I Timberwolves |
I Northwest I Supersonics I
I Northwest I Nuggets I
I Northwest I Jazz I
I Pacific I warriors I
I Pacific I Suns I
I Pacific I Lakers I
I Pacific I Kings I
I Pacific I Clippers I
I Southwest I Spurs l
I Southwest I Rockets I
I Southwest I Mavericks I
I Southwest I Hornets I
I Southwest I Grizzlies I
+
4.6. Consultas de resumen
En SQL sepuedengenerarconsultasmscomplejasqueresumencierta informa-
cin, extrayendoinformacincalculadade variosconjuntosde registros.Un ejemplo
de consultaresumenseriala siguiente:
SELECT count(*) FROMvehiculos;
Esta consultadevuelveel nmerode registrosde la tabla vehculos,esdecir, se
generaun resumende la informacincontenidaen la tabla vehculos.La expresin
count(*)esunafuncinquetomacomoentradalosregistrosdela tablaconsultada
147
Bases de Datos
y cuenta cuntos registros hay. El resultado de la funcin count es un nico valor (1
la, 1 columna) con el nmero 5(nmero de registros de la tabla vehculos).
Para poder generar informacin resumida hay que hacer uso de las funciones de
columna. Estas funciones de columna convierten un conjunto de registros en una
informacin simple cuyo resultado es un clculo. A continuacin, se expone una
lista de las funciones de columna disponibles en SQL:
SUM (Expresin) #Suma los valores indicados en el argumento
AVG (Expresin) #Ca1cu1a la media de los valores
MIN (Expresin) #Ca1cula el minimo
MAX (Expresin) #Ca1cu1a el mximo
COUNT (nbCo1umna) #Cuenta el nmero de valores de una columna
#(excepto los nulos)
COUNT (*) #Cuenta el nmero de valores de una fila
#Inc1uyendo los nulos.
A modo de ejemplo, se muestran algunas consultas resmenes:
#consu1ta 1
#Cunto pesa el jugador ms pesado de la nba?
SELECT max(peso) FROM jugadores;
#consu1ta 2
#Cunto mide el jugador ms bajito de la nba?
SELECT min(a1tura) FROM jugadores;
#consu1ta 3
#Cuntos jugadores tienen los Lakers?
SELECT count(*) FROM jugadores WHERE Nombre_equipo=Lakers;
#consu1ta 4
#Cunto pesan de media los jugadores de los Blazers?
SELECT avg(peso) FROM jugadores WHERE Nombre_equipo=B1azers;
Con las consultas de resumen se pueden realizar agrupaciones de registros. Se
denomina agrupacin de registros a un conjunto de registros que cumplen que tienen
una o varias columnas con el mismo valor. Por ejemplo, en 1a tabla vehculos:
SELECT * FROM vehiculos;
Captulo 4. Realizacin de Consultas
I 1129FGT ibiza gt
I 1132GHT leon tdi 105cv
IM6836YX corolla g6
I 7423FZY coupe
3447BYD a3 tdi 130CV
En esta consulta hay dos registros cuya marca=seat. Se puede agrupar estos
dos registros formando un nico grupo, de tal manera que el grupo seattiene los
modelos ibiza gt (1129FGT) y leon tdi 105cv (1132GHT). A este grupo de registros
se le puede aplicar una funcin de columna para realizar determinados clculos, por
ejemplo, contarlos:
SELECT marca, count(*) FROM
vehiculos GROUP BY marca;
+ ------- --+ -------- --+
I marca I count(*) I
En este caso, si se agrupa (GROUP BY) por el campo marca, salen 4 grupos
(audi, hyundai, seat y toyota). La funcin de columna, cuando se agrupa por un
campo, acta para cada grupo. En este caso, para cada. grupo se ha contado el
nmero de registros que tiene. En el caso de seat, cuenta los 2 antes mencionados.
La sintaxis para la sentencia SELECT con GROUP BY queda como sigue:
SELECT [DISTINCT] select_expr [,select_expr]
[FROM tabla]
[WHERE filtro]
[GROUP BY expr [, expr] . ... ]
[ORDER BY {nombre_columna I expr I posicin} [ASC I DESC] , ...]
Se observa que GROUP BY va justo antes de la clusula ORDER BY. A conti-
nuacin, a modo de ejemplo, se muestran algunas consultas con grupos y funciones
de columna.
149
Bases de Datos
#consu1ta 1
#Cunto pesa el jugador ms pesado de cada equipo?
SELECTNombre_equipo, max(peso)
FROM jugadores GROUP BY Nombre_equipo;
#consulta 2
#Cuntos equipos tiene cada conferencia en la nba?
SELECTcount(*),conferencia FROM equipos GROUP BY conferencia;
+ -------- --+ ----------- --+
count(*) I conferencia I
+-------- --+ ----------- --+
15 I East I
+ -------- --+ ----------- --+
#Cunto pesan de media los jugadores de espaa, francia e italia?
SELECTavg(peso),procedencia FROM jugadores
WHEREprocedencia IN ( Spain , Ita1y , France ) GROUP BY procedencia;
+ --------- --+ ----------- --+
I avg(peso) I procedencia I
+ --------- --+ ----------- --+
218.4000 I France I
I 221.0000 I Italy I
208.6000 I Spain
+ --------- --+ ----------- --+
IMPORTANTE: Seobservaquepara cadaagrupacin.seha seleccionadotam-
binel nombredela columnapor la cual seagrupa.Estonoesposiblesi noseincluye
el GROUP BY. Por ejemplo:
150
Captulo 4. Realizacin de Consultas
mysq1> SELECT count(*),conferencia FROM equipos;
ERROR 1140 (42000): Mixing of GROUP Columns
(MIN(),MAX(),COUNT()....) with no GROUP Columns is illegal
if there is no GROUP BY clause
Precisamente, el SGBD advierte de que para mezclar funciones de columna y
columnas de una tabla hay que escribir una clusula GROUP BY.
4.6.1. Filtros de Grupos
Los ltros de grupos deben realizarse mediante el uso de la clusula HAVING
puesto que WHERE acta antes de agrupar los registros. Es decir, si se desea ltrar
resultados calculados mediante agrupaciones se debe usar la siguiente sintaxis:
SELECT [DISTINCT] se1ect_expr [,se1ect_expr]
[FROM tabla]
[WHERE filtro]
[GROUP BY expr [, expr].... ]
[HAVING fi1tro_grupos]
[ORDER BY {nombre_co1umna I expr I posicin} [ASC | DESC] ,...]
HAVING aplica los mismos ltros que la clusula WHERE. A continuacin se
ilustran algunos ejemplos:
#query 1:
#Seleccionar los equipos de la nba cuyos jugadores
#pesen de media ms de 228 libras
SELECT Nombre_equipo,avg(peso)
FROM jugadores
GROUP BY Nombre_equipo
HAVING avg(peso)>228 ORDER BY avg(peso);
+ ------------- --+ --------- --+
I Nombre_equipo I avg(peso) l
228.8462

229.6923

230.0000

230.0714

235.4667
151
Bases de Datos
#query 2
#seleccionar qu equipos de la nba tienen ms de 1jugador espaol
SELECT Nombre_equipo,count(*)
FROM jugadores
WHERE procedencia=Spain
GROUP BY Nombre_equipo
HAVING count(*)>1;
+ ------------- --+ -------- --+
I Nombre_equipo I count(*) I
4.7. Subconsultas
Las subconsultas se utilizan para realizar ltrados con los datos de otra consulta.
Estos ltros pueden ser aplicados tanto en la clusula WHERE para ltrar registros
como en la clusula HAVING para ltrar grupos. Por ejemplo, con la base de datos
de la NBA, es posible codicar una consulta para pedir los nombres de los jugadores
de la divisin SouthEast:
SELECT nombre FROM jugadores
WHERE Nombre_equipo IN
(SELECT Nombre FROM equipos WHRE division=SouthWest);
+------------------- --+
I nombre |
+ ------------------- --+
I Andre Brown I
| Kwame Brown I
I Brian Cardinal I
| Jason Collins I
I
+ ------------------- --+
Se observa que la subconsulta es precisamente la sentencia SELECT encerrada
entre parntesis. De esta forma, se hace uso del operador in para tornar los equi-
pos de la divisin SouthEast. Si se ejecuta la subconsulta por separado se obtiene:
152
Captulo 4. Realizacin de Consultas
SELECT Nombre FROM equipos
WHERE division=SouthWest ;
"&#39; """"" "+ La subconsulta se convierte en algo equiva-
l Nmbre l lente a:
+ --------- --+
Hornets SELECT nombre FROM jugadores
I
Spurs WHERE Nombre_equipo IN
| Rockets | (Hornets ,Spurs ,Rockets ,
I

I
Mavericks Mavericks ,Grizzlies)
I Grizzlies
+ --------- --+
En las siguientes secciones se detallan los posibles operadores que se pueden usar
con las subconsultas.
4.7.1. Test de Comparacin
Consiste en usar los operadores de comparacin --, >=, <=, <>, >y <para
comparar el valor producido con un valor nico generado por una subconsulta. Por
ejemplo, para consultar el nombre del jugador de mayor altura de la nba, es posible
hacer algo como esto:
SELECT nombre FROM jugadores
WHERE altura =
(SELECT max(a1tura) FROM jugadores);
+-------- --+
| nombre
+ -------- --+
I Yao Ming |
+ -------- --+
Se puede comprobar que la subconsulta produce un nico resultado, utilizndolo
para ltrar.
Ntese que con este tipo de ltro la subconsulta solo debe producir un nico
valor (una la y una columna), por tanto, si se codica algo del tipo:
SELECT nombre FROM jugadores
WHERE altura =(SELECT max(altura),max(peso) FROM jugadores);
ERROR 1241 (21000): Operand should contain 1 co1umn(s)
Tambin fallara que la subconsulta devolviera ms de una la:
153
Bases de Datos
SELECT nombre FROM jugadores
WHERE altura =(SELECT max(a1tura)
FROM jugadores GROUP BY Nombre_Equipo);
ERROR 1242 (21000): Subquery returns more than 1 row
Una restriccin importante es que la subconsulta debe estar siempre al lado
derecho del operador de comparacin. Es decir:
Campo <= subconsulta
siendo invalida la expresin:
subconsulta >= Campo
4.7.2. Test de pertenencia a conjunto
Este test consiste en una variante del usado para consultas simples, y es el que se
ha utilizado para ilustrar el primer ejemplo de la seccin. Consiste en usar el operador
IN para ltrar los registros cuya expresin coincida con algn valor producido por
la subconsulta.
Por ejemplo, para extraer las divisiones de la nba donde juegan jugadores es-
paoles:
SELECT division FROM equipos WHERE nombre in
(SELECT Nombre_equipo FROM jugadores WHERE procedencia=Spain);
+ --------- --+
I division
+ --------- --+
I Atlantic
I Northwest |
I Pacific I
I Southwest I
+ --------- --+
4.7.3. Test de existencia
El test de existencia permite ltrar los resultados de una consulta si existen las
en la subconsulta asociada, esto es, si la subconsulta genera un nmero de las
distinto de O.
Para usar el test de existencia se utiliza el operador EXISTS:
154
Captulo 4. Realizacin de Consultas
SELECT columnas FROM tabla
WHERE EXISTS (subconsulta)
El operador EXISTS tambin puede ser precedido de la negacin (NOT) para
ltrar si no existen resultados en la subconsulta:
SELECT columnas FROM tabla
WHERE NOT EXISTS (subconsulta)
Para seleccionar los equipos que no tengan jugadores espaoles se podra usar la
siguiente consulta:
SELECT Nombre FROM equipos WHERE NOT EXISTS
(SELECT Nombre FROM jugadores
WHERE equipos.Nombre =jugadores.Nombre_Equipo
AND procedencia=Spain);
+ ------------ --+
I Nombre
+ ------------ -+
I Bobcats
Para comprender la lgica de esta query, se puede asumir que cada registro de-
vuelto por la consulta principal provoca la ejecucin de la subconsulta, as, si la
consulta principal (SELECT Nombre FROM Equipos) devuelve 30 registros, se en-
tender que se ejecutan 30 subconsultas, una por cada nombre de equipo que retorne
la consulta principal. Esto en realidad no es as, puesto que el SGBD optimiza la
consulta para hacer tan solo dos consultas y una operacin join que se estudiar ms
adelante, pero sirve de ejemplo ilustrativo del funcionamiento de esta consulta:
SELECT Nombre from equipos;
+ ------------- -+
I Nombre
+ -+
subconsulta ejecutada #1
I Bobcats subconsulta ejecutada #2
|

|
l |
I Raptors |
l |
+ ------------- -+
subconsulta ejecutada #22
155
Bases de Datos
Cada subconsulta ejecutada sera como sigue:
#subconsulta ejecutada #1
SELECT Nombre FROM jugadores
WHERE 76ers =jugadores.Nombre_Equipo
AND procedencia=Spain;
Esta subconsulta no retorna resultados, por tanto, el equipo 76ers es selecciona-
do para ser devuelto en la consulta principal, puesto que no existen (NOT EXISTS)
jugadores espaoles.
Sin embargo para el registro 22 de la consulta principal, aquel cuyo Nombre es
Raptors, la consulta:
#subconsu1ta ejecutada #22
SELECT Nombre FROM jugadores
WHERE Raptors = jugadores.Nombre_Equipo
AND procedencia=Spain;
+--------------- --+
I Nombre I
+--------------- --+
I Jose Calderon
I Jorge Garbajosa I
+--------------- --+
devuelve 2 jugadores, por tanto, existen (EXISTS) registros de la subconsulta y
por tanto el equipo RaptorsNO es seleccionado por la consulta principal.
En conclusin, se puede decir que la consulta principal enlaza los registros con
los devueltos por las subconsultas.
4.7.4. Test cuanticados ALL y ANY
Los test cuanticados sirven para calcular la relacin entre una expresin y todos
los registros de la subconsulta (ALL) o algunos de los registros de la subconsulta
(ANY).
De esta manera se podra saber los jugadores de la nba que pesan ms que todos
los jugadores espaoles:
156
Captulo 4. Realizacinde Consultas
SELECT nombre,peso from jugadores
WHEREpeso > ALL
(SELECTpeso FROMjugadores WHEREprocedencia=Spain);
I Michael Doleac
I A1 Jefferson
I Chris Richard
A1 igual queenel casodel operadorexists,sepuedeasumirquepor cadaregistro
de la consultaprincipal se ejecuta una subconsulta.En tal caso, para el jugador
Michae1Doleaccuyopesoes262libras,secomprobarasi 262esmayorquelospesos
de todos losjugadoresespaoles,que sondevueltospor la subconsulta(SELECT
peso FROM jugadoresWHERE procedenciafspain).
Tambin sepodra consultar losbases(en inglsGuard G) posicion=G, que
pesanmsquecualquier(ANY) pvot (en inglsCenter "C) posicion: C dela nba:
SELECT nombre,peso from jugadores
WHEREposicion=G AND
peso > ANY
(SELECTpeso FROMjugadores where posicion=C);
I Joe Johnson I
+ ----------- --+ ---- --+
Secompruebaqueenel casodeJoe Johnson,supeso(235libras),esmayorque
algn pesode algn pvot de la nba, dndoseas el peculiar casode un basems
pesadoque algnpvot.
4.7.5. Subconsultas anidadas
Se puede usar una subconsultapara ltrar los resultadosde otra subconsulta.
De estamanerase anidan Subconsultas. Por ejemplo. si sedeseaobtenerel nombre
de la ciudad dondejuega el jugador ms alto de la nba, habra que pensar cmo
hacerlo de forma estructurada:
157
Bases de Datos
1. Obtener la altura del jugador ms alto:
X <- (SELECT max(a1tura) from jugadores)
2. Obtener el nombre del jugador, a travs de la altura se localiza al jugador y
por tanto, su equipo:
Y < SELECT Nombre__equipo from jugadores WHERE Altura = X
3. Obtener la ciudad:
SELECT ciudad FROM equipos WHERE nombre= Y
Ordenando todo esto, se puede construir la consulta de abajo a. arriba:
SELECT ciudad FROM equipos WHERE nombre =
(SELECT Nombre_equipo FROM jugadores WHERE altura =
(SELECT MAX(a1tura) FROM jugadores));
+ ------- --+
| ciudad
+ ------- --+
I Houston I
+ --+
Esta manera de generar consultas es muy sencilla, y a la vez permite explorar
la informacin de la base de datos de forma. estructurada. En opinin de muchos
autores esta forma. estructurada de generar consultas es la que dio a SQL su Sde
Structured.
4.8. Consultas multitabla
Una consulta multitabla es aquella en la que se puede Consultar informacin de
ms de una tabla. Se aprovechan los campos relacionados de las tablas para unirlas
(join). Para poder realizar este tipo de consultas hay que utilizar la siguiente sintaxis:
SELECT [DISTINCT] se1ect_expr [,se1ect_expr] ...
[FROM referencias_tab1as]
[WHERE filtro]
[GROUP BY expr [, expr].... ]
[HAVING fi1tro_grupos]
[ORDER BY {nombre_co1umnas I expr I posicin} [ASC I DESC] , . .
158
Captulo 4. Realizacin de Consultas
La diferencia con las consultas sencillas se halla en la clusula FROM. Esta vez
en lugar de una tabla se puede desarrollar el token referencias_tablas:
referencias_tablas:
referencia_tab1a[, referencia_tabla] ...
I referencia_tabla [INNER I CROSS] JOIN referencia_tab1a [ON condicin]
I referencia_tab1a LEFT [OUTER] JOIN referencia_tab1a ON condicin
l referencia_tabla RIGHT [OUTER] JOIN referencia_tab1a ON condicin
referencia_tab1a:
nombre_tab1a [[AS] alias]
La primera opcin, (referencia_tabla[. referenciajabla] es tpica de SQL 1
(SQL-86) para las uniones, que consisten en un producto cartesiano ms un ltro
por las columnas relacionadas, y el resto de opciones son propias de SQL 2 (SQL-92
y SQL-2003).
4.8.1. Consultas multitabla SQL 1
El producto cartesiano de dos tablas son todas las combinaciones de las las
de una tabla unidas a las las de la otra tabla. Por ejemplo, una base de datos de
mascotas con dos tablas animales y propietarios:
SELECT * FROM propietarios;
| 51993482Y | Jos Prez I
I 28834177X I Matas Fernndez I
I 37276317Z I Francisco Martnez I
+ --------- --+ ------------------ --+
SELECT * FROM animales;
+------ --+ -------- --+ ----- --+ ----------- --+
I codigo I nombre I tipo I propietario I
+------ --+ -------- --+ ----- --+ ----------- --+
I 1 I Cloncho I gato I 51993482Y I
| 2 I Yoda I gato I 51993482Y I
I 3 I Sprocket I perro I 372763172 I
+------ --+ -------- --+ --+ ----------- --+
Un producto cartesiano de las dos tablas se realiza con la siguiente sentencia:
159
Bases de Datos
Cloncho
Yoda

Sprocket
Cloncho

Yoda

Sprocket
Cloncho

Yoda

Sprocket
SELECT * FROM animales,propietarios;
51993482Y

51993482Y
372763172

51993482Y

51993482Y
372763172

51993482Y

51993482Y
372763172
51993482Y

51993482Y

51993482Y

2883477X

2883477X

2883477X
372763172

372763172

372763172
Jos Prez
Jos Prez
Jos Prez
Matias Fernndez
Matas Fernndez
Matas Fernndez
Francisco Martinez I
Francisco Martinez I
Francisco Martinez I
La operacin genera un conjunto de resultados con todas las combinaciones po-
sibles entre las las de las dos tablas, y con todas las columnas. Aparentemente esto
no tiene mucha utilidad, sin embargo, si se aplica un ltro al producto cartesiano,
es decir, una condicin WHERE que escoja solo aquellas las en las que el campo
dni (del propietario) coincida con el propietario (de la mascota), se obtienen los
siguientes interesantes resultados:
SELECT * FROM anima1es,propietarios
WHERE propietarios.dni=anima1es.propietario;
+ ------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
I codigo I nombre I tipo I propietario I dni I nombre
+ ------ --+ -------- --+ ----- --+ ----------- --+ --+ ------------------ --+
1 I Cloncho I 51993482Y I 51993482Y I Jos Prez I
2 I Yoda I 51993482Y I 51993482Y I Jos Prez I
I 372763172 I Francisco Martnez I
I gato
I gato
3 I Sprocket I perro I 372763172
+ ------ --+ -------- --+ --+ ----------- --+ --------- --+ ------------------ --+
Mediante esta consulta se ha obtenido informacin relacionada entre las dos
tablas. Se aprecia como los dos ga.tos (Cloncho y Yoda) aparecen con su dueo
(Jos Perez), y que, Sprocket el perro, aparece con su dueo Francisco Martnez.
Esta operacin se llama JOIN de las tablas Propietarios y Animales, y consiste en
realizar un producto cartesiano de ambas y un ltro por el campo relacionado (Clave
Fornea vs Clave Primaria).
Por tanto, JOIN =PRODUCTO CARTESIANO +FILTRO. En el apartado
siguiente se estudiar que existen varios tipos de join y que SQL 2incluye en su
sintaxis formas de parametrizar estos tipos de join.
160
Captulo 4. Realizacin de Consultas
Este mismo procedimiento se puede aplicar con N tablas, por ejemplo, con la base
de datos jardineria, cuyo grco de relaciones es el siguiente:
cungc
Nombrecliente
Nombrecontacu:

Apellidocontacu:
Telefono
Fax
LheaD reccionl
LineaD reccion2
Ciudad
Region
Pais
Cod igoPostal
CodigoEITpleadoRepVentas

LimiwCreditD
,.

.4;
cuirrpbab

Nombre

Apellidol

Apellido2

Extension
Email

Codigoofncina

codigoJefe
Cuidad
Pais
Region

CodigoPostaI
Telefono
Lheaoreccionl

LheaDrecciot
Descrpciorexm

Descr pciori-IT ML
Imagen
Ccmhfad:

FechaPedido

Fechdsperada

FechaEntega

Estado

Comentarios
Codigocliente
Proveedor

Descrpcim

Cantidadrtstnck

Precioventa

Prec ioProveedor
Figura 4.1: Relaciones de la bbdd jardineria.
se puede generar una consulta para obtener un listado de pedidos gestionados
por cada empleado:
mysq1> SELECT Empleados.Nombre,C1ientes.NombreC1iente,Pedidos.CodigoPedido
FROM Clientes, Pedidos, Empleados
WHERE Clientes.CodigoC1iente=Pedidos.CodigoC1iente
AND

Empleados.CodigoEmpleado =Clientes.CodigoEmp1eadoRepVentas
ORDER BY Emp1eados.Nombre;
+ --------------- -+ ------------------------------ -+ ------------ -+
| Nombre I NombreC1iente I CodigoPedido I
+--------------- -+ ------------------------------ -+ -+
I Naturagua 18 I
I Beragua 16 I
I Walter Santiago l DGPRDDUCTINS GARDEN 65 I
I walter Santiago I Gardening &Associates 58 I
+--------------- -+ -------------------------------------------- -+
161
Bases de Datos
Se observa que en est.e caso hay dos JOIN, el primer join entre la tabla Clien-
tes y Pedidos, con la condicin Clientes.CodigoCliente=Pedidos.CodigoCliente y la
segunda join entre el resultado de la primera. join y la tabla Empleados (Emplea-
dos.CodigoEmpleado =Clientes.CodigoEmpleadoRepVentas). Ntese que los dos
ltros de la join estn unidas por el operador AND. De esta forma se va extrayen-
do de la base de datos toda la informacin relacionada, obteniendo as mucha ms
potencia en las consultas.
Tambin hay que jarse en que como hay dos campos CodigoCliente, para hacer-
les referencia, hay que precederlos de su nombre de tabla (p.e. PedidosCodigoCliente)
para evitar que el SGBD informe de que hay una columna con nombre ambiguo.
Realizar una consulta multitabla no limita las caractersticas de ltrado y agru-
pacin que ofrece SQL, por ejemplo, si se desea realizar una consulta para obtener
cuntos pedidos ha gestionado cada empleado, se modicara la consulta anterior
para agrupar por la columna Nombre de Empleado y contar la columna CodigoPe-
dido:
SELECT Emp1eados.Nombre,
COUNT(Pedidos.CodigoPedido) as NumeroDePedidos
FROM Clientes, Pedidos, Empleados
WHERE
Clientes.CodigoC1iente=Pedidos.CodigoC1iente
AND
Emp1eados.CodigoEmp1eado =Clientes.CodigoEmpleadoRepVentas
GROUP BY Emp1eados.Nombre
ORDER BY NumeroDePedidos;
I Michael
I Lorena
4.8.2. Consultas multitabla SQL 2
SQL 2introduce otra sintaxis para los siguientes tipos de consultas multitablas:
las joins (o composiciones) internas, externas y productos cartesianos (tambin lla-
madas composiciones cruzadas):
1. Join Interna:
n De equivalencia (INNER JOIN)
162
Captulo 4. Realizacin de Consultas
uNatural (NATURAL JOIN)
2. Producto Cartesiano (CROSS JOIN)
3. Join Externa
n De tabla derecha (RIGHT OUTER JOIN)
IDe tabla izquierda (LEFT OUTER JOIN)
ICompleta (FULL OUTER JOIN)
Composiciones internas. INNER JOIN
Hay dos formas diferentes para expresar las INNER JOIN o composiciones in-
ternas. La primera, usa la palabra reservada JOIN, mientras que la segunda usa ,
para separar las tablas a combinar en la sentencia FROM, es decir, las de SQL 1.
Con la operacin INNER JOIN se calcula el producto cartesiano de todos los
registros, despus, cada registro en la primera tabla es combinado con cada registro
de la segunda tabla, y solo se seleccionan aquellos registros que satisfacen las con-
diciones que se especiquen. Hay que tener en cuenta que los valores Nulos no se
combinan.
Como ejemplo, la siguiente consulta toma todos los registros de la tabla animales
y encuentra todas las combinaciones en la tabla propietarios. La JOIN compara los
valores de las columnas dni y propiet.aro. Cuando no existe esta correspondencia
entre algunas combinaciones, estas no se muestran; es decir, que si el dni de un
propietario de una mascota no coincide con algn dni de la tabla de propietarios,
no se mostrar el animal con su respectivo propietario en los resultados.
SELECT *FROM animales INNER JOIN propietarios
ON anima1es.propietario =propietarios.dni;
+ ------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
I codigo I nombre I tipo propietario I dni I nombre
+ ------ --+ --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
1 I Cloncho I gato I 51993482Y 51993482Y I Jos Prez I
2 I Yoda I gato I 51993482Y I 51993482Y I Jos Prez I
3 I Sprocket I perro I 372763172 I 372763172 I Francisco Martinez I
+ ------ --+ -------- --+ ----- --+ ----------- --+ --+ --+
#Ntese que es una consulta equivalente a la vista en el apartado anterior
#select *from anima1es,propietarios
#where animales.propietario=propietarios.dni;
163
Bases de Datos
Adems, debe tenerse en cuenta que si hay un animal sin propietario no saldr en
el conjunto de resultados puesto que no tiene coincidencia en el ltro:
INSERT INTO animales VALUES (nul1,Arco,perro,nu11);
SELECT * FROM animales;
+ ------ --+ -------- --+ --+ --+
I codigo I nombre I tipo I propietario I
+------ --+ --+ ----- --+ --+
I 1I Cloncho I gato I 51993482Y I
I 2 I Yoda I gato I 51993482Y I
3 I Sprocket I perro I 372763172 I
I 4 I Arco I perro I NULL I #nueva mascota sin propietario
+------ --+ -------- --+ ----- --+ ----------- --+
SELECT * FROM animales INNER JOIN propietarios
ON anima1es.propietario =propietarios.dni;
+------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
Icodigo I nombre Itipo I propietario I dni I nombre I
+ ------ --+ --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
I 1I Cloncho I gato I 51993482Y I 51993482Y I Jos Prez I
l 2l Yoda l gato I 51993482Y l 51993482Y l Jos Prez l
I 3 I Sprocket I perro I 372763172 I 372763172 I Francisco Martinez I
+ ------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
#LA NUEVA MASCOTA N0 APARECE!
Puede hacerse variantes de la inner join cambiando el operador del ltro, por
ejemplo:
SELECT *FROM animales INNER JOIN propietarios
DN propietarios.dni >= anima1es.propietario;
+ ------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
I codigo I nombre I tipo I propietario I dni I nombre I
+ ------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
1 I Cloncho I gato I 51993482Y I 51993482Y I Jos Prez
3I Sprocket I perro I 372763172 I 51993482Y I Jos Prez
3 I Sprocket I perro I 372763172 I372763172 I Francisco Martnez
+ ------ --+ -------- --+ --+ --+ --+ ------------------ --+
I
2 I Yoda I gato I 51993482Y I 51993482Y I Jos Prez |

I

I
Composiciones naturales. NATURAL JOIN
Es una especializacin de la INNER JOIN. En este caso se comparan todas las
columnas que tengan el mismo nombre en ambas tablas. La tabla. resultante contiene
solo una columna por cada par de columnas con el mismo nombre.
164
Captulo 4. Realizacin de Consultas
DESCRIBE Empleados;
+---- --+--+ ------- --+
I I | I
+ ------------ --+ ---- --+--+ ------- --+
I CodigoEmpleado I I I I I I
I Nombre I varchar(50) I N0 I I NULL I |
I Apellidol | varchar(50) I N0 I I NULL I I
I Ape1lido2 I varchar(50) I YES I I NULL I I
IExtension I varchar(10) I N0 II NULL I |
| Email I varchar(100) I N0 II NULL II
I Codigoficina I varchar(10) I N0 I I NULL I I #relacin
I CodigoJefe I int(11) I YES I | NULL I I
I Puesto I varchar(50) I YES I I NULL I I
+ -------------- --+ ------------ --+ ---- --+--+ ------- --+ --+
DESCRIBE Oficinas;
+ --------------- --+ ----------- --+ ---- --+--+ ------- --+ ----- --+
I Field I Type I Null I Key I Default I Extra I
+--------------- --+ --+ ---- --+--+ --+ --+
I Codigoficina I varchar(10) I N0 I PRI I NULL I I #relacin
I Ciudad I varchar(30) I N0 I I NULL I I
I Pais I varchar(50) I N0 I I NULL I I
I Region I varchar(50) I YES I I NULL I I
I CodigoPostal I varchar(10) I N0 I I NULL I I
| Telefono I varchar(20) I N0 I I NULL I |
I LineaDireccion1 I varchar(50) I N0 I I NULL I |
I LineaDireccion2 I varchar(50) I YES I I NULL I |
+ --+ ----------- --+ ---- --+--+ ------- --+ ----- --+
#NATURAL JOIN coge los mismos nombres de campo, en este caso Codigoficina
SELECT CodigoEmpleado,Empleados.Nombre,
Oficinas.Codigo0ficina,0ficinas.Ciudad

FROM Empleados NATURAL JOIN Oficinas;
+-------------- --+ --------------- --+ ------------- --+ -------------------- --+
I CodigoEmpleado I Nombre I Codigoficina I Ciudad I
+ -------------- --+ --------------- --+ ------------- --+ -------------------- --+
I 1I Marcos I TAL ES I Talavera de la Reina l
2 I Ruben I TAL-ES I Talavera de la Reina I
I 31 I Mariko I SYD-AU I Sydney I
Hay que jarse en que, aunque CodigoEmpleado es un campo que est en dos
tablas, esta vez no es necesario precederlo del nombre de tabla puesto que NATURAL
JOIN devuelve un nico campo por cada pareja de campos con el mismo nombre.
165
Bases de Datos
Producto cartesiano.CROSS JOIN
Este tipo de sintaxis devuelve el producto cartesiano de dos tablas:
#equiva1ente a SELECT * FROM anima1es,propietarios;
SELECT * FROM animales CROSS JOIN propietarios;
I codigo I nombre
+

I

l

l

l

l

I

|

I +

l

l

l

l

|

l

|

l

l

I
Cloncho

Cloncho

Yoda
Yoda

Yoda

Sprocket

Sprocket

Sprocket

Arco

Arco
51993482Y

51993482Y

51993482Y

51993482Y

51993482Y

51993482Y
372763172

372763172

372763172
51993482Y

2883477X

372763172

51993482Y

2883477X

372763172

51993482Y

2883477X

372763172

51993482Y

2883477X
Jos Prez
Matias Fernndez
Francisco Martnez
Jos Prez
Matias Fernndez
Francisco Martnez
Jos Prez
Matas Fernndez
Francisco Martinez
Jos Prez
Matas Fernndez
372763172 Francisco Martnez
Ntese que aparece tambin el nuevo animal insertado sin propietario (Arco).
Composiciones externas.OUTER JOIN
En este tipo de operacin, las tablas relacionadas no requieren que haya una
equivalencia. El registro es seleccionado para ser mostrado aunque no haya otro
registro que le corresponda.
OUTER JOIN se subdivide dependiendo de la tabla a. 1a cual se le admitirn
los registros que no tienen correspondencia, ya sean de tabla izquierda, de tabla
derecha, o combinacin completa.
Si los registros que admiten no tener correspondencia son los que aparecen en la
tabla de la izquierda se llama composicin de tabla izquierda o LEFT JOIN ( o
LEFT OUTER JOIN):
#ejemp1o de LEFT OUTER JOIN
#anima1es LEFT OUTER JOIN propietarios
#anima1es est a la izquierda
#propietarios est a la derecha
166
Captulo 4. Realizacin de Consultas
SELECT * FROManimales LEFT OUTER JOIN propietarios
DN animales.propietario = propietarios.dni;
+------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
I codigo I nombre I tipo I propietario I dni I nombre I
+ ------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
I 1I Cloncho I gato I 51993482Y I 51993482Y I Jos Prez I
| 2I Yoda I gato I 51993482Y I 51993482Y I Jos Prez I
I 3 I Sprocket I perro I 372763172 I 372763172 I Francisco Martinez I
I 4 I Arco I perro I NULL I NULL I NULL I
+ ------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
Seobserva que se incluye el perro Arco que no tiene propietario, por tanto, sus
campos relacionados aparecencon valor NULL. El sentido de esta.query podra ser,
sacar todos los animales y si tienen relacin, sacar sus propietarios, y si no tiene
propietario, ndicarloconunvalorNULO o conVACO.
Sabas que . . . 7 Oracleimplementabalas consultasexternasantesde
la aparicin de las OUTER JOIN. utilizando el operador (+)= en lugar del
operador = en la clusula WHERE. Esta sintaxis an est disponible en las
nuevas versiones de este SGBD.
Si los registros que admiten no tener correspondencia son los que aparecen en la
tabla de la derecha, sellama composicin de tabla derecha RIGHT JOIN (o RIGHT
OUTER JOIN):
#ejemp1o de RIGHT OUTER JOIN
#anima1es RIGHT OUTER JOIN propietarios
#anima1es est a la izquierda
#propietarios est a la derecha
SELECT * FROManimales RIGHT OUTER JOIN propietarios
ON anima1es.propietario = propietarios.dni;
+ ------ --+ -------- --+ ----- --+ --+ --+ ------------------ --+
I codigo I nombre I tipo I propietario I dni I nombre I
+ ------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+
1 I Cloncho I gato I 51993482Y I 51993482Y I Jos Prez I
2 l Yoda gato I 51993482Y I 51993482Y l Jos Prez l
NULL I NULL I NULL I NULL I 2883477X | Matas Fernndez I

|
3 I Sprocket I perro I 372763172 I 372763172 I Francisco Martinez
+ ------ --+ -------- --+ ----- --+ ----------- --+ --+ --+
167
Bases de Datos
En este caso, los que aparecen son todos los propietarios, incluido Matas Fernndez
que no tiene una mascota. Se ve que el perro Arco no aparece, pues esta vez los regis-
tros que se desean mostrar son todos los de la tabla derecha (es decir, propietarios).
La operacin que admite registros sin correspondencia tanto para la tabla izquier-
da como para la derecha, por ejemplo. animales sin propietario y propietarios sin
animales, se llama composicin externa completa o FULL JOIN (FULL OUTER
JOIN). Esta operacin presenta los resultados de tabla izquierda ytabla. derecha
aunque no tengan correspondencia en la otra tabla. La tabla combinada contendr,
entonces, todos los registros de ambas tablas y presentar valores nulos para registros
sin pareja.
#ejemp1o de FULL OUTER JOIN
#anima1es FULL OUTER JOIN propietarios
#anima1es est a la izquierda
#propietarios est a la derecha
SELECT * FROM animales FULL OUTER JOIN propietarios
DN anima1es.propietario =propietarios.dni;
+ ------ -+ -+ -+ ----------- -+ --------- -+ ------------------ -+
I codigo I nombre I tipo I propietario I dni I nombre
Cloncho I 51993482Y 51993482Y l Jos Prez
Yoda gato I 51993482Y 51993482Y I Jos Prez
Sprocket perro I 372763172 372763172 I Francisco Martinez I
l NULL NULL NULL
2883477X Matias Fernndez
Sabas que . . . 7En SQL existe el operador UNION, que aade al conjun-
to de resultados producidos por una SELECT, los resultados de otra SELECT.
La sintaxis es:
SELECT FROM
UNION [ALL]
SELECT FROM
El parmetro ALL incluye todos los registros de las dos SELECT, incluyendo
los que son iguales. Si no se indica ALL, se excluyen los duplicados.
Aunque MySQL no implementa la caracterstica FULL OUTER JOIN, s que se
puede simular haciendo una unin de los resultados de un LEFT OUTER JOIN y
168
Captulo 4. Realizacin de Consultas
los resultados de un RIGHT OUTER JOIN, puesto que UNION, sin la opcin ALL,
elimina los registros duplicados, por tanto, se podra codicar la FULL OUT ER
JOIN anterior de la siguiente forma:
mysq1> SELECT * FROM animales LEFT OUTER JOIN propietarios
-> ON anima1es.propietario -propietarios.dni
-> UNION
-> SELECT * FROM animales RIGHT OUTER JOIN propietarios
-> ON anima1es.propietario =propietarios.dni;
+ -+ -+ -+ ----------- -+ -+ -+
I codigo I nombre I tipo I propietario I dni I nombre I
+ -+ -------- -+ ----- -+ ----------- -+ --------- -+ ------------------ -+
I Cloncho I gato I 51993482Y I 51993482Y I Jos Prez I
I Yoda I gato I 51993482Y I 51993482Y I Jos Prez I
I Sprocket I perro I 372763172 I372763172 I Francisco Martinez I
I Arco I perro I NULL I NULL I NULL I
I I I
++ +
NULL NULL I NULL 2883477X Matias Fernndez I
4.9. Consultas reexivas
A veces, es necesario obtener informacin de relaciones reexivas, por ejemplo,
un informe de empleados donde junto a su nombre y apellidos apareciera el nombre
y apellidos de su jefe. Para ello, es necesario hacer una JOIN entre registros de la
misma tabla:
mysq1> desc Empleados;
+ -------------- -+ ------------ -+ ---- +--+ ------- -+ ----- -+
I F1e1d I Type I Null I Key I Default I Extra I
+-------------- -+ ------------ -+ ---- --+-----+ ------- -+ ----- -+
I CodigoEmp1eado I int(11) I N0 I PRI I NULL I |
I Nombre I varchar(50) I N0 I I NULL I I
| Apellidol I varchar(50) I N0 I I NULL I I
I Ape11ido2 I varchar(50) I YES I I NULL I |
I Extension I varchar(10) I N0 I l NULL I I
| Email I varchar(100) I ND I I NULL I |
I Codigoficina I varchar(10) I N0 I I NULL I I
I CodigoJefe I int(11) I YES I I NULL I I #autore1acin
I Puesto I varchar(50) I YES I I NULL I I
+-------------- -+ ------------ -+ ---- -+----+ ------- -+ -+
SELECT concat(emp.Nombre, ,emp.Ape11ido1) as Empleado,
concat(jefe.Nombre,,jefe.Ape11ido1) as jefe
169
Bases de Datos
FROM Empleados emp INNER JOIN Empleados jefe
ON emp.CodigoEmp1eado=jee.CodigoJefe;
+ -+ ----------------------- -+
I Empleado I Jefe I
+ ----------------- -+ ----------------------- -+
I Marcos Magaa I Ruben Lpez I
I Ruben Lpez I Alberto Soria I
I Alberto Soria I Kevin Fallmer I
I Kevin Fallmer I Julian Bellinelli I
l Kevin Fallmer I Mariko Kishi I
+----------------- -+ ----------------------- -+
Analizando la query anterior, primero se observa el uso de la tabla empleados
dos veces, una con un alias emp que representa los empleados como subordinados y
otra con alias jefe que representa los empleados como jefes. Ambas tablas (aunque en
realidad son la misma) se unen en una JOIN a travs de la relacin CodigoEmpleado
y CodigoJefe.
Por otro lado, el primer campo que se selecciona es la concatenacin del nombre
y apellido del empleado (concat(emp.Nombre,&#39; ,emp.Apellido1) al que a su vez
le damos un alias (empleado) y el segundo campo que es la concatenacin de los
empleados jefes, al que le se le da el alias jefe.
Se puede observar que en esta query no aparecen los empleados sin jefe, puesto
que se ha utilizado un INNER JOIN. Para mostrarlos, habra. que usar un LEFT o
RIGHT OUTER JOIN.
4.10. Consultas con tablas derivadas
Las consultas con tablas derivadas, o inline views, son aquellas que utilizan sen-
tencias SELECT en la clusula FROM en lugar de nombres de tablas, por ejemplo:
SELECT * FROM
(SELECT CodigoEmpleado, Nombre FROM Empleados
WHERE CodigoOficina=TAL-ES) as tabla_derivada;
En este caso se ha de distinguir, por un lado la tabla derivada, (SELECT Co-
digoEmpleado, Nombre FROM Empleados) que tiene un alias tabla_derivada, es
decir, una especie de tabla temporal cuyo contenido es el resultado de ejecutar la
consulta, su nombre es tabla_derivada y tiene dos columnas, una CodigoEmpleado
y otra Nombre. Este tipo de consultas ayudar a obtener informacin relacionada
de forma mucho ms avanzada.
170
Captulo 4. Realizacin de Consultas
Por ejemplo, en la base de datos jardineria, si se desea sacar el importe del pedido
de menor coste de todos los pedidos. hay que pensar primero como sacar el total
de todos los pedidos y de ah, el pedido con menor coste con la funcin de columna
MIN:
#1: Para calcular el total de cada pedido, hay que codificar esta query
SELECT SUM(Cantidad*PrecioUnidad) as total,CodigoPedido
FROM Deta11ePedidos
GROUP BY CodigoPedido;
#2: Para calcular el menor pedido, se puede hacer una tabla
#derivada de la consulta anterior y con la funcin MIN
#obtener el menor de ellos:
SELECT MIN(total) FROM (
SELECT SUM(Cantidad*PrecioUnidad) as total,CodigoPedido
FROM Deta11ePedidos
GROUP BY CodigoPedido
) AS TotalPedidos;
+ ---------- --+
I MIN(tota1) l
+ --+
| 4 I
+ ---------- --+
#Tota1Pedidos es la tabla derivada formada
#por el resultado de la consulta entre parntesis
Las tablas derivadas no tienen limitacin, es decir, se pueden unir a otras tablas,
ltrar, agrupar, etc.
171
Bases de Datos
4.11. Prcticas Resueltas
Prctica 4.1: Consultas simples en MS-Access
Con la BBDD Automviles, genera sentencias SQL para obtener:
1. El nombre de las marcas y modelos de los vehculos.
2. El nombre de los modelos cuyas emisiones estn entre 150 y 165.
3. El nombre de los modelos cuyas emisiones estn entre 150 y 165 o que su
consumo est entre 5y 6 ordenado por consumo descendentemente.
4. Un listado de todas las Marcas que hay (sin repeticiones).
Para crear una consulta en modo SQL en Access, se pulsa en la pestaa. Crear,
opcin Diseo de Consulta, y a continuacin, se pulsa en el botn SQL. Final-
mente, se escribe la sentencia SELECT y, para ejecutarla, se pulsa en la admiracin
de la pestaa Diseo .
#1

SELECT Marca,Mode1o FROM Automviles;
#2

SELECT modelo FROM Automviles WHERE
Emisiones >= 150 AND Emisiones <=165;
#3
SELECT mode1o,consumo,emisiones FROM Automviles WHERE
(Emisiones >= 150 AND Emisiones <=165) OR (Consumo>=5 AND Consumo<=6)
ORDER BY consumo DESC;
#4

SELECT DISTINCT Marca FROM Automviles;
Prctica 4.2: Consultas simples con Ia BBDD jardinera
Codica en MySQL y Oracle sentencias para obtener la siguiente informacin:
1. Sacar el cdigo de ocina y la ciudad donde hay ocinas.
Sacar cuntos empleados hayen la compaa.
Sacar cuntos clientes tiene cada pas.
FP. Sacar cul fue el pago medio en 2005 (pista: Usar la funcin YEAR de mysql
o la funcin to_char(fecha,yyyy) de Oracle).
172
Captulo 4. Realizacin de Consultas
5. Sacar cuntos pedidos estn en cada estado ordenado descendente por el nme-
ro de pedidos.
6. Sacar el precio del producto ms caro y del ms barato.
#1
SELECT CodigoOficina,ciudad FROM Oficinas;
#2
SELECT Count(*) FROM Empleados;
#3
SELECT Count(*),Pais FROM Clientes GROUP BY Pais;
#4
SELECT AVG(Cantidad) FROM Pagos WHERE YEAR(FechaPago)=2005; #(mysql)
#4
SELECT AVG(Cantidad) FROM Pagos WHERE TO_CHAR(FechaPago,YYYY)=2005;
#5
SELECT Count(*),Estado FROM Pedidos GROUP BY Estado
ORDER BY Count(*) DESC;
#6
SELECT Max(PrecioVenta),Min(PrecioVenta) FROM Productos;
Prctica 4.3: Subconsultas con Ia BBDD jardinera
Codica en SQL sentencias para obtener la siguiente informacin:
1. Obtener el nombre del cliente con mayor limite de crdito.
2. Obtener el nombre, apellidol ycargo de los empleados que no representen a
ningn cliente.
#1

SELECT Nombrecliente FROM Clientes WHERE
LimiteCredito =(SELECT Max(LimiteCredito) FROM Clientes);
#2
SELECT Nombre, Apellidol, Puesto FROM Empleados WHERE CodigoEmp1eado
NOT IN (SELECT CodigoEmp1eadoRepVentas FROM Clientes );
173
Bases de Datos
Prctica 4.4: Consultas multitabla con la BBDD jardinera
Codica en SQL consultas para obtener:
1. Sacar un listado con el nombre de cada cliente yel nombre y apellido de su
representante de ventas.
2. Mostrar el nombre de los clientes que no hayan realizado pagos junto con el
nombre de sus representantes de ventas.
3. Listar las ventas totales de los productos que hayan facturado ms de 3000
euros. Se mostrar el nombre. unidades vendidas, total facturado y total fac-
turado con impuestos (18 (7o IVA).
4. Listar la direccin de las ocinas que tengan clientes en Fuenlabrada.
#1
SELECT NombreC1iente, Nombre as NombreEmp, Apellidol as ApeEmp
FROM Clientes INNER JOIN Empleados ON
Clientes.CodigoEmpleadoRepVentas=Empleados.CodigoEmp1eado;
#2
SELECT NombreC1iente,Nombre as NombreEmp, Apellidol as ApeEmp
FROM Clientes INNER JOIN Empleados ON
Clientes.CodigoEmp1eadoRepVentas=Emp1eados.CodigoEmpleado

where Codigocliente not in (SELECT CodigoC1iente FROM Pagos);
#3
SELECT Nombre, SUM(Cantidad) As Tota1Unidades,
SUM(Cantidad*PrecioUnidad) as Tota1Facturado,
SUM(Cantidad*PrecioUnidad)*1.18 as Totalconmpuestos
FROM Deta11ePedidos NATURAL JOIN Productos
GROUP BY Nombre
HAVING Sum(Cantidad*PrecioUnidad)>3000;
#4

SELECT CONCAT(0ficinas.LineaDireccion1,0ficinas.LineaDireccion2),
Dficinas.Ciudad
FROM Oficinas, Emp1eados,C1ientes
WHERE Oficinas.Codigoficina=Emp1eados.Codigo0ficina AND
Empleados.CodigoEmp1eado=C1ientes.CodigoEmp1eadoRepVentas AND
Clientes.Ciudad=Fuenlabrada;
174
Captulo 4. Realizacinde Consultas
Prctica 4.5: Consulta con tablas derivadas
Sacar el clienteque hizo el pedidode mayor cuanta:
Esta. consulta es mejor codi carla en un. amhivo de texto para no tener que escribirla mltiples vecessi
da errores. La estrategia para resolverlo es hacer pequeasconsultas (querys A,B y C) para luego unirlas
y generar la de nitiva:
#query A: Sacar la cuanta de los pedidos:
(select CodigoPedido, Codigocliente,
sum(Cantidad*PrecioUnidad) as total
from Pedidos natural join DetallePedidos
group by CodigoPedido,CodigoC1iente) Tota1Pedidos;
#query B: Sacar el pedido ms caro:
select max(tota1) from
(select CodigoPedido, Codigocliente,
sum(Cantidad*PrecioUnidad) as total
from Pedidos natural join Deta1lePedidos
group by CodigoPedido,CodigoC1iente) Tota1Pedidos;
#query C: Sacar el cdigo de cliente correspondiente
al pedido ms caro (querydefinitiva.sq1)
querydefinitiva.sq1
Select Tota1Pedidos.Codigocliente,NombreCliente from
(select CodigoPedido, Codigocliente,
sum(Cantidad*PrecioUnidad) as total
from Pedidos natural join Detal1ePedidos
group by CodigoPedido,CodigoCliente) Tota1Pedidos
inner join Clientes on
Clientes.CodigoC1iente=Tota1Pedidos.CodigoC1iente
where tota1=
( select max(tota1) from
(select CodigoPedido, CodigoC1iente,
sum(Cantidad*PrecioUnidad) as total
from Pedidos natural join Deta11ePedidos
group by CodigoPedido,CodigoCliente) TotalPedidos
);
175
Bases de Datos
4.12.
Prcticas Propuestas
Prctica 4.6: Consultas simples en MS-Access
Con la BBDD Automviles, genera sentencias SELECT para obtener esta informa-
cin:

1.
2.

3.
Modelos de vehculos TDlf
Modelos de la marca Audiy de la marca "Seat ordenado por l\llarca y Modelo.
Alarcas de Vehculos que empiecen por T y terminen en a.
.Vehculos que tengan foto.
.El consumo de los vehculos est expresado en litros / IOOkm. Listar el consumo
de los vehculos Seaten MPG, l\Iillas por galn (10 MPG=23.49 1/100km).
O
Prctica 4.7: Consultas simples con la BBDD jardinera
Codica en SQL (Oracle y MySQL) sentencias para obtener la siguiente informacin:
1.
2.
OWNQF-l
Sacar la ciudad y el telfono de las ocinas de Estados Unidos.
Sacar el nombre, los apellidos y el email de los empleados a cargo de Alberto
Soria.
Sacar el cargo, nombre, apellidos y email del jefe de la empresa.
Sacar el nombre, apellidos y cargo de aquellos que no sean representantes de
ventas.
Sacar el nmero de clientes que tiene la empresa.
Sacar el nombre de los clientes espaoles.
Sacar cuntos clientes tiene cada pas.
Sacar cuntos clientes tiene la ciudad de Madrid.
.Sacar cuntos clientes tienen las ciudades que empiezan por M.
4Hay que tener en cuenta que en Access, el comodn 7c es un *
176
10.
11.

12.

13.

14.

15.
16.

17.
18.
19.
20.
Capitulo 4. Realizacin de Consultas
Sacar el cdigo de empleado y el nmero de clientes al que atiende cada re-
presentante de ventas.
Sacar el nmero de clientes que no tiene asignado representante de ventas.
Sacar cul fue el primer y ltimo pago que hizo algn cliente.
Sacar el cdigo de cliente de aquellos clientes que hicieron pagos en 2008.
Sacar los distintos estados por los que puede pasar un pedido.
Sacar el nmero de pedido, cdigo de cliente, fecha requerida y fecha de entrega
de los pedidos que no han sido entregados a tiempo.
Sacar cuntos productos existen en cada lnea de pedido.
Sacar un listado de los 20 cdigos de productos ms pedidos ordenado por
cantidad pedida. (pista: Usar el ltro LIMIT de MySQL o el ltro rownum de
Oracle .
Sacar el nmero de pedido, cdigo de cliente, fecha requerida y fecha de entrega
de los pedidos cuya fecha de entrega ha sido al menos dos das antes de la
fecha requerida. (pista: Usar la funcin addDate de MySQL o el operador +
de Oracle).
Sacar la facturacin que ha tenido la empresa en toda la historia, indicando
la base imponible, el IVA y el total facturado. NOTA: La base imponible se
calcula sumando el coste del producto por el nmero de unidades vendidas.
El IVA, es el 18 % de la base imponible, y el total, la suma de los dos campos
anteriores.
Sacar la misma informacin que en la pregunta anterior, pero agrupada por
cdigo de producto ltrada por los cdigos que empiecen por FR.
Prctica 4.8: Subconsultas con Ia BBDD jardinera
Codica en SQL sentencias para obtener la siguiente informacin:
1.
2.
Obtener el nombre del producto ms caro.
Obtener el nombre del producto del que ms unidades se hayan vendido en un
mismo pedido.
177
Bases de Datos
3. Obtener los clientes cuya lnea de crdito sea mayor que los pagos que haya
realizado.
4. Sacar el producto que ms unidades tiene en stock y el que menos unidades
tiene en stock.
Prctica 4.9: Consultas multitabla con Ia BBDD jardinera
Codica en SQL las siguientes consultas:
1. Sacar el nombre de los clientes y el nombre de sus representantes junto con la
ciudad de 1a ocina a la que pertenece el representante.
2. Sacar la misma informacin que en la pregunta anterior pero solo los clientes
que no hayan echo pagos.
3. Obtener un listado con el nombre de los empleados junto con el nombre de sus
jefes.
4. Obtener el nombre de los clientes a los que no se les ha entregado a tiempo un
pedido (FechaEntrega>FechaEsperada).
Prctica 4.10: Consultas variadas con la BBDD jardinera
Codica en SQL las siguientes consultas:
1. Sacar un listado de clientes indicando el nombre del cliente y cuntos pedidos
ha realizado.
2. Sacar un listado con los nombres de los clientes y el total pagado por cada uno
de ellos.
3. Sacar el nombre de los clientes que hayan hecho pedidos en 2008.
4. Listar el nombre del cliente y el nombre y apellido de sus representantes de
aquellos clientes que no hayan realizado pagos.
178
10.

11.
12.
13.

14.
15.

16.
17.

18.
Captulo 4. Realizacin de Consultas
Sacar un listado de clientes donde aparezca el nombre de su comercial y la
ciudad donde est su ocina.
. Sacar el nombre, apellidos, ocina y cargo de aquellos que no sean represen-
tantes de ventas.
. Sacar cuntos empleados tiene cada ocina, mostrando el nombre de la ciudad
donde est la ocina.
. Sacar un listado con el nombre de los empleados, y el nombre de sus respectivos
jefes.
. Sacar el nombre, apellido, ocina (ciudad) y cargo del empleado que no repre-
sente a ningn cliente.
Sacar la media de unidades en stock de los productos agrupados por gama.
Sacar los clientes que residan en la misma ciudad donde hay una ocina, indi-
cando dnde est la ocina.
Sacar los clientes que residan en ciudades donde no hay ocinas ordenado por
la ciudad donde residen.
Sacar el nmero de clientes que tiene asignado ca.da representante de ventas.
Sacar cul fue el cliente que hizo el pago con mayor cuanta y el que hizo el
pago con menor cuanta.
Sacar un listado con el precio total de cada pedido.
Sacar los clientes que hayan hecho pedidos en el 2008 por una cuanta superior
a 2000 euros.
Sacar cuntos pedidos tiene cada cliente en cada estado.
Sacar los clientes que han pedido ms de 200 unidades de cualquier producto.
<>
Prctica 4.11: Ms consultas variadas
Con la base de datos NBA codica las siguientes consultas:
1.
Equipo y ciudad de los jugadores espaoles de la NBA.
179
Bases de Datos
2. Equipos que comiencen por Hy terminen en S.
3. Puntos por partido de Pau Gasolen toda su carrera.
4. Equipos que hay en la conferencia oeste (w&#39;est).
5. Jugadores de Arizona que pesen ms de 100 kilos y midan ms de 1.82m (6
pies).
Puntos por partido de los jugadores de los cavaliers.
Jugadores cuya tercera letra de su nombre sea la v.
Nmero de jugadores que tiene cada equipo de la conferencia oeste West.
9051? .Nmero de jugadores Argentinos en la NBA.
10. Mxima media de puntos de Lebron James en su carrera.
11. Asistencias por partido de Jose Calderonen la temporada O7/O8.
12. Puntos por partido de Lebron Jamesen las temporadas del 03/04 al 05/06.
13. Nmero de jugadores que tiene cada equipo de la conferencia este East.
14. Tapones por partido de los jugadores de los Blazers.
15. Media de rebotes de los jugadores de la conferencia Este East.
16. Rebotes por partido de los jugadores de los equipos de Los Angeles.
17. Nmero de jugadores que tiene cada equipo de la divisin N orthWest.
18. Nmero de jugadores de Espaa y Francia en la NBA.
19. Nmero de pivots Cque tiene cada equipo.
20. Cunto mide el pvot ms alto de la nba?
21. Cunto pesa (en libras y en kilos) el pvot ms alto de la NBA?
22. Nmero de jugadores que empiezan por "Y".
23. Jugadores que no metieron ningn punto en alguna temporada.
24. Nmero total de jugadores de cada divisin.
25. Peso medio en kilos y en libras de los jugadores de los Raptors.
180
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Captulo 4. Realizacin de Consultas
Mostrar un listado de jugadores con el formato Nombre(Equipo) en una sola
columna.
Puntuacin ms baja de un partido de la NBA.
Primeros 10 jugadores por orden alfabtico.
Temporada con ms puntos por partido de Kobe Bryant.
Nmero de bases "G que tiene cada equipo de la conferencia este East.
Nmero de equipos que tiene cada conferencia.
Nombre de las divisiones de la Conferencia Este.
Mximo reboteador de los Suns.
Nlximo anotador de la toda base de datos en una temporada.
Sacar cuntas letras tiene el nombre de cada jugador de los grizzlies (Usar
funcin LENGTH).
Cuntas letras tiene el equipo con nombre ms largo de la NBA (Ciudad y
Nombre)?
Prctica 4.12: Consultas con tablas derivadas
Realizar las siguientes consultas con tablas derivadas con las BBDD NBA y jardi-
neria:
Sacar el importe medio de los pedidos de la BBDD jardineria.
Sacar un listado con el nmero de partidos ganados por los equipos de la NBA.
Sacar la media de partidos ganados por los equipos del oeste.
Cul es el pedido ms caro del empleado que ms clientes tiene?
181
Bases de Datos
4.13.
182
Resumen
Los conceptos clave de este captulo son los siguientes:
La sentencia SELECT devuelve un conjunto de resultados en forma de tabla
compuesto por las (o registros) y columnas (o campos).
La clusula FROM de la sentencia SELECT especica las tablas de las que
se extrae la informacin, y permite. a travs de operaciones como el producto
cartesiano y las JOIN, construir conjuntos de datos de informacin relacionada.
Cuando se especica ms de una tabla en la clusula FROM se denomina
consulta multitabla. Pueden ser escritas en dos tipos de sintaxis, SQLI y SQL2.
SQLl solo permite composiciones internas (INNER JOIN), mientras que SQL2
permite, adems, composiciones externas (OUTER JOIN). Las NATURAL
JOIN, son un tipo de INNER JOIN que hace coincidir la informacin de dos
campos con el mismo nombre.
Los registros de una SELECT se pueden F ILTRAR mediante el uso de la
clusula WHERE. Los ltros se pueden construir mediante expresiones, el
operador de pertenencia a conjuntos (IN), operador de rango (BETWEEN),
test de valor nulo (IS, IS NOT), test de patrn (LIKE), y limitacin de registros
(LIMIT y numrows).
Para ordenar un conjunto de resultados se utiliza la palabra clave ORDER
BY. Se puede ordenar ascendentemente (ASC) o descendentemente (DESC).
Las consultas de resumen se usan para calcular informacin en base a conjuntos
o grupos de datos. Los grupos se construyen mediante la clusula GROUP BY.
Los ltros sobre grupos se generan mediante la clusula HAVING.
Las subconsultas son SELECT usadas para ltrar informacin mediante test
de comparacin, Test de Existencia (EXISTS), Test cuanticados (ANY y
ALL). Pueden ser anidadas.
Las consultas reexivas son las que forman en su clusula FROM la misma
tabla dos o ms veces.
Las tablas derivadas son tablas virtuales generadas a travs de consultas en
tiempo de ejecucin. Tienen un alias que las identica.
4.14. Test de repaso
1. Para qu sirve DISTINCT en una
SELECT?
a) Para mostrar las las idnticas
b) Para no mostrar las idnticas
c) Para mostrar, aparte, las las distintas
d) Ninguna de las anteriores
2. Un ltro WHERE puede incorporar
expresiones con
a) Operadores numricos
b) Operadores relacionales
c) Llamadas a funciones
d) Todas las anteriores
3. El operador INno se puede usar para
a) Escribir en un ltro una lista de valores
b) Escribir en un ltro una subconsulta
c) Una ordenacin
d) Encadenar varios condiciones de tipo AND
4. El test de valor nulo
a) Sirve para comprobar si un conjunto de re-
sultados es vaco
b) Sirve para comprobar si el valor de un cam-
po es desconocido
c) Sirve para comprobar si el valor de un cam-
po es o no es desconocido
d) Todas las anteriores son correctas
5. El patrn %AX_ _seleccionara el va-
lor
a) XXXAX11
b) AX1111
c) XXXXIF
d) XXXAX1
Captulo 4. Realizacin de Consultas
6. Filtrar por el nmero de resultados
a) No se puede de ninguna manera en Oracle
b) Se puede mediante la clusula LIMIT en
Oracle
c) Se puede mediante la clusula numrows en
Oracle
d) No se puede hacer de ninguna manera en
MySQL
7.En SQL se puede ordenar por
a El nmero de columna (1,2,3. .
c Una expresin
d
)
b) El nombre de la columna
)

) Todas las anteriores
8. Si junto a una funcin de columna, se
selecciona un campo
a) Se debe agrupar por el campo
b No se debe agrupar por el campo
)
c) No se puede seleccionar el campo
d)
No se puede seleccionar la funcin de co-
lumna
9. Una subconsulta
a) Es un tipo especial de tabla derivada
b) Se puede anidar con otras subconsultas
c) Sus resultados se pueden ordenar bajo de-
terminadas circunstancias
d) Todas las opciones anteriores son posibles
"q&#39;6v&#39;e&#39;p&#39;&#39;a&#39;9&#39;e&#39;9ow-o-svaqI SQUOIDNOS
183
Bases de Datos
4.15.
184
.Realiza una lista con los operado-
res que puedes escribir en un ltro,
clasicndolos segn su tipo.
.La tabla alumno tiene un campo
llamado Nacionalidad. Escribe una
consulta para sacar los alumnos de
Espaa, Italia yDinamarca de dos
formas, una con el operador IN, y
otra con operadores AND.
.Escribe la sintaxis de la senten-
cia SELECT con todas sus clusu-
las correspondientes (ORDER BY,
HAVING, GROUP BY, etc.) y des-
cribe para qu sirve cada una.
. Haz un esquema clasicando los ti-
pos de JOIN que existen. Incorpora
un ejemplo de cada una de ellas.
. En qu se diferencia LEFT OU-
TER JOIN de RIGHT OUTER
JOIN? Pon un ejemplo de una con-
sulta que afecte a dos tablas, indi-
cando la diferencia.
En qu se diferencia FULL OU-
TER JOIN de INNER JOIN? Pon
un ejemplo de una consulta que
afecte a dos tablas, indicando la di-
ferencia.
.Qu es una tabla derivada? De-
be llevar alias una tabla derivada?
Por qu?
8.
10.
11.
12.

13.
14.
15.
.Para
Comprueba tu aprendizaje
Escribe un ejemplo de la ejecucin
de una subconsulta con el opera-
dor EXISTS y otra con el operador
NOT EXISTS.
qu sirve el operador
UNION? Pon un ejemplo de su uso.
Dene para qu sirven los siguien-
tes operadores de ltros, y pon un
ejemplo de cada uno de ellos:
uBETWEEN ...AND
uANY
nALL
nIS
uIS NOT
uLIKE
Qu diferencia hay entre HAVING
x>y y WHERE x>y?
Para qu sirve un CROSS JOIN?
Qu diferencia hay entre NATU-
RAL JOIN e INNER JOIN? Pon
un ejemplo usando ambas de dos
consultas que hagan produzcan los
mismos resultados.
Qu es una consulta reexiva? Pon
un ejemplo de una sentencia SQL
con una consulta reflexiva.
Se podra utilizar una tabla deri-
vada dentro de una subconsulta?
CAPTULO 5
Tratamiento de los datos
Objetivos
Cntenid5 Identicar herramientas y sen-
tencias para modicar el conte-
e H&#39; t - ,
erramlen as gra cas pTOpO nldo de la base de datos
cionadas por el SGBD
Insertar, borrar y actualizar
Sentencia INSERT datos en las tablas
INSERT y SELECT
Incluir en una tabla informa-
sentencia UPDATE cin de una consulta
Adoptar medidas para mante-
ner la integridad y consistencia
de la informacin
Sentencia DELETE
UPDATE y DELETE con sub-
consultas

Reconocer el funcionamiento
Borrado y modicacin de re-
gistros con relaciones
Transacciones
de transacciones y anular par-
cial o totalmente cambios pro-
ducidos por una transaccin
Identicar efectos de las polti-
Acceso concurrente a los datos .
cas de bloqueo de registros
Vistas. usuarios y privilegios . . .
e " Crear vistas y usuarios y asig-
nar privilegios
En este captulo se detalla la sintaxis de las sentencias INSERT, UPDATE y
DELETE. Se expone el tratamiento de las transacciones y los problemas del
acceso concurrente a los datos. Adems, se introducen las principales herra-
mientas grcas de edicin de datos y se explica cmo crear Vistas, usuarios y
otorgar y revocar permisos.
185
Bases de Datos
5.1. Herramientas grcas para la edicin de los
datos
Existen multitud de herramientas grcas para la edicin de datos, algunas,
incorporadas como parte del software del gestor de base de datos, por ejemplo, el
entorno grco de Access; otras herramientas se distribuyen como paquetes a aadir
a.l SGBD, como phplyAdmin de MySQL: yel software de terceros, programas por
los que hay que pagar una licencia aparte como TOAD o Aqua Data Studio. Otros
gestores como Oracle, no incorporan expresamente una herramienta de edicin de
datos como tal (se pueden consultar, pero no se puede editar datos desde Enterprise
Manager), pero se aprovechan de herramientas de terceros para esta labor.
5.1.1. Edicin con phpMyAdmin
Una de las muchas utilidades de phpMyAdmin es la insercin de datos a travs
de formularios web, donde, de forma muy sencilla, se escriben los valores para cada
campo de la tabla deseada. Tan solo hay que seleccionar la pestaa Insertar y
seleccionar la tabla donde se va a insertar los registros. Se rellenan los valores y se
pulsa continuar.
p;j=}._;JJL,"-. u! Sorvidor: localhost by late do datos: startrok Dsu Tabla: Aduna
_Examinar inruttura JSOL , Buscar ENWWJ Enar Im nar o racimos
vaciav Eliminar y
Base de datos Campo Tipo Funcin nulo Valor
stamek (9) vCodigo mll) v 1 L
nmngNombre varcharso) y597097,57 pimp! Vi i: L
Ikm5 Fecha date o J1531_o3:v26 &#39; _a
EmNacional-dad vmmzm vEELLW &#39; ""4 ;T "
IHnculas
=wm muCOHUHUBI
| Mwmekhculas
E Ignorar

Campo Tipo Funcin nulo Valor
Codugo mui) y z &#39; "
Nm&#39;V3&#39;<"3&#39;(5 v wnnam Shazner
ha date vsama-n 3
Nacionalidad varcharQO) v v/ VEEUU1
Continuar
Figura 5.1: Insercin de datos a travs de phpmyadmin (paso 1).
De esta forma, se genera el cdigo SQL automticamente para insertar los valores.
Sabas que . . . 7En MySQL existe la sintaxis extended insert, que
permite insertar varios registros con un solo INSERT. Vase Figura. 5.2
186
Captulo 5. Tratamiento de 10s datos
2lsi fueron insertadas.
La Id de la la msertada es: 3
-sn {n --- -
1 e!
9:, u" &#39;l"v&#39; 2-1. ,3 L. Ez. "
l: Editar]! (near cdigo PHP]
Ejecutar lau) consultan) SOL en la baso de datos sum-uk: m
INSERT {VO suryet una; 4(5129: .hast; . Fejhn .Ivmnagaa xALUES Campos
n1. Leonard Puro; .l93lw83-26 . ECW I. 12,Hizo! Shun! .LH-II . cogo _
EEUU M Nombre
Fecha

NBCIOHEIB
<<
Guardar esta consulta en fovontos:
Penmhr que todo usuario puede raider a este favorito
Reempluar el favorito QXISBHIQ que tenga el mnsmo nombre
Cent: nuar
Figura 5.2: Insercin a travs de phpmyadmin.(paso 2).
Para eliminar o modicar registros, se utiliza la pestaa Examinar:
HEHWMEstructura [SOL Buscar idmorhr Enar Im rnds-anos
Vaciar E Eliminar
v; noisrtrando-regcstvais 0-1-(2 total. La Consul-lamo seg) i
mm
FW t": v
LIIH 4
PorllPorlnmnentol Edntarll Explicar e! SOL] [Crear CIQO PHP I [CUJBIZI
Mostrar: 30 mas empezando de o
en modo nonzontal v ympelurlos encabezadoscaoauoo celdas
Drgamzarsegnla clave: nmgum y
v Opcuones

codigo nombro loan Nacionalidad
, X 1Leonard Nimoy 1931-03-26 EEUU
,>< 2 William shacner 1931-03-22 eeuu
t Marcar todos/as IDesmarcar todos Para los elementos que estan marcados: f x I
Mostrar: 3o mas empezando de o
en modo horizontal vy repeorios encabezados cada 10o celdas
(p-raciones sobra los nsuiudos do la zonsulu
__ Vista deampresuon .&#39; Prevusualuzacron para mpnmnrtdocumento completo) Exportar QCREATE VIEW |
Figura 5.3: Modicacin y eliminacin de datos a travs de phpMyAdmin.
5.1.2. Access como entorno grco para otros gestores
Si se conoce el entorno Access es muy sencillo conectarlo con otros gestores,
y de esta manera, aprovecharse del conocimiento de la interfaz de Microsoft para
administrar otros gestores de bases de datos. Esto es posible gracias a la utilizacin
de conectores ODBC. ODBC son las siglas de Open Database Connectivity. Es una
187
Bases de Datos
herramienta que, de forma estndar, permite conectar aplicaciones a cualquier gestor
de bases de datos. Muchas aplicaciones omticas, como Excel, Word y el propio
Access permite el acceso remoto a datos de un SGBD. Para esto, tan solo es necesario
instalar el driver ODBC para ese SGBD. De esta manera, se puede crear una DSN
o Data Source Name, es decir, una referencia a cierta base de datos.
MySQL Comedor/ODBC Dm Senna: Conguration
Cannon Puameters
Data Source Name:
:192. 168. 224. 128
Figura 5.4: Creacin de un origen de datos ODBC para MySQL.
Esta referencia se crea en Windows a travs del panel de Control, Herramientas
Administrativas, y la opcin Onyenes de Datos ODBC. Cada origen de datos requie-
re, adems de un nombre para el propio origen, el nombre del usuario, la contrasea,
el nombre de la base de datos y los datos de conexin al servidor (Direccin IP y
puerto TCP / UDP por donde se conecta).
A travs de un origen de datos ODBC, se pueden enlazar a Access las tablas de
un SGDB para el cual se ha congurado la DSN. Para ello, a travs de la pestaa de
Access Datos Externos, opcin ms, se elige la opcin bases de datos de ODBC y a
continuacin se siguen los pasos del asistente. Despus, se elige la opcin de vincular
al origen de datos creando una tabla vinculada, y nalmente, se selecciona la DSN
creada anteriormente desde la pestaa Origen de datos de equipo.
<> Actividad 5.1: Descarga desde la pgina web de mysql wwmmysql .org, apar-
tado Downloads, connectors, el conector ODBC para MySQL. Instlalo en tu
ordenador y Conctate a la base de datos jardinera de la mquina virtual de
prcticas disponible en wwwgarcetaes. Si lo preeres, Conctate a algn otro ser-
vidor que tengas disponible. (Asegrate, en ese caso, de tener desactivada la opcin
188
Captulo 5. Tratamiento de los datos
bind-address del servidor mysql en el chero / etc /mysql / my.cnf para poder conectar
desde fuera de la propia mquina virtual).
Creu 01:3: enema: HQVVHC. ae nu ue nox
,7; 7 n, n: a ** me o
A. umvolml v &#39; su onoenoenaooaowwo Mo-euovdenno
m: ss Ene! una de v. wE-conwones Ene!
Snavebmm Lgf}: _quruncas 7 gNowbvvedongeneowm Too Dowpan
Irporay Wdegmkm aseoecaosnnmen Sue-n
"3V lrlnernv n nncuinr n un: tuu de nos th
,99m3 g, n, m, no! ejemplo una nu ne emos de SQL Se t
:1 panama-no HTML
lmccrur a nnzum a un euumenw HTML
Selecoone el origen y el destno de los datos.
amemrvnmdmdeduenvucerwbsdomsenhbasedeomxui
mpwhreiuboldehumninevlbhhdehbnc v
sselememesoeeudamnsrmnmmbaeris-daopmewec --
nophonortndmwswhosveuzuosmmwxmaeaw -
densidad.
encsrghccensuvawiwvuwodrvnbrndd
datosucllshmserekyrvenbbseae
&#39;EEEEEh6En29-b
Accesscreruwuveuuermtwimvi-nxabsamue -
mdommvvusvu.
cnwbnurnhndosenbsnnmsenkznnsnreew
l Amt! 1 (mehr
Figura 5.5: Vnculo de INIySQL a Access.
5.2. La sentencia INSERT
La sentencia INSERT de SQL permite insertar una la en una tabla, es decir,
aadir un registro de informacin a una tabla.
El formato de uso es muy sencillo:
INSERT [INTO] nombre_tab1a [(nombre_columna, . ..)]
VALUES ({expr I DEFAULT},...)
nombre_tabla es el nombre de la tabla donde se quiere insertar la la. Despus
del nombre de la tabla, de forma optativa, se pueden indicar las columnas donde
se va a insertar la informacin. Si se especican las columnas, la lista de valores
(VALUES) a insertar se asociar correlativamente con los valores a las columnas
indicadas. Si no se especican las columnas, la lista de valores se escribir conforme
al orden de las columnas en la denicin de la tabla. A continuacin se muestran
unos cuantos ejemplos:
desc mascotas;
+ ------- --+ ----------- --+ ---- --+-----+ ------- --+
I Field I Type I Null I Key I Default I
189
Bases de Datos
varchar(50)

varchar(50)

varchar(9)
#INSERT especificando la lista de columnas
INSERT INTO mascotas (Codigo, Nombre, Raza)
VALUES

(1,Pequitas,Gato Comn Europeo)
Este tipo de INSERT, hace corresponder a la columna Codigo el valor 1, a la
columna Nombre el valor Pequitasy a la columna raza el valor Gato Comn Eu-
ropeo. La columna cliente, queda con un valor NULL, puesto que no se ha indicado
un valor.
#INSERT sin especificar la lista de columnas.
INSERT INTO mascotas VALUES
(2, Ca1cetines, Gato Comn Europeo, 59932387L)
En este caso, al no especicarse la lista de columnas, hay que indicar todos los
valores para todas las columnas en el orden en que estn denidas las columnas en
la tabla.
#INSERT con columnas con valores por defecto
INSERT INTO vehiculos VALUES (1215 BCD,To1edo TDI, DEFAULT);
Aqu, se ha usado el valor DEFAULT para asignar el valor por defecto a la
tercera. columna de la tabla vehculos, es decir, la columna marca tiene denida la
asignacin por defecto del valor Seat.
Si se construye una sentencia INSERT con ms campos en la lista de valores que
el nmero de columnas especicadas (o nmero de columnas de la tabla) el SGBD
informar del error.
#INSERT Erronea
insert into vehiculos (Matricula,Mode1o,Marca)
VALUES (4123 BFH,Ibiza);
ERROR 1136 (21SO1): Column count doesnt match value count at row 1
190
Captulo 5. Tratamiento de los datos
5.3. La sentencia INSERT extendida
La sintaxis extendida de INSERT para gestores tipo MySQL es la siguiente:
INSERT [INTO] nombre_tabla [(nombre_co1umna,...)]
VALUES ({expr I DEFAULT},...),(...),...
Los puntos suspensivos del nal indican que se puede repetir varias veces la lista de
valores. As, MySQL admtira algo del estilo:
insert into vehiculos (Matricula,Mode1o,Marca)
VALUES (4123 BFH,Ibiza,Seat),
(1314 FHD,To1edo,Seat),
(3923 GJS,Len,Seat);
5.4. INSERT ySELECT
Una variante de la sentencia INSERT consiste en una utilizar la sentencia SE-
LECT para obtener un conjunto de datos y, posteriormente, insertarlos en la tabla.
INSERT
[INTO] nombre_tabla [(nombre_co1umna,...)]
SELECT ... FROM ...
Se puede ejecutar la siguiente consulta:
#Inserta en una tabla Backup todos los vehculos
INSERT INTO Backupvehiculos
SELECT * FROM vehiculos;
La sentencia SELECT debe devolver tantas columnas como columnas tenga la
tabla donde se introduce la informacin. En el ejemplo anterior, la tabla Backup-
Vehiculos tiene una estructura idntica a la tabla vehculos.
Se puede ver, adems, que la sentencia SELECT puede ser tan compleja como
se desee, usando ltros, agrupaciones, ordenaciones, etc.
191
Bases de Datos
5.5. La sentencia UPDATE
La sentencia UPDATE de SQL permite modicar el contenido de cualquier co-
lumna y de cualquier la de una tabla. Su sintaxis es la siguiente:
UPDATE nombre_tab1a
SET nombre_col1=expr1 [, nombre_co12=expr2 ]
[WHERE filtro]
La actualizacin se realiza dando a las columnas nombre_col1, nombre_col2...
los valores exprl, expr2,... Se actualizan todas las las seleccionadas por el ltro
indicado mediante la clusula WHERE. Esta clusula WHERE, es idntica a la que
se ha utilizado para el ltrado de registros en la sentencia SELECT.
Por ejemplo, si se desea actualizar el equipo de Pau Gasolporque ha chado
por otro equipo, por ejemplo, los Knicks, habra que ejecutar la siguiente sentencia:
UPDATE jugadores SET Nombre_equipo=Knicks
WHERE Nombre=Pau Gasol;
Query DK, 1row affected (0.02 sec)
Rows matched: 1Changed: 1Warnings: O
El gestor informa de que el ltro seleccion una la, y que, por tanto, cambi 1
la, en este caso, la columna Nombre_equipo de esa la seleccionada.
Es posible cambiar ms de una Columna a la vez:
UPDATE jugadores SET Nombre_equipo=Knicks, Peso=21O
WHERE Nombre=Pau Gasol;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1Changed: 1 Warnings: 0
Si se omite el ltro, el resultado es la Inodicacin de todos los registros de la
tabla, por ejemplo, para cambiar el peso de los jugadores de la NBA de libras a
kilos:
UPDATE jugadores SET Peso=Peso*0.4535;
192
Captulo 5. Tratamiento de los datos
5.6. La sentencia DELETE
En SQL se utiliza la sentencia DELETE para eliminar las de una tabla. Su
sintaxis es:
DELETE FROM nombre_tab1a
[WHERE filtro]
El comando DELETE borra los registros seleccionados por el ltro WHERE, que
es idntico al de la sentencia SELECT.
Si se desea borrar al jugador Jorge Garbajosa de la base de datos, habra que
escribir la siguiente sentencia:
DELETE FROM jugadores WHERE Nombre=Jorge Garbajosa;
Query OK, 1row affected (0.01 sec)
Si se omite el ltro, el resultado es el borrado de todos los registros de la tabla:
DELETE FROM jugadores;
Query OK, 432 rows affected (2.42 sec)
5.7. La sentencias UPDATE y DELETE con sub-
consultas
Es posible actualizar o borrar registros de una tabla ltrando a travs de una sub-
consulta. La nica limitacin es que hay gestores que no permiten realizar cambios
en la tabla que se est leyendo a travs de la subconsulta.
Por ejemplo. si se desea eliminar los empleados Representante Ventas que no
tengan clientes se podra codicar:
DELETE FROM Empleados
WHERE CodigoEmp1eado Not in
(SELECT CodigoEmp1eadoRepVentas
FROM Clientes)
AND Puesto=Representante Ventas;
193
Bases de Datos
No sera posible. sin embargo, escribir una sentencia de este tipo para borrar los
clientes con LimiteCreditoz, puesto que se leen datos de la misma tabla que se
borran:
DELETE FROM Clientes
WHERE CodigoC1iente in
(SELECT Codigocliente
FROM Clientes WHERE LimiteCredito=0);
ERROR 1093 (HY000): You cant specify target table Clientesfor update
in FROM clause
5.8. Borrado y modicacin de registros con re-
laciones
Hay que tener en cuenta que no siempre se pueden borrar o modicar datos:
Considrese por ejemplo, que un cliente llama a una. empresa pidiendo darse de baja
como cliente, pero el cliente tiene algunos pagos pendientes. Si el operador de la
BBDD intenta eliminar el registro (DELETE), el SGBD debera informar de que no
es posible eliminar ese registro puesto que hay registros relacionados.
O por ejemplo, se desea cambiar (UPDATE) el nombre de un equipo de la NBA
(que es su clave primaria), qu sucede con los jugadores? Tambin habr que cam-
biar el nombre del equipo de los jugadores, puesto que el campo Nombre_Equipo es
una clave fornea.
En este punto, hay que recordar las clusulas REFERENCES de la sentencia
CREATE TABLE para crear las relaciones de clave fornea-clave primaria de alguna
columna de una tabla:
definicimreferencia:

REFERENCES nombre_tab1a[(nombre_columna, .. .)]
[ON DELETE opcin_referencia]
[DN UPDATE opcin_referencia]
opcin_referencia:

CASCADE I SET NULL I ND ACTION
Las clusulas ON DELETE y ON UPDATE personalizan el comportamiento de
estos dos casos. Si por ejemplo, se intenta eliminar un registro con otros registros
194
Captulo 5. Trataznientode losdatos
relacionados, y se ha seleccionadola opcin ON DELETE NO ACTION y ON
UPDATE NO ACTION el comportamientoserael siguiente:
#dos tablas relacionadas en mysql
#han de ser innodb para soportar FOREING KEYS
CREATE TABLE clientes (
dni varchar(15) PRIMARY KEY,
nombre varchar(50),
direccion varchar(50)
) engine=innodb;
CREATETABLEpagos_pendientes(
dni varchar(15),
importe double,
FOREIGN KEY(dni) REFERENCES clientes(dni)
on delete NO ACTION
on update NO ACTION
) engine=innodb;
#un cliente y dos pagos pendientes
INSERT INTO clientes
VALUES(5555672L,Pepe Cifuentes,C/Los almendros,23);
INSERT INTO pagos_pendientes VALUES(5555672L,500);
INSERT INTO pagos_pendientes VALUES(5555672L,234.5);
#Se intenta borrar el cliente y no es posible
DELETE FROM clientes WHERE dni=5555672L;
ERROR1451 (23000): Cannot delete or update a parent row:
a foreign key constraint fails ( gestion/pagos_pendientes ,
CONSTRAINT pagos_pendientes_ibfk_1
FREIGN KEY ( dni ) REFERENCES &#39;clienteS (&#39;dni ))
#Se intenta modificar el dni del cliente y no lo permite
UPDATE clientes set dni=55555555L WHERE dni=5555672L;
ERROR1451 (23000): Cannot delete or update a parent row:
a foreign key constraint fails ( gestion/pagos_pendientes ,
CONSTRAINT pagos_pendientes_ibfk_1
FOREIGN KEY ( dni ) REFERENCES clientes ( dni ))
#de igual modo si se intenta borrar la tabla clientes,
#tampoco podemos
DROP TABLE clientes;
ERROR1217 (23000): Cannot delete or update
a parent row: a foreign key constraint fails
Sinembargo,si la creacinde la relacinestuviesepersonalizadaconlasopciones
ON UPDATE CASCADE y ON DELETE CASCADE, el comportamientosera:
195
Bases de Datos
#dos tablas relacionadas en mysql
create table clientes (
dni varchar(15) primary key,
nombre varchar(50),
direccion varchar(50)
) engine=innodb;
create table pagos_pendientes(
dni varchar(15),
importe double,
foreign key (dni) references c1ientes(dni)
on delete CASCADE on update CASCADE
) engine=innodb;
#un cliente y dos pagos pendientes
INSERT INTO clientes
values (5555672L,Pepe Cifuentes,C/Los a1mendros,23);
INSERT INTO pagos_pendientes VALUES (5555672L,500);
INSERT INTO pagos_pendientes VALUES (5555672L,234.5);
#se borra el cliente...
DELETE FROM clientes WHERE dni=5555672L;
Query DK, 1 row affected (0.00 sec)
#adems, se verifica que ha borrado en cascada sus pagos pendientes.
SELECT * FROM pagos_pendientes;
Empty set (0.00 sec)
#si en lugar de borrar el cliente, se hubiera cambiado el dni:
UPDATE clientes set dni=55555555L WHERE dni=5555672L;
Query OK, 1 row affected (0.02 sec)
#ha cambiado el dni de los pagos en cascada.
SELECT * FROM pagos_pendientes;
+--------- --+ ------- --+
I importe I
+ --------- --+ ------- --+
I 55555555L I
I 55555555L I 234.5 I
+ --------- --+ ------- --+
Recuerda. En Oracle. solo existe la clusula ON DELETE. Para implemen-
tar ON UPDATE. se debe generar un TRIGGER (Vase Captulo 6)
196
Captulo 5. Tratamiento de los datos
<> Actividad 5.2: Crea las tablas de mascotas y clientes con la opcin ON UP-
DATE y ON DELETE a SET NULL y comprueba el resultado de ejecutar las
inserciones, actualizaciones y borrados de los ejemplos anteriores.
5.9. Transacciones
Un SGBD actualiza mltiples datos a travs de una transaccin. Una transaccin
es un conjunto de sentencias SQL que se tratan como una sola instruccin (atmica).
Una transaccin puede ser conrmada (commit). si todas las operaciones individua-
les se ejecutaron correctamente, o, abortada (rollback) a la mitad de su ejecucin si
hubo algn problema (por ejemplo, el producto pedido no est en stock, por tanto
no se puede generar el envo). Trabajar con transacciones puede ser esencial para
mantener la integridad de los datos. Por ejemplo, se puede dar el caso de que se
descuenta el stock de un producto antes de proceder a su envo, pero cuando se va a
generar la cabecera del pedido, la aplicacin cliente sufre un corte en las comunica-
ciones y no da tiempo a generarlo. Esto supone una prdida de stock. La transaccin
garantiza la atomicidad de la operacin: O se hacen todas las operaciones, o
no se hace ninguna.
Generalmente, cuando se conecta con un cliente a un SGBD, por defecto est ac-
tivado el modo AU TOCOMMI T =ON, es decir, cada comando SQL que se ejecute,
ser considerado como una transaccin independiente. Para activar las transacciones
de mltiples sentencias hay que establecer el modo A UTOCOMMI T=OF F.A partir
de ese momento, todos los comandos SQL enviados al SGBD tendrn que terminarse
con una orden COMMIT o una orden ROLLBACK. De este modo, se asegura la
integridad de los datos a un nivel ms alto. Muchos SGBD requieren de una orden
START TRANS/l CTI ON o START WORK para comenzar una transaccin y otros
lo hacen de forma implcita al establecer el modo autocommit=off.
#MySQL, 3 formas para comenzar una transaccin:
SET AUTDCOMMIT=O; #6
START TRANSACTIDN; #6
BEGIN WORK;
--Oracle:
SET AUTOCOMIT OFF
Para terminar una transaccin, tanto en MySQL como en ORACLE, hay que acep-
tar, o rechazar los cambios mediante:
197
Bases de Datos
#La palabra clave WORK es opcional
COMMIT WORK; #Acepta los cambios.
RLLBACK WORK; #Cancela los cambios
Cualquier conjunto de sentencias SQL se considera cancelado si termina abrupta-
mente la sesin de un usuario sin hacer COl\Il\IIT. Un ejemplo de transaccin en
MySQL sera la siguiente:
SET AUTCDMMIT 0;
#se actualiza el stock
UPDATE Productos SET Stock=Stock-2 WHERE CodigoProducto=AAAF102;
#se inserta la cabecera del pedido
INSERT INTO Pedidos VALUES
(25,now(),Francisco Garcia,Pendiente de Entrega);
#se inserta el detalle del pedido
INSERT INTO Deta11ePedidos
(CodigoPedido,CodigoProducto,Unidades) VALUES
(25,AAAF102,2);
#aceptar transaccin
COMMIT WORK;
5.10. Acceso concurrente a los datos
Cuando se utilizan transacciones, pueden suceder problemas de concurrencia en
el acceso a los datos, es decir, problemas ocasionados por el acceso al mismo dato
de dos transacciones distintas. Estos problemas estn descritos por SQL estndar y
son los siguientes:
Dirty Read (Lectura Sucia). Una transaccin lee datos escritos por una transac-
cin que no ha hecho COMMIT.
Nonrepeateable Read (Lectura No Repetible). Una transaccin vuelve aleer
datos que ley previamente y encuentra que han sido modicados por otra
transaccin.
Phantom Read (Lectura Fantasma). Una transaccin lee unos datos que no
existan cuando se inici la transaccin.
Cuando se trabaja con transacciones, el SGBD puede bloquear conjuntos de datos
para evitar o permitir que sucedan estos problemas. Segn el nivel de concurrencia
198
Captulo 5. Tratamiento de los datos
que se desee, es posible solicitar al SGBD cuatro niveles de aislamiento. Un nivel de
aislamiento dene cmo los cambios hechos por una transaccin son visibles a otras
transacciones:
Read Uncommited (Lectura no acometida). Permite que sucedan los tres pro-
blemas. Las sentencias SELECT son efectuadas sin realizar bloqueos, por
tanto, todos los cambios hechos por una transaccin pueden verlos las otras
transacciones.
Read Commited (Lectura acometida). Los datos ledos por una transaccin
pueden ser modicados por otras transacciones. Se pueden dar los problemas
de Phantom Read y Non Repeteable Read.
Repeateable Read (Lectura Repetible). Tan solo se permite el problema del
Phantom Read. Consiste en que ningn registro ledo con un SELECT se puede
cambiar en otra transaccin.
Serializable. Las transacciones ocurren de forma totalmente aislada a otras transac-
ciones. Se bloquean las transacciones de tal manera que ocurren unas detrs de
otras, sin capacidad de concurrencia. El SGBD las ejecuta concurrentemente
si puede asegurar que no hay conflicto con el acceso a los datos.
En MySQL, las tablas innodb tienen el nivel de aislamiento por defecto esta-
blecido en REPETEABLE READ, y se puede alterar cambindolo en el chero de
conguracin mycnf o ejecutando:
SET TRANSACTION ISLATION
LEVEL {READ UNCMMITTED I READ COMMITTED
I REPEATABLE READ I SERIALIZABLE}
En Oracle, el nivel por defecto es READ COMMI TED y, adems de este, solo
permite SERIALIZABLE. Se puede cambiar ejecutando el comando:
SET TRANSACTIDN ISLATIDN LEVEL {READ CMMITTEDISERIALIZABLE};
Sabas que . .. 7Algunas transacciones pueden quedar interbloqueadas
dependiendo del nivel de aislamiento seleccionado. Esta situacin de interblo-
queo, o deadlock entre dos transacciones. consiste en que ninguna de ellas puede
seguir ejecutndose porque la primera intenta acceder a un bloque de datos que
tiene bloqueada la segunda, y la segunda, intenta acceder a un bloque de datos
que tiene bloqueada la primera. En esta situacin de interbloqueo, el SGBD
elimina a una de las dos transacciones. siendo la vctima del interbloqueo la
que hace rollback de sus operaciones.
199
Bases de Datos
5.10.1. Ejemplo de problemas en el acceso concurrente
A continuacin se muestran, mediante una serie de consultas en MySQL cmo
reproducir los problemas tpicos de la concurrencia en bases de datos. Primero, para
consultar el tipo de aislamiento y cambiarlo a read uncommited, que permite que se
produzcan los tres problemas, se puede ejecutar los comandos:
#consu1ta tipo de aislamiento
mysql) select @@tx_isolation;
+ -+
I @@tx_iso1ation
+ --------------- -+
I REPEATABLE-READ I
+ --------------- -+
1row in set (0.00 sec)
#estab1ecer el tipo de aislamiento a read uncommitted
mysq1> set session transaction isolation level read uncommitted;
Query DK, 0 rous affected (0.00 sec)
Para el siguiente ejemplo se utilizar la tabla coches creada con el motor innodb:
create table coches (nombre varchar(20)) engine=innodb;
insert into coches values (toyota),(audi),(seat);
La lectura no repetible
A continuacin, dos sesiones distintas, de dos usuarios distintos, consultan la
base de datos en el siguiente orden para producir una lectura no repetible:
Lectura no repetible-1
#sesin 1
mysq1> start transaction;
Query DK, 0rows affected (0.00 sec)
mysq1> select t from coches;
+ ------ -+
Inombre I
+ ------ -+
I toyota I
Iaudi I
+ ------ -+
3 rows in set (0.00 sec)
200
Captulo 5. Tratamiento de los datos
La sesin 1 inici una transaccin para hacer operaciones y segundos despus una
segunda sesin realiza cambios en la tabla mientras la transaccin contina en la
sesin 1:
Lectura no repetible-2
#sesin 2
mysq1> update coches set nombre=vo1vovhere nombre=audi;
Query DK, 1row affected (0.00 sec)
Rows matched: 1Changed: 1Warnings: 0
La sesin 2ha realizado un cambio en los datos, por tanto, la transaccin de la
primera sesin no ser capaz de reproducir la situacin anterior puesto que se ha
producido una lectura no repetible:
Lectura no repetible-3
#sesi6n 1
mysq1> select *from coches;
+------ --+
I nombre I
+ ------ --+
I toyota I
I volvo |
+ ------ --+
3rows in set (0.00 sec)
La lectura fantasma
Si a continuacin, el cliente 2 inserta un nuevo registro en la tabla, la sesin 1
podr inmediatamente ver los cambios. Esto es lo que se llama una lectura fantasma:
Lectura fantasma-1
#cliente 2
mysq1> insert into coches values (renault);
Query OK, 1row affected (0.00 sec)
Lectura fantasma-2
#c1iente 1
mysq1> select *from coches;
rovs in set (0.00 sec)
201
Bases de Datos
La potencial situacin problemtica tanto de la lectura no repetible como de la
lectura fantasma es que datos que participan en una transaccin cambian o aparecen
sin previo aviso, pudiendo provocar que la transaccin genere informacin que no es
del todo ntegra.
La lectura sucia
El ltimo problema, yms grave, es el de la lectura sucia. A continuacin, si-
guiendo con las dos sesiones de los ejemplos anteriores, se reproduce esta situacin.
En este caso, la sesin 2 inicia una transaccin y realiza operaciones DML sobre los
datos:
Lectura sucia-1
#sesin 2
mysq1> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysq1> insert into coches values (alfa);
Query DK, 1row affected (0.00 sec)
mysq1> update coches set nombre=hondawhere nombre=toyota;
Query OK, 1row affected (0.00 sec)
Rovs matched: 1Changed: 1Harnings: 0
Despus, la sesin 1 lee los datos que hay en la tabla:
Lectura sucia-2
#sesin 1
mysq1> select t from coches;
rows in set (0.00 sec)
Se puede observar, que gracias a esa lectura la sesin 1 puede generar nueva informa-
cin o realizar algn trabajo que implique trabajar con la informacin modicada
por la sesin 2. Pero, supngase que ahora, la sesin 2realiza un rollback de sus
operaciones:
202
Captulo 5. Tratamiento de 10s datos
Lectura sucia-3
#sesin 2
mysq1> rollback;
Query OK, 0rows affected (0.00 sec)
Se puede observar que la sesin 1, aunque ya no puede acceder a la informacin que
fue insertada por la sesin 2, puesto que se ha efectuado un rollback, puede haber
estado trabajando con datos, que, en realidad, nunca han estado en la base de datos.
Esto, es una lectura sucia:
Lectura sucia-4
sesin 1
mysq1> select *from coches;
rows in set (0.00 sec)
5.11. El acceso a la informacin
Cuando se administra la. seguridad en el acceso a informacin de una base de
datos, es comn utilizar dos tipos de seguridad, la integrada con el sistema operativo
y la proporcionada por el SGBD (nativa). En la seguridad integrada, se suele contar
con los usuarios de un sistema de dominio o un servicio de directorio (LDAP) para
proporcionar el acceso a determinados recursos del gestor de base de datos. En
la seguridad nativa del SGBD, es el propio software servidor el que proporciona
los mecanismos mediante los cuales se autoriza a un usuario a utilizar distintos
elementos de bases de datos.
El alcance de este libro es tratar la seguridad nativa de un SGBD a travs de
SQL explicando el funcionamiento bsico de la seguridad en MySQL, Oracle y DB2.
5.12. Las vistas
Una vista es una tabla sin contenido, totalmente virtual, que devuelve las las
resultado de ejecutar una consulta SQL. La diferencia con una consulta ejecutada
directamente es que, mientras cada sentencia SQL enviada al SGBD tiene que pasar
203
Bases de Datos
por un proceso de compilacin, la vista es una consulta cuya denicin ha sido
almacenada previamente y que ya ha sido compilada, siendo por tanto el tiempo de
ejecucin bastante menor. Tambin tiene una implicacin importante en el hecho
de que un usuario podra no tener acceso a la informacin de varias tablas y, sin
embargo, s tener acceso a la Vista que consulta esas tablas, proporcionando de esta
manera un acceso controlado solo a detern1inadas las y columnas de esas tablas.
r Usuario de Madrid
L a
xstaii j
CLIENTES

DE
Figura 5.6: Vistas.
Por ejemplo, en una tabla de clientes, un usuario de una ocina de Madrid
podra tener solo acceso a la informacin de los clientes de Madrid, y tan solo a
ciertos campos. De esta manera, no tendra acceso a ningun campo de la tabla de
clientes y, sin embargo, podra tener acceso a una vista que consulte aquellos clientes
cuya provincia sea Madrid.
La sintaxis para crear una vista es la siguiente:
CREATE [OR REPLACE] VIEW [esquema.]nombre_vista [(1ista_co1umnas)] AS
sentencia_se1ect
La ejecucin del CREATE VIEWprovoca que se compile la sentencia select y que
se almacene con el nombre nombremista. Los nombres de las columnas de la vista
se pueden especicar mediante lista_columnas. Si se especica la lista de columnas,
cada columna tendr el alias correspondiente, si no, se obtendr el nombre devuelto
por la consulta. Si la vista ya existe, se puede reemplazar con OR REPLA CE.
204
Captulo 5. Tratamiento de los datos
Un ejemplo de CREATE VIEW es el siguiente:
CREATE VIEW nba.jugadoresMiami AS
SELECT Nombre, Posicion FROM nba.jugadores WHERE Nombre_equipo=HEAT;
SELECT * from nba.jugadoresMiami;
Adems, se pueden crear vistas para que los usuarios no expertos puedan acceder
de forma fcil a la informacin, proporcionndoles, a travs de una vista, informacin
obtenida a travs de una sentencia SQL compleja:
CREATE VIEW VistaPedidos (CodigoPedido,C1iente,Tota1) AS
SELECT CodigoPedido, NombreC1iente, SUM(Cantidad*PrecioUnidad)
FROM Clientes NATURAL JOIN Pedidos NATURAL JOIN Deta11ePedidos
GROUP BY CodigoPedido;
Para eliminar una vista se hace uso del comando DROP VIEW:
DROP VIEW [esquema.]nombre_vista;
Hay pequeas variaciones en la sintaxis de los comandos CREATE VIEW y
DROP VIEW dependiendo del SGBD que se utilice. Adems, se dispone tambin
de un comando ALTER VIEW para hacer modicaciones a la denicin de la vista.
Para ms informacin sobre estas variaciones, consultar los manuales de cada gestor.
5. 13. Los usuarios
Para crear cuentas de usuario que permitan a los usuarios acceder a ciertos
objetos con un nivel determinado de privilegios hay que hacer uso del comando
CREATE USER.
CREATE USER nombre_usuario IDENTIFIED BY password [opciones];
Esta sencilla sentencia crea una cuenta usuario que permite la autenticacin
de un usuario en el SGBD a traves de la password identicada mediante la opcin
IDENTIFIED BY. Esta sintaxis de create user es vlida tanto para MySQL como
205
Bases de Datos
para Oracle, aunque a Oracle se le pueden incluir multitud de opciones extras para
dar caractersticas adicionales, como la asignacin de cuota para aadir informacin
a un tablespace o bloquear la cuenta temporalmente. En DB2 no se utiliza el co-
mando CREATE USER puesto que la mayor parte de la gestin de usuarios se hace
de forma integrada con el Sistema Operativo. A continua.cin se muestran ejemplos
de creacin de usuarios:
#creacin de usuario en MySQL
CREATE USER paco IDENTIFIED BY o99238kjkA;
--creacin de usuario en Oracle
CREATE USER paco
IDENTIFIED BY o99238kjkA
DEFAULT TABLESPACE Nominas
QUTA UNLIMITED DN Nominas
ACCUNT LOCK;
<> Actividad 5.32 Crea los usuarios Pedro y Javier en los SGBD mysql y Oracle
con passwords apropiadas. En Oracle, asigna quota de 1MB en algn tablespace.
Para eliminar usuarios, se puede utilizar la sentencia DROP USER:
DRP USER nombre_usuario [CASCADE];
En Oracle, se puede incluir el token CASCADE para indicar que junto con el
usuario se borren todos los objetos de su esquema. En l\iIySQL, se pueden borrar
la vez varios usuarios, separando los nombres de los usuarios mediante comas.
Para modicar usuarios, Oracle utiliza el comando ALTER USER, que no est dis-
ponible en MySQL. Este comando ALTER USER usa las mismas opciones que
CREATE USER.
--Modificacin de usuario en Oracle
ALTER USER Paco
IDENTIFIED BY nueva_passDEFAULT Tablespace Facturas;
En MySQL hay que modicar los usuarios actualizando sus datos en la propia
tabla mysq1.user del sistema. Por ejemplo, para cambiar el host desde el que el
206
Captulo 5. Tratamiento de los datos
usuario Javier se puede conectar, habra que ejecutar la siguiente sentencia. Cuando
en MySQL se modica algn permiso modicando el contenido de las tablas del
sistema, hay que ejecutar adems el comando FLUSH PRIVILEGES para forzar al
gestor a volver leer las tablas de permisos y que los cambios en los permisos sean
efectivos desde ese momento.
#Modificacin de usuario en mysql.
UPDATE mysql.user
SET host=192.168.3.1 where user=JAVIER;
FLUSH PRIVILEGES;
En MySQL tambin se puede renombrar un usuario conservando todos sus pri-
vilegios utilizando el comando RENAME USER ycambiar la password mediante el
comando SET PASSWORD:
#Modificacin de usuarios en MySQL. Cambiar nombre y password al usuario Paco
RENAME USER Paco@1oca1host to PacoSanchez@1ocalhost;
SET PASSWORD for Pacoclocalhost =PASSw0RD(nueva_pass);
<> Actividad 5.4: Ejecuta el siguiente comando para cambiar la password de un
usuario en mysql:
UPDATE mysql.user
SET Password =PASSWORD("nueva_pwd")
WHERE user=paco AND host=loca1host;
o Actividad 5.5: Cambia la password de los usuarios Pedro y Javier creados en
Oracle y bloquea sus cuentas mediante la opcin ACCOUNT UNLOCK.
5. 14. Los privilegios
Un usuario puede obtener privilegios para manipular objetos de una base de
datos con el comando GRANT. Asimismo, se le pueden denegar permisos con el
207
Bases de Datos
comando REVOKE. Estos comandos varian en su sintaxis dependiendo del SGBD
que se est usuando puesto que el sistema de seguridad de cada uno es distinto.
Adems, inuye tambin la forma en que el subsistema de permisos del SGBD se
integra con el sistema operativo.
5.14.1. El sistema de privilegios de MySQL
La sintaxis del comando GRANT para MySQL es la siguiente:
GRANT tipo_privi1egio [(co1umnas)] [, tipo_privi1egio [(co1umnas)]]
ON {nombre_tab1a I * I *.* I base_datos.* I base_datos.nombre_tabla}
T0 usuario [IDENTIFIED BY [PASSWORD] password]
[, usuario [IDENTIFIED BY [PASSWORD] password]]
[WITH opcion [opcion]
opcion =
GRANT DPTION
| MAX_QUERIES_PER_HOUR count
I MAX_UPDATES_PER_HOUR count
I MAX_CDNNECTINS_PER_HDUR count
I MAX_USER_CONNECTIONS count
En MySQL se puede otorgar a un usuario permisos para hacer cualquier opera-
cin a nivel de host, de base de datos, de tabla o de columna. As, es posible asignar.
por ejemplo, permisos de SELECT sobre las columnas NombreCliente, Direccin y
Telefono de la tabla clientes:
GRANT SELECT (Nombrecliente,Telefono,Ciudad)
ON Clientes TU paco@1oca1host;
Con esta sentencia el usuario paco@localhost solo podr seleccionar las colum-
nas NombreCliente, Telefono yCiudad de la tabla clientes, sindole denegada una
consulta del tipo select * from clientes.
tipo_privi1egio es la clase de permiso que puede ser a otorgar, tpicamente pueden
ser select, insert, update. . . .Pueden ser de los ms variados. En el Cuadro 5.3 de
la pgina 210 hay algunos ejemplos de los permisos disponibles en MySQL.
208
Captulo 5. iatamiento de los datos
Estos tipos de privilegio se pueden aplicar a las siguientes expresiones:
Expresin Se aplica el permiso a
nombre_tabla La tabla nombre_tab1a
Todas las tablas de la base de datos que se est usando
*.* Todas las tablas de todas las bases de datos
base_datos.* Todas las tablas de la base de datos db_name
base_datos.nombre_tabla Solo la tabla nombre_tabla de la base de datos db_name
Cuadro 5.1: Tipos de objetos a los que se puede otorgar permisos.
Finalmente con TO usuario se indica el usuario al que se quiere otorgar el
permiso. Si el usuario user no existe, se crea, opcionalmente con la password indicada
mediante la clusula identied by.
Adicionalmente, se puede indicar ciertas opciones precedidas de la clusula WITH:
Expresin
GRANT OPTION Permite conceder a otros usuarios los permisos
que tiene el usuario, por tanto, el administrador
debe ser muy cauto a la hora de conceder
esta opcin a los usuarios de la base de datos.
MAX_QUERIES_PER_HOUR count Permite restringir el nmero de consultas
por hora que puede realizar un usuario.
MAX_UPDATES_PER_HOUR count Permite restringir el nmero de modicaciones
MAX-CONNECTIONS_PER_HOUR count Permite restringir las conexiones
(logins) por hora que realiza un usuario.
MAX_USER-CONNECTIONS count APermite limitar el nmero de conexiones
simultneas que puede tener un usuario.
En cualquiera de las opciones MAX- si a count se le da el valor O. signica ilimitado.
Cuadro 5.2: Opciones adicionales a los permisos.
209
Bases de Datos
Privilegio Signicado
ALL [PRIVILEGES] Da todos los permisos simples excepto GRANT OPTION
ALTER Permite el uso de ALTER TABLE
ALTER ROUTINE Modica o borra rutinas almacenadas
CREATE Permite el uso de CREATE TABLE
CREATE ROUTINE Crea rutinas almacenadas
CREATE TEMPORARY
TABLES Permite el uso de CREATE TEMPORARY TABLE
CREATE USER Permite el uso de CREATE USER,
DROP USER, RENAME USER, y REVOKE.
Permite el uso de CREATE VIEW CREATE VIEW
DELETE Permite el uso de DELETE
DROP Permite el uso de DROP TABLE
EXECUTE Permite al usuario ejecutar rutinas almacenadas
FILE Permite el uso de SELECT INTO OUTFILE
y LOAD DATA INFILE
INDEX Permite el uso de CREATE INDEX y DROP INDEX
INSERT Permite el uso de INSERT
LOCK TABLES Permite el uso de LOCK TABLES en
tablas para las que tenga el permiso SELECT
PROCESS Permite el uso de SHOW FULL PROCESSLIST
RELOAD Permite el uso de FLUSH
REPLICATION CLIENT Permite al usuario preguntar dnde
estn los servidores maestro o esclavo
Necesario para los esclavos de replicacin
Permite el uso de SELECT
SHOW DATABASES muestra todas las bases de datos
Permite el uso de SHOW CREATE VIEW
Permite el uso de mysqladmin shutdown
Permite el uso de UPDATE
Sinnimo de no privileges,
permite nicamente la conexin al gestor
GRANT OPTION
Cuadro 5.3: Tipos de privilegios en mjysql.
REPLICATION SLAVE
SELECT
SHOW DATABASES
SHOW VIEW
SHUTDOWN

UPDATE
USAGE
10
Captulo 5. Tratamiento de los datos
Algunos ejemplos de consultas para asignacin de permisos en MySQL son los
siguientes:
#0torga permisos de select e insert a todas las tablas de nba
GRANT SELECT, INSERT on nba.* T0 paco@loca1host;
#0torga todos los privilegios a la tabla Clientes de jardineria
GRANT ALL PRIVILEGES on jardineria.C1ientes TD pacolocalhost;
#torga permisos de select a todas las tablas de todas las bases de datos
#permitiendo al usuario ceder esos permisos a otros usuarios
GRANT SELECT on *.* to paco@1oca1host WITH GRANT DPTIN;
#0torga permisos de SELECT, INSERT, UPDATE y DELETE con un lmite de 10
#consu1tas a la hora en la tabla jugadores de la nba
GRANT SELECT,INSERT,UPDATE,DELETE on nba.jugadores to paco@1oca1host
WITH MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HGUR 10
La sentencia revoke deniega permisos a un usuario sobre un objeto. A continuacin
se describe la sintaxis:
REVDKE tipo_privi1egio [(columnas)] [, tipo_privi1egio [(co1umnas)]]
ON {nombre_tabla I *I *.* I base_datos.* I base_datos.nombre_tab1a}
FROM usuario [, usuario]
La sintaxis es muy parecida a la de la sentencia grant, a continuacin se muestran
unos cuantos ejemplos:
#quita el permiso de select en la tabla jardineria.C1iente
revoke select on jardineria.Clientes from paco@localhost;
#e1imina el permiso ALL PRIVILEGES de todas las tablas
revoke all privileges on *.* from paco@1oca1host;
#quita los permisos de select e insert de todas las tablas de jardineria
revoke se1ect,insert on jardineria.* from paco@1ocalhost;
Otra forma de asignar y eliminar permisos en MySQL es utilizando las tablas
del catlogo de metadatos, es decir, las tablas de la base de datos mysql creada
en toda instalacin del SGBD y que almacena toda la informacin sobre todos los
211
Bases de Datos
ob jetos manejados por el gestor. En esta base de datos existen 5 tablas relacionadas
con el sistema de permisos de MySQL, user, db, host, tables-priv y columns_priv.
Estas tablas se pueden manipular manualmente con inserts y deletes para otorgar
y denegar permisos a nivel de usuario, base de datos, equipo, tablas y columnas
respectivamente.
A continuacin se ilustra cmo MySQL procesa una consulta. Al recibir la ins-
truccin SQL, se comprueba si el acceso a los diversos objetos estn autorizados en
cualquiera de estas tablas. Si ninguno de los niveles permite el acceso, la consulta
es denegada por falta de permisos.
5.14.2.
El sistema de privilegios de Oracle clasica los permisos en dos tipos, privilegios
del sistema y privilegios de objetos. Adems dene los siguientes conceptos:
uROLES Conjunto de privilegios que se pueden asignar a un determinado usua-
Grado "l: Consulta
de permisos a
Grado 2: Consulta
de permisos a
nivel db. y @host
Grado 3; Consulta
Grado 4: Consulta
dbiablacolumna
AUTORIZACIN

DE EJECUCION
DE CONSULTA
CONSULTA DE
PERMISOS EN
Va -&#39;- LA TABLAHSH
PERMISOS EN
LAS TABLAS
ob ha
PERMISOS EN
LA TABLAS
tables ariv
de permisos a
nivel dbiabla
o -n
PERMISOS EN
LA TABLAS
-,u .-
de permisos a
nivel
N0
ACCESO
/, DENEGADO
Figura 5.7: Estructura de permisos en mysql.
El sistema de privilegios de Oracle
rio. Un usuario puede pertenecer a mltiples roles.
212
Devuelve
resultados
Captulo 5. Tratamiento de los datos
IPERFILES Un perl es un conjunto de restricciones sobre el uso de recursos.
Cada usuario puede pertenecer a un nico perl.
De esta manera, Oracle permite asignar a un usuario privilegios del sistema, de
objetos, roles y perles, todo ello a travs de la sentencia GRANT:
GRANT privilegio [ON [esquema Jobjeto] T0 {usuario I rol I PUBLIC}
[WITH {GRANT I ADMIN} OPTION]
privilegio =
tipo_privi1egio [(co1umnas)] [, tipo_privi1egio [(co1umnas)]]
I privi1egio_sistema
I rol
El privilegio a otorgar puede ser de varios tipos:
IUn privilegio sobre un objeto a un usuario o rol. Si el privilegio es INSERT
o UPDATE se puede indicar sobre qu columnas se tiene el permiso. En este
caso, se debe incluir la clusula ON para indicar sobre qu objeto se va a
aplicar el permiso.
-- permiso de select y update en dos columnas de la tabla Clientes
GRANT SELECT, UPDATE (NombreC1iente, Telefono)
ON Jardineria.C1ientes To Javier;
-- todos los permisos sobre Pedidos al rol ADMINISTRACION
GRANT ALL PHIVILEGES UN Jardineria.Pedidos to ADMINISTRACION;
IUn privilegio de sistema sobre un usuario o rol.
--permiso para crear tablas
GRANT CREATE TABLE to Javier;
--permiso para crear tablas al rol ADMINISTRACION
GRANT CREATE TABLE to ADMINISTRACION;
IUn rol sobre un usuario u otro rol. El rol puede estar predenido (rol de
sistema.) o puede ser denido por el usuario.
--asignar Rol de acceso y consumo a otro Rol
GRANT CONNECT, RESOURCE to ADMINISTRACION;
213
Bases de Datos
Privilegio

ALTER DATABASE
ALTER SYSTEM
AUDIT SYSTEM
CREATE [ANY]
ALTER [ANY] objeto
SYSDBA
ANALYZE [ANY] objeto
"asignar el rol ADMINISTRACION a Javier
GRANT ADMINISTRACION to Javier;
I Un privilegiodeobjetoo sistemaa todoel mundo (PUBLIC).
--pemiso de acceso y consumo de recurso a todos
GRANT CONNECT, RESOURCE to PUBLIC;
--permiso de update sobre las columnas Nombre y email de empleados
GRANT UPDATE (Nombre, email) UN Jardineria.Emp1eados to Public;
Privilegio
ALL [PRIVILEGES
DELETE
INSERT
SELECT
UPDATE

REFERENCES

EXECUTE
ALTER
INDEX
Signi cado
Da todoslos permisossimplesincluido GRANT OPTION
Permite el uso de DELETE
Permite el uso de INSERT
Permite el uso de SELECT
Permite el uso de UPDATE
Permite crear claves forneas
Permite ejecutar un procedimiento, funcin, paquete.. .
Permite cambiar la de nicin de un objeto
Permite crear ndices de una tabla
l
Cuadro 5.4: Tipos de privilegiosde objeto en Oracle.


En


Permite ejecutar el comando ALTER DATABASE
Permite el uso de ALTER SYSTEM
Permite la auditora mediante la sentencia AUDIT
Permite el usode CREATE para un tipo de objeto
(TABLE, VIEW, PROCEDURE, USER, PROFILE, etc...)
Permite el usode ALTER para un tipo de objeto
(TABLE, VIEW, PROCEDURE, USER, PROFILE, etc...)
Permite ejecutar operacionesde parada
y puestaen marcha de la BBDD
Permite analizar un tipo de objeto
objeto
Cuadro 5.5: Tipos de privilegiosde sistemaen Oracle.
Las clusulas WITH GRANT OPTION oWITH ADMIN OPTION transmiten
la autorizacinde concedereseprivilegio de objeto o de sistemaa otro usuarioo
rol. Para denegarprivilegiossobreun objeto Oracle utiliza la sentenciaRE VOKE
N)14
Captulo 5. Tratamiento de los datos
REVOKE privilegio
[ON [esqnema.]objeto]
FROM {usuario I rol I PUBLIC}
privilegio =
tipo_privi1egio [(co1umnas)] [, tipo_privi1egio [(co1umnas)]]
I privi1egio_sistema
I rol
Algunos ejemplos de esta sentencia son los siguientes:
--Denegar permiso de select en Clientes al rol ADMINISTRACION
REVOKE SELECT ON Jardineria.C1ientes FROM ADMINISTRACION;
--Denegar rol CONNECT a todos
REVOKE CONNECT FROM PUBLIC;
--Denegar los roles ALMACEN YCONTABILIDAD AJavier;
REVOKE ALMACEN,CONTABILIDAD FROM Javier;
--Denegar todos los privilegios a Javier en la tabla Pedidos
REVOKE ALL PRIVILEGES ON Pedidos FROM Javier;
Cuando se elimina. un privilegio de un usuario, el SGBD elimina el permiso de
ese usuario de forma inmediata a l y a todos los usuarios a los que se les haya
concedido el privilegio con la opcin WITH GRANT o WITH ADMIN.
Los roles
Para simplicar la tarea de organizar los permisos, Oracle permite la creacin
de Roles con la sentencia CREATE ROLE:
CREATE ROLE nombre_ro1 [opciones_identificacion];
opciones_identificacion:
NOT IDENTIFIED
I IDENTIFIED

{BY password I EXTERNALLY I GLOBALLY I USING [esquema].package}
Al crear un rol, se puede especicar el tipo de autenticacin. Si se especica
NOT IDENTIFIED, el rol est autorizado por la base de datos y no es necesaria
ninguna contrasea para. activarlo, sin embargo si se especica IDENTIFIED, el
215
Bases de Datos
usuario debe ser autorizado antes de activar el rol. Dentro de IDENTIFIED existen
varias posibilidades:
- BY password, donde el usuario debe indicar la contrasea antes de activar el
papel.
nEXTERNALLY, para ser autorizado mediante un servicio externo (como el sistema
operativo).
I GLBALLY, que cede la autorizacin al servicio Oracle Security Service.
ISi se elige USING, se elige crear un rol de aplicacin segura, es decir, un rol
que solo puede ser activado por las aplicaciones que usen el paquete.
Cuando un usuario se conecta al SGBD, este otorga al usuario los permisos que
se le hayan concedido explcitamente mediante la orden GRANT y los permisos que
tengan los roles por defecto del usuario. Para asignar un rol por defecto a un usuario
se utiliza la sentencia ALTER USER de la siguiente forma:
ALTER USER usuario DEFAULT RDLE [opciones_ro1];
opciones_ro1:

rol [, rol] ...
I ALL [EXCEPT rol]
I NNE
Se puede anular el rol por defecto mediante la opcin N ON E, o habilitar todos los
roles mediante ALL, o todos menos uno mediante ALL EXCEPT rol, o conceder
varios separados por coma. Por ejemplo, para asignar los roles ADMINISTRACION
y CONTABILIDAD al usuario Javier:
GRANT Contabilidad,Administracion to Javier;
ALTER USER Javier DEFAULT ROLE ADMINISTRACION,CONTABILIDAD;
Finalmente, se puede utilizar tambin la sentencia SET ROLE para dotar mo-
mentneamente de ciertos privilegios a un usuario que tenga autorizado su uso. Por
ejemplo, se puede crear el rol ALMACEN, con todos los privilegios sobre la tabla
Productos y asignarselo al usuario Javier. Si el usuario Javier no activa el rol AL-
MACEN mediante SET ROLE y su contrasea, no podr disfrutar de sus privilegios
216
Captulo 5. Tratamiento de los datos
CREATE ROLE ALMACEN IDENTIFIED BY AlmacenPwd;
GRANT ALL Privileges UN Jardineria.Productos TD ALMACEN;
GRANT ALMACEN to Javier;
--conexin con el usuario Javier
SQL> select count(*) from Jardineria.productos;
select count(*) from Jardineria.productos

*
ERROR en lnea 1:
ORA-00942: la tabla o vista no existe
SQL> SET ROLE ALMACEN identified by A1macenPwd;
Rol definido.
SQL> select count(*) from Jardineria.productos;
Creacin de perles
Los perles se usan para limitar la cantidad de recursos del sistema o de la
base de datos disponibles para un usuario. Existe un perl llamado DEFAULT que
concede recursos ilimitados a todos los usuarios. Para evitar esto, se puede hacer
uso de la sentencia CREATE PROFILE para crear nuevos perles.
CREATE PROFILE perfil LIMIT recursos ...
recursos =
recurso {cantidad I UNLIMITED I DEFAULT }
I password
recurso =
SESSIONS_PER_USER
I CPU_PER_SESSION
I CPU_PER_CALL
I CONNECT_TIME
I IDLE_TIME
I LOGICAL_READS_PER_SESSION
LGICAL_READS_PER_CALL
I COMPOSITE_LIMIT
I PRIVATE_SGA
password =
parametro {cantidad I UNLIMITED I DEFAULT }
I PASSw0RD_VERIFY_FUNCTIDN {funcin I NULL I DEFAULT }
217
Bases de Datos
parametro =
FAILED_LGIN_ATTEMPTS

I PASSWORD_LIFE_TIME
I PASSWRD_REUSE_TIME
l PASSWRD_REUSE_MAX
|

I PASSWORD_LOCK_TIME

PASSWORD_GRACE_TIME
Los diferentes lmites que se pueden utilizar estn denidos en la siguiente tabla:
Lmite

SESSIONS_PER_USER
CPU.PER_SESSION
CPU_PER_CALL
CONNECT_TIME
IDLE_TIME
LOGICALBEADS_PER_SESSION
LOGICALBEADS-PER-CALL
PRIVATELSGA
COMPOSITELLIMIT
Flmcin
Nmero mximo de sesiones abiertas a la vez
por un usuario
Tiempo lmite para una sesin expresado
en centsimas de segundos
Tiempo lmite de respuesta. para una. llamada
(parse. fetch o ejecucin) en centsimas de segundos
Tiempo lmite total de una sesin,
expresado en minutos
Tiempo mximo de inactividad de una sesin
expresa.dos en minutos
Nmero mximo de bloques de datos leidos
en una sesin
Nmero mximo de bloques de datos leidos
en una llamada
Tamao de memoria que una sesin puede
reservar del espacio privado de memoria del SGA
Coste total en recursos de una sesin,
expresado mediante el promedio de ciertos parmetros
Cuadro 5.6: Tipos de recursos.
Por ejemplo, se puede crear el perl OPERADOR con los siguientes lmites:
CREATE PROFILE OPERADOR LIMIT
SESSINS_PER_USER 5
-- 5 sesiones concurrentes
CPU_PER_SESSION UNLIMITED --Tiempo de CPU ilimitado
IDLE_TIME 10
218
-- 10 minutos de inactividad
Captulo 5. Tratamiento de Ios datos
CONNECT_TIME 120 -- 2 horas totales de conexion
J
Tambin es posible alterar un perl mediante la sentencia ALTER PROFILE:
--modificar el perfil DEFAULT para que la password no caduque
alter profile DEFAULT LIMIT PASSWORD\_LIFE\_TIME Unlimited;
--modificar el perfil OPERADOR para que su limite de sesin sea de 1hora
-- y un mximo de 10 sesiones concurrentes
alter profile OPERADOR LIMIT CONNECT_TIME 60 SESSIONS_PER_USER 10;
Un perl se puede asignar en el momento de crear o modicar el usuario, por
ejemplo:
-- creacin de un usuario con el perfil OPERADOR
CREATE USER Francisco IDENTIFIED BY FrancisPwd
QUOTA UNLIMITED ON Users
PROFILE OPERADOR;
5.14.3. El sistema de privilegios de DB2
Desde el punto de vista de la seguridad, se puede decir que en DB2 existen tres
grandes puntos de gestin de los privilegios de acceso:
1. Autenticacin
2. Autorizacin
3. Privilegio
La autenticacin busca responder a las siguientes preguntas: quin puede acce-
der a la instancia o base de datos, dnde se vericar la password de usuario? En
DB2 los usuarios de autenticacin deben estar dados de alta en el sistema operati-
vo, es decir, que para resolver la primera pregunta, bastara con decir que solo los
usuarios del sistema pueden acceder a la instancia o base de datos, pero ojo!, los
usuarios pueden serlo del sistema local o de un sistema cliente remoto que est in-
tentando la conexin, esto sera as en funcin de cmo se dena la variada poltica
de autenticacin que dar respuesta a la segunda pregunta. La poltica de autenti-
cacin no solo permite o no la conexin desde clientes, sino que, entre otras cosas,
indica si habr encriptacin o no del usuario y password, e incluso de los datos
intercambiados durante la comunicacin con el servidor.
219
Bases de Datos
La autorizacin hace referencia al nivel de permisos con que un usuario materializa
el acceso a la instancia o base de datos. Tambin determina los comandos que el
usuario puede ejecutar, los datos que puede leer o modicar, o los tipos de objetos de
base de datos que se le permite crear, modicar o borrar. Todas estas consideraciones
estn preprogramadas en siete grupos de autorizaciones que pueden ser concedidos,
en funcin del caso, aun grupo de usuarios o a un usuario determinado.
ISYSADM: es el nico al que se le permite modicar los parmetros de la
instancia. Comparable a la autoridad del usuario root en Unix, puede ejecutar
cualquier comando contra la instancia, contra todas las bases de datos de la
instancia y contra todos los objetos de cualquier base de datos.
ISYSCTRL: puede hacer todas las actividades de administracin (crear y bo-
rrar bases de datos y tablespaces) y mantenimiento (hacer backups, pasar
estadsticas, actualizar parmetros de la base de datos), pero no podr ac-
ceder a ningn dato de las bases de datos a no ser que le sean concedidos
explcitamente los privilegios adecuados.
nSYSMAINT: solo puede ejecutar labores de mantenimiento (hacer backups,
pasar estadsticas, actualizar parmetros de la base de datos).
ISYSMON: pueden obtener fotos estticas de monitorizacin (en ingls database
system monitor snapshots) de la instancia o sus bases de datos.
IDBADM: solo existe en el contexto de una base de datos concreta. Le est per-
mitido crear y borrar tablas, ejecutar estadsticas, y conceder o quitar privile-
gios, pero en ningn caso podr borrar la base de datos, ni crear tablespaces,
ni hacer backups, o modicar parmetros de conguracin.
ILOAD: permite ejecutar cargas de datos sobre las tablas y pasar estadsticas.
Es un permiso a nivel de usuario.
ISECADM: es la autorizacin encargada de gestionar toda la implementacin
de las LBAC (del ingls label-based access control=LBA C ), esto es el control
de acceso basado en etiquetas.
Los privilegios propiamente dichos pueden ser a nivel de toda la base de datos
o solo estar referidos a un objeto concreto. En esencia son pr.cticamente iguales
que los permisos de Oracle, se conceden con el comando GRAN T y se revocan con
el REVOKE. Van desde el simple CONNECT, pasando por los DML (SELECT,
INSERT, DELETE, UPDATE), hasta los tpicos ALTER, DROP. . .
220
Captulo 5. Tratamiento de los datos
5.15. Prcticas Resueltas
Prctica 5.1: Inserciones, Actualizaciones y Borrados
Con la base de datos Jardinera, crea y ejecuta un script "actualiza.sql que realice
las siguientes acciones:
1. Inserta una ocina con sede en Fuenlabrada.
2. Inserta un empleado para la ocina de Fuenlabrada que sea representante de
ventas.
3. Inserta un cliente del representante de ventas insertado en el punto 2.
4. Inserta. un pedido del cliente anterior (con su detalle) de al menos 2 productos
con una transaccin.
5. Actualiza el cdigo del cliente insertado yaverigua si hubo cambios en las
tablas relacionadas.
6. Borra el cliente y verifica si hubo cambios.
actua1iza.sq1
#1
INSERT INTO Oficinas VALUES
(FUE-ES,Fuen1abrada,Espaa,Madrid,

28941,918837627,C/Las suertes,27,Bajo A);
#2

INSERT INTO Empleados (CodigoEmp1eado,Nombre,
Apellidol,Email,Codigo0ficina,Puesto) VALUES
(400,Ismae1,Snchez,isanchezQjardineria.com,FUE-ES,Rep.Ventas);
#3
INSERT INTO C1ientes(CodigoC1iente, Nombrecliente, Telefono,
CodigoEmp1eadoRepVentas)
VALUES (288,Riegos Prez,918882763,400);
#4
START TRANSACTION;
INSERT INTO Pedidos (CodigoPedido, FechaPedido, Estado, CodigoC1iente)
VALUES (1900,2010-O6-03,Pendiente,288);
INSERT INTO DetallePedidos (CodigoPedido, CodigoProducto,Cantidad,
PrecioUnidad,NumeroLinea) VALUES (1900,OR-99,1,15.99,1);
INSERT INTO Detal1ePedidos (CodigoPedido, CodigoProducto ,Cantidad,
PrecioUnidad,NumeroLinea) VALUES (1900,OR-251,3,168,2);
COMIT WORK;
#5
UPDATE Clientes SET CodigoC1iente=290 WHERE CodigoC1iente=288;
#no permite la modificacin, deberia tener la FK con ON UPDATE CASCADE
221
Bases de Datos
#6
DELETE FROM Clientes WHERE CodigoCliente=288;
#tampoco permite el borrado, debera tener la FK con ON DELETE CASCADE
Prctica 5.2: Actualizaciones y borrados con subconsultas
Usa subconsultas en los ltros y realiza las siguientes actualizaciones yborrados:
1. Borra los clientes que no tengan pedidos.
2. Incrementa en un 20 (7o el precio de los productos que no tengan pedidos.
3. Borra los pagos del cliente con menor lmite de crdito.
4. Establece a O el lmite de crdito del cliente que menos unidades pedidas tenga
del producto OR-179.
#1
delete from Clientes where CodigoCliente not in
(Select distinct Codigocliente from Pedidos);
#2
update Productos set PrecioVenta=PrecioVenta*1.2 where not exists
(Select distinct CodigoProducto from DetallePedidos
where DetallePedidos.CodigoProducto=Productos.CodigoProducto);
#3
delete from Pagos where CodigoCliente=
(Select Codigocliente from Clientes where LimiteCredito =
(Select min(LimiteCredito) from Clientes)
);
#4
update Clientes set LimiteCredito=0 where CodigoCliente=
(Select Codigocliente from Pedidos natural join Deta11ePedidos
where Cantidad =(Select Min(Cantidad) From Deta11ePedidos where
CodigoProducto=0R-179) AND CodigoProducto=R-179
);
222
Captulo 5. Tratamiento de los datos
5.16. Prcticas Propuestas
Prctica 5.3: Vincular tablas a travs de Access /ODBC
Mediante el driver ODBC para MySQL, enlaza a una BBDD Access las tablas de
la NBA y las tablas de la BBDD jardineria. A continuacin, realiza las siguientes
acciones:
1. Exporta a Excel la tabla jugadores de la NBA.
2. Con Word, crea una carta modelo de felicitacin de navidad a los clientes de
la base de datos y combina la correspondencia para que, automticamente, se
genere una carta para cada cliente.
3. Inserta dos registros en la tabla Empleados de jardineria mediante un formu-
lario creado en Access. y despus, inserta dos jugadores de la NBA siguiendo
el mismo procedimiento. Hay que asegurarse de que, efectivamente, estn los
registros insertados.
Se puede repetir esta misma operacin con el driver ODBC para Oracle, pero hay
que tener en cuenta que junto al driver, se debe instalar el software cliente de Oracle
(sqlplus, tnsnames, etc.) para que funcione. <>
Prctica 5.4: Actualizaciones y borrados variados
1. Modica la tabla DetallePedido para insertar un campo numrico llamado IVA.
Mediante una transaccin, establece el valor de ese campo al 18 para aquellos
registros cuyo pedido tenga fecha a partir de Julio de 2010. A continuacin
actualiza el resto de Pedidos estableciendo al 16 el IVA.
2. Modica la tabla DetallePedido para incorporar un campo numrico llamado
TotalLinea, y actualiza todos sus registros para calcular su valor con la frmula
TotalLineazPrecioUnidad*Cantidad*IVA/ 100.
3. Borra el cliente que menor lmite de crdito tenga. Es posible borrarlo solo
con una consulta? Por qu?
4. A travs de phpMyAdmin o, mediante Access (vinculado va ODBC), inserta
dos clientes nuevos para un empleado a tu eleccin. A continuacin, inserta un
pedido con al menos 3 lneas de detalle. Despus, ejecuta una consulta para
rebajar en un 5 %el precio de los productos que sean Ins caros de 200 euros.

<>
223
Bases de Datos
Prctica 5.5: Inserciones, Actualizaciones y Borrados
En Oracle, con la BBDD Jardinera, codica en SQL las siguientes acciones:
1.
2.
3.
6.
224
Inserta una ocina con sede en Legans y dos empleados.
Inserta un cliente de cada empleado insertado.
Inserta dos pedidos de los clientes anteriores (con su detalle) de al menos 2
productos con una transaccin.
.Borra uno de los clientes y comprueba si hubo cambios en las tablas relaciona-
das. Si no hubo cambios, modica las tablas necesarias estableciendo la clave
fornea con la clusula ON DELETE CASCADE.
.Ejecuta el siguiente cdigo para simular el ON UPDATE CASCADE de la
tabla Pedidos y modica el cdigo de algn pedido. Comprueba que haya
modicado los registros relacionados en la tabla DetallePedidoz
CREATE OR REPLACE TRIGGER Actua1izaPedidos
AFTER UPDATE UN Pedidos FUR EACH ROW 3
BEGIN
UPDATE Deta11ePedidos SET CodigoPedido =
WHERE CodigoPedido= :o1d.CodigoPedido;
END Actualizaclientes;
:new.CodigoPedido
Crea ahora el siguiente disparador y prueba a cambiarle el cdigo a un Emplea-
do. Qu sucede? Busca el concepto de tabla mutante y estudia el problema.
CREATE OR REPLACE TRIGGER Actualizaclientes
AFTER UPDATE ON Empleados FOR EACH RDW
BEGIN

UPDATE Clientes SET CodigoEmp1eadoRepVentas = :new.CodgoEmp1eado
WHERE CodigoEmp1eadoRepVentas =:o1d.CodigoEmp1eado;
UPDATE Empleados SET CodigoJefe =:new.CodigoEmp1eado
WHERE CodigoJefe = :old.CodigoEmp1eado;
END Actualizaclientes;
/
Captulo 5. Tratamiento de los datos
Prctica 5.6: MySQL: Crear usuarios y asignar permisos en
local
Realiza las siguientes operaciones y almacena los comandos y los resultados en un
chero:
1. Crea un usuario llamado paco@localhost con la sintaxis create user con per-
misos de solo conexin y comprueba que se pueda conectar.
2. Crea un usuario llamado juan@localhost con la sintaxis grant con permisos de
solo conexin y comprueba que se pueda conectar.
3. Otorga al usuario paco@localhost permisos de select en la tabla jardineria.Clientes
y comprueba que se pueda consultar la tabla.
4. Otorga al usuario juan@localhost permisos de select, insert y update en las
tablas de la base de datos jardineria con opcion GRANT.
5. Conctate con el usuario juan y otorga permisos a paco de seleccin en la tabla
jardineriaEmpleados.
6. Qutale ahora los permisos a paco de seleccin sobre la tabla jardineria.Clientes.
7. Conctate con root y elimina todos los permisos que has concedido a Paco y
Juan.
8. Otorga a juan los permisos de SELECT sobre las columnas CodigoOcina y
Ciudad de la tabla Ocinas de la base de datos jardineria.
9. Conctate con juan y ejecuta la query SELECT * from jardineriaOcinas
Qu sucede?.
10. Borra el usuario paco@localhost.
225
Bases de Datos
Prctica 5.7: MySQL: Crear usuarios y asignar permisos en
remoto
Realiza las siguientes operaciones y almacena los comandos y los resultados en un
chero:
1.
226
Crea un nuevo usuario llamado usuarioldireccionip donde direccion_ip es una
mquina de un compaero tuyo y usuario su nombre.
.Otrgale permisos de seleccion en todas las tablas de la base de datos jardi-
neria. Ten cuidado, es posible que tu servidor solo permita conexiones desde
el ordenador local, para permitir conexiones remotas debes comentar la linea
bind-adress de tu chero mycnf que impide conexiones desde otros sitios que
no sea el especicado (127.0.0.1). Asegrate de reiniciar el servidor.
.Pide a tu compaero que se conecte desde su mquina y que averigue qu per-
misos le has otorgado. El a t te pedir lo mismo, es decir, que te conectes a
su mquina, indica qu instruccin sql ejecutas para conocer los permisos que
tienes.
Revcale los permisos concedidos al usuario usuario@direccion_ip.
.Concdele ahora permisos de creacin de tablas en una nueva base de datos
que has creado.
.Solictale que se conecte y que pruebe a crear una tabla. Puede consular la
informacin.
. Borra ahora el usuario usuario@direccion_ip.
.Con la bbdd mysql consulta qu privilegios tiene el usuario juan@localhost
a nivel de servidor, a nivel de base de datos, a nivel de tablas y a nivel de
columnas. Utiliza el comando show grants for usuario.
Captulo 5. Tratamiento de los datos
Prctica 5.8: Oracle: Creacin de usuarios, roles y perfiles
1. Crea dos roles, uno llamado ADMINISTRACION con todos los privilegios
sobre la tabla CLIENTES y PEDIDOS del esquema JARDINERIA yotro
llamado CONTABILIDAD con todos los privilegios sobre la tabla PAGOS del
mismo esquema. El rol CONTABILIDAD estar identicado por contrasea,
.A continuacin, crea un usuario Fernando en Oracle con las siguientes opcio-
nes: DEFAULT TABLESPACE Users, TEMPORARY TABLESPACE Temp,
QUOTA 100 Megabytes en Users yotorga el rol CONNECT yRESOURCE.
. Otorga como Rol por defecto ADMINISTRACION al usuario Fernando.
.Con el usuario Fernando, prueba a ejecutar una consulta sobre la tabla Clientes
y otra sobre la tabla PAGOS.
.A continuacin, activa el Rol CONTABILIDAD y repite la consulta sobre la
tabla PAGOS con el usuario Fernando.
.Desactiva todos los roles del usuario Fernando, incluyendo el rol por defecto.
.Consulta la tabla Clientes.
227
Bases de Datos
5.17.
228
Resumen
Los conceptos clave de este captulo son los siguientes:
La sentencia INSERT se utiliza para insertar una la o registro en una ta-
bla. Algunos SGBD, como MySQL, permiten la insercin de ms de una la
mediante la sintaxis extended-insert. Con INSERT se pueden insertar valores
para todas las columnas o solo para algunas de ellas.
La sentencia UPDATE se utiliza para actualizar uno o varios registros de una
tabla. DELETE sirve para eliminar registros de una tabla. Se puede ltrar la
informacin a modicar o borrar mediante un ltro WHERE. El ltro, puede
tener todas las caractersticas del ltro de la SELECT. Si no se especca ltro,
se actualizan o borran todas las las de la tabla. Tambin se pueden actualizar
o borrar las con UPDATE yDELETE ltrando a travs de una subconsulta.
En este caso, la limitacin consiste en no poder modicar o borrar registros
de una tabla a la que se accede en la subconsulta.
Se puede realizar la insercin de mltiples registros en una tabla con los resul-
tados devueltos por una SELECT. La SELECT debe devolver tantas columnas
como se especiquen en la sentencia INSERT.
No siempre es posible actualizar o borrar informacin de tablas puesto que
existen restricciones. Adems, algunas restricciones provocan cambios en cas-
cada en tablas relacionadas.
Las transacciones son conjuntos de operaciones SQL que se ejecutan de for-
ma atmica. Una vez iniciadas, se pueden acometer (COMMIT) o cancelar
ROLLBACK.
El tratamiento de transacciones, produce problemas de concurrencia, es decir.
problemas que se presentan al haber varios usuarios actualizando, borrando
y consultando un conjunto de datos. Estos problemas estn clasicados por
ANSI/ISO en 3 problemas tpicos. Los SGBD permiten que ocurran o no.
dependiendo del nivel de aislamiento que se seleccione.
El comando CREATE VIEW sirve para crear vistas, personalizando la forma
en la que el usuario obtiene la. informacin.
Se puede crear usuarios mediante el comando CREATE USER al cual se le
puede asignar un perl y varios roles. Mediante los comandos GRANT y RE-
VOKE se otorgar y deniegan permisos.
5.18.
1. En la sentencia INSERT
Test de repaso
a) No se pueden omitir valores de columnas
b) Se pueden especicar un nmero distinto
de valores y columnas
c) Se pueden omitir los nombres de columnas
d) Ninguna de las anteriores
2. Con GRANT yREVOKE
a) Se pueden otorgar permisos de select a una
o varias tablas
b) Se pueden otorgar permisos para borrar
una tabla
c) Se puede otorgar permisos para ejecutar
comandos DDL
d) Todas las anteriores
3. Para poner una columna al valor por
defecto
a) Se tiene que poner NULL
b) Se tiene que poner DEFAULT
c) No es posible hacerlo
d) Ninguna de las anteriores
4. En sentencias UPDATE yDELETE
a) Se puede especicar el mismo tipo de ltro
que para WHERE
b) Se puede especicar el mismo tipo de ltro
que para HAVING
c) Se puede ltrar mediante una subconsulta
d) Todas las anteriores
5. Si se especica ON DELETE CAS-
CADE

a) No se puede borrar el registro referenciado
b) Se borra en cascada el registro referenciado
c) No se puede borrar el registro que referen-
cia
d) Se borra en cascada el registro que referen-
cia
Captulo 5. Tratamiento de los datos
6. En una sola sentencia UPDATE
a) Slo se puede modicar un campo de un
registros
b) Slo se puede modicar un campo de varios
registros
c) Slo se pueden modicar varios campos de
un registro
d) Se pueden modicar varios campos de va-
rios registros
7. Una transaccin
a) Puede tener sentencias SELECT
b) No puede tener sentencias INSERT
c) No puede tener sentencias SELECT
d) Slo puede tener sentencias UPDATE
8. Para comenzar una transaccin se usa
a) START WORK
b) START TRANSACTION
)

)
c SET AUTOCOMMIT=OFF
d Todas las anteriores
9. Los perles en Oracle
a) Al igual que los roles, sirven para limitar
los recursos
b) No se pueden limitar recursos mediante
perles
c) Sirven para agrupar conjunto de permisos
d) Ninguna de las anteriores
&#39;P6P&#39;89&#39;&#39;P9&#39;q&#39;9P?&#39;q&#39;&#39;P&#39;Z&#39;3I sauoivnlos
229
Bases de Datos
5.19.
230
.Escribe el formato de la sentencia
INSERT y, ejemplica su funcio-
namiento mediante dos inserciones,
una especicando la lista. de cam-
pos y otra indicando todos los va-
lores para todas las columnas.
.Transforma las dos sentencias IN-
SERT anteriores en un nico IN-
SERT con sintaxis extendida.
. Escribe el formato de la sentencia
UPDATE y, ejemplica su funcio-
namiento mediante tres querys, una
que actualice una columna de una
la, una que actualice dos columnas
de varias las, y otra que actualice
todas las las de una tabla.
.Escribe el formato de la sentencia
DELETE y, ejemplica su funcio-
namiento mediante dos querys, una
que borre una sola la y otra que
borre todos los registros de una ta-
bla.
. En qu consiste un INSERT-
SELECT? Pon un ejemplo de su
funcionamiento.
.Qu condiciones deben darse pa-
ra que al hacer una modicacin
en una tabla, sus cambios se pro-
paguen a la tabla. que la. referencia
mediante una clave fornea?
10.
11.
12.
13.
Comprueba tu aprendizaje
. Imagina una situacin, y pon un
ejemplo de borrado en cascada de
registros.
.Imagina otra situacin distinta, y
pon un ejemplo de actualizacin en
cascada tanto en Oracle, como en
1\IySQL.
.Qu quiere decir que una actuali-
zacin o borrado se ltra mediante
una consulta? Existe alguna res-
triccin al respecto?
Dene el concepto de transaccin
indicando en qu situaciones son
tiles y qu problemas puede oca-
sionar.
Dene los tipos de problemas oca-
sionados por la concurrencia en el
acceso a los datos:
a) Dirty Read o Lectura Sucia
b) N onrepeateable Read o Lectu-
ra No Repetible
c) Phantom Read o Lectura Fan-
tasma
Qu signica que un SGBD tenga
una poltica de aislamiento?
Enumera. los tipos de aislamiento
estndar.
CAPTULO 6
Programacin de bases de datos
Objetivos
Contenidos ,
Introducir el Concepto de pro-
Introduccin a los lenguajes de granacn de 133595 de datos
programacin de bases de datos
Aprender los Inecanismos bsi-
Tipos de datos, identicadores C05 de la P1 ogalaCl de bases
yvariables de datos
operadores y expresiones Disear y codicar scripts para
tareas complejas
Estructuras de control

Incorporar el uso de las
Gestin de BTTOTGS transacciones en tareas com-
._. plej as
Transacciones en scripts
Manejar cursores
En este tema e] alumno aprender a programar una base de datos, desarro-
Ilando programas yguiones utilizando las tcnicas apropiadas.
231
Bases de Datos
6.1. Introduccin a la programacin de bases de
datos
Programar una base de datos es la forma en la que el desarrollador o adminis-
trador de la base de datos interacta con ella.
Hay muchas maneras de programar una base de datos, la eleccin del modo ms
adecuado depende de con qu tecnologa de base de datos se est trabajando (por
ejemplo, Oracle), de qu compiladores se tengan instalados en la mquina objeto de
ejecucin (por ejemplo, C++), de qu ventajas e inconvenientes se persigan, o de la
naturaleza de la aplicacin de base de datos que se va a desarrollar. La aplicacin
de base de datos puede ser de tres tipos distintos:
n Codicacin en el lado del servidor: La lgica de la aplicacin reside en-
teramente en la base de datos. La aplicacin est basada en la implementacin
de disparadores que se ejecutan automticamente cuando ocurre algn cambio
en los datos almacenados. y en el almacenamiento de procedimientos y funcio-
nes que son llamados explcitamente. Una ventaja importante es que, de esta
forma, se puede reutilizar el mismo cdigo para muchos clientes.
n Modelo cliente/servidor (tambin llamado modelo en dos niveles):
El cdigo de la aplicacin corre en otra mquina distinta del servidor donde se
encuentra la base de datos. Las llamadas a la base de datos son transmitidas
desde la mquina cliente al servidor. Los datos son transmitidos desde el cliente
al servidor para las operaciones de insercin y actualizacin, y desde el servidor
al cliente durante las consultas. Los datos son procesados en la mquina c1ient.e.
Normalmente, estas aplicaciones se escriben usando precompiladores con las
sentencias SQL embebidas en el cdigo.
IModelo en tres niveles: Al modelo en dos niveles se le aade un servidor de
aplicacin separado que procesa las peticiones. Este podra ser, por ejemplo.
un servidor Web bsico, o un servidor que realizara funciones de cacheo de
datos y balanceo de carga. Aumentar la potencia de procesamiento de esta
capa intermedia permite disminuir los recursos necesarios para los clientes.
pudiendo estos llegar a ser simples navegadores Web.
Para el desarrollo de aplicaciones. adems de necesitar un interfaz de programacin
donde hacer el desarrollo. se precisa de un software de cliente que enlace el cdigo
desarrollado con la base de datos. Los interfaces ms comunes son:
- SQL incorporado: Las aplicaciones de bases de datos de SQL incorporado
se conectan a. las bases de datos y ejecutan directamente sentencias de SQL
232
Captulo 6. Programacin de bases de datos
incorporado que se encuentran insertadas dentro de una aplicacin escrita en
un lenguaje principal (tpicamente C, C++ o COBOL). Las sentencias SQL
se pueden ejecutar esttica o dinmicamente.
IODBC: Microsoft desarroll una interfaz SQL denominada Open Database
Connectivity (ODBC) para los sistemas operativos de Microsoft. Los contro-
ladores ODBC especcos de la BBDD se cargan dinmicamente en el tiempo
de ejecucin, mediante un gestor de controladores basado en la fuente de da-
tos (nombre de la base de datos) proporcionada en la peticin de conexin.
La aplicacin se enlaza directamente con una nica biblioteca del gestor de
controladores, en lugar de con la biblioteca de cada motor de base de datos. El
gestor de controladores media entre las llamadas de funcin de la aplicacin
en el momento de la ejecucin y asegura que estas se dirijan hasta el contro-
lador ODBC adecuado que sea especco para el motor. Dado que el gestor
del controlador ODBC solo conoce las funciones especcas de ODBC, no se
podr acceder a las funciones especcas del motor de base de datos. ODBC
no est limitado a los sistemas operativos de Microsoft; otras implementacio-
nes estn disponibles en varias plataformas. Para el desarrollo de aplicaciones
ODBC, debe instalarse un ODBC Software Development Kitl.
ICLI: Call Level Interface (intefaz a nivel de llamada). Es una interfaz de pro-
gramacin de aplicaciones C y C++ para el acceso a bases de datos relacio-
nales, que utiliza llamadas de funcin para pasar sentencias de SQL dinmico
como argumentos de funcin. Es una alternativa al SQL dinmico incorpora-
do, pero a diferencia de SQL incorporado, CLI de DB2 no necesita variables
del sistema principal o precompilador. Se basa en la especicacin ODBC 3,51
y en la Norma Internacional para SQL / CLI. Estas especicaciones se escogie-
ron como la base para proporcionar una curva de aprendizaje ms corta para
aquellos programadores de aplicaciones, ya familiarizados con cualquiera de
estas interfaces de bases de datos.
u JDBC: Java Database Connectivity es un API (Applications Programming
Interface, interfaz de programacin de aplicaciones) que permite enviar sen-
tencias SQL a una base de datos relacional.
ISQLJ: Es un estndar ANSI SQL-1999 para incorporar sentencias SQL en
cdigo fuente Java. Proporciona una alternativa al JDBC para el acceso a
datos desde Java tanto en el lado cliente como en el lado servidor. Un cdigo
fuente SQLJ es ms breve que su equivalente en cdigo fuente JDBC.
lPara la plataforma Windows, el SDK de ODBC es parte del SDK de Microsoft Data Access
Components (MDAC), disponible para descarga en httpz/ /mm.microsoft .com/ data.
233
Bases de Datos
n OCI yOCCI: Oracle Call Interface (OCI) y Oracle C++ Call Interface
(OCCI) son APIs que permiten crear aplicaciones que invocan procedimien-
tos y funciones nativas para acceder y controlar todas las fases de ejecucin
de sentencias SQL en bases de datos Oracle. Permite desarrollar aplicaciones
combinando la potencia de acceso a los datos del SQL, con la capacidad de
hacer bucles, crear estructuras de control. ..
Interfaz de base de datos Perl: Combina la potencia del lenguaje inter-
pretado Perl y el SQL dinmico. Estas propiedades convierten a Perl en un
lenguaje perfecto para crear y revisar rpidamente aplicaciones de bases de
datos (DB2). El Mdulo DBI de Perl utiliza una interfaz que es muy parecida
a las interfaces CLI y JDBC, lo cual facilita la traduccin de las aplicaciones
Perl a aplicaciones CLI y JDBC, y viceversa.
Hypertext Preprocessor (PHP): Es un lenguaje de programacin inter-
pretado. La primera versin de PHP fue creada por Rasmus Lerdorf y reci-
bi contribuciones bajo una licencia de cdigo abierto en 1995. Principalmente
pensado para el desarrollo de aplicaciones Web, inicialmente era un motor
de plantillas HTML muy sencillo, pero con el tiempo los desarrolladores de
PHP han ido aadiendo funciones de acceso a bases de datos, han reescrito
el intrprete, han incorporado soporte orientado a objetos y han mejorado el
rendimiento. Actualmente, PHP se ha convertido en un lenguaje muy utilizado
para el desarrollo de aplicaciones Web porque se centra en soluciones prcticas
y da soporte a las funciones ms utilizadas en aplicaciones Web?
OLE DB: Microsoft OLE DB es un conjunto de interfaces OLE/ COM que
proporciona a las aplicaciones un acceso uniforme a datos almacenados en
distintas fuentes de informacin. La arquitectura OLE DB dene a los consu-
midores de OLE DB y a los proveedores de OLE DB. Un consumidor de OLE
DB puede ser cualquier sistema o aplicacin que utiliza interfaces OLE DB:
un proveedor de OLE DB es un componente que expone las interfaces OLE
DB.
El consejo del buen administrador. . .
Toda programacin debe ir acompaada de su correspondiente depuracin de
errores. Hay estudios que concluyen que se dedica un 60-80%del tiempo in-
vertido en fabricar un programa a 1a deteccin y correccin de errores.
Para Windows, se pueden encontrar versiones binarias precompiladas de PHP en http : / /php.
net.
234
Captulo 6. Programacin de bases de datos
6.2. Los lenguajes de programacin de bases de
datos
Se puede programar una base de datos en multitud de lenguajes, desde el C,
pasando por el Java, hasta el nuevo e innovador XQuery, pero todos, en mayor o
menor medida, terminarn recurriendo a sentencias SQL para extraer o insertar
datos de la base de datos, por lo que es imprescindible y fundamental conocer y
desenvolverse adecuadamente con SQL.
Para aadir ms potencia de ejecucin a las sentencias SQL, Oracle desarroll un
lenguaje propio llamado PL/ SQL, con l, es posible denir variables, crear estruc-
turas de control de ujo y toma de decisiones, crear funciones, procedimientos, pa-
quetes. . . .
Con el mismo objetivo, en DB2 viene incorporado el lenguaje SQL/PL que, al
contrario que el de Oracle, respeta la totalidad del estndar de SQL, pero adems,
DB2, desde su versin 9.7, ofrece la posibilidad de desarrollar directamente en
PL /SQL, existiendo compatibilidad plena con Oracle, lo cual hace que las migracio-
nes de la lgica de la aplicacin de una base de datos Oracle a DB2 9.7 sean prcti-
camente transparentes para el desarrollador, facilitando adems la reutilizacin del
conocimiento y evitando la necesidad de tener que aprender las caractersticas del
nuevo gestor (el equipo de trabajo sigue siendo productivo desde el mismo da de la
migracin).
Los programas PL /SQL, pueden ejecutarse haciendo uso del SQL*Plus; los tipos
bsicos de un programa PL/SQL son: procedimientos, funciones y bloques annimos.
Todos ellos estn compuestos de tres bloques bien diferenciados:
Partes de un programa
DECLARE

--declaracin de variables que se usarn en la seccin de ejecucin
--es opcional, ya que no siempre la complejidad del programa a
--realizar precisa del uso de variables y constantes
BEGIN

--sentencias a ejecutar, bloque de ejecucin propiamente dicho.
EXCEPTION

--chequeo de errores de inters ocurridos durante todo la ejecucin
--y acciones a tomar en consecuencia
--Bs opcional, pero si existe, est ubicado junto antes de END
END;

/
235
Bases de Datos
El consejo del buen administrador. . .
Cuantos ms comentarios se pongan en un programa, ms fcil ser su man-
tenimiento y posterior modi cacin, sobre todo si 1a persona encargada de
retocarlo no esla misma que la persona que cre el programa originalmente.
Los bloques annimos solo se pueden utilizar en el momento de su creacin.
ya que al no tener nombre que los identi que, no pueden ser referenciados. Si lo
que se pretende es reutilizar el cdigo, habr que guardar el programa PL/ SQL en
el catlogo de la base de datos, ya sea como procedimiento almacenado o funcin
almacenada, de modo que quedeidenti cado unvocamente con un nombre y un tipo.
Tanto el procedimiento como la funcin podrn aceptar parmetros de entrada, pero
solo la funcin devolver a su vez un valor al trmino de su ejecucin. En caso de
querer crear un procedimiento, se sustituir la palabra DECLARE por la sentencia
CREATE PROCED URE.
CREATE UR REPLACE PROCEDURE nombre_de1_procedimiento (lista_de_parmetros) AS
Y si lo que sedeseaescrear una funcin, sesustituir la palabra DECLARE por
la sentencia CREATE F UN CTI ON.
CREATE DR REPLACE FUNCTINnombre_de_la_funcion(1ista_de_parmetros)
RETURNtipo_de_dato_devuelto IS
En ambos casos,la lista de parmetros esopcional, de modo que si no seprecisa
pasarparmetroalguno, bastacon omitir la lista (incluyendolos parntesis).
Para hacer uso de un procedimiento basta con invocar la instruccin CALL.
CALL nombre_de1_procedimiento(lista_de_va1ores);
En el caso de las funciones, puesto que estastienen necesariamenteque devolver
un valor, para hacer uso de ellas es obligatorio recoger dicho valor. Una forma fcil
sera asignndoselo a una variable que fuese del mismo tipo que el valor devuelto
por la funcin, o tambin. invocarla desdeuna sentencia SELECT.
SELECT
nombre_de_1a_funcin(1ista_de_va1ores)

FROM DUAL;
236
Captulo 6. Programacin de bases de datos
Tambin se pueden agrupar procedimientos y funciones en objetos ms grandes
llamados paquetes, los cuales estn compuestos por dos componentes:
ILa cabecera: encargada de almacenar la denicin de todos los subprogramas
(procedimientos y funciones) que incluye el paquete, as como la declaracin
de las variables y constantes globales al paquete (que podrn usarse en todos
los subprogramas que lo componen).
I El cuerpo: que contiene el cdigo de todos los subprogramas.
cabecera del paquete
CREATE DR REPLACE PACKAGE nombre_de1_paquete AS
PROCEDURE nombre_de1_procedimiento_1 (1ista_de_sus_parmetros);
PROCEDURE nombre_de1_procedimiento_2 (lista_de_sus_parmetros);
FUNCTION nombre_de_1a_funcin_1 (1ista_de_sus_parmetros) RETURN
tipo_de_dato_devue1to;
--declaracin de variables y constantes globales al paquete
END nombre_de_paquete;
/
Cuerpo del paquete
CREATE OR REPLACE PACKAGE BODY nombre_del_paquete AS
PRCEDURE nombre_del_procedimiento_1 (lista_de_sus_parmetros) IS
--declaracin de variables y constantes locales al procedimiento
BEGIN
--cdigo del nombre_del_procedimiento_1
END nombre_de1_procedimiento_1;
PRCEDURE nombre_del_procedimiento_2 (lista_de_sus_parmetros) IS
--declaracin de variables y constantes locales al procedimiento
BEGIN
--cdigo del nombre_de1_procedimiento_2
END nombre_del_procedimiento_2;
FUNCTION nombre_de_la_funcion_1 (lista_de_sus_parmetros) RETURN
tipo_de_dato_devue1to IS
--declaracin de variables y constantes locales a la funcin
BEGIN

--cdigo del nombre_de_1a_funcion_1
END nombre_de_la_funcion_1;
END nombre_del_paquete;
/
237
Bases de Datos
Recuerda. En Oracle, la tabla DUAL es una tabla auxiliar muy til para
ejecutar todo tipo de funciones. Concretamente las que proporciona el gestor
para por ejemplo, extraer el DDL de un objeto de la base de datos, o para
conocer qu fecha es:
SELECT SYSDATE FROM DUAL;
En DB2, la tabla auxiliar se llama SYSIBALS YSD UMM Yl. El mismo ejemplo
para obtener la fecha actual se hara con la sentencia:
SELECT CURRENT. TIMESTAAP FROM SYSIBALSYSD UMMYI;
Los procedimientos y funciones que estn dentro de paquetes, tambin pueden ser
invocados individualmente y, de la misma manera que los procedimientos y funciones
independientes, basta con calicarlos por delante con el nombre del paquete al que
pertenecen, ya que esta es la. nica forma de identicarlos unvocamente respecto de
la totalidad de objetos que tiene la base de datos.
Llamada dentro de un paquete
--llamada a procedimiento
CALL nombre_de1_paquete.nombre_de1_procedimiento(1ista_de_va1ores);
--llamada a funcin
SELECT nombre_del_paquete.nombre_de_1a_funcin(1ista_de_va1ores)
FROM dual;
<> Actividad 6.1: Crea dos tablas que se llamen igual pero en distintos esquemas.
Crear, en el mismo esquema. dos objetos que se llamen exactamente igual, por
ejemplo, una tabla y un procedimiento.
Aparte de los programas mencionados (procedimientos, funciones y paquetes).
tambin se puede codicar lgica de negocio en los dispara.dores o TRIGGERS
asociados a tablas, vistas o eventos. que podrn ejecutarse una. vez (por ejemplo al
intentar un usuario conectarse a la base de datos). o tantas veces como las de una
tabla se vayan a insertar, borrar o actualizar. El disparador podr programarse para
que se active inmediatamente antes o despus del evento.
Para dar de alta o recrear un disparador basta con sustituir la palabra DECLARE
por la sentencia de denicin del disparador. Un ejemplo para denir un disparador
de tabla que se ejecute en cada la antes de ser insertada. es el siguiente:
238
Captulo 6. Programacin de bases de datos
Creacin o recreacin de un disparador
CREATE DR REPLACE TRIGGER nombre_de1_disparador BEFORE INSERT
DN nombre_de_1a_tab1a FOR EACH RW
En ese caso, el momento en el que se ejecuta el disparador es BEFORE (antes),
y el evento que lo dispara es la instruccin DML INSERT (insercin en la tabla
destino del disparador). Otro momento de ejecucin podra ser AFTER (despus),
y otros eventos, adems de la insercin, podran ser el borrado (DELE TE) y la
actualizacin (UPDATE OF lista_de_columnas), o incluso varios a la vez (INSERT
OR DELETE OR UPDATE). Adems. tambin se podra aadir una condicin
(WHEN Por ejemplo, se podra crear un disparador llamado actualizaSueldoMini-
mo denido antes (BEFORE) de la actualizacin (UPDATE OF) del campo sueldo
de la tabla nominas del esquema contratados. que se activara solo cuando se cum-
pliese la condicin de que el valor del campo que se quiere actualizar fuese menor
de 1000 euros, de modo que impidiese que se pudieran asignar sueldos por debajo
de los 1000 euros.
CREATE OR REPLACE TRIGGER contratados.actua1izaSue1doMinimo BEFORE UPDATE OF
sueldo ON contratados.nominas FOR EACH ROW
WHEN (new.sue1do < 1000)
BEGIN
:new.sue1do := 1000;
END;

/
Sabas que .. . 7Se puede denir ms de un disparador para la misma
tabla y para la misma combinacin de momento y evento, pero el orden en el
que Oracle los ejecutar. ser indeterminado. por ello es mejor opcin agrupar
la lgica de negocio en un solo disparador.
DB2, en cambio, los ejecutara segn el orden en el que fueron creados.
Dentro de la programacin del disparador, :old.nombre_del_campo har referen-
cia al valor antiguo del campo llamado nombre_del_campo. mientras que
:new.nombre_del_campo ser el nuevo valor que pretende asignrsele al campo lla-
mado nombre_del_campo, pudiendo este valor new ser modicado en el bloque de
ejecucin del disparador. Ntese que en la clusula WHEN. las variables :old y mew
no deben ir precedidas de los dos puntos (z).
239
Bases de Datos
Recuerda. En una base de datos todos los objetos son nicos, es decir, que
estan perfectamente identicados por su nombre y por su tipo y no pueden re-
petirse. Por ejemplo. un mismo usuario o esquema de base de datos no podra
tener dos tablas que se llamen exactamente igual. pero s podra existir una
tabla llamada nominas en dos esquemas distintos (contratados y subcontra-
tados), ya que la base de datos las conocera como contratadosnominas y
subcontmtadosmominas.
En el caso de los procedimientos y funciones, existe adems el nivel de paque-
tes, es decir, que podra existir un procedimiento independiente que se llamara
calculaNominas que perteneciera al usuario pepito, pero adems podra tam-
bin haber otro procedimiento calculaNominas dentro de un paquete paque-
teDeContabilidad del mismo esquema contratados. Se referenciaran por con-
tratadoscalculaNominas, contratadospaqueteDeContabilidad.calculaNominas,
respectivamente. Incluso podra existir una funcin que se llamara tambin
contratados. calculaNominas, pues al ser objetos de distinto tipo, en una sen-
tencia SQL determinada, la base de datos los distinguira por el contexto.
6.3. Tipos de datos, identicadores y variables
En Oracle existen varios juegos de datos soportados, unos especcos de Oracle.
otros compatibles con el estndar ANSI y los tipos de datos del DB2 de IBM, otros
denidos por el usuario a partir de los dos tipos anteriores mediante el uso de la
instruccin CREA TE TYPE, y otros como los tipos de datos XML (para la consulta
y tratamiento de documentos XML) o los tipos de datos espa.ciales (para tratar la
informacin geogrca). Aqu solo se tratarn los tipos bsicos del primer juego:
ICHAR(tamao): cadena de tamao jo. El nmero mximo de caracteres
es 2000. Los valores de tipo cadena debern ir entrecomillados con comilla
simple.
IVARCHAR2(tamao): cadena de longitud variable. El tamao mximo es
4000 caracteres. Los valores de tipo cadena debern ir entrecomillados con
comilla simple.
INUMBER(precisin,escala): nmero decimal. La precisin puede tomar
valores entre 1 y 38. La escala puede estar entre 84 y 127. Un nmero de
escala positivo indica cuntos dgitos signicativos de entre el total de la pre-
cisin se guardarn a la derecha de la coma decimal. Un nmero de escala
240
Captulo 6. Programacin de bases de datos
negativo indica el nmero de dgitos que se redondearn del nmero a la iz-
quierda de la coma. Tanto la precisin como la escala son opcionales, pero
si hubiera escala, necesariamente tendra que haberse indicado la precisin.
Por ejemplo, para crear una Variable que pueda albergar valores del 999999
hasta el 999999, basta con denir una de tipo NUl\IBERl(6). Una variable de
tipo NUMBER(6,2) aceptar valores de hasta seis cifras, pero las unidades
y las decenas se redondearn, por ejemplo, el nmero 123456,44 se almace-
nar como 123500. En cambio, NUMBER(6,2) guardar cuatro dgitos a la
izquierda de la. coma y redondear los dgitos a la derecha de la coma dejando
solo dos. Los subtipos INTEGER, IN T, y SMALLIN T tambin pueden usarse
para denir nmeros enteros con un mximo de 38 dgitos de precisin.
- BINARYILOAT: nmero de coma otante de 32 bits de precisin. Los
valores positivos estn en el intervalo (1. 17549E-38, 3, 40282E+38).
IBINARYDOUBLE: nmero de coma otante de 64 bits de precisin. Los
valores positivos estn en el intervalo
(2, 22507485850720E308, 1, 79769313486231E+308).
- DATE: fecha y hora. La funcin TO_DATE es muy til para insertar datos ti-
po fecha o comparar dos fechas: TO_DA TE (31-01-2010 , DD-MM- YYYY).
- TIMESTAMP: es una extensin del tipo DA TE que guarda adems fraccio-
nes de segundo.
IBLOB,CLOB,BFILE 3: datos muy grandes y desestructurados, por ejemplo
texto, imgenes, vdeos o datos espaciales. Pueden guardarse en tablespaces
diferentes al resto de la tabla, o en el caso de los BFILE, en cheros externos
a la base de datos.
IROWID: es el tipo de la pseudocolumna ROWID, una. columna interna de
la tabla que almacena la direccin fsica de cada la. Mediante esta direccin
se puede localizar el nmero de objeto, chero de datos, tablespace donde
se encuentra y la posicin dentro del bloque de datos respecto del chero de
datos, formando con todo ello un valor nico en toda la base de datos. Los
accesos a los datos a travs de la localizacin de un valor en esta columna son
rapidsimos.
Adems de estos tipos, existen otros no soportados por el estndar SQL, que no
pueden usarse para denir columnas, pero s en la programacin de PL/ SQL, por
ejemplo el tipo BOOLEAN, que puede albergar los valores lgicos TRUE (verdade-
ro), FALSE (falso) o NULL (nulo) muy tiles en comparaciones.
3Oracle recomienda sustituir los datos tipo LONG, LONG RAW y RAW por estos tipo LOB.
241
Bases de Datos
Basndose en estos tipos de datos, se podr proceder a la definicin de variables
y constantes en los bloques DECLARE. y en la denicin de los procedimientos y
funciones.
Sintaxis para la definicin de variables.
nombre_de_la_variable tipo_de_dato ;
o
nombre_de_1a_variab1e tipo_de_dato := va1or_de_inicia1izacin;
Sintaxis para la definicin de constantes
nombre_de_la_constante CONSTANT tipo_de_dato := va1or_de_inicia1izacin;
Sabas que . . . ?Los valores de tipo cadena van entrecomillados con
comilla simple.
En PL/SQL, la asignacin del valor a una variable o constante siempre va
precedida de los signos :=. En la asignacin u operacin con valores, PL / SQL
puede convertir implcitamente el tipo de dato para adecuarlo al tipo de la
variable al que se asigna el valor o al tipo necesario en la operacin. En el
siguiente ejemplo, se puede hacer la resta gracias a la conversin implcita de
los meses. En caso de que los meses tuvieran alguna letra, la opera.cin arro j aria
un error.
DECLARE

mesInicio CHAR(2) := 6;
mesFin CHAR(2) := &#39;10;
mesesTranscurridos NUMBER(2);
BEGIN

mesesTranscurridos := mesFin -meslnicio;
END;

/
Cuando se desee declarar una variable con el mismo tipo que otra variable conocida
del mismo programa o el tipo de una columna de una tabla concreta. o incluso como
una la. completa de una tabla, existen dos atributos que facilitan la denicin y cor.
ello el mantenimiento del programa PL /SQL. ya que la modicacin del tipo original
se extender. al resto de variables derivadas sin necesidad de tener que cambiar
ninguna lnea de cdigo. Esos atributos son el %TYPE y el %ROWTYPE.
242
Captulo 6. Programacin de bases de datos
Atributos%TYPE y%ROWTYPE
nombre_de_1a_variab1e nombre_de_1a_otra_variableZTYPE;
nombre_de_1a_variable esquema.tab1a.co1umna%TYPE;
nombre_de_1a_variable_tipo_registro esquema.tab1a%TYPE;
En el caso de los procedimientos y funciones, las variables de su lista de parme-
tros pueden ser de tres tipos: IN(parmetro de entrada), OUT (parmetro de
salida) e INOUT (parmetro de entrada y de salida). Si no se especica nada, el
parmetro en cuestin sera IN. Hacer que un procedimiento tenga parmetros OUT
es un truco muy bueno para conseguir que el procedimiento devuelva datos.
Procedimiento con parmetro de salida
CREATE OR REPLACE PROCEDURE contratados.dameSue1doMinimo
(sueldoMinimo OUT contratados.nominas.sue1do%TYPE) AS
BEGIN
sue1doMinimo:=1000;
END;

/
Sabas que . .. 7La funcin SUBSTR( cadenaxzrgumento, posi-
ciminicial, longitud_de_la_subcadena) sirve para extraer trozos de la cade-
nanrgumento, de modo que se devolvern un total de longitud_de_la_subcadena
caracteres comenzando por los que van desde la posicinjnicial. En caso de
omitir el parmetro longitud_de_la-subcadena, la funcin devolver la subcade-
na desde la posicinjnicial hasta el nal de la cadencuzrgumento.
6.4. Operadores y expresiones
Para relacionar variables y constantes entre s. se usan los operadores, que com-
binndolas con aqullas darn lugar a expresiones cuyos resultados sern el funda-
mento de la lgica de programacin de la base de datos.
Las operaciones que se pueden realizar y el orden en el que se ejecutaran (en
ausencia de parntesis) son:
243
Bases de Datos
HHHHHIIHH""""III"lI&#39;||"&#39;I||
l"""&#39;HHMHIll&#39;ll&#39;l&#39;l&#39;l&#39;l""""""

Signo positivo o negativo
*nmltiplicacin
/ divisin
+suma

resta

concatenacin. Muy til para juntar varias cadenas en una
comparaciones: igual, menor, mayor, menor o igual
.mayor o igual, distinto, distinto
IS NULL, LIKE es nulo, como
BETWEEN, IN entre, en
negacin lgica de un tipo boolean
operador AND lgico entre tipos de dato boolean
operador OR lgico entre tipos de dato boolean
Teniendo en cuenta esto, se podra decir que las siguientes expresiones son todas
verdaderas (TRUE):
(6+8)/2=7 6+8/2=1O 6a2=&#39;6"||a2
7 != 10 O <> NULL O IS NULL = FALSE
0 IS NOT NULL =TRUE 6 BETWEEN 2AND 86a2 LIKE %24
6a2LIKE 6%6 IN (6,82) aIN (b
( 5 )
,a)
bNOT IN (b,a) (3 <5) AND 5>= ) (3 <5 OR (5 <= 3)
Adems de los operadores, existen funciones tremendamente tiles para la toma
de decisiones. Tal es el ejemplo de las funciones DECODE, NVL y REPLACE.
-DECODE(argumento, patrnl, resultadol, patrn2, resultado2. .. ,
resultado_por_defecto): Compara el valor del argumento con cada uno de
los patrones y en cuando encuentra la coincidencia devuelve el resultado corres-
pondiente, o el resultadmporxdefecto en caso de que no encuentre coincidencia
en ningn patrn proporcionado. Cualquiera de los patrones puede tornar el
valor NULL.
n NVL(valor1, valor2): Si el valorl es nulo, entonces se devuelve el valor2, en
caso contrario se devuelve el valorl.
- REPLACE(cad_argumento, cad_a_reemplazar, cad_que.reemplaza):
Devuelve la caiargumento sustituyendo en ella cada ocurrencia de cad_a_reemplu: &#39;
por cad_que_reemplaza, pudiendo tomar esta ltima el valor NULL, de modo
que entonces se borraran todas las cad_a_reemplazar que hubiera en cad_argumen &#39;
244
Captulo 6. Programacin de bases de datos
6.5. Estructuras de control
Cuando se crea. un programa, todas las sentencias se ejecutan siguiendo una
secuencia, es decir, el ujo de ejecucin del programa Consiste en ejecutar una ins-
truccin detrs de otra. Las estructuras de control sirven para controlar ese ujo del
programa, la toma de decisiones y programar las acciones en consecuencia. Todas las
estructuras de control estn basadas en la evaluacin de una expresin lgica ms o
menos compleja que constituye en s misma una condicin. En caso de cumplirse la
condicin, es decir, en caso de que la evaluacin de la condicin d como resultado
el valor TR UE, se tomar una accin, en caso negativo otra o nada. Hay dos tipos
de sentencias de control de ujo, condicionales e iterativas. En las condicionales, la
decisin que se toma es alternativa, es decir, se ejecuta un bloque de sentencias u
otro. En las iterativas o bucles, la decisin que se toma es si repetir la ejecucin de
un bloque de instrucciones o no repetirlo.
6.5.1. IF..THEN-ELSIF..THEN-ELSE-END IF
Hay tres formas de usar la sentencia condicional IF: evaluando una nica condi-
cin (IF - THEN ), ms de una condicin (ELSIF- THEN), y/o aadiendo una opcin
de accin por defecto en caso de que no se cumpla ninguna condicin de las exigidas
(ELSE Las clusulas ELSIF y ELSE son opcionales.
Ejemplo de condicional
CREATE OR REPLACE PROCEDURE Calificacion(Nota NUMBER) as
BEGIN

IF Nota >= 0AND Nota <5THEN
DBMS_0UTPUT.PUT_LINE(Suspenso);
ELSIF Nota >= 5 AND Nota < 6THEN
DBMS_0UTPUT.PUT_LINE(Suficiente);
ELSIF Nota >= 6 AND Nota <7 THEN
DBMS_UTPUT.PUT_LINE(Bien);
ELSIF Nota >= 7 AND Nota <9 THEN
DBMS_0UTPUT.PUT_LINE(Notable);
ELSIF Nota >= 9AND Nota <= 10 THEN
DBMS_0UTPUT.PUT_LINE(Sobresa1iente);
ELSE

DBMS_0UTPUT.PUT_LINE(Ca1ificacin errnea);
END IF;
END;

/
En el ejemplo anterior se hace uso de la funcin DBMSLO UTP UT.P UT_LINE para
escribir el resultado de la evaluacin de cada condicin. La misin de dicha funcin
245
Bases de Datos
es la de mostrar por pantalla un mensaje visible al usuario, pero para que este pueda
verlo, ha de activarse la variable de entorno del SQL*Plus llamada SERVEROU T-
PU T, que es local a la sesin actual en curso.
6.5.2. CASE-WHEN..THEN-ELSE-END CASE
Es una estructura de control condicional que permite ejecutar distintas sentencias
ante los distintos valores posibles de lamisma condicin.
En los ejemplos siguientes se exponen dos formas de programar esta estructura,
una escribiendo cada vez la condicin candidata, y la otra, ponindola solo una vez.
Ejemplo 1 de CASE-WHEN..THEN-ELSE-END CASE
SET SERVERUTPUT DN
CREATE OR REPLACE PROCEDURE Ca1ificacion(Nota NUMBER) as
BEGIN

CASE

WHEN Nota >= O
DBMS_OUTPUT.
WHEN Nota >= 5
DBMS_OUTPUT.
WHEN Nota >= 6
DBMS_OUTPUT.
WHEN Nota >= 7
DBMS_OUTPUT.
WHEN Nota >= 9
DBMS_OUTPUT.
END CASE;
END;

/
246
AND Nota < 5 THEN
PUT_LINE(Suspenso);
AND Nota <6 THEN
PUT_LINE(Suficiente);
AND Nota <7 THEN
PUT_LINE( Bien); j
AND Nota < 9 THEN
PUT_LINE(Notab1e) ;i
AND Nota <= 10 THEN
PUT_LINE(Sobresa1iente);
ELSE DBMS_0UTPUT.PUT_LINE(Calificacin errnea);
Captulo 6. Programacin de bases de datos
Ejemplo 2 de CASE-WHEN..THEN-ELSE-END CASE
SET SERVERDUTPUT ON
CREATE DR REPLACE PRCEDURE Ca1ificacion(Nota VARCHAR) as
BEGIN

CASE Nota
WHEN Suspenso THEN
DBMS_0UTPUT.PUT_LINE(Calificacin menor de 5.);
WHEN Suficiente THEN
DBMS_0UTPUT.PUT_LINE(Calificacin entre 5 y 6.);
WHEN Bien THEN
DBMS_OUTPUT.PUT_LINE(Ca1ificacin entre 6 y7.);
WHEN Notab1e THEN
DBMS_0UTPUT.PUT_LINE(Ca1ificacin entre 7 y 9.);
WHEN Sobresaliente THEN
DBMS_0UTPUT.PUT_LINE(Ca1ificacin entre 9 y 10.);
ELSE DBMS_DUTPUT.PUT_LINE(Ca1ificacin errnea);
END CASE;
END;

/
6.5.3. LOOP-EXIT WHEN-END LOOP
Para construir sentencias iterativas o bucles existen varias opciones, la primera
de ellas es esta, que garantiza que por lo menos una vez, la ejecucin del programa
entra en la codicacin hecha dentro del bucle.
Existen dos formas de salir del bucle, en cualquier circunstancia (EXIT), o po-
nendo una condicin (EXI T WHEN).
Ejemplo de LOOP-EXIT WHEN-END LOOP
SET SERVEROUTPUT ON
DECLARE
contador NUMBER(3);
BEGIN
contador := 1;
LOOP
EXIT WHEN contador > 99;
contador := contador + 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE (E1 valor de salida deberia ser 100: || contador);
END;

/
247
Bases de Datos
Ejemplo equivalente de LOOP-EXIT WHEN-ENDLP
SET SERVERUTPUT DN
DECLARE

contador NUMBERCS);
BEGIN

contador :=1;
LOOP

IFcontador >99 THEN
EXIT;
END IF;
contador := contador + 1;
END LOOP;
DBMS_0UTPUT.PUT_LINE (E1 valor de salida deberia ser 100: II contador);
END;
/
6.5.4. WHILE..LOOP-END LOOP
Esta sentenciaiterativa es otro tipo de bucle. Se diferencia del anterior en que
la ejecucin del programatiene que evaluar la condicinantesde ejecutar el bloque
de sentencias del bucle.
Ejemplo de WHILE..LDDP-END LOOP
SET SERVERDUTPUT ON
DECLARE

contador NUMBER(3);
BEGIN

contador :=1;
WHILE contador < 100 LOOP
contador := contador + 1;
END LOOP;
DBMS_OUTPUT.PUT_LINE (E1 valor de salida deberia ser 100: II contador);
END;

/
6.5.5. FOR..IN..LO()P-END LOOP
Esta estructuraesun bucle que automticamenteincrementa el valor de un con-
tador dentrode un intervalo ja.do. por lo que el nmerode vecesqueseejecutar el
bloque de instruccionesesconocidopreviamente. El contadorpuedetener cualquier
nombre elegidopor el usuario y se podr referenciar como una variable ms del
programa, pero no necesitaser de nido en el bloque DECLARE.
248
Captulo 6. Programacin de bases de datos
Usando en vez de IN, la opcin IN RE VERSE, se conseguira que el bucle fuera
contando de manera descendente, de mayor a menor.
En el siguiente ejemplo, el contenido del bucle se ejecuta 100 veces, desde el 1
hasta el 100. Si el lmite inferior del contador coincide con el superior (FOR z" IN
100..100 LOOP), el cuerpo del bucle se ejecutara una sola vez, otorgando el valor
100 a la variable i.
Ejemplo de FOR. .IN. .LDOP-END LODP
SET SERVERUTPUT ON
DECLARE
contador NUMBER(3);
BEGIN
FOR contador IN1..100 LOP
DBMS_OUTPUT.PUT_LINE (El valor del contador es: II contador);
END LODP;
END;

/
Es posible interrumpir la ejecucin del bucle y salir de l. Como en el caso de los
bucles simples, pueden usarse en cualquier momento dentro de la programacin del
bucle FOR las clusulas EXI Ty EXI TWHEN.
Los bucles FOR son ideales para recorrer los registros resultantes de una consulta
(sentencia SELECT), ya sea mediante el uso de cursores 5o directamente incluyendo
la sentencia en la clusula IN. Vase los ejemplos.
Ejemplo de FOR. .IN. DOP-END LOP con consulta
SET SERVEROUTPUT ON
DECLARE
BEGIN

DBMS_0UTPUT.PUT_LINE (Los sueldos ordenados de menor a mayor son: );
FOR i IN(SELECT sueldo
FROM contratadosmominas
ORDER BY sueldo) LDP
DBMS_0UTPUT.PUT_LINE (i.sue1do);
END LDP;
END;

/
5Un cursor es una estructura de datos concebida para recorrer el resultado de una consulta
(sentencia SELECT). Mediante el uso de la instruccin FETCH nombre_del_cursor INTO lis-
ta_de_varables, el registro objeto de la consulta se extrae del cursor yse introduce dentro de una
variable, listo para ser referenciado.
249
Bases de Datos
Ejemplo de FDR..IN..LOOP-END LOOP con cursor
SET SERVEROUTPUT DN
DECLARE

vSue1do contratados.nominas.sue1do%TYPE;
CURSOR curSueldo IS SELECT sueldo FROM contratados.nominas
ORDER BY sueldo DESC;
BEGIN

OPEN curSue1do;
DBMS_OUTPUT.PUT_LINE (Los diez sueldos ms altos (de mayor a menor):);
FOR i IN 1..10 LOOP
FETCH curSueldo INTO vSue1do;
DBMS_OUTPUT.PUT_LINE (vSue1do);
END LOOP;
CLOSE cursueldo;
END;

/
Pero, qu pasara si en el ejemplo del bucle FOR con cursor no hubiera ms de
3 registros en la tabla contratadosnominas? Al intentar imprimir el dato del sueldo
tras hacer el FE TCH cuando i fuese >= 4, aparecera repetido el valor del ltimo
sueldo recuperado, esto es debido a que, como la tabla no tiene ms registros, el
FE TCH no consigue volver a inicializar la variable vSueldo. Para evitar ese mal
funcionamiento se podra optar por incluir una clusula EXI T WHEN que obligara
a abandonar el lazo al llegar al nal del cursor (atributo N OTF O UND del cursor).
Ejemplo de FOR..IN..LOOP-END LOOP con cursor y EXIT WHEN ___________
SET SERVEROUTPUT ON
DECLARE

vSue1do contratados.nominas.sue1do%TYPE;
CURSOR cursueldo IS SELECT sueldo FROM contratados.nominas
ORDER BY sueldo DESC;
BEGIN

OPEN cursueldo;
DBMS_OUTPUT.PUT_LINE (Los diez sueldos ms altos (de mayor a menor):);
FOR i IN 1..10 LOOP
FETCH cursueldo INTD vsueldo;
EXIT WHEN curSue1do%NOTFOUND;
DBMS_OUTPUT.PUT_LINE (vsueldo);
END LOOP;
CLOSE cursueldo;
END;

/
250
6.6.
Captulo 6. Programacin de bases de datos
Gestin de errores
Algo imprescindible en toda programacin es la codicacin de una seccin para
interceptar posibles errores que pudieran ocurrir durante la ejecucin del programa
(ya sean errores conocidos o desconocidos, previstos o imprevistos), y en consecuen-
cia, tomar las medidas oportunas o escribir un mensaje apropiado. Para ello se usa
el bloque EX CEPTI ON con la clusula WHEN THEN que sirve para ltrar el tipo
de error deseado.
Algunos de los errores predenidos que pueden interceptarse son:
CASE_NOT.FOUND: ninguno
de las condiciones de la sentencia
WHEN en 1a estructura CASE se
corresponde con el valor evaluado y
no existe clusula ELSE.
CURSOR_ALREADY_OPEN:
el cursor que intenta abrirse ya
est abierto.
INVALID_CURSOR: la opera-
cin que est intentando realizar-
se con el cursor no es vlida, por
ejemplo, porque quiera cerrarse un
cursor que no se ha abierto previa-
mente.
INVALID_NUMBER o VA-
LUE_ERROR: la conversin de
una cadena a valor numrico no es
posible porque la cadena no repre-
senta un valor numrico vlido.
VALUEERROR: error ocurrido
en alguna operacin aritmtica, de
conversin o truncado, por ejemplo,
cuando se intenta insertar en una
variable un valor de ms tamao.
LOGIN_DENIED: un programa
est intentando acceder a la base
de datos con un usuario o password
incorrectos.
NOT_LOGGED_ON: un progra-
ma est intentando ejecutar algo en
la base de datos sin haber formali-
zado previamente la conexin.
NO_DATA_FOUND: una sen-
tencia SELECT IN T0 no devuelve
ningn registro.
TOO_MANY_ROWS: una sen-
tencia SELECT INTO devuelve
ms de un registro.
TIMEOUT_ON_RESOURCE:
se ha acabado el tiempo que el
SGBD puede esperar por algn re-
curso.
ZERODIVIDE: algn programa
intenta hacer una divisin de un
nmero entre cero.
OTHERS: es la opcin por defec-
to. Interceptar todos los errores no
tenidos en cuenta en las condicio-
nes WHEN de la clusula EXCEP-
TI ON donde se encuentre.
251
Bases de Datos
Ejemplo de gestin de errores
SET SERVERDUTPUT ON
DECLARE

meslnicio CHAR(2) := 6a;
mesFin CHAR(2) := 10;
mesesTranscurridos NUMBER(2);
BEGIN

mesesTranscurridos := mesFin -meslnicio;
EXCEPTIDN

WHEN INVALID_NUMBER THEN
DBMS_OUTPUT.PUT_LINE(Error INVALID_NUMBER interceptado.);
WHEN VALUE_ERRDR THEN
DBMS_OUTPUT.PUT_LINE(Error VALUE_ERROR interceptado.);
END;

/
Ejemplo de CASE-WHEN..THEN-END CASE sin ELSE y con gestin de errores
SET SERVERUTPUT DN
CREATE OR REPLACE PROCEDURE Nota(Calificacion VARCHAR) as
BEGIN

CASE Calificacion
WHEN Suspenso THEN
DBMS_0UTPUT.PUT_LINE(Nota >=0 y <5);
WHEN Suficiente THEN
DBMS_0UTPUT.PUT_LINE(Nota >=5 y <6);
WHEN Bien THEN
DBMS_UTPUT.PUT_LINE(Nota>=6 y <7);
WHEN Notab1e THEN
DBMS_UTPUT.PUT_LINE( Nota>=7 y <9) ;
WHEN Sobresa1iente THEN
DBMS_UUTPUT.PUT_LINE(Nota>=9 y <=10);
END CASE;
EXCEPTION

WHEN CASE_NT_FOUND THEN
DBMS_0UTPUT.PUT_LINE(Calificacin errnea);
END;

/
Cuando se desee interceptar cualquier error, la condicin OTHERS es ideal, pe-
ro para conocer qu error exactamente hizo saltar la excepcin se deben usar las
funciones especiales SQLCODE y SQLERRM.
252
Captulo 6. Programacinde basesde datos
Ejemplo de gestin de errores extrayendo los cdigos de error
SET SERVEROUTPUT UN
DECLARE

sue1doMaximo NUMBER(4); --saltar excepcin sisueldo>9999
codigoError NUMBER;
textoError VARCHAR2(64);
BEGIN

SELECT MAX(sue1do) INTO sue1doMaximo FROM contratados.nominas;
DBMS_0UTPUT.PUT_LINE(E1 sueldo ms alto es:|Isue1doMaximo);
EXCEPTIDN

WHEN THERS THEN
codigoError := SQLCDDE;
textoError := SUBSTR(SQLERRM, 1, 64);
DBMS_UTPUT.PUT_LINE(E1cdigo del error interceptado es: II
codigoError II y su texto: II textoError);
La variable sueldoMazrimoestde nida comoNUMBER(4) y soloadmitir valores
entre -9999 y 9999. Si en la tabla de nminashay algnempleadoqueganemsde
9999 euros,la sentencia SELECT Max(sueldo) retornar un valor queno puedeser
almacenadadentro de la variable sueldoMazimogenerndoseas una excepcin:
El cdigo del error interceptado es: -6502 y su texto: RA-O6502:
PL/SQL: error: precision de numero demasiado grande
6.7. Transacciones en scripts
Cuando en los programasademsde consultar los objetosde la basede datos
tambin sehacenmodi caciones en los mismos,resulta de vital importancia cono-
cer qu es una transaccin.Es la herramienta que tienen las basesde datos para
garantizar la integridadde losdatos.
Tal y comose introdujo en el captulo 5, una transaccines una seriede ins-
truccionesde manipulacinde datos(DML) queconstituyenuna unidadde trabajo
completa. Si el programafallara en mitad de una transaccin,deberaser capazde
deshacertodosloscambioshechoshasta esemomentoen la transaccinpara dejar
lastablas de la basede datostal y comoestabanoriginalmente.
Por ejemplo,en cualquieroperacinde transferenciabancaria, una unidadcom-
pleta de trabajo sera sumar el dinero a la cuenta destinoy restarlo de la cuenta
origen. Si despusde sumar el dinero a la cuenta destino, la transaccinfallara a1
restarlode la cuentaorigen, el programadebera deshacer1asuma del dinero a la
253
Bases de Datos
cuenta destino, de otro modo. el banco origen perdera el dinero de la transferencia.
Recuerda. A la operacin de deshacer se la conoce como hacer ROLLBA CK,
mientras que la operacin de validar el total de la transaccin es hacer
COJMMI T. Explcitamente. se pueden escribir esos comandos (ROLLBA CK y
COMMI T) en el programa para terminar la transaccin, no obstante, debe
tenerse en cuenta que existen operaciones que implican un commit implcito.
Tal es el caso de las sentencias de denicin de datos (DDL), es decir, si en
medio de una transaccin se creara una nueva tabla. implcitamente se estara
haciendo un commit, con lo que quedaran validadas todos las operaciones
anteriores y se pondra n a la transaccin. Otras formas de hacer commit
implcito es ejecutar un simple DISCONNECT para cerrar la conexin del
usuario actual a la base de datos. o ejecutar EXIT o QUIT para salir de la
sesin actual del SQL*Plus: en cambio, si en vez de sa.lir ordenadamente del
SQL*Plus se abortara su sesin, la base de datos hara un rollback implcito.
<> Actividad 5.2: Para comprobar el commit o rollback implcito en Oracle, crea
con SQL*Plus una tabla y haz pruebas con ella: insrtale un registro, valdalo con
COMMI T, inserta otro y aborta la sesin del SQL*Plus, vuelve a abrir una sesin
de SQL*Plus, comprueba que el nmero de registros que hay en la tabla. es solo uno.
inserta otro, crea otra tabla (se har commit implcito de la sesin), aborta la sesin
de SQL*Plus y comprueba que esta vez s que hay dos registros en la tabla original.
Sabas que . . . 7En muchos SGBD tambin es muy usado lo que se cono-
ce como TWO_PHASE-COMI\IIT. que es una forma de denir transacciones
en dos partes. de modo que una parte pertenecera a una base de datos y otra
a otra. Esto es muy corriente en sistemas que estn distribuidos en varias bases
de datos, por ejemplo. los datos de banca tradicionalmente se han encontrado
almacenados en bases de datos residentes en mquinas HOST. a las que tiene
que accederse desde bases de datos localizadas en mquinas UNIX para hacer
determinadas operaciones, las cuales solo podrn quedar validadas si las ope-
raciones hechas en las bases de datos del HOST han tenido xito, por lo que
la transaccin completa est dividida en dos partes, una en HOST y otra en
UNIX, pero solo podr ser validada si tuvo xito en ambos entornos.
254
Capitulo 6. Programacin de bases de datos
A continuacin se ofrece un ejemplo en el que se actualiza el sueldo a todos
los empleados contratados. La actualizacin consiste en subirles el IPC, pero solo
deber validarse en el caso de que todas las actualizaciones hayan tenido xito.
Ejemplo de subida de sueldo
SET SERVERUTPUT ON
DECLARE

ipc NUMBER(2,1) := 3.2;
codigoError NUMBER;
textoError VARCHAR2(64);
BEGIN

FOR i IN (SELECT sueldo, nif
FROM contratados.nominas) LOOP
UPDATE contratados.nominas SET sueldo =sueldo + sueldo *ipc /100
WHERE nif =i.nif;
END LOP;
CMMIT;
EXCEPTIDN
WHEN THERS THEN
codigoError := SQLCDDE;
textoError := SUBSTR(SQLERRM, 1, 64);
DBMS_0UTPUT.PUT_LINE(E1 cdigo del error interceptado es: II
codigoError II ysu texto: II textoError);
ROLLBACK;
Otro ejemplo servir para ilustrar el mismo caso anterior de subida de sueldo
masiva, pero en esta ocasin, en vez de validar la transaccin solo si todas las
actualizaciones han ido bien, se ir haciendo commit cada mil sueldos modicados,
de modo que se minimice el espacio necesario en el tablespace de UNDO de la base
de datos.
El consejo del buen administrador. . .
En actualizaciones, inserciones o borrados masivos, hay que tener presente e]
espacio para deshacer los cambios de que se dispone (espacio del tablespace de
UNDO).
255
13ases de [Datos
SET SERVERDUTPUT ON
DECLARE

ipc

contador
codigoError
textoError

contadorErrores
BEGIN

FOR i IN (SELECT
BEGIN
EXCEPTION

WHEN DTHERS
1 J
END;

contador :=
IF contador >=
CDMMIT;

contador :=
END IF;
END LODP;
-- (que no hayan
CMMIT;
EXCEPTION

WHEN DTHERS THEN
codigoError :=
textoError
S 9
RLLBACK;
END;

/
256
Ejemplo de subida de sueldo cada 1000 actualizaciones
FROM contratados.nominas) LDOP
UPDATE contratados.nominas SET sueldo "
WHERE nif
--Se pone un bloque de excepcin aqui para evitar que en caso de error
--en la sentencia de actualizacin el programa se acabe, de este modo,
--el bucle continuara actualizando el resto de sueldos
codigoError
textoError

DBMS_DUTPUT.PUT_LINE( Error enel UPDATE: II codigoError II
II textoError);
contadorErrores :=
-- Aqu se pone otro commit para validar los ltimos sueldos actualizados
DBMS_0UTPUT.PUT_LINE( El n de sueldos no actualizados por error fueronz
II contadorErrores);
:= SUBSTR(SQLERRM, 1, 64);
DBMS_0UTPUT.PUT_LINE( Error inesperadoz II codigoError II
II textoError);
CNSTANT NUMBER(2,1) :=
NUMBER(4) := 0;
NUMBER;

VARCHAR2(64);

NUMBER(38) :=
3.2;
0:
sueldo, nif
sueldo + sueldo * ipc / 100
= i.nif;
THEN

:=SQLCDE;
:= SUBSTR(SQLERRM, 1, 64);
contadorErrores + 1;
contador + 1;
1000 THEN
0;
cumplido la condicin de que contador sea 1000)
SQLCODE;
Captulo 6. Programacin de bases de datos
6.8. Las secuencias
En Oracle, al contrario que en I\IySQL no existe el tipo AUTOJNCREh/IENT.
En su lugar, hay un objeto especial llamado secuencia que sirve para obtener valores
secuenciales autoincrementados. Es ms manual que el campo AUTOJNCREMENT
de MySQL, pero tambin es mucho ms verstil, pudiendo ser utilizado en otros sitios
aparte de la clave primaria de una t.ab1a.
La sintaxis para la creacin de estos objetos es:
CREATE SEQUENCE secuencia
INCREMENT BY n
START WITH n
{MAX VALUE n I NMAXVALUE}
{MIN VALUE NI NMINVALUE}
{CACHE NI NCACHE};
Por ejemplo:
CREATE SEQUENCE NumFactura INCREMENT BY 1 START WITH 20
NMAXVALUE CACHE 40;
Con este comando se obtiene un objeto secuencia llamado N umFactura que comen-
zar en 20 y se incrementar de uno en uno sin valor mximo. Adems, en la memoria
cach del SGBD se almacenarn los 40 nmeros siguientes por lo que el acceso a la
secuencia ser muy rpido.
Se puede utilizar este tipo de objetos mediante una SELECT de forma muy sen-
cilla haciendo uso de las funciones CURRVAL (valor actual) y NEXTVAL (valor
siguiente).
-para incrementar la secuencia y devolver el nmero siguiente
SELECT NumFactura.NEXTVAL from DUAL;
--para devolver el nmero de factura actual
SELECT NumFactura.CURRVAL from DUAL;
257
Bases de Datos
6.9. Prcticas Resueltas
Prctica 6.1: Bajada de sueldo un 5 %
Con motivo de una crisis econmica se tiene que proceder a bajar el sueldo a todos
los funcionarios un 5%. Implementar un procedimiento en PL-SQL de Oracle que,
basndose en una tabla inventada, simule cmo se hara esa disminucin masiva del
sueldo, para ello:
1. Crea el esquema funcionarios al que pertenecern todos los objetos del pro-
blema, otorgarle permiso de DBA y abrir una sesin con l.
solucin
CREATE USER funcionarios IDENTIFIED BY passfun
DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
ALTER USER funcionarios QUTA UNLIMITED ON users;
GRANT DBA TU funcionarios;
conn funcionarios/passfun
2. Crea la tabla nominas con un campo llamado sueldo tipo NUMBER(8,2) y
otro llamado nif tipo VARCHAR2(9).
solucin
--La tabla se crear en el tablespace por defecto
CREATE TABLE nominas
(nif VARCHAR2(9) NOT NULL,
sueldo NUMBER(8,2) NOT NULL);
3. Crea una tabla donde se registren los errores en la actualizacin del sueldo. La
tabla se llamar erroresBajadaSue1do y tendr tres campos: nif, codigoError
y tezrtoError.
solucin
--La tabla se crear en el tablespace por defecto
CREATE TABLE erroresBajadaSue1do
(nif VARCHAR2(9) NOT NULL,
codigoError NUMBER,
textoError VARCHAR2(64));
4. Crea un paquete que se llame paq_bajada_sueldo que ser el que contenga todas
las funciones y procedimientos para llevar a cabo el problema. Dene una
258
Captulo 6. Programacin de bases de datos
constante para el porcentaje de bajada de sueldo. El paquete deber tener
adems:
a) Un procedimiento paq_bajada_sueldo. bajmsueldos que abrir un cursor pa-
ra recorrer todos los sueldos de los funcionarios y proceder a su dismi-
nucin. Adems, el procedimiento ser capaz de ir rellenando la tabla
erroresBajadaSuveldo con los errores encontrados en la actualizacin del
sueldo.
b) Una funcin llamada paq_bajada_sueldo.hubo-erroresjajandmsueldos que
evale la tabla de errores y determine si ha habido algn error o no. La
funcin tendr como parmetro de salida un booleano que indicar si
hubo algn error o no.
solucin
CREATE OR REPLACE PACKAGE paq_bajada_sue1do AS
PRDCEDURE baja_sue1dos;
FUNCTIN hubo_errores_bajando_sue1dos RETURN BOOLEAN;
--El porcentaje de bajada se define como
--una constante global al paquete
porcentaje CDNSTANT NUMBER := 5;
END paq_bajada_sue1do;
/
CREATE OR REPLACE PACKAGE BODY paq_bajada_sue1do AS
PROCEDURE baja_sue1dos IS
codigoE NUMBER;
textoE VARCHAR2(64);
BEGIN
FOR i IN (SELECT nif, sueldo
FROM nominas) LOOP
BEGIN

UPDATE nominas SET sueldo -i.sueldo -i.sueldo *porcentaje / 100
WHERE nif =i.nif;
--Se pone un bloque de excepcin aqui para evitar que
--en caso de error en la sentencia de actualizacin el
--programa se acabe, de este modo, el bucle continuara
--actualizando el resto de sueldos
EXCEPTION

WHEN THERS THEN
codigoE := SQLCODE;
textoE := SUBSTR(SQLERRM, 1, 64);
INSERT INTO erroresBajadaSue1do (nif, codigoError, textoError)
VALUES (i.nif, codigoE, textoE);
END;

COMMIT;
END LOP;
END baja_sue1dos;
259
Bases de Datos
FUNCTION hubo_errores_bajando_sue1dos RETURN BOLEAN IS
res BDOLEAN := FALSE;
numErrores NUMBER;
BEGIN

SELECT COUNT(*) intonumErrores from erroresBajadaSue1do;
IF numErrores >O THEN
res := TRUE;
END IF;
RETURN res;
END hubo_errores_bajando_sue1dos;
END paq_bajada_sueldo;
/
5. Escribecmoseinvocarala operativa completa:borradodel contenidode la
tabla de errores,llamada al procedimientobajmsueldos y llamada a la funcin
hubo-erroreabajandmsueldos.
solucin
SET SERVERDUTPUT DN
--Se borra el contenido antiguo de la tabla de errores
DELETE FROMerroresBajadaSue1do;
--Se invoca el procedimiento de bajada de sueldos
CALLpaq_bajada_sueldo.baja_sueldos();
--Se comprueba si hubo algn error
BEGIN
IF paq_bajada_sueldo.hubo_errores_bajando_sue1dos THEN
--Hubo errores. Se presentan por pantalla.
FOR iIN (SELECT *
FROMerroresBajadaSue1do) LOP
DBMS_0UTPUTPUT_LINE( Error al actualizar el sueldo del II
funcionario con NIF II i.nif II . Cdigo II i.codigoError Il
y su texto: II i.textoError);
END LOOP;
END IF;
END;
/
0
Prctica 6.2: Procedimientos almacenados en MySQL Crea una
tabla innodb en laBBDD jardineria llamada ActualizacionLmteCreditocontres
260
Captulo 6. Programacin de bases de datos
campos: Fecha, CodigoCliente, Incremento. Crea un procedimiento almacenado pa-
ra actualizar los lmites de crdito de los clientes en un7o del total pedido entre
2008 y 2010 registrando el incremento en la tabla creada. Al terminar, invoca al
procedimiento para actualizar el lmite de Crdito en un 15 (7o.
solucin
CREATE TABLE ActualizacionLimiteCredito(
Fecha DATETIME, CodigoC1iente INTEGER, Incremento NUMERIC(15,2)
) engine=innodb;
delimiter //
CREATEPROCEDURE IncrementaLimCredito (IN porcentaje INTEGER)
BEGIN
DECLARE Tota1Pedidos,Credito,Incremento NUMERIC(15,2);
DECLARE C1iente,Terminado INTEGER DEFAULT O;
#cursor para recorrer clientes
DECLARE curclientes CURSOR FOR
SELECT Limitecredito,CodigoC1iente FROM Clientes;
#A1 terminar de recorrerse, se activar la variable terminado
DECLARECONTINUE HANDLER FOR SQLSTATE O2000 SET Terminado =1;
#Si ocurre alguna excepcin se producir un rollback
DECLARE EXIT HANDLER FOR NOT FOUND rollback;
DECLARE EXIT HANDLER FOR SQLEXCEPTION rollback;
OPEN curC1ientes;
START TRANSACTION;
FETCH curC1ientes INTO Credito,C1iente; #primer cliente
WHILE NOT Terminado DO
SELECT SUM(Cantidad*PrecioUnidad) INTO Tota1Pedidos #Tota1 de pedidos?
FROM Deta11ePedidos
NATURAL JOIN Pedidos WHERE YEAR(FechaPedido)
BETWEEN 2008 AND 2010 AND Pedidos.CodigoCliente=Cliente;
IF Tota1Pedidos IS NOT NULL THEN #Si hay pedidos
SET Incremento=Tota1Pedidos*Porcentaje/100;
UPDATE Clientes SET LimiteCredito=LimiteCredito+Incremento
WHERE CodigoC1iente=C1iente;
INSERT INTO ActualizacionLimiteCredito VALUES(now(),C1iente,Incremento);
END IF;
FETCH curC1ientes INTO Credito,C1iente; #siguiente cliente
END WHILE;
COMMIT;
END;
//
delimiter ;
call IncrementaLimCredito(15); #Invocar al procedimiento
261
Bases de Datos
6.10. Prcticas Propuestas
Prctica 6.3: Bajada de sueldo v.2.0
Se va a efectuar una segunda versin del procedimiento de bajada de sueldo. Consiste
en bajar el sueldo a todos los funcionarios, esta vez en base a un determinado
porcentaje en funcin de su escala salarial. Extrapolar los objetos de la actividad
anterior para contemplar esta nueva situacin, para ello:
1. Aade a la tabla funcionaosmominas un campo que represente la escala
salarial. El campo se llamar grupo yser. de tipo CHAR
2. Crea una funcin llamada dame_porcentaje_segun_escala dentro del paquete
paq_bajada_sueldo que acepte como parmetro la escala salarial y devuelva
el porcentaje de disminucin a aplicar. La equivalencia entre uno y otro se
har mediante constantes globales al paquete: grupo A-10 7o, grupo B-8 (7o,
grupo C-5%, grupo D-3%.
3. Modica la funcin baja_sueldos de la prctica anterior para que llame a la
nueva damaporcentajasegun-escala para extraer el porcentaje.
4. Escribe cmo se invocara la operativa completa: borrado del contenido de la
tabla de errores, llamada al procedimiento baja_sueldos y llamada a la funcin
hubmerrores-bajandmsueldos.
Prctica 6.4: Bajada de sueldo v.3.0
Modica la funcin damaporcentajejegun_escala para que en vez de extraer la in-
formacin a travs de constantes, la extraiga de una tabla creada a tal efecto. La
tabla deber tener dos campos, uno con la escala (A,B. ..) yotro campo con el
porcentaje a descontar.
Sustituye el ltimo punto de la prctica anterior por un procedimiento que tambin
est almacenado en el paquete funcionarios. paq_bajada_sueldo. <>
262
Captulo 6. Programacin de bases de datos
Prctica Facturacin Se desea codicar un programa en PL-SQL para
poder lanzar el proceso de facturacin de la BBDD jardineria. Para ello, se debern
crear tres tablas con los siguientes comandos DDL:
solucin
CREATE TABLE Facturas (
Codigocliente integer,
Baselmponible Numeric(15,2),
IVA Numeric(15,2),
Total Numeric(15,2),
CodigoFactura INTEGER);
CREATE TABLE Comisiones(
CodigoEmp1eado integer,
Comision Numeric(15,2),
CodigoFactura integer);
CREATE TABLE AsientoContab1e(
Codigocliente integer,
DEBE Numeric(15,2),
HABER Numeric(15,2));
A continuacin programar, en un paquete llamado Facturacin:
1. Una funcin llamada UltimaFactura que devuelva el ltimo cdigo de factura
generado. Si no hay ningn registro en la tabla Facturas, devolver un 1.
2. Procedimiento Facturar: Este procedimiento grabar un registro en la tabla
de facturas por cada uno de los pedidos de la BBDD. Al mismo tiempo guar-
dar en la tabla de comisiones una comisin del 5 %del total del pedido para.
el emplea.do que haya generado la factura.
3. Procedimiento GenerarContabilidad: Este procedimiento guardar en la tabla
AsientoContable un registro por cada grupo de facturas, almacenando en el
campo DEBE la suma de las facturas que han sido generadas.
263
Bases de Datos
6.11.
264
Resumen
Los conceptos clave de este captulo son los siguientes:
Las aplicaciones de base de datos pueden ser de tres tipos distintos: codicada
en el lado del servidor, modelo cliente/ servidor y modelo en tres niveles.
Las sentencias SQL se pueden ejecutar de forma esttica o dinmica. Una
sentencia esttica debe precompilarse, vincularse y compilarse antes de ser
ejecutada en la aplicacin. Una sentencia dinmica. es creada en el momento
de la ejecucin.
El lenguaje PL/SQL fue desarrollado por Oracle para aadir ms potencia
de ejecucin a las sentencias SQL, con l es posible denir variables, crear
estructuras de control de ujo y toma de decisiones. . .
Las partes de un programa PL/ SQL son el bloque DECLARE, el bloque BE-
GIN..END y el subbloque EX CEPTION.
Los distintos programas que pueden crearse con el uso del lenguaje PL / SQL
son: procedimientos, funciones, bloques annimos y triggers.
Los procedimientos y funciones pueden estar contenidos dentro de otros objetos
ms grandes llamados paquetes, los cuales estn compuestos por la cabecera y
el cuerpo.
SQL*Plus es la herramienta que proporciona Oracle para conectarse a la base
de datos por lnea de comandos y ejecutar todo tipo de comandos de base de
datos, incluidos programas PL /SQL.
En PL/SQL hay datos de tipo carcter, numrico, fecha, booleanos, y datos
grandes entre otros. Adems existen muchas funciones para gestionarlos, aun-
que aqu solo se ha tratado la SUBS TR. Existen tambin, operadores para
hacer operaciones aritmticas, comparaciones y concatenaciones.
Las estructuras de control sirven para controlar el ujo del programa, la toma
de decisiones y programar las acciones en consecuencia. Aqu se han estudiado
el IF, CASE, LOOP, WHILE y FOR. Los tres ltimos son bucles, y son muy
tiles para recorrer cursores.
El control de excepciones es un bloque opcional dentro de la programacin
pero muy recomendable. Sirve para interceptar los errores de ejecucin del
programa y tomar las medidas oportunas en consecuencia, de otro modo el
programa terminara abrupta y descontroladamente.
6.12.
Captulo 6. Programacin de bases de datos
Test de repaso
1. Qu tipo de variable tendra que de-
nirse para albergar el dato 3.2?
a) CHAR(3)
b) NU1\IBER(2,1)
c) NUMBERU(3)
d) a) y b)
2. Qu es el ROWID?
a) Es una la especial de la tabla
b) Es una funcin ideal para generar las au-
tomticamente
c) Es una columna interna que almacena la
direccin fsica de cada la
d) Es un tipo de excepcin muy utilizada
3. Cmo se dene una constante?
a) nombre_de_]a_constante CONSTANT ti-
po_de_dato := valor;
b) nombre-de.la-constante tipo_de_dato :=
valor CONSTANT
c) CONSTANT nombre_de_la_const.ante ti-
po_de_dato := valor:
d) nombre_de_1a_constante CONSTANT ti-
po_de_dato := valor
4. La expresin 5 =5 es:
a) FALSE
b) TRUE
5. El extracto de denicin
dame_sueldo() RETURN NUMBER(6)
IScorresponde a
a) Un procedimiento
b) Una funcin
C) Un disparador
)
d Un paquete
6. Si la variable suspenso es TR UE,
qu valor tendr la expresin NOT sus-
penso
a) NULL
b) FALSE
c) TRUE
7. Si la variable gallo es Wikir-ik,
qu valor resultar de la funcin
REPLACE(gallo, i, o):
a) o
b) oooooooo
c) kokoroko
)
d kokorok
8. Qu funcin se usa para escribir
mensajes por pantalla en los programas
PL/SQL?
a) PUT_LINE
b) DBMS_OUTPUT.PUTLINE
c) DB1\ISOUTPUT.PUT_LINE
d) PUTLINE
9. Qu variable de entorno del
SQL*Plus hay que activar para que la
funcin de la pregunta 8 escriba por la
salida estndard?
a) La funcin escribe siempre
b) SEVER_OUTPUT
c) SERVEROUTPUT
a&#39;s&#39;esp&#39;&#39;q&#39;9q&#39;9qr&#39;e&#39;sn&#39;zp&#39;t seuoxannos
265
Bases de Datos
.Explica qu es la
Qu es una transaccin?
En qu consiste la validacin
transaccional implcita?
Para qu se usa el atributo %TYPE?
y %ROWTYPE?
Pon ejemplos con todos los opera-
dores de comparacin.
Ventajas del uso del R0 WID.
Dnde se puede usar la clusula
EX] T WHEN?
Para qu sirve la tabla de sistema
Cul es el signo comodn en las
comparaciones entre datos de tipo
cadena?, cmo se usa?
Qu hace la instruccin FETCH
en el contexto de los cursores?
El atributo NOTFOUND, de
dnde es, para qu es y cmo se
conversin
implcita de tipos de datos.
Qu signica que en una base de
datos todos los objetos tienen que
estar identicados unvocamente?
Expon las diferencias entre proce-
dimientos y funciones.
6.13. Comprueba tu aprendizaje
1. Dene qu es un cursor, para 15.
qu sirve y distintas formas de re-
correrlo. 16&#39;
2. Dene los distintos bloques de que
se compone un programa PL /SQL. 17&#39;
3. Para qu se usan los paquetes? 18
4. Dene qu es un disparador y los ti-
pos distintos que hay. Pon un ejem-
plo. 19&#39;
5. Enuncia las diferencias entre el 20&#39;
SQL dinmico y el esttico.
6. Qu son los datos tipo LOB? Pa- 21&#39;
ra qu sirven? D UAL?
7. Enumera los tipos de datos tipo 22&#39;
carcter.
8. Enumera los tipos y subtipos de da-
tos tipo numrico. 23&#39;
9. Enumera los tipos de datos tipo fe-
Cha_ 24.
10. Ventajas del CASE frente al usa?
IF..ELSIF y al revs. 2_

o
11. Ventajas del LOOP frente al WHI-
LE y al revs.

26.
12. Qu error intercepta el evento
NO_DATA_FOUND?
13. Cundo se producir un 27.
T00_MANY_RO WS?
14. Explica cmo se usan las funcio- 28.
266
nes especiales SQLCODE y SQ-
LERRM.
Explica los distintos tipos de apli-
caciones de base de datos que exis-
ten.
CAPTULO 7
BBDD distribuidas
Contenidos Qbjet VOS
BBDD YSGBD distribuidos "S? Reconocer la utilidad de las ba-
g Colnponentes de una BBDD ses de datos distribuidas
distribuida Conocer cmo realizar consul-
,. ., tas
Tecnicas de fragmentacion
WConocer el funcionamiento de
Consultas distribuidas las transacciones distribuidas
Transacciones distribuidas . . . . , .
Describir las distintas politicas
bre bases de datos distribuidas C101-
En este captulo se explican las peculiaridades de las consultas en bases de
datos distribuidas, se realizan operaciones bsicas para que e] alumno aprecie
Ia complejidad de este tipo de sistemas ya1 mismo tiempo su sencilla implan-
tacin, gracias a las propias herramientas proporcionadas por 10s SGBD.
267
Bases de Datos
7.1. BBDD y SGBD distribuidos
Cuando una base de datos est controlada por ms de un servidor se dice que
est distribuida. Estos servidores estn interconectados mediante una red de te-
lecomunicaciones y los SGBD proporcionan mecanismos para poder consultar la
informacin independientemente del servidor y la ubicacin de los datos. As por
ejemplo, una consulta con una join entre la tabla de pedidos y la de clientes puede
estar accediendo a dos servidores con dos instancias de bases de datos distintas.
Incluso, si las tablas estn particionadas es posible que la misma consulta est acce-
diendo a ms de dos servidores. Esto proporciona una especie de balanceo de carga
para que la informacin pueda ser accedida lo ms rpidamente posible. De esta
manera se consiguen los siguientes benecios:
1. Ms rapidez en el acceso a los datos y capacidad de almacenamiento. Al au-
mentar el nmero de ordenadores donde se depositan los datos, aumenta la
capacidad de computacin, y por tanto, la capacidad de bsqueda de la infor-
macin.
2. Acceso ms exible. El nmero de usuarios conectados que puede mantener el
sistema se incrementa al haber ms capacidad de cmputo y, gracias a la red
de la BBDD distribuida, los usuarios pueden acceder desde ms ubicaciones.
3. Escalabilidad. Distribuyendo una base de datos en distintas ubicaciones se
permite incrementar de forma muy sencilla los recursos en cualquier momento
para acomodar el sistema a las demandas de los usuarios ylas aplicaciones.
4. Fiabilidad y cierta capacidad de tolerancia a fallos. Realizando una buena
poltica de fragmentacin de la base de datos es posible conseguir que aunque
algn nodo de la base de datos distribuida sufra algn percance, el resto del
sistema siga funcionando con normalidad.
Por otro lado, no todo son benecios, no hay que perder de vista que estos sis-
temas son muy costosos de implementar no solo por la duplicidad de recursos en
trminos de red y servidores, tambin por la dicultad de la administracin de los
datos ubicados en distintas localizaciones y porque se introduce un elemento catico
como la dependencia de las redes de comunicaciones para el correcto funcionamiento
del intercambio de los datos. Ademas, la atomicidad de las operaciones es ms com-
plicada de conseguir por lo que la gestin transaccional tiene dicultades aadidas
como se comentar en la seccin 7.3.2.
7.1.1. Componentes de una BBDD distribuida
Para poder crear una base de datos distribuida hay que tener los siguientes
componentes.
268
Captulo 7. BBDD distribuidas
1. Sistemas gestores con capacidades distribuidas o un SGBD distribuido en
s mismo.
2. Un conjunto de bases de datos locales a cada uno de los servidores que alber-
garn la BBDD.
3. Una red de comunicaciones, generalmente basada en el protocolo TCP-IP para
poder aprovechar las infraestructuras existentes.
4. Enlaces entre las BBDD locales. Los SGBD deben ser capaces de establecer
enlaces entre las diversas bases de datos locales, de tal manera que cualquier
consulta pueda ser redirigida al servidor donde est la BBDD local.
5. Un diccionario de datos global que indique en qu ubicacin est cada uno de
los datos que componen la BBDD distribuida.
BASE DE DATOS DISTRIBUIDA
BBDD Ventas A BBDD Marketing B
Red de Comunicaciones 1_
select sun (Total)
from Pedidoseventas:
insert into Balances values . . .
update Pronocionr-llarketinq ..
Cosmic:
Enlace A-C Nace B-C
BBDD Contabilidad C
Figura 7.1: Componentes de una base de datos distribuida.
Dependiendo del tipo de componentes elegidos en la formacin de una base de
datos distribuida se pueden tener:
1. BBDD distribuidas homogneas: En estas el SGBD utilizado es el mismo para
todas las BBDD locales. Generalmente, el SGBD proporciona. la tecnologa
para el enlace de las distintas BBDD locales.
2. BBDD distribuidas heterogneas: Las bases de datos estn distribuidas inde-
pendientemente del SGBD utilizado como local. En este caso, las aplicaciones
269
Bases de Datos
que consultan la base de datos distribuida juegan un papel fundamental como
media.dor.
7.2. Tcnicas de fragmentacin
El contenido de una tabla puede separarse en varios fragmentos que contendrn
suciente informacin como para poder reconstruir la tabla original en caso de que
sea necesario. Cada fragmento se encontrar en un nodo diferente, pero esta distri-
bucin a travs de distintos nodos no duplica los registros, solo existir una copia
de cada elemento, por lo que, al no haber replicacin. disminuye el coste de alma-
cenamiento en detrimento de la disponibilidad y abilidad de los datos en caso de
cada de algn nodo.
La fragmentacin puede ser horizontal o vertical y se puede aplicar sucesiva y
alternativamente sobre la misma tabla:
Horizontal: los fragmentos son subconjuntos de una tabla y se denen a travs
de una operacin de seleccin. La tabla original se reconstruye en base a una
operacin de unin de los fragmentos componentes.
Vertical: los fragmentos son subconjuntos de los atributos con sus valores. Para po-
der recomponer la tabla original, cada fragmento debe incluir la clave primaria
de la tabla.
Mixta: se mezclan las dos tcnicas anteriores.
Para que una fragmentacin sea correcta, esta debe cumplir con las siguientes
reglas:
IDebe ser completa, es decir, cada elemento de la tabla debe estar en algn
fragmento.
n Debe ser reconstruible, lo cual implica que debe ser posible conseguir una tabla
completa a partir de la combinacin de todos los fragmentos.
ILos fragmentos deben ser disjuntos, esto signica que si la fragmentacin es
horizontal, un elemento que est en un fragmento concreto no puede estar en
ningn otro fragmento ms que en aqul. En el caso de fragmentacin vertical,
puesto que es necesario que se repitan las claves primarias, esta condicin solo
se tiene que cumplir para el conjunto de atributos que no son clave primaria.
270
Captulo 7. BBDD distribuidas
7.3. Consultas distribuidas
Algunos SGBD manejan el concepto de sistemas de bases de datos distribuidas
de forma que cualquier aplicacin que haga consultas al gestor pueda acceder a su
base de datos de forma local y adems, acceder a datos de bases de datos remotas.
Oracle basa su concepto de bases de datos distribuidas en un objeto llamado DA-
TABASE LINK (Enlace a base de datos). Los DATABASE LINKs son una conexin
unidireccional entre una base de datos (cliente) y otra (servidor). Oracle puede sopor-
tar bases de datos homogneas y heterogneas. Para soportar sistemas heterogneos
es necesario que Oracle pueda acceder a los datos como si estuviese accediendo a
otra base de datos Oracle, por lo que cuenta con agentes llamados Transparent Ga-
teways (Pasarelas transparentes). Estos agentes son interfaces que proveen todo lo
necesario para poder recuperar, insertar, actualizar o borrar informacin de forma
transparente para las aplicaciones que se ejecutan desde Oracle.
7.3.1. DB Links
Un database link es una conexin entre bases de datos. Es unidireccional por
lo que se crea desde una base de datos que quiere referenciar a otra. Para que un
usuario pueda crear estos DB Links son necesarios los siguientes privilegios:
n CREATE DATABASE LINK (En local).
uCREATE PUBLIC DATABASE LINK (En local).
ICREATE SESSION (En remoto).
Es posible consultar los DB Links en las vistas USER_DB_LIN KS, ALL_DB-LINKS
y DBA_DB_LINKS dependiendo del usuario con el que se est conectado al SGBD.
Existen tambin los enlaces compartidos o SHARED DB LINKS. La diferencia
es que mltiples procesos clientes pueden usar el enlace compartido simultneamen-
te. Para crear un DB link es necesario que exista la conexin entre las bases de
datos a travs de Oracle Net Services, por lo que se debe crear una entrada en el
tnsnames.ora de la base de datos a la que se quiere referenciar. Dentro de la de-
nicin se puede elegir si la conexin es dedicada o compartida, y no es lo mismo
denir que la conexin que va a usar el DB link sea compartida a crear un DB
link compartido. A continuacin, se muestra un ejemplo de creacin de un DB link
para conectar una BBDD en versin 10gR2 con una BBDD 11gR2. La entrada en
el chero tnsnames.ora es:
271
Bases de Datos
t11r2_u =
(DESCRIPTION =
(ADDRESS =(pnorocor = TCP)(HOST =192.168.1.129)(PORT =1521))
(CDNNECT_DATA =
(SERVER =DEDICATED)
(SID =t11r2)
)
)
t11r2_u en este caso, es el nombre de la entrada para la conexin remota al
servidor con direccin IP 192.168.1129.
Una vez agregada la entrada al chero se puede utilizar la herramienta tnsping
para comprobar que hay conectividad:
C:\Documents and Settings\usuario>tnsping t11r2_u
TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 -Production on 05-MAY-2011 23:23:47
Copyright (c) 1997, 2007, Oracle. A11 rights reserved.
Archivos de parmetros utilizados:
C:\orac1e\product\10.2.0\db_1\network\admin\sq1net.ora
Adaptador TNSNAMBS utilizado para resolver el alias
Attempting to contact (DESCRIPTIDN = (ADDRESS =(PROTOCOL = TCP)(HOST =192.168.1.129)
(PORT =1521)) (CONNECT_DATA =(SERVER =DEDICATED) (SID = t11r2)))
Realizado correctamente (40 mseg)
Una vez creada la entrada del chero tnsnames yprobada, se pueden crear DB
links pblicos o privados, y es posible, adems, usar un usuario especco para la
conexin en la base de datos a referenciar. Para crear un DB Link desde el usuario
local al usuario remoto, se ejecutara el siguiente comando:
SQL> CREATE DATABASE LINK tj_11r2
2 CONNECT TD usuario IDENTIFIED BY password
3USING t11r2_u;
Enlace con la base de datos creado.
Al ejecutar el comando anterior, se crea un objeto llamado tj_11r2 que usar la
entrada tnsnames t11r2_u para conectarse a la BBDD remota. Despus, para probar
la conexin, se utiliza el nombre del enlace (tj_11r2) para ejecutar una consulta:
272
Captulo 7. BBDD distribuidas
SQL> select *from dua1@tj_11r2;
Tambin se pueden crear DB Links pblicos que pueden ser usados por cualquier
usuario, y adems, sean usados por usuarios que tambin existan en la BBDD que
se referencia:
SQL> CREATE PUBLIC DATABASE LINK tj_11r2 2USING t11r2_u;
Enlace con la base de datos creado.
7.3.2. Ejecucin de consultas distribuidas
Las consultas distribuidas son consultas que recuperan informacin de 2 o ms
nodos en un entorno de bases de datos distribuido. No es lo mismo que hablar de
consultas remotas, las consultas remotas son consultas que se realizan a. una o ms
tablas de una base de datos remota. Es importante diferenciar entre estos dos tipos
de consultas las distribuidas y remotas porque internamente son diferentes.
Un ejemplo de una consulta remota es el siguiente:
SQL> select count(8)
2 from pacientes0t11r2;
T11R2 es un DB LINK pblico creado a una BBDD 11gR2 en Linux, y la base
de datos cliente est en 10gR2 en Windows. La ejecucin de la consulta anterior
prueba que existen conexin entre versiones diferentes. Esto se logra a travs de
Oracle Net Services.
En una consulta distribuida puede darse el caso de que existan relaciones frag-
mentadas. Esto se ilustra en el ejemplo siguiente:
273
Bases de Datos
Primero se muestra la tabla PACIENTES, fragmentada en dos bases de datos en
distintos servidores y con la siguiente descripcin:
SQL> desc pacientes
NOT NULL NUMBER
VARCHAR2(100)
HABITACION
SQL) desc pacientes@t11r2
NOT NULL NUMBER
VARCHAR2(100)
FECHA_ENTRADA DATE
Ahora, se consulta un paciente con ID 1, su habitacin y fecha de ingreso:
SQL> select 1.id, 1.habitacion, r.fecha_entrada
2 from pacientes 1,
pacientesOt11r2 r
where 1.id=r.id
and 1.id=1
ID HABITACION FECHA_EN
10 26/04/11
Esta consulta extrae informacin de dos bases de datos ubicadas en servidores dis-
tintos, por tanto, es distribuida. Adems, desde la base de datos servidor se puede
ver lo siguiente en la vista VSSESSION:
SQL> select sid, seria1#, username, program, event, machine ,server
2 from vSsession
3 where username=TJ;
SID SERIAL# USERNAME PROGRAM MACHINE
0RACLE.EXE SQL*Net message from client VILLEGUILLO DEDICATED
Esto demuestra que cada vez que se realice una consulta a una base de datos
remota, se abre una sesin con server process dedicado si se dene en el tnsnamesora
que sea dedicada. Dejar las conexiones abiertas puede llegar a ser un problema: si se
Va a crear un proceso que lanza cientos de consultas yque va a muchos nodos en un
274
Captulo 7. BBDD distribuidas
entorno de bases de datos distribuido, y que adems este proceso lo van a ejecutar
muchas sesiones, en diferentes nodos, es seguro que se generar una explosin de
conexiones abiertas, incrementando de forma radical el consumo de recursos.
Para evitar esta explosin de conexiones abiertas, se puede ejecutar el cierre de
los DB Links ejecutando:
SQL> alter session close database link t11r2;
Sesin modificada.
--Esto cierra la sesin en la base de datos servidor:
SQL) select sid, seria1#, username, program, event, machine, server
2 from vSsession
3* where username=TJ
no rows selected
7.4. Transacciones distribuidas
Una transaccin distribuida es una transaccin que contiene una o ms sentencia
y que se realiza en 2 o ms nodos dentro de un entorno de base de datos distribuido.
Tambin existen las transacciones remotas, y al igual que las consultas remotas,
son transacciones con una o ms sentencias que se realizan en una base de datos
remota.
Los elementos que pueden intervenir a tener en cuenta en una transacin distri-
buida se pueden ver en la siguiente gura:
oo:-ina-or o-a
COHHIT point sic:
Coordinador Local
BD Cliente
.i
\R
r
BD Servidor 1 no Servidor 2 BD Servidor n
\
Figura 7.2: Transaccin distribuida.
En esta gura se observan los siguientes elementos:
BD Cliente Es un nodo que acta como cliente donde se referencia la transaccin
distribuida. Esta BD tiene los DB links que conectan con el resto.
275
Bases de Datos
BD Servidor Son las bases de datos que contienen informacin que va a ser mo-
dicada por la transaccin distribuida.
Coordinador Local Es un nodo que debe referenciar datos sobre otros nodos para
completar su parte de la transaccin distribuida.
Coordinador Global El nodo donde se origina la transaccin distribuida.
Commit Point Site Es el nodo que inicia las operaciones de COMMIT o ROLL-
BACK con las instrucciones dadas por el coordinador global. Este punto se
dene con el parmetro COMMITPOINTSTRENGTH, en un entorno ho-
mogneo todas las BBDD tienen un parmetro como este. La base de datos
con el valor mayor en este parmetro se convierte en COMMIT POINT SITE.
7.4.1. TWO-PHASE COMMIT
Un SGBD debe garantizar la atomicidad en la informacin de sus bases de datos
y en los entornos con bases de datos distribuidas tambin. Para que esto se produzca,
se usa el mecanismo de TWO-PHASE COMMIT o proceso de COIIMIT en entornos
distribuidos. Su ejecucin es un poco ms complicada. Se divide en 3 partes:
Fase de preparacin Es la primera fase y consiste en que el coordinador global
informa a todos los nodos que van que se va a realizar CORIMIT o ROLL-
BACK. Esto se traduce en que cada nodo se prepara para una finalizacin de
la transaccin distribuida. Para. ello realiza 2 tareas:
1. Almacena la informacin de Redologs.
2. Genera un bloqueo distribuido sobre la tabla para prevenir lecturas.
Cuando se realizan estas 2 operaciones el nodo dice que est comprometido
para la nalizacin de la transaccin distribuida.
Fase de commit Despus de que todos los nodos se comprometen a realizar la
transaccin, se realizan los siguientes pasos:
1. El coordinador global avisa al COMMIT POINT SITE de que se va a
realizar el COMMIT.
2. El COMMIT POINT SITE realiza el COMMIT.
3. El COMMIT POINT SITE indica al coordinador global que hizo el COM-
MIT.
4. Los coordinadores globales ylocales envan mensajes a todos los nodos
para hacer COMMIT de la transaccin.
276
Captulo 7. BBDD distribuidas
5. Cada nodo realiza su parte local del COMMIT de la transaccin distri-
buida y quitan el bloqueo distribuido generado.
6. Todos los nodos notican a al coordinador global que han realizado el
COMMIT.
Fase de olvido Cuando todos notican al COMMIT POINT SITE que se ha rea-
lizado el COMMIT, se realizan las siguientes tareas:
1. El COMMIT POINT SITE borra la informacin acerca del estado de la
transaccin distribuida.
2. El COMMIT POINT SITE informa al coordinador global que ha borrado
ese estado.
3. El coordinador global borra la informacin de la transaccin distribuida.
7.4.2. Ejemplo de transaccin distribuida
Con la tabla pacientes ubicada de forma fragmentada en dos bases de datos, se
realizan las siguientes operaciones:
select *
from pacientes;
ID NOMBRE HABITACION
1Pacientel
select *
from pacientes@t11r2
ID NOMBRE
1 Pacientel 26/O4/11
update pacientes
set nombre=P1
where id=1;
1fila actualizada.
SQL> update pacientes@t11r2
2 set nombre=P1
3* where id=1
1 fila actualizada.
SQL> update pacientes
2 set habitacion=10
3 where id=2;
1fila actualizada.
277
Bases de Datos
Antes de realizar commit, se puede observar qu est sucediendo, las transaccio-
nes creadas y los bloqueos generados en la BD servidor que en este caso es t11r2:
SQL> select saddr, sid, serial#, username, program, machine
2 from vssession
3where username =TJ;
SADDR SID SERIAL# USERNAME PROGRAM
37EFD738 28 sqlplusccaar (TNS V1-V3) caar
STEFACCC 29 0RACLE.EXE VILLEGUILLO
SQL> select SES_ADDR,START_TIME,STATUS,XID
2from vstransaction;
SES_ADDR START_TIME
37EFACCC 05/O6/11 16:03:43 ACTIVE 0600000062010000
SQL> select 1
2 from vslock
3vhere sid=29;
ADDR KADDR LMDDE REQUEST CTIME BLOCK
37ACA524 37ACA55O 29 AE
00579434 00579464 29 TM 13704
36908094 369C8OD4 29 TX 393216
Se observa que la transaccin existe, que la transaccin es generada por la se-
sin de la conexin de la BD cliente y que tiene un bloqueo exclusivo sobre la
(LMODE=3 rowX) sobre la tabla PACIENTES:
SQL> select object_id
2 from dba_objects
3 where object_name=PACIENTES;
DBJECT_ID
A continuacin, tambin se muestran sesiones, transacciones y bloqueos en la
BD Cliente:
SQL> select saddr, sid, seria1#, username, program
2 from vssession
3* where username=TJ
278
Captulo 7. BBDD distribuidas
SADDR SID SERIAL# USERNAME PROGRAM
30F42BFC 1773 TJ sq1p1us.exe
SQL> select SES,ADDR,START_TIME,STATUS,XID
2* from vstransaction
SES_ADDR START_TIME
30F42BFC 05/06/11 16:02:46 ACTIVE 08002EO0F818000O
SQL> select t
2 from vslock
3 where sid=146;
ADDR KADDR LMODE REQUEST CTIME
2F5C67E4 2F5C67FC 146 TM 45926
2F616204 2F616228 146 TX 524334 6392
Tambin se puede observar la informacin de los DB links abiertos en la sesin
con la vista VSDBLINK. Esta consulta se ejecuta en la propia sesin que tiene la
transaccin:
SQL> desc vsdblink
DB_LINK vmcmazuzs)
OHNERJD NUMBER
LOGGED_0N VARCHAR2(3)
HETEROGENEOUS VARCHAR2 (3)
PROTCDL VARCHAR2(6)
opmLcunsons NUMBER
IN_TR.ANSACTION vacunas)
UPDATE_SENT VARCHAR2(3)
COMHIT_POINT_STRENGTH NUHBER
SQL> select #
2 from vsdblink;
DB_LINK OWNER_ID LOG HET PRDTOC PEN_CURSORS IN_ UPD CMIT_POINT_STRENGTH
38 YES N0 UNKN
Una vez realizado el COMMIT, desaparecen las transacciones y los bloqueos. Y
la vista de estado de DB links abiertos en la sesin muestra:
SQL) select t
2 from vSdb1ink;
DB_LINK 0HNER_ID LOG HET PROTOC 0PEN_CURSORS IN_ UPD COMMIT_POINT_STRENGTH
38 YES ND UNKN
279
Bases de Datos
Cuando una transaccin falla en alguno de los puntos la transaccin se convierte
en transaccin dudosa. Puede pasar cuando algn nodo se cae, la conexin de red
en la comunicacin de algn nodo falla o cualquier error de software no controlado.
El proceso RECO es el encargado de resolver las transacciones dudosas automti-
camente y hasta que REC O no pueda resolver la transaccin dudosa, el dato queda
bloqueado para lectura o escritura.
7.5. Optimizacin de consultas sobre bases de da-
tos distribuidas
Cuando se realiza una consulta distribuida, hay que tener en cuenta los siguientes
parmetros:
OPEN_LINKS Congura la cantidad de mxima de conexiones abiertas concu-
rrentemente para bases de datos remotas por cada sesin.
COMMIT_POINT_STRENGTH Especica el valor de commit point site en
una transaccin. El nodo con el valor n1s alto se transforma en el commit
point site.
Lo primero a tener en cuenta de optimizacin de consultas distribuidas son las
estadsticas, tanto de las estadsticas de sistemas, como las de todos los segmen-
tos que puedan intervenir en la consulta. Se ha de recordar que es transmisin de
informacin por red, por lo que es importante que se la mnima cantidad.
Para optimizar consultas distribuidas en Oracle se suelen utilizar dos tcnicas.
Usar consultas derivadas para disminuir la cantidad de informacin que se quie-
re recuperar a travs de la red y la utilizacin de los hints NQMERGE yDRI-
VINGLSI TE.
7.5.1. Optimizacin mediante consultas derivadas
Las consultas derivadas o INLINE VIE WS se convierten en una estructura en
memoria. Utilizando estas construcciones, se puede disminuir la cantidad de infor-
macin que se desea recuperar. Por ejemplo, la consulta:
select l.id, l.habitacion, r.fecha_entrada
from pacientes 1,
pacientes@t11r2 r
where 1.id=r.id
and 1.id=1
280
Captulo 7. BBDD distribuidas
se puede optimizar utilizando una tabla derivada de la siguiente manera:
select 1.id, l.habitacion, r.fecha_entrada
from pacientes 1,
(select id, fecha_entreda
from pacientes@t11r2
where id=1) r
where 1.id=r.id
and 1.id=1
De esta manera, se recupera tan solo la informacin concerniente a un nico paciente
(el paciente con id=1), en lugar de todos los pacientes de la base de datos remota.
7.5.2. Optimizacin mediante hints
En entornos distribuidos es ms comn que el optimizador pueda no ser del todo
bueno con los planes de ejecucin, as que el uso de Hints (y su constante control)
puede ser til en mucho casos.
Con los Hints se pueden controlar cmo realizar una consulta. Por ejemplo,
NO_MERGE evita los posibles no usos de consultas derivadas porque el optimizador
puede determinar cambiar una tabla derivada por una join.
Con DRIVINGSITE se dene en qu nodo se va a desarrollar la consulta, de tal
manera que la BD donde se mezcle la informacin sea la que va a recibir menor
cantidad de informacin a travs de la red. Ejemplos de los cambios que producen
estos Hints:
Ejecucin sin hint:
SQL> select 1.id, 1.habitacion, r.fecha_entrada
2 from pacientes 1,
3(select id, fecha_entrada from pacientes@t11r2 where id=1) r
4where l.id=r.id and l.id=1
IDHABITACION FECHA_EN
10 26/04/11
281
Bases de Datos
Ejecucinconel hint NOJIERGE:
SQL> select /*+ N0_MERGE(r) */ l.id, l.habitacion, r.fecha_entrada
2 from pacientes 1, pacientes@t11r2 r
3 where 1.id=r.id and 1.id=1;
ID HABITACION FECHA_EN
10 26/04/11
Ejecucinconel hint DRIVINCLSITE:
SQL> select /*+ DRIVING_SITB(r) */
2 1.id, 1.habitacion, r.fecha_entrada
3 from pacientes 1, pacientes@t11r2 r
where 1.id=r.id and 1.id=1;
ID HABITACION FECHA_EN
10 26/O4/11
282
Captulo 7. BBDD distribuidas
7.6. Prcticas Resueltas
Prctica 7.1: Configuracin de BBDD distribuidas
Prepara dos mquinas virtuales con Oracle y congralas dando a una m.quina la
direccin 192.168.1.101 y a la otra la direccin 192.168.1.102. A continuacin:
1. Edita el chero tnsnamesora que est ubicado en el directorio \SORACLE_
HOME/network/ admin de ambas mquinas para agregar dos entradas que per-
mitan enlazar las dos instancias.
Editar el chero tnsnames en cada una de las mquinas introduciendo el siguiente cdigo:
JARDIN=

(DESCRIPTIDN

(ADDRESS -(PROTOCOL = TCP)(HOST =192.168.1.101)(PDRT
(CNNECT_DATA =(SERVER =DEDICATED)
(SERVICE_NAME =jardin)
)
)
JARDIN2 =
(nsscnrprron =
(ADDRESS =(PRDTOCOL =TCP)(HOST =192.168.1.102)(PDRT
(CONNECT_DATA =(SERVER =DEDICATED)
(SERVICE_NAME =jardin)
)
)
2. Comprueba que haya conectividad tns entre las dos instancias.
En la mquina 192.168.] .101 ycon el usuario oracle, introducir el comando:
tnsping jardin2
yen la mquina 192.168.] .102 introducir el comando:
tnsping jardin
3. Crea enlaces entre cada mquina. necesarios para poder hacer consultas desde
una mquina a la otra con el esquema jardineria. Desde la mquina 192. 168.1.101
a la 102 el enlace se llamar contabilidad, mientras que de la 102 a la 101 se
llamar facturacion.
Primero hay que dar al usuario jardineria permisos de CREATE LINK en cada una de las mquinas:
sqlplus / as sysdba
Despus, ejecutamos el comando SQL:
grant create database link to jardineria;
Finalmente, podemos ejecutar los comandos de creacin de los enlaces. Desde la mquina 1921631.101:
283
Bases de Da tos
CREATE DATABASE LINK contabilidad
CONNECT T0 jardineria IDENTIFIED BY jardineria
USING jardin2;
Yen la mquina 192.J68.1.102:
CREATE DATABASE LINK facturacion\\
CONNECT T0 jardineria IDENTIFIED BY jardineria\\
USING jardin;\\
}
Prctica 7.2: Trabajando con BBDD distribuidas
Realiza los siguientes ejercicios para aprender cmo trabajar con DB Links:
1. Edita la tabla. empleados en la. mquina 192.168.1101 para aadir un campo
que indique qu porcentaje de comisin se lleva cada empleado de los pedidos
que gestiona y pon a todos los empleados un 5 C78 de comisin.
Desde la mquina 1921631.101, ejecutar:
alter table empleados add PorcentajeComision number(5,2);
update empleados set PorcentajeComision. =5;
2. Crea una tabla llamada Comisiones en la mquina 192.168.1102 con los cam-
pos CodigoEmpleado, CodigoPedido, TotalPedido yComision.
No es posible ejecutar comandos DDL a. travs de DB Links, por tanto, desde la mquina 1921681.102,
ejecutamos el siguiente comando DDL:
create table Comisiones(
CodigoEmp1eado integer,
CodigoPedido integer,
TotalPedido number(15,2),
Comision number(7,2)
);
284
Captulo 7. BBDD distribuidas
3. Rellena la tabla de comisiones con los datos de los pedidos mediante una
consulta distribuida a 1a tabla de pedidos en la mquina 192.168.1.101.
Hay que ejecutar la siguiente sentencia de tipo insert-select:
INSERT into comisionesccontabilidad
SELECT CodigoEmp1eado, CodigoPedido, Tota1Pedido,
Tota1PedidotPorcentajeComision/100
FROM Empleados inner join Clientes on
Empleados.CodigoEmp1eado=C1ientes.CodigoEmp1eadoRepVentas natural join
(select Codigocliente,CodigoPedido,sum(Cantidad*PrecioUnidad) as
Tota1Pedido from Pedidos natural join Deta11ePedidos
group by Codigocliente,CodigoPedido) Totales
4. Crea un trigger en la tabla Empleados que mantenga actualizada la tabla de
comisiones cuando se modica el porcentaje de comisin de la misma. Modica
la comisin de un empleado y comprueba que, efectivamente se ha modicado.
En la mquina 192.168.1.101 se ejecuta el siguiente cdigo:
create or replace trigger Tmpleadocomisiones
after update of PorcentajeComision on empleados for each row
begin

update comisionescontabilidad
set comision = totalpedidotznev.Porcentajecomision/100
where CodigoEmp1eado=:o1d.CodigoEmp1eado;
end;
/
5. Modica el Empleado con cdigo 31 estableciendo un porcentaje de comisin
del 10 70 y verica que efectivamente, se han modicado las comisiones:
update empleados set porcentajecomision=10 where codigoempleado=31;
select *fmm comisiones@contabilidad where codigoempleado=31;
285
Bases de Datos
7.7. Prcticas propuestas
Prctica 7.3: Fragmentacin horizontal de tablas
Una empresa de telefona est implementando un sistema de recepcin de inciden-
cias. Estas incidencias se recogern desde un nico nmero de asistencia telefnica
y se almacenarn en una base de datos distribuida. Esta tendr 3 nodos Oracle. Se
va. a fragmentar una tabla llamada incidencias de forma horizontal, de tal manera
que las provincias cuyo nombre comience por las letras de la A a la C estn en el
nodo O, de la D a la M en el nodo 1 y de la O a la Z en el nodo 2. De esta manera
estarn equilibradas en nmero de registros por el nmero de poblacin. Se pide:
1. Crear la estructura de las tablas en los tres nodos. La tabla incidencia tendr los
campos IdIncidencia, Fecha, Cdigo de Cliente, Texto de la incidencia, Pro-
vincia y Estado (abierta /cerrada).
2. Crear un enlace de base de datos entre cada uno de los servidores.
3. Ejecutar una consulta distribuida que devuelva todos los registros de la tabla
incidencia.
4. Crear un procedimiento en el nodo 1 que inserte una incidencia en el nodo que
le corresponda segn la letra de la provincia.
5. Crear un procedimiento que borre una incidencia del nodo adecuado basndose
en el campo de provincia.
A continuacin se desea fragmentar la tabla a travs del campo IdIncdencia y
el operador Mod (Resto de la divisin entera). La. operacin IdIncidencia Mod 3
indicar en qu nodo debe estar almacenado el registro (0,12). Para asignar el
IdIncidencia sin duplicados se va a crear una secuencia (objeto sequence) para que
antes de insertar un registro se consulte y se inserte en el nodo adecuado. Se pide:
1. Crea la secuencia con el comando create sequence en el nodo 0.
2. Crea una funcin llamada SiguienteIncidencia que devuelva el siguiente nmero
de secuencia.
3. Ejecuta la consulta select siguienteIncidenciaO Qnodo desde los otros dos no-
dos.
286
Captulo 7. BBDD distribuidas
Prctica 7.4: Fragmentacin vertical
Una aplicacin comercial de marketing tiene una tabla de clientes muy grande con
los siguientes campos:
ICampos principales: Cdigo de Cliente, Nombre, Apellidol, Apellido2, email,
identicador de facebook, direccin, cdigo postal y pas.
ICampos secundarios: pelcula favorita 1, pelicula favorita 2, hobbie 1, hobbie
2, otros intereses y comentarios.
Se pretende fragmentar la tabla utilizando una base de datos distribuida de dos
nodos, para lo cual se pide:
1. Realizar la fragmentacin de la tabla separando los campos principales y
crendolos en un nodo y los campos secundarios (gustos y aciones) crendolos
en otro nodo.
2. Crear un procedimiento que muestre por pantalla la informacin de un cliente
determinado. El procedimiento recibir como parmetro el cdigo de cliente y
consultar los dos nodos para mostrar toda la informacin.
3. Crear un prodecimiento que elimine un cliente de la base de datos.
287
Bases de Datos
Prctica 7.5: Consultas distribuidas
Sigue los siguientes pasos para ejecutar consultas distribuidas en Oracle:
1.
10.
288
Genera una copia de la mquina virtual con tu servidor Oracle, cmbiale la
direccin IP y asegrate de que tienen conectividad entre ambas.
.Localiza el chero tnsnames de tu servidor oracle original y agrega una entrada
para que se pueda crear un enlace a la mquina virtual copiada.
.Prueba con la utilidad tnsping que es posible conectar de la mquina virtual
original a la copiada.
Crea un usuario llamado Userl en la instacia oracle de la mquina virtual
original con los permisos CREATE DATABASE LINK y CREATE PUBLIC
DATABASE LINK y el rol RESOURCE.
.Crea un usuario llamado User2 en la instancia oracle de la mquina virtual
copiada con permiso CREATE SESSION y el rol RESOURCE.
.Crea una tabla llamada Cliente(Cdigo, Nombre, Direccin) en la mquina
virtual original en el esquema Userl e inserta dos registros.
.Crea una tabla llamada l\Iascotas(Cdigo, Tipo, Raza, Nombre) en la mquina
virtual copiada en el esquema User2 e inserta dos mascotas para cada Cliente.
.Ejecuta una. consulta que devuelva un listado con las mascotas de cada cliente
incluyendo la direccin y el nombre del cliente.
.Crea ahora la misma consulta, pero utilizando una tabla derivada para traer
solamente las mascotas del primer cliente.
Ejecuta la consulta anterior utilizando los hints NO_MERGE y DRIVING_SITE
comparando su plan de ejecucin con el comando explain plan.
7.8.
Captulo 7. BBDD distribuidas
Resumen
Los conceptos clave de este captulo son los siguientes:
Una base de datos est controlada por ms de un servidor se dice que est dis-
tribuida.
Este tipo de organizacin proporciona ms rapidez y exibilidad en el acceso
y ms capacidad de almacenamiento. Proporciona tambin escalabilidad y
abilidad.
Un sistema de BBDD distribuidas requiere una red de comunicaciones y enlaces
entre bases de datos locales a cada servidor (DBLINKS).
Se clasican en:
o Homogneas: todas las BBDD locales usan el mismo SGBD.
o Heterogneas: las BBDD locales pueden tener distinto SGBD.
Se puede fragmentar una BBDD distribuida verticalmente, donde los frag-
mentos son conjuntos de campos de una tabla u horizontalmente donde los
fragmentos son conjuntos de registros.
Una consulta distribuida es aquella que consulta mltiples tablas ubicadas en
distintas ubicaciones. Se puede hacer uso de nombre Tabla@servidor para hacer
referencia a una tabla en un servidor enlazado con un DBLINK.
El comando DML create database link se utiliza para crear enlaces a travs de
un enlace declarado en el chero tnsnamesora.
Con la utilidad tnsping se puede comprobar si hay conectividad con una BBDD
remota.
Una transaccin distribuida utiliza el mtodo TWO PHASE COMMIT a
travs de un coordinador local, un coordinador global y un Commit Point
Site.
En Oracle se puede consultar la vista vSsession para ver las sesiones abiertas
con servidores remotos.
Se puede eliminar una conexin abierta con el comando alter session close
database link.
Es posible utilizar hints en Oracle para parametrizar cmo se va a guiar la
ejecucin de la consulta.
289
Bases de Datos
7.9. Test de repaso
1. Un DBLink es
a) Una conexin unidireccional entre una
BBDD cliente y una servidora
b) Una conexin bidireccional entre dos
BBDD locales
c) Una conexin bidireccional entre dos
BBDD distribuidas
d) Ninguna de las anteriores
2. Es posible tener BBDD Distribuidas
heterogneas
a) Si, a travs de DB Links comunes
b) Si, a t.ravs de software que hace las BBDD
compatibles
c) No, es imposible comunicar dos BBDD con
distintos SGBD
d) S, a travs de agentes llamados transpa-
rent gateways
3. Con muchos DBLinks puede ocurrir
que:
a) Mejora el rendimiento del servidor
b) No hay problema con las conexiones, pues-
to que se cierran solas
c) Es posible que se queden demasiadas cone-
xiones abiertas
d) Hay problemas de seguridad
4. TWO PHASE COMMIT es
a) Un enlace doble a BBDD
b) Un mecanismo para realizar transacciones
locales
c) Un mecanismo para realizar transacciones
distribuidas
d) Un mecanismo para realizar transacciones
distribuidas y locales
290
5. Las fases de TWO PHASE COMMIT
a Son dos fases
b Son la fase de preparacin, commit y olvido
c Son 4fases
)

)

)
d)
Son las fases de commit. y rollback
6. Un hint es un mecanismo para
a) Cambiar la forma en la que una consulta
funciona
b) Ejecutar una consulta distribuida
c) Ejecutar una consulta local
d) Ninguna de las anteriores
7. Cul de estas sentencias es la correc-
ta?
a) CREATE DATA BASE LINK;
b) CREATE DB LINK:
c) CREATE DATABASE LINK;
d) Ninguna de las anteriores
8. Para comprobar si hay conectividad
entre BBDD remotas
a) Se usa el comando tnsnames
b) Se usa el comando using
c) Se usa el comando dblink
d) Ninguna de las anteriores
9. Open links congura:
a) El valor de commit en una transaccin
b) Mximo nmero de conexiones abiertas
c) Tiempo mximo de ejecucin
d)
Ninguna de las anteriores
q&#39;6P&#39;8L&#39;?&#39;9"l&#39;9&#39;3&#39;f&#39;0&#39;PZ?I S9U!9IS
7.10.
10.
.Qu es una base de datos distri-
buida?
.Enumera los tipos de BBDD distri-
buidas segn el SGBD que se utili-
za.
. Enumera las caractersticas de una
BBDD distribuida.
.Qu es la escalabilidad?
. Qu signica que una BBDD es
able?
. Enumera los 5elementos que tiene
una BBDD distribuida.
. Por qu se fragmenta una BBDD
distribuida?
.Dene los siguientes conceptos:
IFragmentacin vertical
n Fragmentacin horizontal
- Fragmentacin mixta
.Qu reglas hay para que una frag-
mentacin sea correcta?
Qu diferencia hay entre una con-
sulta distribuida y una remota?
11.
12.
13.

14.
1.5.
16.
17.
18.

19.
20.
21.
Captulo 7. BBDD distribuidas
Comprueba tu aprendizaje
Cmo se ejecuta una consulta dis-
tribuida?
En qu consiste un transparent ga-
teway o pasarela transparente?
Qu es un DBLINK?
Qu requisitos debe tener un usua-
rio para poder crear un DB Link?
Qu almacena el chero tnsna-
mes.ora?
Qu diferencia hay entre un dblink
pblico y uno privado?
Escribe el comando DDL para crear
DBLINKS.
Para qu sirve la utilidad tnsping?
Cmo se cierra una conexin a una
base de datos remota?
Describe el funcionamiento de una
transaccin distribuida a travs del
mecanismo TWO PHASE COM-
MIT.
Enumera los hints que tiene Oracle
para optimizar las consultas distri-
buidas.
291
CAPTULO 8
BBDD Objeto-Relacionales
Contenidos Objetivos
WLas bases de datos Identicar las caractersticas de
Objeto -Relacionales las bases de datos objeto rela-
_ _cionales
Los atr1butos multlvaluados
Crear tipos de datos ob jeto, sus
Las Colecciones atributos v mtodos
Tablas anidadas Crear tablas de objetos v tablas
Tipos de Objetos de columnas tipo objeto
Los identicaciones de Objeto Crear tlpos de datos co1ecc1on
Mtodos en BBDD_OR Realizar Consultas
.Modicar la informacin alma-
Herencxa en BBDD-OR _ _ _
cenada manteniendo la 1ntegr1-
DML con BBDD-OR_ dad y consistencia de los datos
En este captulo se explica cmo se gestiona la informacin almacenada en
bases de datos objeto-relacionales, evaluando yutilizando las posibilidades
que proporciona el sistema gestor.
293
Bases de Datos
8.1. Las Bases de datos ob jetos-relacionales
A medida que el mundo de la informtica va generando modelos del mundo real
para crear aplicaciones, van apareciendo nuevas necesidades para poder dar solucin
a estos problemas. A lo largo del libro se ha estudia.do que un modelo de datos cuenta
con las siguientes caractersticas:
IEntidades
IAtributos en cada una de estas entidades
IRelaciones entre los atributos y entre las entidades
n Directrices 0 reglas entre las entidades y los atributos
Las BBDD pueden modelar todas estas caractersticas. En un modelo ms complejo
incluso se puede incluir acciones, operaciones o procedimientos entre entidades y
atributos. Se puede decir que las Bases de Datos Objeto-Relacional (BBDDOR) son
una extensin del modelo relacional que adems, rompe ciertas reglas, tanto en el
modelo relacional como en el paradigma de la orientacin a objetos, pero seguro que
aporta otra solucin al modelado de informacin.
A lo largo de este captulo se podr observar con ejemplos la diferencia de un
modelo entidad relacin E-R convencional y un modelo de datos objeto relacional
O-R.
La principal diferencia radica en la existencia de tipos. Estos tipos se pueden
construir mediante sentencias DDL y sern la base del desarrollo de BBDD O-R. Por
tanto, para denir el modelo objeto-relacional habra que aadir a las caractersticas
bsicas de un modelo E/ R: entidades, atributos, relaciones y reglas y los tipos.
8.2. Los atributos multivaluados
Los atributos multivaluados, segn lo estudiado, rompen directamente la primera
formal normal. Con este tipo de atributo bsicamente se expresa todo lo contrario
a la IFN. Se dice, que un atributo puede tener ms de un valor, pero son del mismo
tipo. Existen autores, como Ted Codd, que hablan de la primera forma normal solo
como atomicidad para evitar que el valor no se pueda dividir conceptualmente, por
tanto se enfoca ms no en que se pueda tener varios valores del mismo tipo, sino
que ese valor en s sea indivisible conceptualmente.
En todo caso, este tipo de atributo amplia enormemente el modelo de cara a mo-
delar en mundo real. Con los gestores BBDDO-R se puede lograr obtener atributos
con mltiples valores.
294
Captulo 8. BBDD Objeto-Relacionadas
8.2. 1. Las colecciones
Al realizar el paso al modelo relacional, los atributos se convierten en columnas.
Podemos representar los atributos multivaluados en la BBDD a travs de las colec-
ciones. Una coleccin es un grupo de elementos del mismo tipo. En Oracle se usan
los tipos para crear colecciones.
Supngase que se desea guardar los nombres de los hijos de los empleados. Para
esto se puede usar una. coleccin. La relacin puede tener las siguientes ocurrencias:
III Apellidos m

(luis-Insular)

(Jose Carlos pedro)
Lo primero sera crear la coleccin:
SQL> create type colec_hijos as varray(10) of varchar2(30);
2 /
Tipo creado.
En esta instruccin se ha denido un nuevo tipo de datos llamado coleahijos
que tendrn como mximo grupos de 10 valores y adems, que sern de mximo 30
caracteres. A continuacin, se crea la tabla:
SQL> create table empleado
2 (id number,
3 nombre varchar2(30),
4apellido varchar2(30),
5 hijos co1ec_hijos)
6 /
Tabla creada.
Con esto se expresa que la columna de hijos ser una coleccin de tipo colecjnjos
ya denida. Es posible insertar datos tal y como se hace en cualquier otra tabla con
el comando INSERT, lo nico a tener en cuenta es que hay que decirle que el tipo
de la siguiente forma:
insert into empleado
va1ues(1,Francisco,Prez,co1ec_hijos(1uis,ursula));
295
Bases de Datos
insert into empleado values
(2,Esperanza,Jimnez,co1ec_hijos(jos,carlos,pedro));
Obsrvese que es necesario especicar el tipo colecJzijos para que el SGBD realice
las comprobaciones necesarias.
Para consultar, tambin se puede utilizar SELECT:
SQL> select *
2from empleado;
IDNOMBRE APELLIDO HIJOS
1 Francisco Prez COLEC_HIJOS(luis, ursu1a)
2 Esperanza Jimnez CULEC_HIJOS(jos,carlos,pedro)
De esta manera se ha introducido una restriccin al mundo real: que un empleado
no puede tener ms de 10 hijos.
<> Actividad 8.1: Dene un tipo tabla llamado Asignaturas. Despus, crea una
tabla llamada ciclosFownativos que pueda tener varias asignaturas, de tal manera
que asignaturas sea una tabla anida.da.
8.2.2. Tablas anidadas
50 o 60 aos atrs, exista la posibilidad de que 10 hijos fuese un parmetro corto
en algunas ocasiones yfuese posible ampliarlo hasta 20 o incluso 50, pero siempre
tendra una restriccin. Existe la posibilidad de no limitar la cantidad de Valores
dentro del atributo multivaluado, deniendo lo que se denomina un tipo tabla, en
la que solo se especica el tipo de datos que se desea para ese atributo. Utilizando
el mismo ejemplo se redene el tipo hijos de la siguiente forma:
SQL> create type tab1a_hijos as table of varchar2(30);
2 /
Tipo creado.
296
Captulo 8. BBDD Objeto-Relacionadas
Y al igual que con el ejemplo anterior, se crea la tabla basndola en el tipo
tabla_hijos:
SQL> create table empleado
2 (id number,
nombre varchar2(30),
apellido varchar2(30),
hijos tabla_hijos)
nested table hijos store as t_hijos
/
Tabla creada.
Ahora, tablajzjos, ya no es un tipo coleccin . es un tipo tabla. Los tipo tabla
utilizan para su almacenamiento una tabla anidada o nested table. Dicho de otro
modo, la columna hijos es del tipo tablmhijos almacenada sobre un tipo de segmento
especial llamado tabla anidada. A diferencia de la coleccin, se ha denido esta tabla
especial que permitir almacenar en el atributo multivaluado tantos valores como
sea necesario.
Sabas que .. . ?En Oracle, se puede consultar la tabla dba_objects para
examinar los objetos que se han creado en el SGBD. Tambin se puede consul-
tar mediante dba_segments la estructura de almacenamiento que utiliza Oracle
para almacenar el objeto:
SQL> select object_name, object_type, status
2 from dba_objects
3* where object_name like %HIJDZ
0BJECT_NAME OBJECT_TYPE
TABLA_HIJOS

T_HIJOS
SQL> select segment_name, segment_type
2 from dba_segments
3* where segment_name like ZHIJOS%
SEGMENT_NAME SEGMENT_TYPE
T_HIJDS NESTED TABLE
297
Bases de Datos
Para consultar, insertar, borrar o actualizar informacin en tablas anidadas, se
realiza igual que con las colecciones.
Con estos tipos se abren nuevas posibilidades al construir modelos de datos: es
posible denir tipos de datos personalizados y muy completos, con comportamientos
y caractersticas autnomas.
El modelo pasa de tener dos dimensiones (las y columnas), a tres dimensiones
(las de tipos, las y columnas). La cantidad de colecciones tipo y tablas tipo,
depender nicamente de la destreza que se posea y de la habilidad para aplicar
estas ventajosas caractersticas a cada uno de los modelos que representan el mundo
que se desea modelar.
8.2.3. Tipos de Objeto
Aunque no es objetivo del captulo explicar la teora de la programacin orientada
a objetos (POO), se recordar que una clase es como el molde o un patrn para la
fabricacin de los objetos. Yvisto desde el otro sentido, un objeto es una instancia
de una clase.
En Oracle, se pueden crear clases a travs de los tipos, ms concretamente de los
tipos de objetos, usando la sentencia create type as object. Gracias a este tipo objeto
se puede agregar informacin a la base de datos anidando la. informacin en nica
la en tantos niveles como se desee.
Para ilustrar el funcionamiento de esta estructura recurrimos a la siguiente rela-
cin:

CLIENTES ( Id, Nombre, Apellido, Direccin, Poblacin, Provincia, Telfono, Mvil)
Se puede armar que todos sus atributos son atmicos y que cumple, al menos, la
primera forma normal. Una instancia de esa relacin cliente (Modelo Relacional),
podra ser:
[EI Apellido
Mayor.20 Madrid Madrid 912823722 600000001
Suponiendo que este Cliente no cuenta con un mvil, sino que cuenta con 3
mviles, el mvil de su trabajo, su mvil particular de una compaa que le da una
buena tarifa. por la maana, y otro mvil de una compaa que le da buenos des-
cuentos en SMS. Se podra pensar en conservar el mismo modelo de datos de forma
elegante, y no con una entidad cliente que contenga hasta 10 atributos llamados
298
Captulo 8. BBDD Objeto-Relacionales
movill, movi12,...movil10 (no es muy inusual encontrarse con BBDD que tienen
estas soluciones).
Ajustndose nicamente al modelo E-R la solucin ptima sera crear una Re-
lacin que sea cliente-mvil, yque contenga el ID del chente y su nmero de mvil.
Por ej emplo:



1 600000001
1 600000002
1 600000003
Las BBDD orientadas a objeto brindan la posibilidad de crear un tipo de objeto
de la siguiente forma:
SQL> create or replace type telefono as object
2 (tipo varchar2(30),
3 numero number)
4/
Se puede observar que cada objeto telefono tendr dos atributos, el tipo de telfono
mvil y el nmero. A continuacin, se crea una tabla tipo llamada listin basada en
el objeto tipo para aadir la funcionalidad de mltiples valores:
SQL> create or replace type listin as table of telefono
2 /
Tipo creado.
Finalmente se crea la tabla Clientes:
SQL> create table clientes
2 (id number,
3 nombre varchar2(10).
apellido varchar2(10),
direccion varchar2(30),
poblacion varchar2(30),
telefonos listin)
nested table telefonos store as te1_tab
10 /
4

5

6
7 provincia varchar2(30),
8

9
Tabla creada.
299
Bases de Datos
A partir de aqu, se pueden ejecutar sentencias DML en la tabla clientes haciendo
valer la deseada ampliacin con relacin al modelo de datos tradicional:
SQL> insert into clientes
2 values
3(1,Paco,Prez,mayor 20,madrid,madrid,
41istin(te1efono(fijo,911234567).
5 te1efono(movi1 persona1,60000O001),
6 te1efono(movi1 empresa,600000002)))
7 /
1fila creada.
SQL> commit;
Confirmacin terminada.
Si se consulta la tabla se obtiene:
SQL> select *from cliente;
IDNOMRE APELLIDO DIRECCION POBLACION PROVINCIA TELEFONOS(TIPO, NUMRO)
LISTIN(TELEFONO(fijo, 911234567),
TELEFON0(movi1 personal, 600000001),
TELEFON0(movi1 empresa, 60000O0O2))
Se puede observar cmo se anida la informacin dentro de la propia la. De esta
manera, 1 cliente puede tener mltiples telfonos y cada telfono, varios atributos.
Esto es la representacin real de las relaciones anidadas.
8.3. Los identicadores de objeto
Oracle trabaja con OID (Object Identiers). Un OID es un identicador para
mejorar la bsqueda de la informacin. Cuando se crea una columna cuyo tipo es
un tipo de objeto, en lugar de almacenarse todos los datos del objeto en la propia
columna de la tabla, el SGBD solo almacena un identicador, que ser la direccin
de una la en una tabla auxiliar que el SGBD para almacenar los datos del objeto.
Es decir, internamente, el SGBD solo almacena un nmero de 16-Bytes que le sirve
como referencia para ir a buscar la informacin de la tabla objeto si es necesario. Es
posible ver estos OIDs con una pseudo-columna llamada objectJd. Para ver el valor
del objeto, se puede utilizar objectwalue. Se ilustra en el siguiente ejemplo:
300
Captulo 8. BBDD Objeto-Relaconales
SQL> create type coche as object
2 (marca varchar(20),
3 modelo varchar(20));
4 /
Tipo creado.
SQL> create table vehiculos of coche;
Tabla creada.
SQL> insert into vehiculos values (coche(seat,ibiza));
1 fila creada.
SQL> select object_id, object_va1ue from vehiculos;
DBJECT_ID 0BJECT_VALUE(MARCA, MODELO)
A5440089F85FFA3OE040007FOIOOOFDE COCHE(seat, ibiza)
La ventaja de usar OIDs esquela informacindel objetoestalmacenadaenotro
sitio distinto de la propia la, por tanto, en casode no usar esteobjeto, el SGBD
no tendr que accedera toda estainformacinreduciendoel tiempo de respuesta.
La desventajaesqueenel momentoderealizar consultassobrelastablas, el SGBD
deberealizar accesosa bloquesextras de informacin,consumiendoms CPU.
8.4. Los mtodos
Al igual que en la POO cada clasede ne el comportamientode susobjetos a
travsde mtodos,en lasBBDD-OR tambinesposiblecrear mtodospara lostipo
objeto.
Se puedende nir funciones o procedimientosmiembros, cuyasaccionesmode-
lan el comportamientode un tipo de objeto. Estas funcioneso procedimientosque
pertenecena un tipo de objeto sedenominanmtodos.
Para ilustrar como usar funcionesmiembro en tipos de objetos, se expone el
siguienteejemplo: si se deseamodelar un objeto tringulo para almacenarsusca-
301
Bases de Datos
ractersticas (la base y la altura), y almacenar en la BBDD cientos de tringulos
pudiendo calcular el rea de cada tringulo, se podra. crear el siguiente esquema:
SQL> create or replace type tipo_triangu1o as object
2 (base number,
3 altura number,
4member function area return number)
5 /
Tipo creado
/
Se puede observar que dentro del tipo de objeto tipoiriangulo se ha denido la
cabecera de una funcin llamada rea (mtodo o member function area).
A continuacin se crear la denicin del mtodo rea a travs del cuerpo del
tipo create 01" replace type body:
SQL> create or replace type body tipo_triangu1o as
2 member function area return number is
a number;
begin

a := (base*a1tura)/2;
return a;
end;
end;
Cuerpo del tipo creado.
Una vez creado el tipo tringulo, se puede crear una tabla para almacenar
tringulos:
SQL> create table triangulos
2 (id number,
3 triangulo tipo_triangulo);
Tabla creada.
SQL> desc triangulos
TRIANGULD TIPD_TRIANGULD
302
Captulo 8. BBDD Objeto-Relacionales
Y despus, se insertan datos dentro la tabla, tal ycomo se ha expuesto previamente:
SQL> insert into triangulos values (1,tipo_triangu1o(5,5));
1 fila creada.
SQL> insert into triangulos values (2,tipo_triangulo(10,10));
1fila creada.
SQL> commit;
Confirmacin terminada.
SQL> select * from triangulos;
IDTRIANGUL(BASE, ALTURA)
1TIP_TRIANGUL(5, 5)
2 TIPD_TRIANGUL(10, 10)
Finalmente. se puede declarar un pequeo bloque annimo en PL-SQL para recorrer
la tabla e invocar a1 mtodo area:
SQL> declare

t tipo_triangu1o;
begin

for i in (select * from triangulos) loop
t:=i.triangu1o;
dbms_output.put_1ine(E1 triangulo con id:||i.id);
dbms_output.put_1ine(Con base: IIt.base);
dbms_output.put_1ine(Y altura: IIt.altura);
dbms_output.put_line(tiene un area de: ||t.area);
end loop;
end;
/
El triangulo con id:1
Con base: 5
Yaltura: 5
tiene un area de: 12,5
El triangulo con id:2
Con base: 10
Yaltura: 10
tiene un area de: 50
Procedimiento PL/SQL terminado correctamente.
303
Bases de Datos
Por cada iteracin del bucle, se hace una referencia a un objeto t. Obsrvese que
tbase y t. altura son los atributos del objeto t, mientras que t. area es la invocacin
al mtodo.
<> Actividad 3.2: Al igual que en POO, en BBDD es posible crear constructores.
Consulta en la documentacin de Oracle cmo crear constructores.
8.5. La herencia
Una de las grandes ventajas de la POO es la herencia, gracias a la cual se
pueden crear superclases abstractas para despus, crear subclases ms especicas
que hereden los atributos y mtodos de las superclases.
En BBDDO-R es posible hacer algo parecido con los tipos de objetos: se pueden
crear subtipos de objetos a partir de otros supertipos de objetos creados previamente.
Un ejemplo sencillo en el que se aprecia con facilidad qu es la herencia es una
escuela, donde hay estudiantes, profesores y empleados. Todos ellos tienen carac-
tersticas de una persona: un nombre, un nmero de identicacin, un telfono, etc.
Por tanto se puede construir un super tipo de objeto llamado tipo_persona que
aglutine los atributos caractersticos de una persona.
create or replace type tipo_persona as object
(id number,
nombre varchar2(10),
telefonos listin)
not final
/
creado.
La creacin del tipo lleva includa la clasula not nal que indica que se pueden
generar ms tipos de objetos a partir de este. Dicho con nomenclatura POO, se
pueden crear subclases a partir de la superclase, o dicho con un lenguaje ms natural
se pueden crear tipos de persona ms especicos a partir del tipo genrico persona.
A continuacin se crea un tipo de persona especca, el estudiante:
304
Captulo 8. BBDD Objeto-Relacionales
SQL> create or replace type tipo_estudiante under tipo_persona
2 (facultad varchar2(10),
3 nota_media number)
4 not final
5 /
Tipo creado.
En este caso, laclusula under especica a qu supertipo pertenece el tipo estu-
diante. Nuevamente, se de ne como not nal para poder generarclasi cacionesms
amplias.
Obsrvesequeestetipo de construccionespuedenusarsetambin para las jerar-
quasen el modelo entidad relacin. Ver seccin2.4.1.
Al igual queconcualquierotro objeto, se puede comprobar la estructura del tipo
estudiante utilizando el comando describe, abreviado desc:
SQL> desc tipo_estudiante
tipo_estudiante extiende TJ.TIPD_PERSONA
tipo_estudiante N0 es FINAL
VARCHAR2(10)
TELEFONOS LISTIN
FACULTAD VARCHAR2(10)
NTA_MEDIA NUMBER
Incluso sera posible crear un tipo de subobjeto quetenga losatributos y mto-
dos del tipmestudiante. Si adems, se desearacrear un tipo para representar los
estudiantesde intercambio,sepodra de nir:
SQL> create or replace type tipo_estudiante_intercambio
2 under tipo_estudiante
3 (pais varchar2(30),
4 universidad varchar2(30))
5 /
Tipo creado.
SQL> desc tipo_estudiante_intercambio
305
Bases de Datos
tipo_estudiante_intercambio extiende TJ.TIP_ESTUDIANTE
VARCHAR2 (1 o)
TELEFONOS LISTIN
FACULTAD VARCHAR2(10)
NTA_MEDIA NUMBER
PAIS VARCHAR2(30)
UNIVERSIDAD VARCHAR2(30)
8.6. Operaciones DML
A lo largo del captulo ya. se ha mostrado en los ejemplos cmo utilizar la sen-
tencia insert y select cuando se tratan tipos de objetos:
SQL> insert into empleado
2 values (1,Fernando,Moreno,tab1a_hijos(E1ena,Pab1o));
1fila creada.
SQL> insert into empleado
2 values (2,David,Sanchez,tab1a_hijos(Carmen,Candela));
1fila creada.
SQL> col hijos format a40
SQL> select *from empleado;
ID NOMBRE APELLIDO HIJOS
1Fernando Moreno TABLA_HIJS(Elena, Pab1o)
2 David Sanchez TABLA_HIJOS(Carmen, Candela)
La nica restriccin es que no es posible operar sobre la tabla anidada:
SQL> select * from t_hijos;
select * from t_hijos

*
ORA-22812: no se puede hacer referencia a la tabla de
almacenamiento de una columna de tabla anidada
306
Captulo 8. BBDD Objeto-Relacionadas
Para realizar actualizaciones se utiliza update:
SQL> update empleado
2 set hijos=TABLA_HIJOS(Carmen,Cande1a,Cayetana)
3 where id =1;
1fila actualizada.
Ypara realizar borrados se utiliza delete. Obsrvese cmo se puede utilizar un
determinado mtodo para la seleccin de los registros a borrar o eliminar:
SQL> select * from triangulos t where t.triangu1o.area()>20;
ID TRIANGUL(BASE, ALTURA)
2 TIP_TRIANGUL(10, 10)
SQL> delete from triangulos t where t.triangu1o.area()>20;
1 fila suprimida.
8.7. Las referencias
Una referencia es un puntero a un objeto creado a partir de su OID. Se utiliza
principalmente para apuntar a un objeto que ya. existe y no tener que duplicar la
informacin. Por ejemplo, si se desea crear una tabla de mascotas en la que ca.da
mascota tiene su veterinario, yesos veterinarios ya estn almacenados en una tabla
de objetos, se podra hacer uso de la palabra reservada REF para indicar que el
veterinario ya existe y por tanto. solo se almacena una referencia a ese veterinario
en la tabla de mascotas.
SQL> create type veterinario as object
2( id integer,
3 nombre varchar(100),
4direccion varchar(255));
5 /
Tipo creado.
SQL> create type mascota as object
2 (
307
Bases de Datos
3 id integer,
4 raza varchar(100),
5 nombre varchar(100),
6 vet REF veterinario
7 )
8/
Tipo creado.
SQL> create table veterinarios of veterinario;
Tabla creada.
SQL> insert into veterinarios values (1,Jess Snchez,C/El mareo 29);
1 fila creada.
SQL> create table mascotas of mascota;
Tabla creada.
SQL> insert into mascotas
2 select 1,perro,sprocket, REF(v)
3 from veterinarios v
4 where v.id=1;
1 fila creada.
Se puede ver cmo REF se utiliza en dos situaciones:Al crear el tipo mascota,
para indicar que su veterinarioseruna referenciaal veterinarioreal, y despus,al
insertar la mascota, serealiza una sentenciade tipo nsert select para obtener una
referenciaal veterinariocuyoid = 1.
Si a continuacin, se realiza una consulta se obtiene:
SQL> select * from mascotas;
ID RAZA NOMBRE VET
1 perro sprocket 000O220208A59467OFAD9FO874E040007F01002AF3A594670FAD9E08
Para obtener losdatosrealessepuedeutilizar la palabra DEREF:
SQL> select nombre,deref(vet) from mascotas;
NOMBRE DEREF(VET)(ID, NOMBRE, DIRECCION)
sprocket VETERINARIO(1, Jess Snchez, C/E1 mareo 29)
308
Captulo 8. BBDD Objeto-Relacionales
8.8. Prcticas Resueltas
Prctica 8.1: Supermercado
Para la gestin de un supermercado, se desea construir un modelo para la gestin
de las listas de la compra:
1. Crea un tipo para almacenar direcciones postales con dos campos, la direccin
y el cdigo postal.
create or replace type tipo_direccion as object
( dir varchar2(100), CP number(5))
/
2. Crea un tipo contacto para almacenar un nmero de telfono y un email.
create or replace type tipo_contacto as object
(telefono number, email varchar2(100))
/
3. Crea un tipo persona con los campos id, nombre, apellido, direccin y contacto.
Despus, crea un Subtipo cliente con otro campo adicional llamado nmero de
pedidos.
create or replace type tipo_persona as object
(id varchar2(20),
nombre varchar2(30).
apellido varchar2(30).
direccion tipo_direccion,
contacto tipo_contacto)
not final
/
create or replace type tipo_cliente under tipo_persona
(n_pedidos number)
/
4. Crea un tipo artculos con los campos id, nombre, descripcin, precio y porcen-
taje de IVA. Despus crea un tipo tabla de objetos para registros de artculos.
create or replace type tipo_articulo as object
(id_art number,
309
Bases de Datos
nombre varchar2(30).
descripcion varchar2(100),
precio number,
porct_iva number)
/
create or replace type tab1a_articu1os as
table of tipo_articu1o;
/
5. Crea un tipo para la lista de la compra y otro para su detalle. La lista de la
compra contendr un identi cador, fecha, cliente y una tabla de detalles de
lista de la compra. A su vez, un detalle de lista de compra estar compuesto
por un artculo y un campoque denote la cantidad pedida de eseartculo. Se
deber incluir en la denicin una funcin miembro para calcular el total de
la lista de la compra.
create or replace type tipo_lista_deta11e as object (
numero number,
articulo tipo_articu1o,
cantidad number
)
/
create or replace type tab_1ista_deta11e as table of tipo_1ista_deta11e;
/
create or replace type tipo_lista_compra es object
(id number,
fecha DATE,
cli REF tipo_c1iente,
Detalle tab_1ista_detal1e,
member function total return number
)
/
6. Crea ahora el cuerpodel tipo lista de la comprapara denir el mtodototal:
310
create or replace type body tipo_1ista_compra as
member function total return number is
i integer; tot number := O;
begin

fori in1..Deta1le.count loop
tot := tot + (Detal1e(i).cantidad * Deta11e(i).articu1o.precio ) t
(1+(Detal1e(i).articu1o.porct_iva/100)); end loop;
return tot;
end;
end;
/
10.
Captulo 8. BBDD Objeto-Relacionadas
Crea una tabla de clientes e inserta uno.
create table Clientes of tipo_c1iente;
insert into clientes values (1, Pedro,Suarez,
TIPO_DIRECCION(Paseo del Museo 15,28099),
TIPO_CONTACTO(917726S25,psuarez@ono.com),0);
Crea una tabla para las listas de la compra e inserta una lista de la compra
con un detalle de dosartculospara el clienteinsertadoanteriormente:
create table listas_de_compras of tipo_1ista_compra
nested table Detalle store as tDeta11e;
insert into 1istas_de_compras
select 1,current_date,ref(c), tab_1ista_deta11e(
tipo_lista_deta11e(1.tipo_articu1o(1,Barra de pan,Tipo baguette,1,7),4),
tipo_1ista_deta11e(2,tipo_articu1o(2,Lonchas de jamn,Iberico Be11ota,6,7),4)
) from Clientes c where c.id=1;
Muestra.con una selectlosdatosde la lista de la compra:
col cliente formats40
col detalla formatn50
set linesize 132
select idjcchmdcrc cli) u cliente. detallo fromliltagdhcompns;
l 13/06/11TIPILCLIENTEI,&#39;Padxo. Suarez. TIPTAB_LISTA_DI&#39;ALLE(TIPO_LISTA_DI&#39;ALLE(1, TIP_ARTIC
O_DIR.ECCIDN(Puoo del Husoo15&#39;, 28099)ULOU,Burn depu, Tipo bnguotto, 1, 7), d).
. TIPU_CONTACl&#39;0(917726525, Tsuuezdono. TIPO_LISTA_DTALLE(2.TIPCLARTICULCK?, Wonchudo
com). 0) jamn, Iberico BeuataHG.7). 4))
Construyeuna selectpara mostrar por pantalla el id de una lista de la compra
y sutotal.
SQL> select id, c.tota1() from 1istas_de_compras c;
ID C.TOTAL()
311
Bases de Datos
8.9. Prcticas Propuestas
Prctica 8.2: Tipos bsicos y herencia
Realiza los siguientes ejercicios:
1. Crea. un tipo para las direcciones de empresas, contendr el tipo de direccin
y la direccin (nmero, calle y piso).
2. Crea un tipo coleccin para almacenar hasta 3 direcciones (scal, postal y
administrativa).
3. Crea un supertipo empresa con los atributos CIF, Nombre y sus direcciones.
4. Crea un subtipo de empresa llamada Sociedad Annima con los atributos
nmero de accionistas, capital social ypresupuesto.
5. Crea un subtipo de empresa llamada Sociedad Limitada que tenga una lista
de socios, donde se especique el nombre del socio y un porcentaje de posesin
de la empresa.
6. Crea una tabla de empleados que tenga una referencia a una Empresa.
Prctica 8.3: Comandos DML con objetos
Con los tipos de la. prctica anterior realiza las siguientes operaciones:
1. Crea una tabla de empresas de tipo sociedades anonimas.
2. Inserta una sociedad anonima con dos direcciones.
3. Crea una tabla de empresas de tipo sociedades limitadas.
4. Inserta una sociedad limitada con dos direcciones y cuatro socios.
5. Inserta un empleado para cada una de las empresas insertadas.
6. Crea una consulta que muestre la empresa para la que trabajan los empleados
utilizando la funcin DEREF.
312
Captulo 8. BBDD Objeto-Relacionales
Prctica 8.4: Nmeros complejos
Un nmero complejo a+bi est compuesto por una parte imaginaria (b) y una parte
real (a). Se desea crear un tipo de objeto llamado tipo_complejo con una serie de
mtodos para poder operar con ellos. Se pide:
1. Crea el tipo tipo_complejo que contenga los atributos imaginario y real, y que
dena la cabecera de los siguientes mtodos:
IMdulo: Retorna un valor numrico resultado de operar los valores ima-
ginarios y reales con la frmula x/ a2 +b?
- Valor: Retorna una cadena de caracteres con la representacin del nmero
complejo (a+bi).
IConjugado: Retorna una cadena de caracteres con la representacin del
conjugado del nmero complejo (a-bi).
- Multiplicar(Nmero Complejo): Actualizar los atributos del nmero com-
plejo resultado de multiplicar los propios atributos por otro nmero com-
plejo que ser pasado como parmetro: (a+bi)(c+di) =acbd+(ad+bc)i
2. Crea el cuerpo del tipo desarrollando los mtodos denidos en la cabecera del
tipo.
3. Crea el tipo tipo_tabla_co1nplejos para almacenar una serie de nmeros com-
plejos. Despus, crea el tipo tipo_lista_complejos que almacene una tabla de
complejos.
4. Crea una tabla de listas de nmeros complejos e inserta un registro con 5
nmeros.
5. Crea un bloque annimo para multiplicar el primer nmero insertado por el
segundo.
6. Crea un bloque annimo que muestre el mdulo, valor y conjugado de los
nmeros complejos insertados.
7. Crea una funcin que reciba una tabla de nmeros complejos y devuelva un
nmero complejo con la suma de todos ellos.
8. Crea un bloque annimo que invoque a la funcin anterior y visualice la suma
de los nmeros complejos insertados.
313
Bases de Datos
8.10.
314
Resumen
Los conceptos clave de este captulo son los siguientes:
Muchos SGBD permiten la creacin de tipos personalizados, que son la base
de las BBDD-OR.
Los atributos multivaluados pueden almacenarse en colecciones (varray) de un
nmero jo de elementos o en tablas anidadas (nested tables) para almacenar
un nmero variable de elementos .
Los ob jetos denidos en Oracle se pueden consultar utilizando la tabla dba_objects.
Un tipo de objeto se crea con la sentencia DDL create type tipo as object.
Es posible crear tipos de tabla de objetos con la sentencia DDL create type
tipmtabla as table of objeto.
Se puede anidar la creacin de tipos en tantos niveles como se desee.
Un OID es un nmero de 16 bytes para mejorar la bsqueda de la informacin.
Se puede consultar con la funcin object_id.
Un mtodo es una funcin o un procedimiento miembro denido dentro de un
tipo.
Para invocar a un mtodo se utiliza el operador punto objeto.metodo(
Se pueden crear jerarquas de clases (u objetos tipo) deniendo tipos NOT
FINAL .
Para crear un subtipo de objetos se utiliza la clusula under supertipo.
Es posible compartir objetos mediante referencias a objetos utilizando la clusu-
la REF.
Para ver la informacin de un objeto referenciado mediante REF se utiliza la
funcin DEREF.
8.11.
1. En BBDD-OR un tipo
Test de repaso
a) Es la denicin de una estructura que sirve
para crear objetos
b) Se usa en la denicin de una columna de
una tabla
c) Se puede utilizar como base para otros ti-
pos
d) Todas de las anteriores
2. Las colecciones se crean mediante
a) vArrays
b) nested tables
c) under
d) not nal
3. Una tabla anidada
a) Se usa como modo de almacenamiento pa-
ra un tipo tabla
b) Es un tipo de segmento especial
c) Se crea con la clusula store as
d) Todas las anteriores
4. Qu vista se utiliza en Oracle para
ver las tablas anidadas?
a) dba-objects
b) user_nested_tables
c) dbasegments
d) Ninguna de las anteriores
5. Un OID
a) Es un identicador que usa el SGBD para
localizar el objeto
b) Se puede ver con la funcin object_id
c) Es el equivalente al ROWID en objetos
d) Todas las anteriores
Captulo 8. BBDD Objeto-Relacionales
6. Para denir mtodos en BBDD-OR
a) Se usan funciones o procedimientos miem-
bros de un tipo de datos
b) Se utilizan paquetes con cuerpo y cabecera
c) No es posible utilizar mtodos
d) Ninguna de las anteriores
7. Para invocar a un mtodo en BBDD-
OR
a) Se utiliza el operador ->
b) Se usa la funcin REF
c) Se usa la funcin 0bject_value()
d) Se usa el operador punto
8. En BBDD-RO la herencia
a) Permite que un tipo herede de ms de un
supertipo
b) No es posible crear un subtipo a partir de
un supertipo
c) Es posible crear un supertipo a partir de
un subtipo
d) Ninguna de las anteriores
9. Cuando se usan comandos DML en
BBDD-OR
a) Se pueden realizar inserts y updates
b) Se pueden usar deletes
c) No es posible hacer select en tablas anida-
das
d) Todas las anteriores
P6&#39;P&#39;8P&#39;&#39;9&#39;9P&#39;93&#39;rP9&#39;ZP&#39;I rsauopnios
315
Bases de Datos
8.12. Comprueba tu aprendizaje
1. Qu es una base de datos OR? 12. Explica cmo se puede invocar a un
_ , _ _ _ _mtodo denido en un tipo.
2. Cual es la principal diferencia con
las bases de daOS TGaCOHHGS? 13. Comenta cmo se aplica la herencia
3. Qu es un atributo multivaluado? a las BBDD-OR
4. Cmo encaja un atributo multiva- 14&#39; Cmo Se puede insert?u? regis-
luado en las bases de datos OR? tro en una tabla de Objetos
5_ Enumera dos formas distintas de 15. Dene para qu sirven las siguien-
almacenar atributos multivaluados tes funclones
en una tabla. IObject-id
6. Explica las diferencias entre usar _Objechvalue
una tabla anidada yuna coleccion. DEREF
I
7. Escribe la sintaxis para crear: _REF
ITipos , _ , ,
_ _16. Dene para que sirven las siguien-
- TlpOS colecciones tes Clusulas
- Tipos Tabla

tore as
ITabla de objetos IS
Iunder
8. Qu es un tipo tabla? Cmo se 1
crean? &#39; na
nnot nal
9. Cmo se pueden consultar en Ora-
cle qu tipos de ob jetos hay deni- &#39; member
d , .
OS 17. Que es una referenciaQPara
10. Cmo se puede consultar en Ora- qu 1153?
cle las tablas anidadas creadas? , _
18. Como se puede insertar una refe-
11. Cmo se crea un mtodo en un ti- rencia a un objeto en un tabla de
316
po? objetos?
.2
arceta
grupo editorial
Bases de Datos
ste libro est concebido desde la experiencia de los
autores, como administradores de bases de datos
en empresas multinacionales, como profesores de
formacin profesional (familia informtica) y como pro-
fesores de Universidad.
Los profesionales de la industria informtica ynetos
encontrarn una valiosa fuente de infonnacin para el
desempeo de actividades relacionadas con bases de da-
tos, detallando su funcionamiento, composicin, diseo
y aplicaciones.
El contenido del libro tiene una orientacin puramente
prctica, con actividades, consejos y ejercicios resueltos
en Access, MySQL, Oracle y DBZ que facilitan la com-
prensin y asimilacin de la informacin.
El objetivo del libro no es ser una gua de referencia de
un solo Sistema de Gestin de Bases de Datos, sino la
formacin de administradores de bases de datos actuali-
zados, verstiles y competentes.
Existe multitud de material disponible para la realizacin
de las prcticas propuestas en la pgina web x. a .\ gen-cota .
y en el blog lvbtltl-gzirccta.blogsptlttnni
www.garceta.es