bases de datos

325
r. «I! ¡TV1! arceta grupo editorial

Upload: femabe22

Post on 10-Mar-2016

4 views

Category:

Documents


0 download

TRANSCRIPT

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 1/324

«I! ¡TV1!

arcetagrupo editorial

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 2/324

Iván LópezMontalbánMJesús CastellanoPérez

JohnOspinoRivas

DAMyDAWBases de Datos

TécnicSupen

Desde

AMyWeb

arcetagrupoeditorial

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 3/324

Iván López MontalbánM3 Jesús Castellano PérezJohn Ospino Rivas

ISBN: 978-84-9281-291-2IBERGARCETA PUBLICACIONES,S.L., Madrid 2011

Edición: 1.°Impresión: 3.

N.°de páginas: 328Formato: 20 x 26 cm

Reservados los derechos para todos los países de lengua española. De conformidad con lo dispuesto en el artículo 270 y siguientes delcódigo penal vigente, podrán ser castigados con penas de multa y privación de libertad quienes reprodujeren o plagiaren, en todo o enparte, una obra literaria, artística o cientíca fijada en cualquier tipo de soporte sin la preceptiva autorización. Ninguna parte de estapublicación, incluido el diseño de la cubierta, puede ser reproducida, almacenada o trasmitida de ninguna forma, ni por ningún medio,sea éste electrónico, químico, mecánico, electro-óptico, grabación, fotocopia o cualquier otro, sin la previa autorización escrita por partede la editorial.

Diríjase a CEDRO (Centro Español de Derechos Reprográcos), www.cedro.org, si necesita fotocopiar o escanear algún fragmento de estaobra.

COPYRIGHT © 2011 IBERGARCETA PUBLICACIONES, [email protected]

Bases de Datos

 © Iván López Montalbán, Ma Jesús Castellano Pérez, John Ospino Rivas

1.°edición, 3.°impresiónOI: 0078/2012

ISBN: 978-84-9281-291-2

Deposito Legal: M-33366-2011Imagen de cubiertazpisotskii  © fotoIia.com

Impresión:

PRINTHOUSE, marcaregistrada deCopiar, S.A.

IMPRESO EN ESPAÑA- PRINTED IN SPAIN

Nota sobre enlaces a páginas web ajenas: Este libro puede incluir referencias a sitios web gestionados por terceros y ajenos a IBERGAR-CETA PUBLICACIONES,S.L., que se incluyen sólo con nalidad informativa. IBERGARCETA PUBLICACIONES,S.L., no asume ningún tipode responsabilidad por los daños y perjuicios derivados del uso de los datos personales que pueda hacer un tercero encargado del man-tenimiento de las páginas web ajenas a IBERGARCETA PUBLICACIONES, S.L., y del funcionamiento, accesibilidad y mantenimiento delos sitios web no gestionados por IBERGARCETA PUBLICACIONES,S.L., directamente. Las referencias se proporcionan en el estado enque se encuentran en el momento de publicación sin garantías, expresas o implícitas, sobre la información que se proporcione en ellas.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 4/324

PRÓLOGO

Este libro está concebido para formar estudiantes de los ciclos de grado su-perior DAM (Desarrollo de Aplicaciones Multiplataforma) yDAW (Desarrollo deAplicaciones Web). Más concrementamente, está pensado para cubrir la unidad de

competencia UC0026_3, programar bases de datos relacionales mediante el móduloBase de datos común a ambos ciclos formativos.

Desde nuestra experiencia como administradores de bases de datos en empre-sas multinacionales,como profesoresde educaciónsecundaria (Informática)y comoprofesores asociadosde universidad, hemos compuesto esta herramienta complemen-taria a las clases del módulo de formación profesional e indispensable para lectoresindependientes que quieran convertirse en programadores de bases de datos.

El contenido del libro tiene una orientación puramente práctica, con actividades,consejos y ejercicios resueltos en Access, MySQL, Oracle y DB2, que facilitan alprofesor del módulo su completo seguimiento.

El objetivo del libro no es ser una guía de referencia de un solo SGBD, sino la for-mación de programadores de bases de datos actualizados, versátiles y competentes.

Existe multitud de material disponible para la realización de las prácticas pro-puestas en el blog bbdd-garceta.blogspot . com.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 5/324

Índice general1. Los sistemas de almacenamiento de la información

1.1. Ficheros

1.1.1. Tiposde cherosy 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. Evolución y tipos de base de datos

Los Sistemas Gestores de Base de Datos1.3.1. Concepto de Sistema Gestor de Base de Datos .. .. . .. . .

1.3.2. Funciones de un SGBD . . .. . .. . .. . .. .. . .. . . . .

1.3.3. El lenguaje SQL1.3.4. Tipos de SGBD . . . . . . . . .. . . . . .. . . . . . . . .. .

Prácticas Resueltas . . .. . . . . . .. . . . . . .. .. . .. . . . . .

Prácticas Propuestas . . . . . .. . .. . . . . . .. . .. .. . . .. .

Resumen . .. . . . . . . . .. . . . .. . . . .. . .. . . .. .. . . .

Test de repaso . .. .. . .. . .. . . . .. . . . .. . . .. .. . . . .

Comprueba tu aprendizaje.

.

..

. ...

.. .

.. . . .

.. . ..

.

. .

1.2.

1.3.

1.4.

1.5.

1.6.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 6/324

Bases de Datos

2.4.1. Generalización y Especialización . . . . . .. . . .. . . . . . .59

2.5. Construcción de un diagrama E/ R . . .. . .. . .. . . . . . . . .. 622.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. Transformación de un diagrama E / R al modelo relacional . ..

. ..

.672.8. Normalización . . .. . . . .. . . . . . . .. . . .. . .. . . . . . . .73

2.9. Prácticas Resueltas . . . .. . . . . . . .. . . . . . .. . . . . .. .. 77

2.10. Prácticas Propuestas . .. . . .. . . . .. . . . .. . .. . .. . . . .81

2.11. Resumen . . . . .. . .. . .. . . .. . . .. . . .. . .. . . .. . . .88

2.12. Test de repaso . . . . . .. . . . . . . . . . . . . . . . .. . . .. . .. 89

2.13. Comprueba tu aprendizaje .. . . . . . . . . . . . . . . . . . . . . . .90

3. Diseño físico relacional 91

3.1. Notación para la sintaxis . . . .. . . .. . . . . .. . .. . . .. . . .92

3.2. Herramientas grácas proporcionadas por los SGBD . . .. . ..

.. .

933.2.1. PhpMyAdmin de MySQL .. . . .. . . . .. . . . .. . . . .93

3.2.2. Oracle Enterprise Manager yGrid Control . .. . . . . .. . .94

3.2.3. DB2 Data Studio . .. . . . . . . . . . . . . . . .. . . . . . .96

3.3. Intérpretes de comandos de los SGBD . .. . . . .. . . . . .. . .. .97

3.3.1. MySQL: El cliente de MySQL-Server .. . . . . . . .. .. . .98

3.3.2. Ejecución de consultas en MySQL .. . . . . . . . . . .. . . .99

3.3.3. SQL*Plus: El intérprete de comandos de Oracle . . . . . .. . 102

3.3.4. Ejecución de consultas en SQL*Plus .. .. . .. . . . . . . .103

3.4. El lenguaje de denición de datos . .. . .. . . . . . . . .. . . . . .104

3.5. Creación de bases de datos . . . . . .. . .. . . . . . . . . .. . . . .105

3.5.1. Creación de bases de datos en MySQL . .. . .. . . . . . . .105

3.5.2. Creación de bases de datos en Oracle . . .. . . .. . . . . .. 107

3.6. Modicación de una base de datos . . . . . . .. . . .. . .. .. . . .110

3.7. Borrado de bases de datos . .. . .. .. . . .. .. . . . . .. . . . .111

3.8. Creación de tablas . . .. . . .. . . . . . .. . .. . .. . . .. . . .111

3.8.1. Implementación de restricciones . . . . . .. . . . . . . . . . .113

3.8.2. Tipos de Datos . . . . . .. . . .. . . . . . . . .. . . . . .. 116

3.8.3. Características de la creación de tablas para MySQL . .. . .117

3.8.4. Características de la creación de tablas para Oracle.

.

..

. .

1183.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. Modicación de tablas . . . . .. . . . . . . . . . . . . .. .. . . .. 120

3.10. Borrado de tablas . . . . . .. . . . . . . . . .. . . . . . . . .. . . .122

3.11. Renombrado de tablas . . . . . . . . . . . . . .. . . .. .. . . . . .122

3.12. Prácticas Resueltas . . . . . .. . .. . . . . . . .. . .. . .. . .. .123

VIII

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 7/324

Índice general

3.13. Prácticas Propuestas .. . . . .. . .. . .. . . . .. . .. . . .. . .1283.14. Resumen . . . . . .. . .. . . . . . .. . . . . . . . . . .. .. . .. .130

3.15. Test de repaso .. . . . . . . . . . . . . . .. . . . .. . . . . . . . . .1313.16. Comprueba tu aprendizaje . .. . . . . . . . .. . . . . . . . . .. . . 132

. Realización de Consultas 1334.1. El lenguaje DML . .. . . . . . . .. . .. . . . . . .. . . .. . . .. 1344.2. La sentencia SELECT . . . . . .. . .. . . .. . .. . . . .. . . . .134

4.3. Consultas básicas .. . .. . .. .. . . . . . .. . .. . . . . . . . . .135

4.4. Filtros . . . . . . . . . .. . . .. . . . . . . . .. . .. . . .. . . . .137

4.4.1. Expresiones para ltros . .. .. . . . .. . . . .. . . . .. . .1384.4.2. Construcción de ltros . . . . . . . .. . . . . . . .. . . . . .140

4.4.3. Filtros con operador de pertenencia a conjuntos . . . . . .. .1414.4.4. Filtros con operador de rango . .. . . . . . . .. . . . .. . .1424.4.5. Filtros con test de valor nulo . .. . . . . . .. . . . .. . .. . 143

4.4.6. Filtros con test de patrón. .

... . .

. ..

. ..

. . . . ..

.143

4.4.7. Filtros por límite de número de registros . . . . . . .. . . . .1444.5. Ordenación . .. . . .. . . . . . . .. .. . .. . . .. .. . . . . . .145

4.6. Consultas de resumen . . . . .. . . .. . . . . . . . . . .. . . . . . .147

4.6.1. Filtros de Grupos . . . .. .. . . .. . . . . . . .. .. . . . .1514.7. Subconsultas . . . . .. . . .. . . .. . .. . . .. . . . . .. . .. .152

4.7.1. Test de Comparación . . .. . . . .. .. . . . .. . . .. . . .1534.7.2. Test de pertenencia a conjunto .. . .. . .. . . . .. . . . .1544.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 . . . . .. . . . . . .. . . . . . .1594.8.2. Consultas multitabla SQL 2 . . .. . . . . .. .. . . . . .. .162

4.9. Consultas reexivas . . .. . .. . .. . .. . . . . . . . . . . . . .. .169

4.10. Consultas con tablas derivadas . .. . . . . . . .. . . . . .. .. . .. 170

4.11. Prácticas Resueltas . .. . . . . . . . . . .. .. . . . .. . . . . . . .172

4.12. Prácticas Propuestas . . . . .. .. . . .. . . . . . . . . . . . .. . .1764.13. Resumen . . . . . . . . .. . . . . .. . .. . . . . .. . . . . . .. . .182

4.14. Test de repaso .. .

.. .. . . . .

.

.. ..

.

. . . . .

.

..

.. . .. . 183

4.15. Comprueba tu aprendizaje . . . .. . .. . .. . . . .. . . . .. . . .184

.Tratamiento de los datos 185

5.1. Herramientas grácas para la edición de los datos . . . . .. . . . . .1865.1.1. Edición con phpMyAdmin .. .. . . . .. . . . . .. . .. .. 1865.1.2. Access como entorno gráco para otros gestores . . . .. . .. 187

IX

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 8/324

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 . .

. .

..

. . .1935.8. Borrado y modicación 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 información . . . . . .. . .. . . . . .. . . . . . . . .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. Prácticas Resueltas . . . . .. . . . . .. . . .. . . . . .. . . . .. .221

5.16. Prácticas Propuestas . .. .. . . . . . . . . . . .. . . . . . . . . . .223

5.17. Resumen . .. . .. .. . . . .. .. .. . .. . . . . . . .. . . .. .. 228

5.18. Test de repaso . . . . . .. . . . . . . . . . .. . . .. .. . .. . . .. 229

5.19. Comprueba tu aprendizaje . .. .. . . .. . . .. . .. . . . . . .. . 230

6. Programación de bases de datos 231

6.1. Introducción a la programación de bases de datos.

..

. . .. .

..

. 2326.2. Los lenguajes de programación 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. Gestión de errores.

.

. . . . .

. . . . . .. . . .

..

. .. . . .. . .. 251

6.7. Transacciones en scripts . . . . . . . . . . . . . . .. .. . .. . . . .253

6.8. Las secuencias . . . . . .. .. .. . . . .. . . . .. . . . . . . .. . .257

6.9. Prácticas Resueltas . . . .. . . .. . . .. . .. . .. . . . . . . . . .258

6.10. Prácticas Propuestas . . . . . . . .. .. . . . .. . .. . . . . .. . .262

6.11. Resumen . . .. .. . . . . . . .. .. .. . . .. . . . . . . .. . . . . 264

6.12. Test de repaso . . . .. . . . . .. . . . . . . . . . . . . . .. .. . . .265

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 9/324

Índice general

6.13. Comprueba tu aprendizaje .. .. . . . . . .. . .. .. . .. . .. .. 266

.BBDD distribuidas 267

7.1. BBDD y SGBD distribuidos . . . . .. . .. . . . . . . . . . . . .. .2687.1.1. Componentes de una BBDD distribuida .. .. . .. . . . . .268

7.2. Técnicas de fragmentación..

.

. . .

.

. ...

.

.. . .

. .

.. .

.

. .270

7.3. Consultas distribuidas . .. . . . . . . . . .. . .. . . .. . . . .. .271

7.3.1. DB Links . . . .. . . . . . . .. . .. . . .. . . . . . .. . .271

7.3.2. Ejecución de consultas distribuidas . .. .. .. . . . . .. . .2737.4. Transacciones distribuidas . . . . .. . . .. . .. . . . . .. . . . . .275

7.4.1. TWO-PHASE COMMIT . .. . . .. . . . . .. . . . . . . .. 276

7.4.2. Ejemplo de transacción distribuida . . . . . . . . . . . . . . .2777.5. Optimización de consultas sobre bases de datos distribuidas . . . .. 280

7.5.1. Optimización mediante consultas derivadas .. . . . . . .. .. 2807.5.2. Optimización mediante hints . . .. .. . . . . . . . . . .. . .281

7.6. Prácticas Resueltas . .. . . . . .. .. . .. . . . .. . . .. . .. . .283

7.7. Prácticas propuestas .. . . .. . . .. . . .. . . .. . . .. . . . . . 2867.8. Resumen . . . . . . . . . . . . . . .. . . . . . .. . .. . . . . . . ..289

7.9. Test de repaso . . . . . . .. .. . . . . . . . . . . . . . . . . . . .. .2907.10. Comprueba tu aprendizaje . . . . . . . .. . .. .. . . . . . . .. .. 291

.BBDD Objeto-Relacionales 2938.1. Las Bases de datos objetos-relacionales . . .. . .. . . . . . .. . . . 2948.2. Los atributos multivaluados .. . .. . .. .. . .. . . . .. . . . . .294

8.2.1. Las colecciones . . . . . . . . . . . . . . . . . . . . . . . . . .295

8.2.2. Tablas anidadas .. . . . . .. . . . . . . . .. . . . . . . .. .296

8.2.3. Tipos de Objeto .. .. . . . . .. . . . . . .. . . . .. . . . .2988.3. Los identicadores de objeto .. . . . .. . .. . . .. . . . .. . . . .3008.4. Los métodos . . .. .. . . .. . . . . .. . .. . . . . . . . . . . . . .301

8.5. La herencia . .. . . .. .. .. . . . .. . . .. . . . . . . . . . .. .304

8.6. Operaciones DML .. .. .. . . . .. .. . .. . . . . . . .. . . . . .3068.7. Las referencias . . . .. . . . . .. . . .. . . . . . . . . . . . . . . . .307

8.8. Prácticas Resueltas . . .. . . . . . . .. . .. .. . .. . . .. .. . . 309

8.9. Prácticas Propuestas .. .. . . .. . . . .. . . .. . . .. . .. .. . 312

8.10. Resumen. .

.

..

.. . . .

.

..

.. . .

. ..

. .

.. . .

. . ..

.. . . 314

8.11. Test de repaso . . . . . . . .. . . . . . . . . .. . . . . . . .. . . . .3158.12. Comprueba tu aprendizaje .. . . . .. . . .. . . . . . . . . . . .. . 316

XI

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 10/324

CAPÍTULO 1

Los sistemas de almacenamiento

de la información

ObjetivosWAnalizar los sistemas lógicos de

almacenamiento V sus carac-

.terísticasContenidos

Identicar los distintos tipos deÑ Ficheros.Tipos yformatos bases de datosn? 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 función de los ele-datos

mentos de un sistema gestor debase de datos

Clasicar los sistemas gestoresde bases de datos

Este capítulo introduce conceptos sencillos e intuitivos para establecer unacultura básica de bases de datos, y poder, de este modo, avanzar a objeti-vos más avanzados. E1 estudiante, a modo introductorio, manejará, de formamuy visual, conceptos tales como tablas y relaciones. De esta manera, afron-tará capítulos próximos con más experiencia, y entenderá y asimilará mejor eldiseño lógico y  sico de las bases de datos.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 11/324

Bases de Datos

1. 1. Ficheros

Un ordenador almacena muchos tipos de información, desde datos administrati-

vos, contables o bancarios hasta música, películas, partidas de videojuegos, páginas

webs, etc. Toda esta información está almacenada en los dispositivos de almace-

namiento del ordenador, esto es, discos duros, dvds, pen drives, etc. Para poderorganizar la información en estos dispositivos, se utilizan los cheros o archivos.

Los cheros son estructuras de información que crean los sistemas operativos de los

ordenadores para poder almacenar datos. Suelen tener un nombre y una extensión,

que determina el formato de la información que contiene.

1.1.1. Tipos de cheros yformatos

El formato y tipo de chero determina la forma de interpretar la información

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 suinterpretación para darsentido a la información 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. Además, la imagen

posee una paleta de colores y unas dimensiones, información que también hay que

almacenar en el chero. Todos estos datos se ordenan según un formato, y el sistema

operativo, o la utilidad que trate los grácos, debe conocer este formato para poder

extraer los píxeles 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 unchero con extensión doc(del pro-cesador detextos Microsoft Word), y ábrelo con el bloc de notas, pulsando con elratón derecho sobre el y seleccionando la opción 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 aplicación de Microsoft.

Tradicionalmente, los cheros se han clasicado de muchas formas, según su conte-nido (texto o binario), según suorganización (secuencial,directa, indexada)o segúnsu utilidad (maestros, históricos,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 alfabéticos y números que entiende el ser humano, o pueden

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 12/324

Capítulo 1. Los sistemas de almacenamiento de Ia información

ser tratados como componentes de estructuras de datos más complejas, como cheros

que almacenan sonido, vídeo, imágenes, etc.

La organización de un chero dicta la forma en que se han de accedera los datos,

así, los datos de un chero con organización secuencial, están dispuestos siguiendouna secuencia ordenada, es decir, unos detrás de otros. Se caracterizan por tener

que recorrer todos los datos anteriores para llegar a uno en concreto. Los cheros

de organización directa, permiten acceder a un dato en concreto sin necesidad de

acceder a todos los anteriores. Finalmente, los de organización indexada acceden

a los datos consultando un índice, es decir, una estructura de datos que permite

acceder a la información rápidamente, simulando la forma en que el índice de un

libro facilita el acceso a sus contenidos. Existen también variantes de las anteriores

que mezclan las mejores características 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 organización, 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, sealmacenan 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 históricos.

Hoy en día, estas dos últimas clasicaciones han quedado en desuso. Por ejemplo,

desde la aparición de las bases de datos modernas, ya no se clasican según su

utilidad u organización.

Actualmente un sistema opera.tivo trata. un chero desde dos puntos de vista:

1. Según su contenido (texto o datos binarios)

2. Según su tipo (imágenes, ejecutables, clips de videos, etc.)

1.1.2. Ficheros de texto

Los cheros de texto suelen llamarse también cheros planos o cheros ascii. El

vocablo ascii es un acrónimo de American Standard Code for Information Inter-

change. Es un estándar que asigna un valor numérico a cada carácter, con lo que se

pueden representar los documentos llamados de Texto Plano, es decir, los que son

directamente legibles por seres humanos.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 13/324

Bases de Datos

La asignación de valores numéricos a caracteres viene dada por la famosa tabla

de códigos ascii, que es la más extendida, aunque existen otras. Se caracteriza por

utilizar 1 byte para la representación de cada carácter. Con x bits se pueden generar

2combinaciones distintas de caracteres, ycomo 1 byte = 8 bits, existen 28= 256

caracteres en la tabla de códigos ascii, numerados del 0 al 255.

<> Actividad 1.22 Conéctatea Internet,y buscauna tabla de códigosascii de8bits. Observa las siguientes características:

- Los 32 primeros caracteres, se llaman caracteres no imprimibles y se utilizaban

tradicionalmente para el control de transmisiones.

ILa distancia entre mayúsculas y minúsculas es exactamente 32 caracteres.

n Hay caracteres que son numéricos, y cuyo valor ascii es el resultado de sumarle48. Por ejemplo, 6+48=54. 54 es el código ascii del carácter 6.

Algunos alfabetos, como el katakana japonés utilizan más de 256 caracteres. En

estos casos,se requieren las tablas de caracteres unicode, que reservan dos bytes para

cada carácter.

o Actividad 1.32 Conéctatea http://mm.unicode.org/charts/ y descárgatelas tablasde códigosLatin (alfabeto latino) y K  atakana (alfabeto japonés).Observalas siguientes curiosidades:

n La tabla de códigos Latin ,es exactamente idéntica a la tabla de códigos ascii

de 8 bits, solo que los bits del primer byte unicode, están todos a 0.

ILa tablas de códigos Latin y Katakanatienen múltiples 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 conguración: Son cheros cuyo contenido es texto sobre con-

guraciones del sistema operativo o de alguna aplicación. Estos pueden tener

extensión .ini, .inf ,.conf

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 14/324

Capítulo 1. Los sistemas de almacenamiento de la información

IFicheros de código fuente: Su contenido es texto con programas informáticos.

Ejemplos: sql, .c, .java

n Ficherosde páginasweb: Laspáginas websson cheros de texto con hipertexto

que interpreta el navegador. html, php, .css, .xml

n Formatos enriquecidos: Son textos que contienen códigos de control para ofre-

cer una visión del texto más elegante: .rtf, .ps ,.tex

¿Sabías que .. . 7XML es un lenguaje estándarpara el intercambio dedatos entre aplicaciones informáticas. Se están desarrollando actualmente las

llamadas bases de datos nativas XML. cuyo foco principal es el aI1nacenamien-

to de documentos de texto con código en XML. y no las relaciones entre la

información, como sucede conlas basesde datos relacionales que se estudian enel presente libro. Por ejemplo, DB2 incorpora dentro de su motor una nueva ca-

racterística 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 formatopara ser interpretado. A continuación se muestran algunos tipos de formatos de

 cheros binarios:

IDe imagen: jpg, gif, .tiff, .bmp, .wmf, .png, .pcx; entre muchos otros

n De vídeo: .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, conbifurcaciones, quepermite que ellector elija qué secuencia seguir yque es presentado en una pantalla interactiva para facilitar la

navegación.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 15/324

Bases de Datos

Generalmente los cheros que componen una base de datos son de tipo binario,puesto que la información que hay almacenada en ellos debe tener una estructuralógica y organizada para que las aplicaciones puedan acceder a ella de manera univer-sal, esto es, siguiendo un estándar. Esta estructura. lógica y organizada, generalmentees muy difícil de expresar mediante cheros de texto, por tanto, la información de

una base de datos se suele guardar en uno o varios cheros:

u El software de gestión de base de datos Oracle guarda la información en múlti-ples tipos de cheros, llamados datales, temples, logles, etc.

IUn tipo de tablas del gestor l\iI;vSQL guarda su información en 3 cheros dedatos binarios, con extensión frm, myd y myi.

n Access guarda toda la información de una base de datos con extensión mdb.

<> Actividad 1.4: La siguiente imagenes unacaptura deuna carpetaen elsistemaoperativo Windows 7. Indica qué tipo de chero es cada uno de ellos y qué contiene.

HcmL-re Fecha de nmzhwïcecicn Tnpc Tamahc

u112ilE Battlestar Galactica- lxLavi Úí 3-322v]? "LJ Íhp de ¿dee 6&#39;-4

11

a

Í

  u 

r

J

"n

1 .

 o  _. __ (omojnstalantxt

i- DSCN0776JPG

5&#39; eclipseexe

l 1v. q.

tn 1a

¡If L

 __ eclipseinic:

t.

 a

V IJ -.-- img_xp_sp3.iso

 _lícencia_windows.bct ,4

(¡r

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 16/324

Capítulo 1. Los sistemas de almacenamiento de la información

de forma ordenada y coherente (sincontradicciones). Cadauna de estas tablas es

una estructura que se parece a las hojas de cálculo, 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 podría 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 información sobre cada empleado, por ejemplo elnombre o el número de teléfono.

 jímpliidïvï - -  Y 

CodngoEmple v Nombre v Apellidol v Apellndoz v Extension v Email v codugoo :

1 MarcosMagaña Perez3897 [email protected] López Martinez [email protected] TAL-ES

3Alberto Soria Carrasco 2837 asoria@}ardineria.es TAL-ES  _

4Maria Solís Jerez 2847 [email protected] TAL-ES E

5 Felipe Rosas Marquez 2844 [email protected] TAL-ESl6 JuanCarlos 0m: Serrano 2845 [email protected] TAL-ES l7Carlos Soria Jimenez [email protected] MAD-ESx8 Mariano López Murcia 2442 mlopezcenardmenaes rvlAD-ES

9 Lucio Campoamor Manín 2442 lcampoamorczïjardineriaes MAD-ES

10 Hilario Rodriguez Huertas 2444 [email protected] MAD-ES

11 Emmanuel Magaña Perez 2518 manu@¡ardinena.es BCN-ES

12 JoséManuel Martinez De laOsa 2519¡mmanéïhotmarles BCN-ES

13 David Dalma Aceituno 2519dpalma@jard¡neria.es BCN-ES

14Oscar Palma Aceituno 7519 [email protected] BCN-ES

15 Francois Fugnon 9981ffignonQgardeningxom PAR-FR

16Lionel Narvaez [email protected] PAR-FR

17 Laurent Serra [email protected] PAR-FR

18 Michael Bolton 7454 mboltoncaïgardeningmom SFC-USA

 ___ ___19 W_a|_ïe_r_ SantuagSanchez Lopez 7454 [email protected] SFC-USAvRegistro: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 seenfrentan los informáticos cuando comien-

zan su aprendizaje, es el gran número de términos desconocidos que debe asimilar,

incluyendo el enorme número de sinónimos 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 verán en próximos capítulos,

se denen los siguientes conceptos:

Dato: El dato es un trozo de información concreta sobre algún concepto o suceso.

Por ejemplo, 1996 es un número que representa un año 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 numéricos, que son aquellos con los que se pueden realizar cálculos

aritméticos (sumas,restas, multiplicaciones.. .) y los datos alfanuméricos,que

7

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 17/324

Bases de Datos

son los que contienen caracteres alfabéticos y dígitos numéricos. Estos datos al-fanuméricos ynuméricos se pueden combinar para obtener tipos de datos máselaborados. Por ejemplo, el tipo de dato Fecha contiene tres datos numéricos,representando el día, el mes y el año de esa fecha.

Campo: Un campo es un identicador para toda una familia de datos. Cada campopertenece 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 campopertenece al tipo de dato Fecha. Al campo también se le llama columna.

Registro: Es una recolección de datos referentes a un mismo concepto o suceso.Por ejemplo, los datos de una persona pueden ser su NIF, año de nacimiento,su nombre, su dirección, etc. A los registros también 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 variostipos de campos clave como se explicará en la. sección 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 sealmacenan en una tabla cuyo nombre es Clientes.

Consulta: Es una instrucción para hacer peticiones a una base de datos. Puede seruna búsqueda simple de un registro especico o una solicitud para seleccionartodos los registros que satisfagan un conjunto de criterios. Aunque en cas-tellano, consulta tiene un signicado de extracción de información, en inglésquery, una consulta es una petición, por tanto, además de las consultas debúsqueda de información, que devuelven los campos y registros solicitados,hay consultas (peticiones) de eliminación o inserción de registros, de actuali-zación de registros, cuya ejecución altera los valores de los mismos.

Índice: Es una estructuraque almacenalos camposclave deuna tabla,orga-nizándolos para hacer más fácil 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 posición en la basede datos. Para buscar un elemento que esté indexado, solo hay que buscar enel índice de dicho elemento para, una vez encontrado, devolver el registro quese encuentre en la posición marcada por el índice.

Vista: Es una transformación que se hace a una o más tablas para obtener unanueva tabla. Esta nueva tabla es una tabla virtual, es decir, no está almacenadaen los dispositivos de almacenamiento del ordenador, aunque sí se almacenasu denición.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 18/324

Capítulo 1.Los sistemas de almacenamiento de la información

Informe: Es un listado ordenado de los campos y registros seleccionados en un

formato fácil de leer. Generalmente se usan como peticiones expresas de un

tipo de información 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 formaordenada, 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 través de un esquema. El esquema

es la denición de la estructura donde se almacenan los datos, contiene todo lonecesario para organizar la información mediante tablas, registros (las) y campos

(columnas). Tambiéncontiene otros objetos necesariospara el tratamiento de los

datos (procedimientos, vistas, índices, etc.) y que se estudiarán en este libro. Al

esquema también se le suele llamar metainformación, es decir, información sobre la

información 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 19/324

Bases de Datos

esquema de la base de datos se puede tratar como si fueran datos comunes de le.

base de datos. Véase gura 1.2.

1.2.3. Usos de las bases de datos

Las bases de datos son ubícuas, están en Cualquier tipo de sistema informático.a continuación se exponen solo algunos ejemplos de sus usos más frecuentes:

IBases de datos Administrativas: Cualquier empresa necesita registrar y rela-

cionar sus clientes, pedidos, facturas, productos, etc.

IBases de datos Contables: También es necesario gestionar los pagos, balances

de pérdidas y ganancias, patrimonio, declaraciones de hacienda. . .

IBases de datos para motores de búsquedas: Por ejemplo Google o Altavista.

tienen una base de da.tos gigantescadonde almacenan información sobre todoslos documentos de Internet. Posteriormente millones de usuarios buscan en la

base de datos de estos motores.

- Cientícas: Recolección de datos climáticos y medioambientales, químicos.

genómicos, geológicos.. .

IConguraciones: Almacenan datos de conguración de un sistema informático.

como por ejemplo, el registro de windows.

n Bibliotecas: Almacenan información bibliográca, por ejemplo, la famosa tien-da virtual amazon o la. biblioteca de un instituto.

ICensos: Guardan información demográca de pueblos, ciudades ypaises.

IVirus: Los antivirus guardan información sobre todos los potenciales software

maliciosos.

IOtros muchos usos: Militares, videojuegos, deportes, etc.

¿Sabías que . . . 7La &#39;WDCC (WorldData ClimateCenter), centromun-dial para datos del clima, es la base de datos más grande del mundo. Almacena

alrededor de 6 petabytes de información, esto es 6144 Terabytes de informa-

ción sobre clima, predicciones y simulaciones. La base de datos de Google

está situada como la 4a más grande del mundo (Abril-QOIO).

10

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 20/324

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 21/324

Bases de Datos

listas enlazadas y árboles de información. La losofía 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 jerárquicas, evolucionan para admitir varios

padres para un concepto hijo.

¿Sabías que . . . 7En octubre de 1969 seconcibe elprimer modelodebase 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, cientíco informático inglés de IBM, publica en 1970 en un

artículo Un modelo relacional de datos para grandes bancos de datos compartidos

(A Relational Model of Data for Large SharedData Banks), donde denió el modelorelacional, basado en la lógica de predicados y la teoría de conjuntos. Nacieron, de

esta forma, las bases de datos relacionales, o segunda generación de bases de datos.

Larry Ellison, fundador de Oracle. se inspiró en este artículo para desarrollar el

famoso motor de base de datos, que comenzó como un proyecto para la CIA (Central

Intelligence Agency) americana. La potente base matemática de este modelo, es el

gran secreto de su éxito. Hoy en día, el modelo relacional de Codd, pese a tener

muchas alternativas, sigue siendo el más utilizado a todos los niveles.

¿Sabías que . . . 7Las leyes deCodd sonun conjuntode 13reglas (delaregla Oa la regla 12) cuya nalidad es establecer las características 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 yleerlas con detenimiento.

<> Actividad 1.6: Busca en Internet la biografíade los siguientes personajes,y

comenta su principal contribución a la evolución de las bases de datos:

J Edgar Frank Codd J Bill Gates

J Larry Ellison J Michael Monty Widenius

J Roger Kent Summit

12

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 22/324

Capítulo 1. Los sistemas de almacenamiento de la información

En la década de 1980 IBM lanza su motor de bases de datos DB2, para la pla-

taforma MVS. Unos añosdespués, IBMcrea el SQL (Structured Query Language),un potente lenguage de consultas para manipular información de bases de datos

relacionales.

A medidados de 1990, IBM lanza una versión de DB2 que es capaz de dividir unabase de datos enorme en varios servidores comunicados por líneas de gran velocidad,

creándose de este modo las bases de datos paralelas.Aesta versión 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. Enlugar de la losofía de almacenar relaciones y tablas, se almacenan colecciones de

objetos que, además de información, tienen comportamientos (instrucciones sobre

cómo procesar los datos).

La aparición de Internet y el comienzo de la era de la información, crean nuevos

requirimientos para bases dedatos. La cantidad de información comienza a crecer en

proporciones desconocidashasta el momento. De esta forma, se creanlas basesde da-

tos distribuidas, que consisten en multiplicar el número de ordenadores que controlan

una base de datos (llamados nodos), intercambiándose información y actualizaciones

a través de la red. Este increible aumento de datos a almacenar, organizados muchasveces en datos estadísticos recopilados con el trascurso de los años, hizo necesaria

la aparición de un software llamado Software de ayuda a la decisión. Este software

avanzado trata de dar respuestas concretas examinando múltiples datos estadísticos

que se han recopilado a lo largo del tiempo en bases de datos multidimensionales,

formando lo que se denominan cubos de información.

Ventas del 2do 172010

España, HuelvaJamón de Bellota Q4

empo

¡z/broductoProvincia   &#39; 

Figura 1.3: Ejemplo de cubo en una base de datos multidimensional.

13

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 23/324

Bases de Datos

También, a lo largo de la corta historia de la informática, han surgido otros tipos

de bases de datos que se enumeran a continuación:

- Bases de datos espaciales o geográcas: Son bases de datos que almacenan

mapas v símbolos que representan supercies geográcas. Google Earth esu 

una aplicación que lanza consultas a bases de datos de este tipo.

n Bases de datos documentales: Permiten la indexación de texto para poder

realizar búsquedas complejas en textos de gran longitud.

IBases de datos deductivas: Es un sistema de bases de datos que almacena

hechos y que permite, a través de procedimientos de inferencia, extraer nuevos

hechos. Sebasan en la lógica, por ello también se suelen llamar bases de datos

lógicas.

Base de datos Datos almacenados

Sistemas de cheros Datos en cheros

Jerárquicas Estructuras de datos (listas y árboles) varios cheros

En red Estructuras de datos (árbolesy grafos)

Relacionales Teoría de conjuntos y relaciones

Orientadas a objetos Objetos complejos con comportamiento

Geográcas Puntos, Líneas y Polígonos una o varias BBDD

Deductivas Hechos y ReglasDocumentales Documentos

Distribuidas Múltiples 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 elconjunto de herramientas que facilitan la. consulta, uso y actualización 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

múltiples discos duros los cheros de una base de datos, permitiendo el acceso a sus

datos tanto a partir de herramientas grácas como a partir de potentes lenguajes de

programación (PL-SQL, php, c++. . .).

14

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 24/324

Capítulo 1.Los sistemas de almacenamiento de 1a información

1.3.2. Funciones de un SGBD

Los SGBD del mercado cumplen con casi todas funciones que a continuación se

enumeran:

1. Permiten a los usuarios almacenar datos, acceder a ellos y actualizarlos deforma sencilla y con un gran rendimiento, ocultando la complejidad y las ca-

racterísticas físicas 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 información exclusivamente a aquellos usuarios que dispongan

de autorización.

4. Proporcionan un diccionario de metadatos, que contiene el esquema de la base

de datos, es decir, cómo están estructurados los datos en tablas, registros y

campos, las relaciones entre los datos, usuarios, permisos, etc. Este diccionario

de datos debe ser también 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

transacción se realicen correctamente, y en caso de alguna incidencia, deshacen

los cambios sin ningún tipo de complicación adicional.

6. Ofrecen, mediante completas herramientas, estadísticas sobre el uso del gestor,

registrando operaciones efectuadas, consultas solicitas, operaciones fallidas ycualquier tipo de incidencia. Es posible de este modo, monitorizar el uso de la

base de datos, y permiten analizar hipotéticos malfuncionamientos.

7. Permiten la concurrencia, es decir, varios usuarios trabajando sobre un mismo

conjunto de datos. Además, proporcionan mecanismos que permiten arbitraroperaciones conflictivas en el acceso omodicación de un dato al mismo tiempo

por parte de varios usuarios.

8. Independizan los datos de la aplicación o usuario que esté utilizándolos, ha-

ciendo más fácil su migración a otras plataformas.

9. Ofrecen conectividad con el exterior. De esta manera, se puede replicar y

distribuir bases de datos. Además, todos los SGBD incorporan herramientas

15

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 25/324

Bases de Datos

estándar deconectividad. Elprotocolo ODBC4está muyextendido comoforma

de comunicación entre bases de datos y aplicaciones externas.

10. Incorporan herramientas para la salvaguarda y restauración de la información

en caso de desastre. Algunos gestores, tienen sosticados mecanismos para

poder establecer el estado de una base de datos en cualquier punto anterior enel tiempo. Además, deben ofrecer sencillas herramientas para la importación

y exporta.ción automática de la información.

<> Actividad 1.72 Buscaen Internetlas leyesde Coddpara elfuncionamiento desistemas gestores de bases de datos relaciones y establece una relación 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-

mación con el usuario. Este interfaz consiste en un lenguaje muy sencillo mediante

el cuál el usuario realiza preguntas al servidor, contestando este a las demandas del

usuario. Este lenguaje comúnmente se denomina SQL, Structured Query Language,

está estandarizadopor la 1805, esdecir, todas las basesde datosque soportenSQLdeben 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 funcionalidadesrequeridas por CODD:

- Lenguaje DML: o lenguaje de manipulación de datos (Data ManipulationLanguage). Estelenguaje permite con 4 sentencias sencillasseleccionar deter-

minados datos (SELECT), insertar datos (INSERT), modicarlos (UPDATE)

o incluso borrarlos (DELETE). En capítulos posteriores sedesarrollará lasin-taxis de cada una de estas sentencias.

ILenguaje DDL: o lenguaje de denición de datos (Data Denition Langua-

ge). Estelenguaje permitecrear todala estructura de unabase dedatos ( desdetablas hasta usuarios). Sus cláusulas son del tipo DROP (Eliminar objetos) y

CREATE (Crear objetos). En capítulos posterioresse detallará la sintaxis decada una de estas sentencias.

ODBC signica Open DatabaseConnectivity, y es un estándar deacceso adatos desarrolladopor Microsoft

5180 esel acrónimo de International Organization for Standardarization

16

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 26/324

Capítulo 1. Los sistemas de almacenamiento de la información

- 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 propósito de este

lengua.je espermitir ejecutar varios comandos de forma simultánea como si fue-ra un comando atómico o indivisible. Si es posible ejecutar todos los comandos,

se aplica la transacción (COMMIT), y si, en algún paso de la ejecución, sucede

algo inesperado,se puedendeshacer todoslos pasosdados (ROLLBACK).

<> Actividad 1.82 Buscaen la Wikipedia eltérmino SQLe indicalas revisionesque ha sufrido el lenguaje a lo largo del tiempo. A continuación, busca el signicado

del término SQL Injection e indica por qué un administrador debe protegerse frente

a él.

1.3.4. Tipos de SGBD

Se puedenclasicar los SGBD de muchas formas, por ejemplo, según las bases de

datos que gestionan, clasicando los SGBD según traten bases dedatos relacionales,

bases de datos orientadas a objetos, etc. Puesto que en la actualidad, la mayoría de

los SGBD integran múltiples losóas y tipos de funcionamiento, en este libro se

clasican los de gestores de basesde datos según su capacidad y potencia del propio

gestor:

Los Gestores de Bases de Datos omáticas son aquellos que manipulan

bases de datos pequeñas (omáticas) orientadas a almacenar datos domésticos o de

pequeñas empresas.Incluso estos gestores permiten construir pequeñas aplicacionespara ayudar a un usuario inexperto a manipular los datos de una base de datos de

forma sencilla e intuitiva. Un ejemplo de un SGBD omático es Microsoft Access,

que posee tanto una interfaz de usuario muy sencilla como un potente lenguaje de

programación (VBA=Visual Basic forAplications) para ofrecer ausuarios avanzados

otras posibilidades de gestión mucho más especícas.

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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 27/324

Bases de Datos

de forma muy rápida y eciente para poder resolver lademanda demuchos (cientos)de usuarios. Un ejemplo típico de servidor de base de datos Corporativas es el antes

comentado Oracle, actualmente, junto con DB2, el servidor de base de datos más

potente del mercado (también el más caro). Precisamente,ese costetan alto es elque ha desencadenado que se haya recurrido a una solución intermedia entre gesto-

res de base de datos omáticas y corporativas. Entre estas soluciones intermedias seencuentra MySQL, un gestor de base de datos que, además de ser gratuito y senci-

llo, es capaz de manipular gran cantidad de datos cumpliendo prácticamente todos

los estándares de la arquitectura ANSI SPARC. Aunque implementa SQL, no tiene

un lenguaje de programación propio como SQL Server u Oracle (aunque está endesarrollo), pero a cambio se integra fácilmente en las típicas soluciones XAMPP,

que son paquetes que incluyen, además de MySQL, una versión del servidor Web

Apache y varios lenguajesde script (php, perl. . .) que dotan a MySQL de potentesherramientas para acceso y publicación de los datos.

Contabilidad Administración

Usuario 1

Figura 1.4: Esquema típico de organización de un SGBD corporativo.

18

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 28/324

Capítulo 1. Los sistemas de almacenamiento de 1a información

1.4.Prácticas Resueltas

Práctica 1.1: Introducción a Microsoft Access.En esta práctica, se aprenderá a manipular de forma básica el gestor de basesde da- 

tos Accessde Microsoft.Abre la base dedatos Neptunoaccdb que puedesdescargarde www. garcetaes, y realiza las siguientes acciones. Será necesario modicar algún

objeto de la base de datos, por tanto guarda una copia con el nombre practicalaccdb

7y conserva laoriginal para repetir 1a práctica cuantasveces desees.

fí I

 \J&#39;\/_ 

OrganizarvNueva carpen

lEscritorio «i: rw- Fama es núüiue. Tip:

,4 Sitiosrecientes¡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; Grupoen elhogar

1&#39;- Equipc - 4 

Hombre dearchivo: Neptuncmccdbvi Microsoft OfficeAccess (mccdv]rm

 _  

Herramientasv ICancelar |

Abre Microsoft Access y pulsa el botón de Office. Selecciona la opción abrir, y en el cuadro de diálogo, busca

la base de datos neptuno.

1. ¿Qué tipo de información almacena la base de datos?

 Neptuno es una basede datosque incorporanlas versionesantiguas deMicrosoft Access(hasta

Access 2003)7accdb es la extensión de las bases de datos de Access 2007

19

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 29/324

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 infonnación que contiene, por ejemplo, la tabla deproductos almacena información sobre alimentación y de- rivados, por tanto, Neptuno esel sistema de información deuna empresa que importa y eazportacomestibles especialesde todo el mundo.

2.¿Qué objetostiene la basede datos? 

ÏrSBíaTM---wl  < Id.d Todos  losObJQÍOS deAccess Dplazarse l lacategoría 13m -  6 

De   leyar C°""&#39;*  s formularios  

Iipodeobjeto . m; Catalogo 

i  Si 

Personalizado  e 

  7) K(( (4Iablas yvistas relacionadas Fecha de¡reacion Etiquetas  decliente fechademodicacion nm".

Desplegando la lista del pa- nel lateral izquierdo deAc- 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;  

Módulos Todos losobjetos deAccess 

Filtrar porgrupo Lista  alfabética deproductos 

¿E Twin Productos  porcategoría 

Resumen deventas poraño 

Resumen deventas por trimestre 

Subintorme Catalogo 

Subiriíorme ventas poraño 

44004 Subiriionrie ventas porcategoria 4 

4    TOÍMQS d!VGHÍIS D0!Cllidld o  ventas deempleado porpaís 

ventas poraño 

3. Explora todos los objetosde la basede datos, poniendoespecialénfasisen el 

diseñode cadaobjeto, esdecir,en la forma en la que estánconstruidos.

Todos losobietos deAccess  <r j pj d- --r-- --- --  r  >EtE|l¿: e e c:  Consultas 

Consuita depedidos J pu,APara explorar el conte- 

nido de un objeto, bas- ta con hacer un do- ble clic con el botón  izquierdo del ratón y  examinar el panel fron- tal. Para ver el diseño se pulsa con el botón  derecho del ratón y  se selecciona la opción 

Diseño. Por ejemplo,la consulta Subtotales por pedido consiste en un listado de los pedi- dos con su coste total.

Detalle depedidos con descuento 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! VEMMD0! IÑO cmem: i Resumen deventas por trimestre 

E Zoom Subtotalesporpedido &#39;  &#39; y. " l 

ÍSTototaI: scanamdonedaweooLx-udadlcmhd Totales deventas por cantidad r mnuwvlooléiliíé 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 30/324

Capítulo 1. Los sistemas de almacenamiento de Ia información 

4. Añade el campo Destinatarioa la consulta Subtotales por pedido.

Entra en modo diseño  y pulsando con el botón derecho en el panel superior, selecciona la opción Mostrar Tabla. Después,añade la tabla pedido. Verás cómo aparecen las dos tablas relacionadas, en una, los campos genéricos del pedido (FechaPedido,FechaEntrega,etc.) y en la otra, el detalle de cadauno de los pedidos.

A continuación, arrastra el campoDestinatario de la tabla Pedidoal panel inferior (en la tercera columna).Deïaïle: de[ELÏIZJC a ïeaidr: 

FecnaEntiega  

FechaEnvio  FoimaEnvío ¡- 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. Añade el  campo Email a la tabla Clientes,es un campo de tipo Texto y de longitud 75. Examina las distintas propiedades del campo y consulta la ayuda de Accessen cada uno de ellos pulsando la tecla F1.

Entra en modo diseño y aparecerá la lista de campos de la tabla.Añade una nueva la  y completa el nombre de campo, el tipo  y  la descripción. A continuación, rellena las propiedades del campo.Puedes, por ejemplo,poner una regla de validación para que los emails tengan elformato nombre@dominio, esdecir, que tengan una @ en el terio del email. Para poner la regla  de validación, pon Como *@* en el campo Regla de

validación 

Nombre de! campo Tipo de datos Descripción  i Idcliente Texto Códigoúnicobasadoenel nombredelcliente.

Nombrecompañía Texto  Nombrecontacto Texto  Cargocoritacio Texto  Dirección Texto Ca|leoapartado  de correos.Ciudad Texto Región Texto Estadooprovincia.

códPostal Texto  País Texto  Telefono Texto incluyecódigo  de paíso de área.Fax Texto Incluyecodigo  de paíso de área.Email Texto NuevoCampoañadido  

Propiedaues delcampo 

General aúsqueu Tamaño del campo  75Formato Mascara deentrada Título 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 31/324

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 N°mh"c°"p&#39;ñ¡&#39; 

ldProveedor P&#39;&#39;°U"&#39;°3°ldEmpIeIdo N°mb"c°m&#39;d°ldcategovíu ("5" FechaPedndo C"°°(°""°CanhdaaPovU °°"° FecmEntrega D_"""°"  Preuounuaao FecnaEnvío (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.  Ho»aeDFODICUBUQS Cargo  I

Tratamiento Rlolonmmn" J * &#39;. Depenaenuas del Objlïí (ogpoggmpg; ldc°m9"&#39;¡¡""&#39;°5 

Fechannrnlent-  . ¡qompucomnñ &#39;¡53&#39;5""J" FecnacontratnaPmoemrm" 1,¡¿¡¿,na  Il &#39;l"rvr :c."-- Dirección  v

4

Íz-ncehxseamic; 

Las relaciones dictan cómo se puede enlazar la información de diferentes tablas para obtener información más elaborada. Para ver las relaciones de la basede datos, se pulsa en Herramientas de Bases de Datos

y a continuación en el botón Relaciones

7. Un formulariova siempreasociadoa las operacionesquesehacenconuna tabla,a las quecomúnmentesellama 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 insertión o alta, eliminación o baja,modicación o actualización y búsqueda o consulta de un registro. Todas estas opemciones se pueden 

realizar de forma muy sencilla y visual a través del formulario.

8. Inserta un nuevo cliente en la base de datos.

  Y

lo.decliente v Nombredecompañia  v Nombredelcontact- Insertar un cliente es muy sencillo, WANDK Diewandemde  Kuh RitaMuller  se puede hace-r a través del forfnularío VJÁRTH Wála Herkku Dnrkxo  KOSKIXBÍO &#39;C[ien¿¿3o abñendo [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 92 Do . Busur 1Lv 

En una la vacía, se agregan los va-  lonescorrespondientes a cada campo.

9. Elimina el registrocorrespondienteal cliente Rancho Grande. ¿Es posible?Si no esposible.¿Qué habría que hacerpara poder eliminarlo? 

22 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 32/324

Capítulo 1. Los sistemas de almacenamiento de la información 

Para eliminar el cliente, hay que buscar el cliente Rancho Grande . A continuación, se señala. la la 

con el botón derecho del ratón  y  se escoge la opción 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, habría que eliminar previamente todos sus datos asociados.

j Clientes -  - Y 

Nombredecompañia  v  Nombredelcontact - Cargodelcontacto  - e 

¡ Jensen «re-IMM»L SergioGutiérrez Representante deventas Av.da Nummgism nGrocery Paula  wilson Representante  agente ventas 2817i ¡"""" "WW i MaurizioMoroni Asistentedeventas Strad.

CMI! JaneteLimeira AsistentedeagentedeventaAv.Cr:  

5gp." Michael  Holz Gerentedeventas Greni  Ale¡andra Camino 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 continuación, modica el campo Id. de Cliente

cambiándolo su valor a ROMMY. ¿Es posible modicar el Id. de Cliente? Si es  

posible, ¿conservael cliente aún sus pedidos? 

Pana modicar el cliente, se localiza su la  y  se sitúa el cursor del ratón en el campo que se desea  

modicar. Después, cambiar el valor del campo. En este caso, esposible modicar ambos campos, el primero,

el Nombre de Contacto no tiene conicto alguno puesto que no está implicado en ninguna relación. Modicar 

el campo Id. de Cliente podría suponer la.pérdida de pedidos si no se actualizara a su vez todos los pedidos 

del cliente. Access efectúa esta modicación automáticamente al cambiar el identicador del cliente, por  

tanto, no hay pérdida de pedidos.

3 [lie-ita  - Y

ld.decliente   Nombredecompañia - Nombredelcontact- Cargodelcontacto Dir  A

QUEEN QueenCozlnha LúciaCarvalho 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 GranVía,1.__*-SANTG__ __janteourmet_,_.__.__-, __._.__.Jonas Beraulisen Drooietario Erlinzskaki  &#39;Registro: I< 469de92 D N i . 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 continuación,

sepulsa el icono + del campo Id de Proveedorpara desplegarlas relaciones que tiene con Productos.

18Aux JOyEUXecclesiastiques GuyleneNodier Gerentedevent  19NewEnglandSeafoodCannery RoboMerchant Agentedecuent 

20LekaTrading ChandraLeka Propietario  ld.deproducto - Nombredeproducto Categoria   - CantidadporUnidav

TallarinesdeSingapur Granos/Cereales32 - 1kgpaq.43CafedeMalasia Bebidas 16- latas500g  

44Azucar negraMalacca Condimentos 20  - bolsas 2kg 

(Nuevo),_..__¡_,_ ,-.s.... ».___.__i- __.egistro: I< l de3   DH 0 - LeknTnding  4  l 

23

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 33/324

Bases de Datos

12. Consulta la ayuda de Access y comenta los diferentes tipos de datos que puedealmacenar un campo en Access (Texto, Memo, Numérico).

En Access existen 10 tipos de datos básicos:

Datos adjuntosComo fotos digitales. En cada registro es posible adjuntar varios archivos. Este tipo dedatos no estaba disponible en versiones anteriores de Access.

AutonumérícoNúmeros que se generan automáticamente para cada registro.

Moneda Valores monetarios.

Fecha/HoraFechas y Horas

HípervínculoComo direcciones de páginas web.

MemoBloques de tezto largos y tezto que emplean formato de texto. Una utilidad típica de un campo Memosería una descripción de producto detallada.

Objeto OLEObjetos OLE (objeto OLE: objeto que admite el protocolo OLEpara la vinculación e in-crustación de objetos. Un objeto OLE de un servidor OLE (por ejemplo, una imagen de Paint deWindows o una hoja de cálculo de Álicrosoft Excel), se puede vincular o incrustar en un campo,

formulario o informe.

Texto Valores alfanuméricos cortos, como un apellido o una dirección.

Número Valores numéricos, como distancias. Hay que tener en cuenta que existe un tipo de datos inde-pendiente para la moneda.

Sí/No Valores Booleanos o Lógicos. Admiten únicamente el valor Si y el valor No.

13. ¿Qué subtípos de datos tiene el campo numérico en Access?

El tipo numérico se puede dividir en subtípos dependiendo del tamaño de campo que se eli- ja. Asi, los campos numéricos almacenarán un rango de valores muy distinto dependiendo deltamaño del campo que se seleccione. Por ejemplo, los tamaños byte (1 byte), entero (2 by-tes), entero lango (4 bytes), simple y doble precisión (coma otante de 4 y 8 bytes), etc.

GEMFN BúsquedaTamaño delcampo Entero lar - 

Lugares decimales ¡"NFOMascara deentrada Eme) ¿&#39;90

Titulo

ValorpredeterminadoRegla devalidación

i Textode validaciónRequerido NoIndexado NoEtiquetas inteligentesAlineación deltexto General

DobleId. de replicaDecimal

24

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 34/324

Capítulo 1. Lossistemasde almacenamientode1ainformación 

14. ¿Quévaloresadmitiría un camponuméricode 1 byte? 

Como  1 byte son 8  bits, se estima que los valores numéricos que sepueden almacenar en un campo de este tipo sondel 0 al 28-1, es decir  del 0 al 255. Si se insertanen el campode tipoByte valorespor encima o por debajo del 0 y del 255, Microsoft Accesslos rechazará. Nótese que este cálculo se hace sin tener en cuenta el signo del valor, puesto que el valor byte, no admite signo. Para utilizar números con signo ha 

de escogerseel tipo Entero y pam utilizar númems reales, con.decimales, debeseleccionarseun campo en formato decomaotante (simpleo doble)o el campodecimal.

15. Crea una tabla llamada Testconun únicocamponuméricode 1 byte. ¿Quéva- loresmáximo y mínimo sepuedenalmacenar?Prueba a insertar registrospara ve- ricarlo.

-/ Crear Datos  externos ÍHICIO La . &#39;.

l 3   _ Nombre delcampo Tupo dedaios Para crearunatabla!sepulsa TablaPlantnllas Lnstasae DISEÑO Numem en la pestaña Crear y se selec- 0mm Shmpm"!  &#39; d!" 

. . . v,. pn wca a  czonael iconoTabla. A contz- 3m  _ &#39; &#39; &#39;&#39;&#39;e enuación se pulsa el botón Ver 5mm _,Bús9us9I__AA__ ___ y se seleccionala opciónDi- - Cree unanuevstablaracxa Puede a...nlos T""""°°""°° 5V

-  campcs uuenamente enunanueva ¡abla o F°""¡°seno SePone7mm?  a  l ta con!  launlaenvlsxa Duseño. LuomsnetimnlesAutomnko bla, y se modica la línea que l _ Mnsaradunivldl  a anece conelnombreId ti L: m: muP y po _J Valor  predelermmado autonuméïico para poner los &#39;Huevo  Aguggr campo; Regll  aevaludauon datosdel campo.En Tamaño 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 deprueba, se abre la tabla y se insertan varios valores. Cuando se inserta un valor fuera delrango[0-255], seproduceel siguienteerror: 

Elvalor quehaespecicado nacoincide (uneltipodedatos Número deestaeolumm.

Especique unvalor nuevo.

Ayuda conlostipos dedatos yformatos.

25 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 35/324

Bases de Datos

Práctica 1.2: Manipulación de información en Access.Descarga de www. garcetaes 1a basede datos de Vehículos (Vehiculosaccdb) y ábre-

la. Será necesario modicar algún objeto de la base de datos, por tanto guarda unacopia con el nombre practicalaccdb y conserva la original para repetir la prácticacuantas VECES CÏGSGGS.

1. ¿Cuántos modelos de vehículos hay?

xr

Modelo -censor-nro":Se abre la tabla en modo Vista 1A|a Romeo 147 1.6 rs16V 10scv 3/5 8.1de Hoja de Datos , y,se con- 2 Alfa Romeo 147 1.ors 15v12o cv3/5 3,2sulta el contador de 3AlfaROMEO 147 1.9JTD IZÜCV 3/5que hay en ¡aparte ¿nm-o, ¿el 4Alfa Romeo 1471.9 noM-JET 15ocv 3/5

paneLEn este caso, 3654 mo_ 5 AlfaRomeo 1472.0TS 16v3/5d l . AlfaRomeo 147 2.0TS 16VSelespeed 3/5eos. , , , ,  _   _ ,,_ , ,,_  _  _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 5 primeros modelos que apanecen son los que más consumen.

xMocelo -Ïioosumo -1 yFmamnnac.v._ ,JU, . -

19Ferran 612 agua. 20&#39;s Qrdenarde menoramayors20 Ferran raao/ =43osp 13.2 il Ovenvdc mmrnmenw821 Ferran F599GTB 17,5 -_¡ gopm1406Maserati Coupé Granspor 17.5 3 ge,&#39; 3° Hummer H2 6,2 VS13"17.4 L1»1262 Jeep gnerokee 3.7V 16,51657 Mercedes-Benm. 63AMG Autom.(1641 16,5

Agcno detolumna,Qculuv columnas

3. Inserta un nuevo modelo de automóvil completando todos los campos.

Se pulsa el icono insertar registro y,a continuación, se rellenan todos los datos menos elcampo Id, que es autonumérico y por tanto se rellena automáticamente. El campo ñmagense rellena haciendo doble clic sobre el dato adjunto y se selecciona una imagen de tipo bmp.

 juanmaId -I Marca - 7 7 ¡Mooeio y  N - Consumo -1 Emnsrones - nt d 7A

3652 Volvo xcsc vsAWD AUT7A 13.5 3223653 volvo xcsc vsAWD AmEXECUTPJE/SDOR 13.3 3173554 votvo xcso vsAWD AUT 133317

"  3655Ferrari Tesïarossa 22.27Huevo,-

RegístraN4 365?M3655¡&#39;0-

J,

J.

m;

26

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 36/324

Capítulo 1. Los sistemas de almacenamiento de la información

4. Crea y ejecuta una consulta para ver los automóviles de la marca Seat, repiteel procedimiento para los automóviles de la marca Toyotay Volkswagen.

¿miente nao ¿QmmrooS"d&#39;mumfmh¿Deseama wnsuudeoetaloeoremwm?(QHSUKBS

Nededeádenúsdeuwmuhodia.

Automóvnes Seal1-:llmmaem4, Ésta estoda lamfovmaoón quenatura el¡sustenta paracrear laconsutn.l Imagenoeïlagsflmagmyneumg l Deseaabnrla mnsulmo moáwcarei dxseñode laCOHSUÍGg ImagenFneTmeSmw<1 eenFueT  _ .ilzagmeg y agravante consulta paraver nxmoco. ..........m 

g íiodcael dzseñooe A

Se puede crear una consulta de varias formas: con elasistente para creación de consultas, con vista diseñoo creando una consulta en modo SQL. En esta solu-ción se opta por la primera opción, se pulsa en la pes-taña Crear y se selecciona la opción Asistente pam Consumoconsultas. Primero, se selecciona la opción Asistente E"""°para consultas sencillas y después se eligen los cam-pos que se mostrarán en la consulta, Marca, Modelo,Consumo y Emisiones. En segundo lugar se elige la :[Luna] {Consumo}opción Detalle y  nalmente se da un nombre a la Automoviles Lutomovules áutomovulestabla. Para tenninar, se seleccionará la opción Mo-dicar diseño de la consulta.Acontinuación, se establece el criterio a ltm para labúsqueda de los automóviles de la marca Seat. ponien-do en el campo Criteriosde la columna Marca, elvalor =Seat". Puedes crear las consultas para To- : ALHAMBRA L8AUT.5yota y Volkswagen siguiendo la vista Diseño, pues se ALHAMBRA 1.8 MAN.6realiza de forma idéntica a cuando se modica el di- - »«HA&#39;\4BRA1.9TD|AUT.5seña de la consulta. . ÁLHAMBRÁ 1.9 ÏÜlMAÑ.5

Sea. A_r-;ANBF.A 2.0 NAAN.6 yRegnstvc N1 de93 b DI p .Busca:

27

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 37/324

Bases de Datos  

5.Abre el formulario Catálogo Ferrari en modo Diseño y describe cómo seenlazan sus campos a la base de datos.

Para abrir el formulario en modo diseño. se selecciona el objeto Catálogo Ferrari en el pa-  nel lateral   y  pulsando con el botón derecho del ratón se elige la opción Diseño del For- mulario. A continuación, se selecciona cualquiera de los campos y se pulsa en. el botón Ho-  

 ja de Propiedades que esta. situado en la pestaña de Diseño para mostrar las propiedades de  los controles del formulario. En la hoja de propiedades aparece la opción Origen del control.j (alüogofarui &#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, Dirección y Teléfono. DNI será el Campo clavede la tabla.

De la pestaña Crear, se escoge la opción Diseño de tabla, y  se rellenan las las con cada uno de los  campos que va a tener la tabla. Se ha de poner atención en.e l tamaño de cada uno de los campos.

¡DNI - Texto (10)

nNombre - Texto (20)

¡Apellidos    Texto (70)

¡Fecha de Nacimiento - Fecha/Hora 

nDirección  - Texto (255)

I Teléfono - 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 asignación del  nombre de la tabla.

  _T;  _ _: -¿.:; Nombre delcampo ¿t i V DNI exto Doc  

 amamanana: una: ae Dueño»Nombre Texto Nor  detam:   SharePoint &#39; de ¡abla Apemdos Texto Ap¿

l FechadeNaccmuenio ¿erre/Hora Fec  DITECCIÓH Texto Dire  Telefono Texto Tele  

28 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 38/324

Capítulo 1. Lossistemasde almacenamientode la información 

7. Creaunatabla llamadaPropietariosAutomoviles conloscamposDNI (del pro- pietario), Id (del automóvil) y Fecha de Compra. Establececomo clave principal de

la tabla, los camposDNI e Id.

Se repite el procedimiento de la cuestión anterior, esta vez, teniendo en cuenta que el tipo y tamaño de loscamposDNI e Id debe ser igualal de lastablasPropietariosy Automóviles,esdecir,DNI  -  Texto(10) e Id  (Numérico, Entero Largo). El campo Fecha de Compraserá de tipo Fecha/Hora. Para establecerla clave principal se seleccionan las doslas correspondientes a los camposId y DNI  y  sepulsa el botón 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 continuación, se-  

leccionar las tres tablas y agregarlas al panel de relaciones. Para enlazar el campo Id de las tablas de Au- tomóviles y PropietariosA-utomóviles se selecciona el campo Id  de esta última y se arrastra hasta el campo Id Automóviles. En la pantalla modicar relaciones que aparece, semarca las opcionesEzigir Integridad Referencial y Actualizar en cascada los registros relaciones, para erigir que los propietarios que estén relacionados con Vehículos (Id) realmente existan en la basede datos, y, para actualizar el campo Id  en la tabla PmpietariosAutomóviles de forma automática si se modica en la tabla Automóviles. Se repite este procesopara el DNI. Observa el mapa de relaciones como se ilustra a continuación.

Henarmentas debase dedatos  . __   r"-*&#39;-&#39; - 5- " ;:.x  &#39;. : ¡ZCEEIILL. bld g Dm  e 4 .

-  Dependencias del crudo th". "WW"  ¡ÏEÍHCIOHGS Idoaela ápelhdos  

C°"W"° Fecha  deNacnmierr Llamar u ccpha: Emisnones ¡mamon  

¡""9" Telefono 

JEgg: nmgndad reference! 

y V&<sa.¿=2¿n_ rs¡.e99¿922á  arma en cascada los regsros relacionados 

29 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 39/324

Bases de Datos

9. Crea un formulario con todos los campos de Propietarios mediante el asistentede creación de formularios. Usa la opción de diseño Justicado y un estilo a tuelección.

Crear

En lapestaña Crearhay Élghmmaazgsïmque desplegarel menú Más , ¿ifonulaoa y después se- i ¿snstente panformularuosleccionar la opción Asia- &#39;y

tente para formularios. ¿apagonesSe siguen los pasos indica-dos porel asistente,selec-cionando todos los campos &#39; 

y eligiendola distribuciónI:4 I,mmm,Justicadoy cualquieres- Í Ltilo, por ejemplo, el estilo  Ï Técnico.

aV

Quadro dedialogo modal

Asistentzponfomulum

cQaédsvbuoándeseawlvcunlfotmalab

Euuuela Datos

30

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 40/324

Capítulo 1. Lossistemasde almacenamientode 1ainformación 

10. Inserta 5 registrosen la tabla de propietariosa través del formulario creado 

en el apartado anterior.y a Continuación.inserta registrosen la tabla Propieta- 

riosAutomóvilespara hacer dueño de dos modelosde vehículosa cada uno de los 

propietariosquehasinsertado.

Se abre el fonnulario Propietarios creado en el apartado anterior y se completan, todos los campos. Se repite la operación para cada una de los 5 registros.

Propietarios 

DNI Nombre Acelncos  52201928  Josécarlos Garcia  Perez Fecha deNacimiento 

Dueccnón C/Losálamos,15.Madnd,28034 

Telétono  912234732! 

LRegnstra I; 

Para el caso de PropietariosAutomóviles, 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 Automóvil del que es propietario, por ejemplo,  José  Carlos García  Pérez , con  DNI  .52201928, es 

propietario de los vehículos 89 y 98, es decir, del Audi  A3  1.4  TFSI AUT. 7V y del   Audi  A3 1.9 TDIe  

v Fechacomupv Agregar nuevo (yaZampas dnzpoynmles enpma: seI/agonacays52201928 s9 0335552010    °&#39;"°"" 53"W

, 52201928 98 02/04/2010: oPvopnetanos Eartaurama i? 

31

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 41/324

Bases de Datos 

11. Realiza, con el asistente para la creación de informes, un informe con los propie-tarios de los vehículos que hay en la base de datos, mostrando qué vehículos poseecada propietario.

En la pestaña Cnear hay que seleccionar la opción Asistente para informes. Se selecciona el campoNombrede la tabla propietarios y la marca y el modelo de la tabla Automóviles.Crear

1r:: gEtcqueiasJ L] Intorme enblanco - -

lnvorme Dueño de Tabla. metano:[1 Asmentepara míormes¡mmm Tabu: wwewmvhmbs

 _. ¡LASgL""!I1Ñ&#39;HÏH¡E3L;,._*_ en

14:791-&#39;Fecha deNeumann)Dnrecoón Teléfono Ilmagenenate

&#39; lmogernFleïlags

lntaoenieatne

 jlmapemñevrsesmm

Canceluv

¿Cómo deseamr lasdatos?

nor Aummóvnes

Se siguen los pasas indi-cadas por el asistente, se- ¡gr m,N, muleccionando cómo se deseaver los datos, si se pree-re el informe agrupado poralgún nivel, la ordenaciónde los registros y  nalmen-te, la distribución, orienta-ción y estilo. Para termi-nar, se abre el informe envista previa.

Propietarios

Aud A3 197D e MAN.SAun: A5 14FS AU.7V

muqrzolnx. :5de n-Iv:5|SCJ:

32

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 42/324

Capítulo 1. Los sistemasde almacenamientode la información 

12. Crea una consulta para ver el modelo y la marca de los vehículosdel primer

propietarioque insertaste.

En la pestaña Crear hay  

que seleccionar la opción Diseño de consulta. A

continuación,se seleccio-   i ¡a Nomnan las tres tablas de la ,_ ¡,,,,,¿,,,,,,, Apellidos  base de datos, mostrándo- Consumo  . \ """°&#39;"""" seasílasrelaciones entre ¡"mmm    Ïgïggr" ellas. Para seleccionar    _

los campos que salen . Laen la consultahay que (nuvo:  umarn ¡Modelo rlombve DNI  aTTa-ïtm?las ¿alumnas Tlbll:  áAutomovxles Amomóvnles Pvopuetanos Propuetarios Marca,Modelo,Nombne y M°::"ï ¡ , ,

o m: ¡ y ,_; J yDNI delastablasal panel  (mmm:  ¡E1931inferior. o:l  

Posteriormente se añade en la la Criterios y  columna DNI el valor  =  52201 928  . Para   _ terminar, con el botón l    &#39;Nombre v DN; 

derecho sobre el título un A31.4TFS|AUT.7V Josécarlos 52201923  de la consulta, se elige la A31.9TDIeMAN.5 Josecarlos  52201925opción guardar y se escribe un nombre. Finalmente,se puede ejecutar para ver los resultados.

33 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 43/324

Bases

1.5.

de Datos 

Prácticas Propuestas

Práctica 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.

Crea una tabla llamada Alumnos con los campos DNI, Nombre, Dirección,Fecha de nacimiento, foto, grupo y curso. Elige cuidadosamente el tipo de

datos para cada campo.

.Inserta 6 registros a través 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-

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 44/324

Capítulo 1. Los sistemas de almacenamiento de 1a información

Práctica 1.4: Base de datos de mascotas

Crea una base de datos llamada Mascotasaccdb y realiza los siguientes ejercicios:

1.

es»

10.

11.

12.

13.

Crea una tabla llamada Animales con los campos Nombre, Tipo, Raza, Peso

y Color. Añade a la tabla un campo clave.

. Inserta 5registros en la tabla Animales.

Crea una consulta para ver los Animales de tipo Perro.

. Añade una nueva columna a la tabla Animales llamada Dueño.

.Completa el Dueño de cada uno de los Animales de la tabla.

.Añade una nueva columna a la tabla Animales llamada PrecioDeCompra. Es-

ta columna contendrá un valor nulo (sin información) cuando el Animal fue

adquirido gratuitamente.

. Crea una tabla llamada Vacunaciones con los campos FechaVacunacion, Des-

cripcíónVacuna, Veterinario y un campo que relacione la vacunación con elanimal 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.

Creaun informepara listarlas vacunacionesde losanimales.Crea un informe basado en la consulta del tercer ejercicio para ver las vacu-

naciones de los perros.

Crea un formulario en vista diseño para poder añadir vacunaciones de los

animales.

Mediante la pestaña Datos Externosde Access, exporta los datos de la tablaAnimales a hlicrosoft Excel. Con la misma pestaña, crea una página web con

los datos exportados del informe de vacunaciones.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 45/324

Bases de Datos

1.6.

36

Resumen

Los conceptos clave de este capítulo son los siguientes:

Un chero es una estructura de información que crea el sistema operativo para

almacenar información.

El tipo y formato del chero determina la forma de interpretar la información

que contiene. Se clasican según su contenido, organización 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 múltiplesformas dedatos (texto, imágenes, vídeo... ) requieren unaaplicación que sepa cómo está estructurada la información en ellos.

Una base de datos está organizada mediante tablas. Las tablas contienen re-

gistros de información o las. Cada registro está compuesto por múltiplescampos o columnas. Las tablas se relacionan entre sí para dar cierto sentido a

la información 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 múltiples aplicaciones, contables, administrativas,

motores de búsquedas, cientícas, bibliotecas, censos, virus, etc.

Las bases de datos se crean siguiendo un modelo o losofía. Así, han evolu-

cionado desde las bases de datos jerárquicas y en red hasta las más modernas

bases de datos distribuidas. Las más 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 deda-

tos. Ofrecen a los usuarios funciones como almacenar y acceder datos, garanti-

zan la integridad y seguridad de los mismos y ofrecen, además, otras funciones

avanzadas como la concurrencia, conectividad, generación de estadísticas, etc.

El lenguaje SQL es una interfaz de programación 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 pequeñas se lla-

man gestores de basesde datos omáticas, y los que manipulan bases de datos

medianas o grandes se denominan gestores de bases de datos corporativos.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 46/324

Capítulo 1. Los sistemas de almacenamiento de la información

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 código AS-CII

d) Es un conjunto de pixels con colores

2. Un chero de texto contiene

a) Cualquier tipo de información

b) Caracteres codicados en código ASCIIo

UNICODE

c) Los datos de una base de datos

d) Datos que han de ser accedidos secuencial-

mente

3. Las tablas de códigos ascii

a) Usan 2 bytes para representar cadacarácter

b) Distancian las mayúsculas de las minúscu-

las en 64 unidades

c) Tienen 256 caracteres distintos

d) Todas las anteriores son correctas

4. Señala el chero que no es binario

Un chero .avi

Un chero .html

a)

b)

c)Un chero.mp3d) Un chero .doc

5. Un campo clave es

a) Un campo numérico

b) Un campo especial que puede repetir unmismo valor

c) Un campo especial que no puede repetir

ningún valor

d) Un campo alfanumérico

6. Una query es

a) Un comando o petición que se envía a labase de datos

b) Una. búsqueda de información

c) Una operación de ordenación

d) Una estructura de información

7. Un índice es útil para

a Insertar información

b Borrar información

C

d

Buscar y ordenar información)

)

)

)No repetvalore8. Una vista es una tabla virtual que

a Almacena los datos en la BBDD)

b No se almacena en la BBDD

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 47/324

Bases de Datos

1.8.

1.

Comprueba tu aprendizaje

N ombra los distintos tipos de bases

de datos que existen según 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 según

su contenido.

¿Dónde almacenan las bases de da-

tos la información?

.Nombre 6 tipos de objetos que pue-de contener una base de datos.

.¿Qué es un script o guión?

. ¿Qué es una vista? ¿En qué se di-

ferencia de una consulta?

. Dene los siguientes conceptos:IDato

n Tipo de Dato

ICampo

IRegistro

- Tabla

IRelación

- Consulta

IProcedimiento

10. ¿Qué tienen en común 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 función de se-

guridad de una BBDD?

¿Cómo garantiza la integridad delos 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?

¿Cuál es la función del lenguajeTCL? ¿ Yla del lenguaje DML?

¿Cuál es la extensión de un che-

ro que contiene una base de datos

Access?

¿Qué operacionesforman el mante-nimiento de una tabla?

Describe dos formas de crear un

formulario en Access.

¿Cuál 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.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 48/324

CAPÍTULO 2

Diseño lógico relacional

Objetivos

W Identicar el signicado de lasimbología de los diagramasE/ R

Contenidos

Identicar las tablasdel diseño Representacióndel problema lógico

hïodelo dedatos Identicar los camposque for-

Diagranlas E/R man partede lastablas.Identicar las relaciones entre

l lE modeo E/Ranïphado tablas del diseñológicoEl modelorelacional Identicar los camposclaveTransformación E  / R al modelorelacional Aplicar reglas deintegridad

. . ,Identicar reglas de normaliza-Normahzaclon , ,

cion

Identicary documentareglasque no se pueden plasmar en eldiseño lógico

En este tema se trata a fondo e] diseño de una. base de datos, desde 1a inter-

pretación y análisis de un problema hasta el diseño y propuesta de un modeloque dé solución al problema planteado.

39

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 49/324

Bases de Datos

2.1. Representación del problema

Una base de datos representa la información contenida en algún dominio del

mundo real. Eldiseño de base de datos consiste en extraer todos los datos relevantes

de un problema, por ejemplo, saber qué datos están implicados en el proceso de

facturación de una empresa que vende vehículos agrícolas, o, qué datos son necesariospara llevar el control veterinario de los animales de un zoológico.

Para extraer estos datos, se debe realizar un análisis en profundidad del dominio

del problema, y saber, de esta forma, qué datos son esenciales parala base de datos y

descartar los que no son de utilidad. Una vez extraídos los datos esenciales comienza

el proceso de modelización, esto es, construir, mediante una herramienta de diseño

de base de datos, un esquema que exprese con total exactitud todos los datos que

el problema requiere almacenar.

Típicamente, los informáticos analizan un problema a través de diversas reuniones

con los futuros usuarios del sistema. Nótese, que generalmente, el problema no solo

se resuelve poniendo una base de datos a disposición de un usuario, sino también

un conjunto de aplicaciones de software que automaticen el acceso a los datos y su

gestión. De estas reuniones, se extrae el documento más importante del análisis de un

sistema informatico, el documento de Especicación de Requisitos Software

o E.R.S. A partir de esta E.R.S. se extrae toda la información necesaria para la

modelización de los datos.

<> Actividad 2.1: Busca en Internet la estructura del documento estándar IEEE

830 SRS o Software Requirements Specication. Descarga de internet algún ejem-

plo de SRS y examina cómo los analistas de software organizan los requisitos de una

aplicación extraídos de las conversaciones con usuarios.

2.2. Elmodelo de datos

La modelización consiste en representar el problema realizando múltiples abs-

tracciones 1para asimilar toda la información de un problema, y de esta manera,

generar un mapa donde estén identicados todos los objetos de la base de datos.

¡Una de las acepcionesde la RAE para abstraer es: Separar por medio de una operaciónintelectual las cualidades de un ob jeto para considerarlas aisladamente o para considerar el mismo

objeto en su pura esencia o noción

40

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 50/324

Capítulo 2. Diseño lógico 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 modelización es un analis-

ta informático, por lo que puede no ser un experto en el dominio del problema

que debe resolver (Contabilidad, Medicina, Economía, 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 informática.

- Hay que modelar siguiendo unas directrices o estándares, es decir, usando una

 losofía estándar para que el resto de la comunidad informática pueda entender

y comprender el modelo realizado. De esta manera, será posible aprovechar las

herramientas informáticas software del mercado para realizar diseños.

n La base de datos estará gestionada por un SGBD que tendrá unas característi-cas técnicas, de esta manera, no se tratará igual la implantación de la base de

datos en un sistema l\&#39;I_ySQL queen 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 informática. Tiene una

gran potencia para representar el dominio del problema tal y como el usuario lo

concibe. Elmodelo quese usaráen estelibro será el modeloEntidad /  Relación.

2. El modelo lógico. Este modelo es más técnico que el anterior. Los conceptos

expresados por este modelo, suelen ser difíciles de entender por los usuarios y

generalmente tienen traducción directa al modelo físico que entiende el SGBD.

El modelo lógico elegido dependerá de la implementación 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 físico. Es el resultado de aplicar el modelo lógico a un SGBD concre-

to. Generalmente está expresado en un lenguaje de programación de BBDD

tipo SQL. Este libro transformará el Modelo Relacional en modelo físico a

través del sublenguaje DDL de SQL.

La interacción entre estos tres modelos es fundamental para un diseño de calidad:

1. Primero, se negocia con el usuario el modelo conceptual.

41

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 51/324

Bases de Datos

USUARIO

EXPERTO

MODELO lN FORMÁTICÓCONCEPTUAL DISEÑADOR BBD D

PROGRAMADOR

BBDD

DOMINIO

DELPROBLEMA

Figura 2.1: Interacción entre modelos.

2. Segundo, se pasael modelo conceptual al modelo lógico, realizando una serie de

transformaciones necesarias para adaptar el lenguaje del usuario al del gestorde base de datos.

3. Finalmente, se transforma el modelo lógico en físico, obteniendo de esta formala base de datos nal.

En ocasiones, los diseñadores experimentados, realizan el diseño de Ia base dedatos directamente en el modelo relacional. Esto puede representar un ahorro \

de tiempo si el problema a resolver es relativamente sencillo. Pero, general- lmente, en problemas más complejos, saltarse el diseño conceptual y la opinióndel usuario, da como resultado diseños incompletos e incoherentes.

El consejo del buen administrador. ..

2.3. Diagramas E/R

Para representar el modelo conceptual se usará el modelo Entidad/Relación.

Este modelo consiste en plasmar el resultado del análisis del problema mediantediagramas entidad-relación.2

¡También llamados en otras fuentas diagramas Entidad-Interrelación, o en inglés Entity-relationship

42

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 52/324

Capítulo 2. Diseño lógico relacional

Estos diagramas fueron propuestos por Peter P. Chen a mediados de los años 70

para la representación conceptual de los datos y establecer qué relaciones existían

entre ellos.

La notación 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 resolución del problema.A continuación, se presentan las deniciones necesarias para comprender el mo-

delo entidad relación.

2.3.1. Entidad

Cualquier tipo de objeto o concepto sobre el que se recoge información: cosa,

persona, concepto abstracto o suceso. Se representan mediante un cuadrado. Por

ejemplo: coche, casa, empleado, cliente, etc. Las entidades se representan gráca-

mente mediante rectángulos y su nombre aparece en el interior (generalmente en

singular). Un nombre deentidad solo puede apareceruna vez en el diagrama.

Empleados

Figura 2.2: Ejemplos de entidades.

Hay dos tipos de entidades: fuertes(o regulares)y débiles. Las entidadesdébilesse representan mediante un cuadro doble. Una entidad débil es una entidad cuya

existencia depende de la existencia de ot.ra entidad. Una entidad fuerte es una en-

tidad que no es débil, es decir, existe por méritos propios. Un ejemplo típico es la

existencia de dos entidades para la representación de un pedido. Por un lado, la

entidad pedido representa información genérica sobre el pedido como la fecha del

pedido, fecha de envío, el estado, etc. Por otro lado, la entidad Detalle de Pedido

recopila las líneas de información especíca sobre los artículos y unidades pedidas.

En este caso, Detalle de Pedido es una entidad débil, puesto que la eliminación del

pedido implica la eliminación de las líneas de detalle asociadas al pedido, es decir,

no tiene sentido almacenar información especíca del pedido si se ha eliminado ese

pedido.

Entidad Fuerte Entidad Débil

Figura 2.3: Entidad fuerte y débil.

43

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 53/324

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 matrícula 1222FHD de color negro y con 5

puertas.

2.3.3. Relación

Una relación (o interrelación), es una correspondencia o asociación entre dos o

más entidades.

Cada relación tiene un nombre que describe su función. Normalmente debe utili-

zarse un nombre que exprese con totalidad la nalidad de la relación, evitando poner

un nombre que pueda signicar muchas cosas, por ejemplo, tener, hacer, poseer.

Las relaciones se representan grácamente mediante rombos y su nombre aparece

en el interior. Generalmente este nombre de relación corresponde a un verbo, pueslas relaciones suelen describir las acciones entre dos o más entidades.

Las relaciones están clasicadas según su grado. El grado es el número de en-

tidades que participan en la relación. Atendiendo a esta clasicación, existen los

siguientes tipos de relaciones:

IRelaciones binarias: (grado 2), son aquellas quese dan entre dos entidades.

Figura 2.4: Ejemplo de relación binaria.

n Relacionesternarias: (grado 3), son aquellas quese danentre tres entidades.

Figura 2.5: Ejemplo de relación ternaria.

44

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 54/324

Capítulo 2. Diseño lógico relacional

n Relacionesunarias oreexivas: (grado 1), Esuna relacióndonde lamisma enti-dad participa más de una vez en la relación con distintos papeles. El nombre deestos papeles es importante para determinar la función de cada participación.

Figura 2.6: Ejemplo de relación reflexiva.

IRelaciones n-arias: (grado >3) Son aquellas donde participan más de 3 enti-dades. Aparecen en muy raras ocasiones, puesto que generalmente se puedendescomponer en varias de grado 2 o de grado 3.

El consejo del buen administrador. . .

Si en tu diagrama entidad relación aparecen relaciones de grado >3, es posibleque la interpretación del problema sea incorrecta. Incluso si aparecen relacionesde grado 3, intenta descomponerlas en varias de grado 2 para simplicar tumodelo. Eso SÍ, asegúrate de que no es posible descomponerlas en varias degrado 2 sin perder semántica.

2.3.4. Participación

La participación de una ocurrencia de una entidad, indica, mediante una parejade números, el mínimo y máximo número de veces quepuede aparecer en la relaciónasociada a otra ocurrencia de entidad. Las posibles participaciones son:

Participación Signicado

Mínimo cero, Ináximo unoMínimo uno. máximo uno

Mínimo cero, máximo n (Muchos)Mínimo uno, máximo n (l\Iuchos)

Las reglas que denen la participación de una ocurrencia en una relación son lasreglas de negocio, es decir, se reconocen a través de los requisitos del problema.

45

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 55/324

Bases de Datos 

La notación que se utiliza para expresar las participaciones en el diagrama entidad

relación es poner al lado de la entidad correspondiente, la pareja de números máximo

y mínimo de participaciones. Por ejemplo, los empleados pueden trabajar para varios

proyectos, opueden estarde vacaciones(sin proyecto).Por otro lado, enun proyectotrabajan de 1 a varios trabajadores. En este caso, la participación de proyecto es

de (O,n), puesto que un empleado puede tener asignados de0 a n proyectos. Laparticipación del empleado esde (1,11)puesto queen un proyecto puedehaber de 1a n empleados. Deesta manera,se indicaal 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 relación.

<> Actividad 2.2: En un supermercadohay productosorganizados encategorías(frutas, ultramarinos, carnes, pescados, etc.). Cada producto pertenece a una única

categoría, ypuede haber categorías que todavía no tengan ningún producto asignado,

sin embargo, no puede haber productos sin categoría. Calcula las participaciones de

cada entidad en la relación Producto Pertenece a Categoría

Un producto puede y debe pertenecer a una única categoría (mínimo 1 y máximo 1), por tanto la partici-

pación de categoría en la relación con el producto es de (1,1). Auna categoría pueden pertenecer muchos

productos (máximo n), y puede no tener productos (mínimo 0), por tanto, los productos participan en las

categorías con cardinalidad (0.71).

 n--. ..-.-¡

46

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 56/324

Capítulo 2. Diseño lógico relaciona]

<> Actividad 2.32 Las páginas webcontienen controlesde muchostipos (camposde texto, listas desplegables,etc.). Si se quierealmacenar enuna basede datos,cada

página web, qué tipos de controles tiene. ¿qué participaciones habría que asignar?

Justica tu respuesta respondiendo a preguntas del tipo ¿un control, (por ejemplo,

un cuadro de texto), en cuántas páginas puede estar como máximo y mínimo?

<> Actividad 2.4: Los clientes puedenrealizar pedidosa travésde susrepresen-tantes de ventas. Indica las entidades que hay, relaciones y sus respectivas partici-

paciones.

2.3.5. Cardinalidad

La cardinalidad de una relación se calcula a través de las participaciones de sus

ocurrencias en ella. Se toman el número máximo de participaciones de cada una de

las entidades en la relación. Por ejemplo, la relación organiza de la actividad 2.2,

tendría una cardinalidad de 1:N, puesto que por el lado de las categorías, el máximo

de (1,1) es 1, y por el lado de los productos, el máximo de (O,n) esN.

¡y 1:N ¡un

¿Ars 30m5

Figura 2.8: Cálculo de la Cardinalidad de una relación.

De esta manera, se clasican las siguientes cardinalidades:

a Cardinalidad 1:1 Esta cardinalidad especica que una entidad A puede estarvinculada mediante una relación 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 número de

directores de departamento mediante una relación 1:1. Así, un empleado solo

puede ser jefe de un departamento, y un departamento solo puede tener un

 jefe.

47

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 57/324

Bases de Datos

contabilidad

administración

informática

rrhh

Figura 2.9: Ejemplo de cardinalidad 1-1.

ICardinalidad 1:N (o 1:Muchos) Esta relación especica que una entidadA puede estar vinculada mediante una relación a varias ocurrencias de otra

entidad B. Sin embargo, una de las ocurrencias de la entidad B solo puedeestar 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 también N zM, estacardinali-

dad especica que una entidad A puede estar vinculada mediante una relación

a varias ocurrencias de la entidad B. y a su vez, una ocurrencia de la entidad

B puede estar vinculada a varias de la entidad A. Por ejemplo. un empleado

48

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 58/324

Capítulo 2. Diseño lógico 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 enlas guras anteriores, la notación para representar el tipo

de relación según su cardinalidad, consiste en escribir el tipo de cardinalidad justo

encima del rombo. Existen numerosas alternativas a esta nomenclatura, siendo muy

típicas las dos siguientes:

u Puntas de echa: En esta notación. la línea de la relación que termina en echa,

indica la rama N de la cardinalidad de la relación.

Figura 2.12: Ejemplo de notación puntas de echa.

n Notación classic de MySQL Workbench: En esta notación, las relaciones se

expresan con un pequeño rombo, rellenando en negro la mitad de la gura, en7

el lado de la entidad cuya cardinalidad es l\ 

Equlpm¡asquoo INT l

Name vuaonnus)Jugadoricuuqanor INT

Not-mn VARCHARQS)

DasalINTEutincsjcmho INT(FK)

Figura 2.13: Ejemplo de Iiotación classic de MySQL Workbench.

49

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 59/324

Bases de Datos

<> Actividad 2.5: Hay multitud denotaciones distintaspara realizarlos diagramasentidad relación. Todas ellas, tratan de expresar los conceptos expuestosen estelibro,pero de diferentes formas y con diferentes elementos grácos. Busca en Internet otrostipos de notaciones para realizar diagramas entidad relación. Puedes buscar, entreotros, 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 relación ternaria se tomará una de las tres

entidades y se combinan las otras dos. A continuación, se calcula la participación dela entidad en la combinación de las otras dos. Posteriormente, se hará lo mismo conlas otras dos entidades. Finalmente, tomando los máximos de las participaciones se

generan las cardinalidades.

CardinaIidad=max(0,1):max(1,1):max(0,n)

= 1:1:N

EMÉÉISA

EIÉEÏZENTE

Figura 2.14: Cardinalida.d de una relación ternaria.

Por ejemplo, en la gura 2.14 se distinguen tres participaciones, la que se produceentre empresa y auditora-expediente, la que se distingue entre auditora y empresa-

expediente, y por último la de expediente con auditora-empresa:- Una empresa ¿Cuántos expedientes puede tener con una auditora? Puede tener

un mínimo de 0 y un máximo de n. Participación de Empresa (Ü,n).

IUna. auditora ¿Cuántos expedientes puede tener con una empresa? Puede tenerun mínimo de O y un máximo de 1. Participación de Auditora (0,1).

u Un expediente ¿A cuántas empresas auditadas por la auditora puede pertene-cer? Un expediente solo puede pertenecer a una empresa auditada (1,1), portanta Participación de Expediente (1.1).

50

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 60/324

Capítulo 2.Diseño lógicorelaciona] 

<>Actividad 2.5: Calculala cardinalidad delasiguiente relaciónternaria: 

Hay que contestar a las siguientes preguntas: ¿Cuántos autores puede tener  un determinado libro publicado en una detenninada editorial? 

¡Mínimo1, máximo n, participacióndeAutor  (1,n).¿Cuántos libms puede tener  un  detenninado  autor publicados en una determinada editorial? 

Mínimo 0, máximo  n, participación de Libro (0,11).

¿En cuántas editoriales  puede  un  detenninado  autor publicar un mismo libm? 

Múzimo 1, máximo I. Participación de Editorial (1,1).Tomando los máximos de cada participación se obtiene  que la cardinalidad de la relación de de 1:N:N 

oActividad 2.72 Calculalacardinalidad delas siguientes relaciones binarias:

I Hombre está casadoconMujer, en una sociedad1nonogámica.

I Hombre está casadoconMujer, en una sociedadmachistapoligámica.

-  Hombre está casadoconMujer, en una sociedad poligámica liberal.

- PescadorpescaPez.

- Arquitecto diseña Casa.

I Piezas forman Producto.

I Turista viaja Hotel.

I Jugador  juega en Equipo.

u Políticogobierna en País.

51

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 61/324

Bases de Datos

<> Actividad 2.8: Calcula la Cardinalidadde lassiguientes relacionesternarias:

IMecánico arregla Vehículo en Taller.

n Alumno cursa Ciclo en Instituto.

IVeterinario administra [bledicación al Animal.

2.3.7. Cardinalidad de las relaciones reexivas

En las relaciones reexivas, la misma entidad juega dos papeles distintos en la

relación. Para calcular su Cardinalidad hay que extraer las participaciones segúnlos dos roles existentes. Por ejemplo, en la relación 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:

I¿Cuántos subordinados puede tener un jefe? Un jefe puede tener un mínimo

de 1 y un máximo de n: (Ln)

I¿Cuántos jefes puede tener un subordinado? Un mínimo de O (un empleado

sin jefes sería el responsable de la empresa) y un máximo de 1 (suponiendouna estructura, típicamente piramidal): (0,1).

Por tanto, la relación sería de Cardinalidad 1:N

1:N

(0,1)

Figura 2.15: Cardinalidad de una relación reflexiva.

52

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 62/324

Capítulo 2. Diseño lógico relacional

<> Actividad 2.9: Justica cuál seríanlas participacionesy la cardinalidad delasiguiente relación, teniendo en cuenta que:

n Una gura puede contenerse así misma (como enel ca.sode los fractales).

IUna gura puede estar formada por múltiples tipos distintos de guras.

2.3.8. Atributos yDominios

Los atributos de una entidad son las características 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 suscaracterísti-

cas, esto es, el número de plazas disponibles, su dirección, la ciudad donde se en-

cuentra, etc.

Figura 2.16: Ejemplo de atributos.

Atributo Clave

En la gura anterior, aparece el atributo código, subrayado. Este atributo se

denomina clave, y designa un campo que no puede repetir ninguna ocurrencia de

entidad. Se dice. que este campo identica unívocamente a una entidad, es decir,

53

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 63/324

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

deberían tener, al menos, un atributo clave. Nótese que una entidad puede formar

la clave mediante varios atributos, en este caso, se dice que la clave de la entidades 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 atómica. Por ejemplo, para

identicar de forma única una oferta de trabajo se necesitaría el nombre del puesto

y el nombre de la empresa que lo oferta.

Atributo de relación

Un atributo de relación es aquel que es propio de una relación y que no puede

ser cedido a las entidades que intervienen en la relación. Por ejemplo, un mecánico

repara un vehículo, la reparación se realiza en una determinada fecha.

Figura 2.17: Ejemplo de atributo de relación.

Dominios

Cada una de las características que tiene una entidad pertenece a un dominio.

El dominio representa la naturaleza del dato, es decir, si es un número entero, una

cadena de caracteres o un número real. Incluso naturalezas más 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:

AtributoDNI Cadena de Caracteres de longitud 10Nombre Cadena de Caracteres de longitud 50

Fecha_Nacin1iento Fecha

Dirección Cadena de Caracteres de longitud 100

Sueldo Números reales

Número de hijos Números enteros

Departamento Departamentos

54

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 64/324

Capítulo 2. Diseño lógico 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 zïntensión. Si se especica

mediante un conjunto de valores, como en el dominio Departamentos, que puede

tener los valores (RRHH, Informática. Administración o Contabilidad), la definición

del dominio es por extensión.

2.3.9. Tipos de atributos

Se pueden clasicar los atributos según 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 más 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 teléfono puede tomar los valores de un teléfono móvil y un

teléfono jo.

Atributo derivado: Son aquellos cuyo valor se puede calcular a través de otros

atributos. Por ejemplo, el atributo Edad, se puede calcular a partir de la fechade nacimiento de una persona.

Al igual que con la mayoría de las notaciones, no existe unanimidad a la hora de

dibujar en un diagrama los tipos de atributos. Una de las más extendidas entre los

diseñadores de bases de datos es la siguiente:

Figura 2.18: Notación para los distintos tipos de atributos.

55

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 65/324

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 más usada hasta ahora, porsimplicar la construcción de mapas a través de herramientas software, se opta

por usar otras notacíones que producen mapas más manejables. Por ejemplo, laherramienta MySQL Workbench utiliza una sintaxis muy similar a la que usa lanotación UML para representar las características de un objeto:

Nombre de la

entidad

Dominio

Nombre del atributoEqniposjcqubo INT (PK)

Figura 2.19: Otras formas de representar atributos

<> Actividad 2.1ÜZ Justica qué tipode atributosson lossiguientes atributosdela entidad Persona:

n Fecha de Nacimiento (p.ej. 24/11/1976)

ILugar de Nacimiento (p.ej. Zaragoza)

- Edad (p.ej. 36 años)

IEsMayorDeEdad (p. ej: Sí)

nDNI (p.ej. 55582739A)

nTeléfonos (p.ej. 925884721, 657662531)

- Apellidos

56

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 66/324

Capítulo 2. Diseño lógico relacional

2.3.11. Las entidades débiles

Como se ha expuesto anteriormente, las entidades débiles dependen de una en-tidad fuerte mediante una relación. La relación que une ambas entidades tambiénes débil, puesto que también desaparece si desaparece la entidad fuerte. En estos

casos, la relación tiene una dependencia que puede ser de dos tipos:nDependencia de existencia: Este tipo de dependencia.expresa que, las ocu-

rrencias de una entidad débil, no tienen ningún sentido en la base de datos sinla presencia de las ocurrencias de la entidad fuerte con la que están relacio-nadas. Por ejemplo, las transacciones que se dan en una cuenta bancaria, notienen sentido si no existe la cuenta bancaria a la que están asociadas.

CÏBIIÏA EAN CAE.

Figura 2.20: Ejemplo de entidad débil con dependencia de existencia.

- Dependencia de identicación: Este tipo se produce cuando, además dela dependencia de existencia, la entidad débil necesita a la fuerte para podercrear una clave, de tal manera que pueda completar la identicación de susocurrencias. Por ejemplo, una empresa fabricante de software crea aplicaciones:

1. La compañía seidentica por su nombre (por ejemplo, Microsoft).

2. Las aplicaciones se identican por su nombre comercial, por ejemplo

(Office).

3. Cada compañía de software pone un nombre a ca.dauna de sus aplicacio-nes.

c: M; ANIA :E : ïTwAiífz-Z

Figura 2.21: Ejemplo de entidad débil con dependencia de identicación.

De esta forma puede ocurrir que haya dos aplicaciones con el mismo nombre y quepertenezcan ados compañíasdistintas (Ofce de Microsoft y Office de Sun). En

57

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 67/324

Bases de Datos

este caso para identicar a cada aplicación de forma única, hace falta el nombrede la aplicación y además, el nombre de la compañía. Así, Aplicación depende enidenticación de la Compañía yel nombre de la aplicación es una clave débil. Seexpresa de la siguiente forma:

Una vez más, para representar las dependencias, cada herramienta usa su propia

notación. Por ejemplo, en el caso de MySQL Workbench, no diferencia entre enti-dades fuerteso débiles (las llama a todas tablas). y crea las relaciones conlíneasdiscontinuas encaso deno tener dependencia deidenticación (non identifying re-lationship), y con línea continuas en caso de tener dependenciade identicación(identifying relationship).

Rel-ciónn&#39;°=°"°°"&#39; --- "°"°°"°.&#39;°°Norma vmoweids) ¡kmlucmn

i___-_&#39; Relación condependencia deidenticación

¡cuenta Banca:INTCodigosuursal VARCJ-MRu)000m EntidadVARCHÁRM)Doüftoi VAÉ-MÑ?)Nuneroctiena VAÉHAHW)DN JldarVARG-IARUO)

idfrmsaodon INTCüid DECNALDebe-IBM VAHZHAHHCuenta BuuajtnumtaBancaria ¡NT(PK)

Figura 2.22: Ejemplo de notación. Dependencias en MySQL Workbench.

<> Actividad 2.11: ¿Qué tipo de relación dedependencia tienenlas siguientesentidades?

IUn toro (entidad débil) pertenecea una ganadería (entidadfuerte). Al toro sele identica por el número de toro, y el nombre de su ganadería, puesto quepuede haber varios toros con el mismo número, pero pertenecientes a distintas

ganaderías.

IEn el accesoal parking de una empresa unempleado (entidadfuerte) tiene unvehículo (entidad débil).

58

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 68/324

Capítulo 2. Diseño lógico relacional 

El consejo del   buen administrador. ..

Muchos diseñadoresseabstraen del hecho de tener entidades fuertes y débiles 

y, tal y como haceA-IySQLWorkbencli, no distinguen entre entidades fuertes y 

débiles. En general, esbuena idea simplicar el diseño (losofía KISS - Keep 

it simple, sir ), pero se ha de ser consciente de la pérdida de semántica que implica.

<> Actividad 2.12: Descargael software DIA para la creacióndediagramasde diversos tipos. Puedes encontrarlo de forma gratuita en la página web 

http: //sourceforge .net/projects/dia-installer/."5DiagramILdiI (causeiswinwigng)-dua Arthivo Editar1er Lupi: QbjetosSelecciona! 

ü Ü Q C Crea un diagrama nuevo y con los símbolos 

iii] °°9&#39;°&#39;"°1-°°" c.-. delosdiagramas entidad relación delanota-   ° ciónChen(ER)modelala relaciónCliente- 

adquiere-Producto con los atributos que sete 

ocurran. Identica el icono decada gura con  

los símbolos Entidad, Entidad Débil, Atribu- 

to (consusmúltiples tipos) y Relación.

2.4. El modelo  E / R ampliado 

La primera concepción del modelo entidad relación tuvo, por las limitaciones 

tecnológicas de la época, un alcance bastante limitado, que, con los años, se ha ido 

desarrollando hasta alcanzar un nivel satisfactorio para los diseñadores de basesde 

datos. El modelo Entidad-Relación Extendido, o Ampliado, incorpora todos los ele- 

mentos del modelo entidad relación incluyendo los conceptos de subclase, superclase 

 junto a los conceptos de especialización y generalización.

2.4.1. Generalización y Especialización 

Una entidad E es una generalización de un grupo de entidades E1, E2,  En, si 

cada ocurrencia de cada una de esas entidades es también una ocurrencia de E.

59 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 69/324

Bases de Datos

GENERALIZACIÓN ESPECIALIZACIÓN

Figura 2.23: Generalización y Especialización.

Todas las propiedades de la entidad genérica E son heredadas por las subenti-dades. Además, cada subentidad tendrá sus propios atributos independientes de lageneralización.

Las subentidades son especializaciones de la entidad general, se puede decir que

las subentidades o subclasestienen una relación del tipo ES UN  con la entidad padreo superclase.La relación de generalización se representa mediante un triángulo ísósceles pe-

gado por la base a la entidad superclase. En la gura siguiente Empleado es lasuperclase y los directivos, comerciales y técnicos son subclases. En la relación seadjunta un atributo que indica cómo debe interpretarse la relación de la superclasecon la subclase. La generalización Empleado que puede ser un directivo, un técnicoo un comercial. Cada subentidad tiene sus propios atributos yrelaciones, pero todasheredan losatributos nombre y DNI de la entidad padre (Empleado).

IIF JITZTC

Figura 2.24: Ejemplo de generalización.

60

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 70/324

Capítulo 2. Diseño lógico relaciona]

Tipos de especialización

Se puede agregar más semántica al diagrama entidad relación extendido co1nbi-

nando los siguientes tipos de especialización:

IEspecialización 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 técnico o un comercial. Para

representar esta especialización exclusiva, el triángulo de la jerarquía lleva unarco.

Figura 2.25: Especialización exclusiva.

IEspecialización 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, podría ser también técnico y comercial. Se

representa sin el arco, como en la gura 2.24.

IEspecialización Total: Se produce cuando 1a entidad superclase tiene que ma-

terializarse obligatoriamente en una de las especializaciones. Se representanañadiendo un pequeño círculo al triángulo de la generalización:

Figura 2.26: Especialización Total.

n Especialización Parcial: La entidad superclase no tiene por qué materializarse

en una de las especializaciones (esopcional). Se representa sin el pequeñocirculo, como en la gura 2.24.

61

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 71/324

Bases de Datos

<> Actividad 2.13: Crea un E/R para almacenardatos delos distintostipos deordenadores que puede tener una organización. Clasifícalos en Sobremesa, Portátiles

y Servidores, y asigna correctamente los atributos: N°Serie, Procesador, Memoria,CapacidadDisco, TipoBatería, DuraciónBatería, N°Procesadores y TipoProxy.

2.5. Construcción de un diagrama E/ R

A cont.inuación se presenta una guía metodológica. para crear un entidad relación

a partir de un análisis de requisitos:

1. Leer varias veces el problema hasta memorizarlo.

2. Obteneruna listainicial decandidatos aentidades, relacionesy atributos. Serealiza siguiendo los siguientes consejos:

n Identicar las entidades. Suelen seraquellos nombres comunes queson im-

portantes para el desarrollo del problema. Por ejemplo, empleado, vehícu-

lo, agencia, etc. En principio, todos los conceptos deberían 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 abstracción para poder dis-

tinguir si son entidades, atributos, etc. Por ejemplo, un mecánico que tan

solo habla de ciertos modelos de vehículos pertenecientes a determinadas

personas, pero que nunca hace referencia a los vehículos Diesel que serán

fundamentales identicar para el correcto diseño de la base de datos.

- No hay que obsesionarse enlos primeros pasos por distinguir las entidades

fuertes de las débiles. Si es trivial, se toma nota de aquellas que parezcan

claramente entidades débiles. De lo contrario, se apuntan como entidades

sin especicar si son fuertes o débiles.

n Extraer los atributos de cada entidad, identicando aquellos que pueden

ser clave. Se suelen distinguir por ser adjetivos asociados a un nombre

común seleccionadas como entidades. Por ejemplo, color, que es un adje-

tivo, puede ir asociado a la entidad vehículo. Además, se debe establecer

el tipo de atributo, seleccionando sies opcional, obligatorio, multivaluado,

compuesto o derivado. Si es compuesto se indica su composición, y si es

derivado, cómo se calcula. Es bastante útil apuntar sinónimos utilizados

para el atributo para eliminar redundancias.

62

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 72/324

Capítulo 2. Diseño lógico relacional

IEs fácil identicar las generalizaciones si se obtiene un atributo que es

aplicable a más de una entidad. En ese caso, se puede intentar aplicar

una generalización /  especialización,indicando cuáles la superclase ycuállas subclases. Además, se deben especicar los tipos de especialización

(inclusiva, exclusiva,parcial, total).

IIdenticar los atributos de cada relación. Se suelen distinguir, al igual

que los de entidad, por ser adjetivos, teniendo en cuenta que para que

sean de relación, solo deben ser aplicables a la relación y no a ninguna

de las de las entidades relacionadas.

ITambién es posible que los nombres comunes contengan muy poca in-

formación 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 práctica, ir apun-

tando, aunque en el diagrama entidad relación no se exprese explícita-

mente, a qué dominio pertenece cada atributo. Por ejemplo, el Salario

pertenece a los números reales (Salario: Reales), o el color de un objeto

puede serverde, amarillo o rojo (Color: Verde,Amarillo, Rojo).

- Identicar las relaciones. Se puedenver extrayendo los verbos del texto del

problema. Las entidades relacionadas serán el sujeto y el predicado unidos

por el verbo que hace de relación. Por ejemplo, agente inmobiliario vendeedicio. En este caso el agente inmobiliario representaría una entidad el

edicio la otra entidad y vende sería la relación.

IUna vez identicada las relaciones, hay que anar cómo afecta la relación

a las entidades implicadas. Este es el momento de distinguir las fuertes de

las débiles 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 débil. Si la respuesta a la segunda espositiva, dependerán solo enexistencia, si es negativa, alguna de las dos depende en identicación 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 información en la base de datos.

63

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 73/324

Bases de Datos

4. Poner todos los elementos listados en el paso2 en un mapa y volver a considerar

la pertenencia de cada uno de los elementos listados a su categoría. Así, se

replanteará de nuevo si cierto atributo es una entidad, o si cierta entidad

puede ser una relación, etc.

5. Renar el diagrama hasta que se eliminen todas las incoherencias posibles,volviendo a los pasos anteriores en caso de encontrar algún atasco mental o

conceptos dudosos que diculten la continuación del análisis. Es bueno, en

estas circunstancias discutir con compañeros u otros expertos sobre el diseño

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 aclararán las dudas y se volverá al punto 2 para reiniciar el análisis.

¿Sabías que . . . 7En muchas ocasiones,cuando nose sabecómo continuar,o no se encuentra la solución 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. Automáticamente, la solución aparece. Se ha iniciado incons-

cientemente un proceso mental para ordenar las ideas que ha desembocado en

la resolución del problema.

2.6. El modelo relacional

El objetivo principal del modelo relacional es proteger a.l usuario de la obligación

de conocer las estructuras de datos físicas con las que se representa la información

de una base de datos. Desvincular estas estructuras de datos. que son complejas por

naturaleza, del diseño lógico (Modelo Relacional), permite que la base de datos se

pueda implementar en cualquier gestor de bases dedatos relacional (Oracle, MySQL,

DB2, etc.) A continuación se enumeran las características fundamentales del modelo

relacional:

n La relación es el elemento fundamental del modelo. Los usuarios ven la base

de datos como una colección 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 74/324

Capítulo 2. Diseño lógico relacional

implementar en cualquier SGBD y los datos se pueden gestionar utilizando

Cualquier aplicación gráca. Por ejemplo. se pueden manejar las tablas de una

base de datos MySQL u Oracle con Microsoft Access. Véase práctica 5.3.

IAl estar fundamentado en una fuerte base nlatemática. 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 relación como un conjunto de atributos. cada uno de los cuales per-

tenece a un dominio, y que posee un nombre que identica la relación. Se representa

grácamente por una tabla con columnas(atributos) y las (tuplas). El conjunto detuplas de una relación representa el cuerpo de la relación y el conjunto de atributos

y el nombre representan el esquema.

Relación:lmpue5roVehículos Nombte jrm Teléfonooueño maníSeat IbizaTDI19einer-w &#39;. 1

Volskwaen Polo TDI 1.o 918773621 4231mo

Renault La; unaCoupé m 929883762 741mmFiat Punto 1.o 646553421 923mm:

Figura 2.27: Denición de Relación.

¿Sabías que . . . 7Actualmente,los modeloslógicos másextendidos con

diferencia son el modelo relacional y los diagramas de clases que utiliza UMLpara modelar las bases de datos orientadas a objetos. El modelo relacional de

Codd se ajusta a la perfección al modelo entidad/relación de Chen creado en

la fase de modelización conceptual. No así el modelo de UML, que requiere

técnicas más complejas y especícas como los casos de uso o los diagramas de

transición de estados.

2.6.2. Otros conceptos del modelo relacional

A continuación se denen los conceptos necesarios para transformar el modelo

conceptual (diagrama entidad-relación) en el modelo lógico (modelo relacional).

uAtributo: Características que describen a una entidad o relación.

IDominio: Conjunto de valores permitidos para un a.tributo. Por ejemplo,

cadenas de caracteres. números enteros, los valores Sí o No, etc.

65

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 75/324

Bases de Datos 

- Restricciones de semántica: 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 restricción que impideque un atributo tenga un valor repetido. Todos los atributos clave cum-

plen esta restricción. No obstante es posible que algún atributo no sea

clave y requiera una restricción de valor único. Por ejemplo, el número

de bastidor de un vehículo noes clave(lo es la matrícula) y sin embargo,

no puede haber ningún número de bastidor repetido.

o Restricciones de integridad referencial: Se da cuando una tabla tiene una

referencia a algún valor de otra tabla. En este caso la restricción 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 restricción 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 números de 9

dígitos + 1 letra , no es posible insertar un DNI sin letra, puesto que la

restricción obliga a poner al menos 1 letra.

o Restricciones de vericación (CHECK): Esta restricción permite compro-

bar si un valor de un atributo es válido conforme a una expresión.

o Restricción 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 información o desconocimiento. Si admite como valor el valor NULL,

el atributo es opcional.

o Disparadores o triggers: Son procedimientos que se ejecutan para haceruna tarea concreta en el momento de insertar, modicar o eliminar infor-

mación de una tabla.

o Restricciones genéricas 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 (atómi-

cas) o compuestas. Además, hay varios tipos de clave:

o Superclave:Identican a una entidad (pueden serno mínimas).Por ejem-

plo, para un empleado, las superclavesposibles son el DNI, o el DNI+Nombre.

o el DNI+Nombre+Numero de la Seguridad Social, etc.

66

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 76/324

Capítulo 2. Diseño lógico relacional

o Clave Candidata: Es la mínima Superclave (en el caso anterior el DNI, O

el Número de la seguridad social).

o Clave Primaria: Es la clave candidata elegida por el diseñador como cla-

ve denitiva (en el ejemplo anterior se elegiría el DNI por ser la. más

representativa paraun empleado).

o Clave foránea: Es un atributo de una entidad, que es claveen otra entidad.

Por ejemplo. la nota en un módulo de una asignatura corresponde a un

DNI, que es clavede Otra entidad. En este casoel DNI es una clave foránea

en la tabla notas.

2.7. Transformación de un diagrama E / R al mo-

delo relacional

MODELO CONCEPTUAL(CHEN) *  MODELO RELACIONAL (CODD)

Figura 2.28: Transformación del modelo E/ R en relacional.

Para realizar esta transformación se siguen las siguientes reglas:

Transformación 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 77/324

Bases de Datos

Transformación de entidades débiles

Para cada entidad débil 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 dependeD con atributos clave (c f1,c f2,. . .,cfm): se creauna tabla D con m+ncolumnas 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 unión de los atributos clave de la entidad D.Si la

entidad débil D,además, tiene una dependencia de identicación, la clave primaria

de la tabla D será. launión de los atributos cd¡, Cdg,. . . , cdt, cfl, Cfg, .. .,cf,,,, es decir,

la unión de los atributos clave de la entidad débil D y de la entidad fuerte F.

Figura 2.30: Paso a tablas de una entidad débil.

En el diagrama E-Rde la gura 2.30. las tablasgeneradas son3:

CUENTAS_BANCARIAS(N°Cuenta, saldo)

TRANSACCIONES(Código,Tipo,Cantidad)

Transformación de relaciones

Por cada relación R entre entidades E1, E2, . . ., E N.

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 relación. 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 foránea que referencia a la tabla

de la que se importa.

Por ejemplo, en la gura 2.31 hay una relación ternaria con dos entidades con

clave compuesta, aula y asignatura, y otra, estudiante. que tiene una clave simple. Latransformación al modelo relacional exige la creación de una tabla para la relación.

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 N°Cuenta a la tabla TRANSACCIONES, aquí seha omitido para centrar la atención en los atributos de las entidades. Consultar la sección de

excepciones en la transformación de relaciones.

68

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 78/324

Capitulo 2. Diseño lógico relacional

al mismo tiempo, actuando como claves foráneas de sus respectivas tablas. Además,

se incorpora el atributo de relación hora.

Figura 2.31: Paso a tablas de una relación.

AULAS(Numero, Planta. Situación)

ESTUDIANTES(N°1\Iatricu1a,NombreDireccion)

ASIGNATURAS(Nombre, Ciclobescripcion)

ESTUDIOS(Numero, Planta. N°I\Iatricu1a, Nombre,Ciclo,Hora)

El consejo del buen administrador. ..

Aunque en teoría, 1a tabla ESTUDIOS tiene como clave primaria Ia suma delas claves primarias de las tablas que relaciona, tener en una base de datos

tablas con claves tan complejas, hace que e] sistema pueda funcionar más

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 inserción o modicación constante de datos, más

que en 1a consulta delos mismos, quizá, en estos casos,se pueda saltar la teoría

y crear un campo sencillo adiciona], identicador de Ia la, y sustituirlo por Ia

clave primaria compuesta origina]. De esta forma, se simplica enormemente

Ia clave primaria en pos de un funcionamiento más eciente. Nótese, que en

estos casos,se pierde mucha semántica que, o se ignora o habría que controlar

de otros modos.

No siempre se aplica la regla general para crear una tabla por cada relación.

Generalmente, se pueden encontrar las siguientes excepciones a la regla general

69

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 79/324

Bases de Datos

1. Relaciones con cardinalidad 1:N. En este caso.no se crea una tabla para larelación, sino que se añade a la tabla de la entidad que actúa con participaciónmáxima N la clave de la entidad que actúa con participación máxima 1 (comoclave foránea).Si además,la relación tuviera atributos se importarían tambiéna la entidad que actúa con participación máxima N:

N

REPRESENTANTES(N_L¡cenc¡aN°mb¡e) ÁCÏORES(Código.NombreAnístic 

 _Licencia_RepresentaContrato)O

Figura 2.32: Excepción I. Relaciones l-N.

La transformación quedaría como se ilustra en la Figura 2.32. Se puede obser-

var que en este caso, no se ha creado una tabla para la relación, sino que se haañadido a la tabla ACTORES la clave foránea N_Licencia_Representante quereferencia al campo N_Licencia de la tabla REPRESENTANTES. También seha añadido el campo Contrato, atributo de la relación, a la tabla ACTORES.

ACTORES(Codigo, NombreArtísitico, NombreReal,N_Licencia_Represent ante,Contrato)REPRESENTANTES(N_Licencia.Nombre)

2. Relaciones reexivas con cardinalidad l-N. En este caso, tampoco secrea una tabla para la relación. Hay que crear una tabla con el nombre de laentidad, añadiendo otra vez la clave cambiada de nombre.

Figura 2.33: Excepción II. Relaciones reexivas 1-N.

70

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 80/324

Capítulo 2. Diseño lógico 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 claveforánea.

EMPLEADOS(DNLNombre,DNISupervisor)

<> Actividad 2.14: En las relaciones reexivas con cardinalidad m-n, se

aplica la regla general para la transformación de relaciones. Expresa cómo

sería la regla para crear tablas con relaciones reexivas con cardinalidad m-

n. Después, aplica esa regla para transformar la Figura 2.33 suponiendo quetuviera 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 relación y se tiene la libertad de poder incor-

porar la clave de una de las dos entidades a la otra.

Figura 2.34: Excepción III. Relaciones 1-1.

En este caso existen las siguientes opciones:

IIncorporar la clave de Personajes como clave foránea en la tabla actores:

ACTORES(Codigo, Nombre, CodigoPersonaje)

PERSONAJES(CodigoNombrePelícula)

IIncorporar la clave de Actores como clave foránea en la tabla Personajes:

ACTORES(Codigo, Nombre)

PERSONAJES(Codigo,Nombre.Película.CodigoActor)- Incorporar la clave de Actores como clave foránea en la tabla Persona-

 jes y la. clavede Personajesa la tabla de Actores como clave foránea:

ACTORES(Codigo. Nombre,CódigoPersonaje)

PERSONAJES(Codigo.Nombre.PelículaCodigoActor)

4Téngase encuenta, queen estecaso seestá introduciendouna pequeñaredundancia, peroquepuede ser de mucha utilidad para simplicar futuras consultas.

71

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 81/324

Bases de Datos

Participaciones O,x

Normalmente las participaciones son importantes para calcular la cardinalidad

de la relación, y transformar conforme a las reglas expuestas hasta ahora. Incluso en

muchas ocasiones, las participaciones se omiten en los diagramas entidadrelación.

No obstante, es necesario tener en cuenta cuándo la participación tiene un mínimo

de O, para adoptar un campo de una tabla como opcional NULL,u obligatorio NOTNULL.

Generalizaciones yespecializaciones

Para transformar las generalizaciones se puede optar por 4 opciones. Cada op-

ción se adaptará mejor o peor a los diferentes tipos de especialización (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\Iáquinas)

COMERCIALES(DNLComisión)

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,Máquinas)

COMERCIALES(DNI,Nombre,Puesto.Comisión)

3. Se puede crear una sola tabla para la superclase, incorporando los atributos de

todas las subclases y añadir, para distinguir el tipo de la superclase, un campo

72

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 82/324

Capítulo 2. Diseño lógico relacional

llamado tipo, que contendrá el tipo de subclase al que representa cada tupla.

Este tipo de opción se adapta muy bien a las especializaciones exclusivas.

EMPLEADOS(DNI, NombrePuesto. Dpto, Máquinas, Comisión, Tipo)

4. Se puede crear una sola tabla para la superclase como en la opción anterior,

pero en lugar de añadir un solo campo tipo, se añaden varios campos queindiquen si cumple un perl, de este modo se soportan las especializaciones

inclusivas.

EMPLEADOS(DNI,Nombre,Puesto, Dpto,Máquinas, Comisión,EsDirectivo, EsTécnico, EsComercial)

2.8. Normalización

Habitualmente, el diseño de una base de datos termina en el paso del modelo

entidad-relación al modelo relacional. No obstante, siempre que se diseñaun sistema,

no solo una base de datos, sino también cualquier tipo de solución informática,

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 diseño,

para alcanzar la calidad deseada. Uno de los parámetros que mide la calidad de

una base de datos es la forma, normal en la que se encuentra su diseño. Esta forma

normal puede alcanzarse cumpliendo ciertas restricciones que impone cada forma

normal al conjunto de atributos de un diseño. El proceso de obligar a los atributosde un diseño a cumplir ciertas formas normales se llama nomnalización.

r°----/ \---&#39;7

°°¿;:"° cotzzsasl. LGICO

PROBLEMA/ (Entldad/ (Relacional)v, : zA: W l

 ____ sí

g ,al

BASE«  . ¡NT L; ÉÍ  DE MODELOFisco ¿SUFICENTEME E J 

NORMALIZADO? »  

Figura 2.36: Renamiento de un diseño de base de datos.

Las formas normales pretenden alcanzar dos objetivos:

73

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 83/324

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

anomalías a la hora de operar con los datos.

En la medida que se alcanza una forma normal más 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. También se dice que Ximplica Y, y por tanto,que Xes el implicante. Por ejemplo:

PRODUCTOS (CódigoProducto, Nombre, Precio, Descripcion)

CódigoProducto + Nombre, puesto que un código de producto solo puede

tener asociado un único nombre, dicho de otro modo, a través del código de

producto se localiza un único nombre.

Dependencia funcional completa: Dado una combinaciónde atributosX (X 1, X2, ..se dice que Ytiene dependencia funcional completa de X, o que X=> Y, si

depende funcionalmente de X, pero no depende de ningún subconjunto delmismo. Por ejemplo:

COMPRAS (CódigoProducto, CódigoProveedor, Cantidad, FechaCompra)

CódigoProducto,CódigoProveedor => FechaCompra, puesto que la FechaCom-

pra es única para la combinación de CódigoProducto y CódigoProveedor (se

puede hacer un pedido al día 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, CódigoProductvoweFecha.

Dependencia funcional transitiva: Dada la tabla T, con atributos (X,Y,Z), don-de X > Y, Y  + Z e Y  4+ X 6, se diceque X depende transitivamentede Z,o que, X > Z.

5No es objetivo del libro entrar en los detalles matemáticos del proceso de normalización, ysí proporcional al lector una idea intuitiva del mismo.

GY nodepende deX.

74

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 84/324

Capítulo 2.Diseño lógico relacional

Ejemplo 1:

PRODUCTOS (CódigoProducto,Nombre, Fabricante,País)CódigoProducto > Fabricante

Fabricante > País

CódigoProducto > País, es decir, CódigoProducto depende transitivamente

de País.

Ejemplo 2:

PRODUCTOS (CódigoProducto,Nombre, Fabricante,País)CódigoProducto > Nombre

Nombre > CódigoProductoCódigoProducto - v» Nombre

A continuación, se describe de forma intuitiva las siguientes formas normales:

FN 1: En esta forma normal se prohíbe que en una tabla haya atributos que puedan

tomar más un valor. Esta forma normal es inherente al modelo relacional,

puesto que las tablas gestionadas por un SGBD relacional, están 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 McGregorLa amenaza Fantasma1999Ewan McGregor

Liam Neeson

Natalie Portman

Blade Runner 1982 Harrison Ford

Rutger Hauer

Avatar 2009Sam Worthington

Zoe Saldana

Sigourney Weaver

Figura 2.37: Primera Forma Normal.

75

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 85/324

Bases de Datos

FN 2: Un diseño se encuentra en FN 2 si está en F N1 y además, cada atributo que

no forma parte de la clave tiene dependencia completa de la clave principal.

Ejemplo:

COMPRAS (CódigoProducto, CódigoProveedor, NombreProducto, Cantidad,

FechaCompra).

CódigoProducto > NombreProducto, por tanto, al no ser dependencia fun-cional completa, no está en F N2.

FN 3: Un diseño se encuentra en FN3 si está en F N2 y además, no hay ningún

atributo no clave que depende de forma transitiva de la clave.

Ejemplo:

PRODUCTOS (CódigoProducto,Nombre, Fabricante,País).CódigoProducto > Fabricante

Fabricante > País

CódigoProducto +> País

País depende transitivamente de CódigoProducto, por tanto, no está en terceraforma normal.

FNBC: Esta forma normal, llamada Forma Normal de Boyce-Codd, exige que el

modelo esté en FN3, y que además, todo implicante de la tabla, sea una clavecandidata.

Ejemplo:

NOTAS (DNIAlumno, DNIProfesor,NombreProfesor, Nota).DNIProfesor > NombreProfesor

NombreProfesor > DN IProfesor

DNIProfesonDNIAlumno > NotaEn 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 habría que quitar de la tabla los atributos DNIProfesor y NombrePro-

fesor.

Otras formas normales: Existen más formas normales (FN4, F N5, FNDK, FN6

76

cuyo alcance excede el de este libro y cuya aplicación en el mundo real es

únicamente teórica). Las formas normales 4 y 5, se ocupan de las dependencias

entre atributos multivaluados, la Forma Normal Dominio Clave (FNDK) tratalas restricciones y los dominios de los atributos, y nalmente la FN6 trata

ciertas consideraciones con las bases de datos temporales.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 86/324

2.9.

Capítulo 2. Diseño lógico relaciona]

Prácticas Resueltas

Práctica 2.1: Startrekfanscom v.1.0

Un club de fans de la famosa película startrek, ha decidido crear una página web

donde se pueda consultar información referente a todas las películas y capítulos de

la saga. El dominio startrekfans.com se redirigirá a un servidor web que consulte

una base de datos con la siguiente información:

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-

ción militar que desempeña(ca.pítán. teniente,almirante, etc.). Es importanteconocer 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. Además, será necesario conocer el personaje del que depende di-

rectamente en graduación militar.

Capítulos: Hay que almacenar todos los capítulos, indicando a qué temporada

pertenece cada capítulo, el título, el orden en el que fue rodado, fecha de

su primera emisión en televisión y los personajes que participaron en cada

capítulo.

Películas: Se debe almacenar también, todas las películas que se proyectaron

en cines, cada una con su año de lanzamiento, título y director. También hay

que guardar los personajes que aparecen en cada película y cuál de ellos fue el

protagonista.

Planetas: En cada capítulo, se visita 1 o varios planetas, hay que almacenar el

código 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 descripción

del problema será suciente con un campo de texto de 255 caracteres. De la

nave se almacenará el nombre, código y número de tripulantes.

1. Realizar un diagrama entidad relación que modele el diseño de la base de da-

tos. Puedes hacerlo en papel, con dia, con Visio. o con cualquier otro software de

diagramas.

2. Realizar la conversión al modelo relacional del diagrama realizado en el primer

Apartado, indicando qué claves primarias y foráneas se han de crear.

77

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 87/324

Bases de Datos  

78

Paso a tablas: ACTORES(Código,Nombre,Fecha, Nacionalidad)PERSONA JES(Código.Nombre,Raza, Grado, CádigoActor, CodigoSupeñor)PLANETAóYCódigo,GalazimNombne)CAPÍTULOS(Temporada,Orden,Título,Fecha)PELÍCULASYCódigo,Título,Director,Año)PERSONAJESCAPITUL OS(CódigoPersonaje,Temporada.Orden)PERSONA JESPELICULA S(CódigoPersonaje, CódigoPelicula)VISITAS(CódigoNave, CódigoPlaneta, Temporada, Orden)NA VES(Código,N° Tripulantes,Nombre)

Obsérvese que: 

En el enunciado no aparece explícitamente el campo Código para los personajes  y actores, pero es necesario incluirlo para dotar de un atributo clave a estas entidades.

La clave de la entidad Capítulo es compuesta, por tanto en las relaciones se importan los dos atributos  que forman la clave.

La relación ternaria tiene cardinal idad M:N:P, es decir, Aluchos-Aluchos-Aluchos.

En la relación interpreta se podría haber incorporando los dos campos claves a las entidades opuestas.Aunque introduce redundancia de datos, es útil para agilizar consultas.

Nótese que a las dos relaciones Apanece, se les ha cambiado el nombre por una combinación de las dos  entidades que relaciona, para evitar la posible ambigüedad.

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.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 88/324

Capítulo 2. Diseño lógico relaciona]

Práctica 2.2: Startrekfanscom v.2.0

El club de fans de Startrek ha pensado ampliar los requisitos de la página web para

hacer una segunda versión. Esta segunda versión consiste en incluir información ex-tra para los personajes. De esta manera, si el personaje es un humano, se indicará su

fecha de nacimiento y ciudad terráquea donde nació. Si el personaje es de la raza

Vulcano, se almacenará el nombre del mentor y la fecha de graduación, y si es de

raza Klingon, se guardará su planeta natal y la fecha de su último combate.

1. Realizar una generalización de la entidad Personaje indicando las especializa-

ciones necesarias.

2. Transforma al modelo relacional la generalización del apartado anterior.

PERSONAJEóYCódigmNombre,Grado, CódigoActor.CodigoSuperior, Raza. Ciudad. F_Nacim, Planeta,

F. UlLCombate, ltlentor, Fecha_Grado)

Obsénrese que: 

 k Se ha optado por una de las 4 opciones 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 según su tipo. Porejemplo, si la raza es Klingon, tan solo se rellenarán los campos Planeta y F_Ult_Combate. Esto

generará 4 valores nulas por personaje, pero evitará complejidad en el modelo al no tener tablasextra.

Al tratarse de una especialización total y exclusiva. cada personaje solo puede pertenecer a una de

las razas, y además tiene que pertenecer a una de manera obligatoria.

79

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 89/324

Bases de Datos

Práctica 2.3: Startrekfanscom v.3.0

El club de fans de Startrek quiere la tercera versión de la base de datos de la si-

guiente forma:

En cada capítulo, 1a nave que viaja a un planeta, puede disponer de una nave pe-queña 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 número entero y el código de la nave. Es necesario

conocer la capacidad en personas de la lanzadera.

1. Incorporar los cambios de la tercera versión al modelo conceptual y lógico de

las prácticas anteriores.

Paso a, tablas:

LANZADERA S(CódigoNave, Número,Personas) NA VES(Código, N7Hpulantes,Nombre)

Obsérvese que:

iAl ser una relación 1-N se importa a LANZADERAS el atributo CódigoNave.

k El campo Número es una clave débil.

k Al tratarse de una dependencia de identicación, el CódigoNave forma parte de la clave primaria.de la tabla LANZADERAS.

80

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 90/324

2.10.

Capítulo 2. Diseño lógico relaciona]

Prácticas Propuestas

Práctica 2.4: Peluquería

Una peluquería desea llevar el control de sus empleadas y de sus clientes así como

de los servicios que se prestan. Se deseaalmacenar la siguiente información:

Empleadas: DNI, Nombre, Especialidad (Masaje, Corte, Color, Brushing, Ma-

nicuras, Rulos,etc.)

Clientes: Datos personales (DNI, Nombre, Profesión, Teléfono y Dirección) ylos tratamientos médicos 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.

Cosméticos: Código, Nombre, Cantidad y Precio.

Ventas de cosméticos: Una empleada vende un cosmético a un cliente, obte-

niendo una comisión.

.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

decisión. Por cada relación, razona su tipo y cardinalidad.

.Modeliza mediante un diagrama E/ R.

.Realiza el paso a tablas del modelo E/ R.

81

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 91/324

Bases de Datos

Práctica 2.5: Reyes Magossin fronteras

La ONG Reyes Magos sin fronteras desea hacer una base de datos para que esta

Navidad todos los niños pobres de España puedan recibir sus regalos la noche de losReyes Magos. La ONG contacta con vecinos de distintos barrios para disfrazarlos

de Reyes Magos y organizarlos en grupos lúdicos que realicen eventos para que los

niños los visiten y puedan formular sus peticiones. Cada niño es recibido por un Rey

Mago y puede hacer una única petición, la cual queda anotada en la base de datos

para posteriormente, el día 6 de enero, entregar esa petición. La ONG comprará los

regalos con el dinero que distintas organizaciones benécas aportarán 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 niños: Nombre,Dirección y el Regaloque pideal Rey Mago. (Losniños,no tienen DNI, y necesitarán un dato identicativo).

De los grupos de vecinos se necesita saber a qué Barrio pertenecen, número de

integrantes del grupo y los Eventos que han organizado.

De los eventos interesa conocer la Ubicación física, la Fecha, la Hora y los

niños asistentes.

. Realiza una lista de candidatos a entidades, relaciones y atributos, indicandoen cada entrada, si se admite o se rechaza como tal justicando el porqué de

tu decisión. Por cada relación, razona su tipo y cardinalidad.

.Realiza el diagrama entidad-relación y el paso al modelo relacional.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 92/324

Capítulo 2. Diseño lógico relaciona]

Práctica 2.6: Mundial de fútbol

Diseñar una base de datos para organizar el campeonato mundial de fútbol. Consi-

derar los siguientes aspectos:

IJugadores: un jugador puede pertenece a un único equipo y puede actuar envarios puestos distintos, pero en un determinado partido solo puede jugar enun puesto.

IÁrbitros: En unpartido intervienen3 árbitrostitulares, linierderecho, izquier-do, principal y un árbitro secundario. Un árbitro puede realizar una funciónen un partido y otra distinta en otro partido.

- Estadísticas: Se deseasaber los goles queha marcado un jugador en qué partidoy en qué minuto, también se desea poder describir cómo sucedió el gol.

IPorteros: Se desea almacenar cuántas paradas ha realizado, en qué minuto,y en qué situación se han producido: penalti, tiro libre, corner o jugada deataque.

IPartidos: Todos generan un acta arbitrar donde se pueden incluir todo loscomentarios que el árbitro considere oportuno: lesiones, expulsiones, tarjetas,etc.

1. Realiza una lista de candidatos a entidades, relaciones y atributos, indicandoen cada entrada, si se admite o se rechaza como tal, justicando el porqué detu decisión. Por cada relación, razona su tipo y cardinalidad.

2. Realiza el diagrama entidad-re1a.ción y el paso al modelo relacional.

83

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 93/324

Bases de Datos

Práctica 2.7: Supermercado virtual

Se va a desarrollar una aplicación informática para wwwxvirtualmarkeïïcom cuya

interfaz de usuario estará basada en páginas web para que los clientes puedan realizarcompras desde sus casas. La empresa dispone de una serie de repartidores que se

encargan de distribuir los pedidos a los clientes. A continuación se muestra el informe

de un analista tras una entrevista con el cliente:

La aplicación permitirá registrar nuevos clientes. Para usar la aplicación, un

cliente deberá registrarse indicando sus datos personales (DNI, Nombre, Dirección,

Código Postal,Teléfono decontacto, emaily password)a través de un formulario deregistro. Una vez registrado podrá acceder a la realización de pedidos con su email

y su password.

Los productos que oferta el supermercado están divididos en diversas categorías.

Los datos necesarios para cada categoría son: nombre de la categoría, condicionesde almacenamiento(frío, congelado,seco) yobservaciones. Losdatos delos produc-

tos son: nombre, marca, origen, dimensiones (volumen y peso), una fotografía, la

categoría y unidades disponibles7.La aplicación permitirá visualizar un listado de productos ordenado por cate-

goría, permitiendo seleccionar los productos que desee comprar mediante una caja detexto donde se indicará el número de unidades seleccionadas. La aplicación llevará la

cuenta (cestade la compra) de los productos que el cliente ha ido seleccionando.

La aplicación permitirá también efectuar un pedido con todos los productos que

lleve almacenados en su cesta de la compra. Los datos del pedido son: código del

pedido, fecha del pedido, cliente, dirección de entrega, productos pedidos, importe

total del pedido ydatos depago (númerode tarjetay fechade caducidad)?

Para poder generar un pedido se deberán dar dos situaciones:

IEl cliente deberá pertenecer a una zona (Código Postal) donde existan repar-

tidores. Un repartidor se ident.ica mediante un nombre, número de matrícula

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 página con los datos de su

pedido, se restarán del stock las unidades pedidas y se emitirá una nota de entrega

7El control del stock está supervisado por otra aplicación subcontratada, y por tanto no esnecesario preocuparse por él.

SEI pagodel pedido está automatizadomediante otro software queproporciona el banco.

84

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 94/324

Capítulo 2. Diseño lógico relaciona}

(albarán) a los responsables de almacén para. que sirvan ese pedido.

Se pide:

1. Diseño Conceptual. Realizar el diagrama entidad relación de la aplicación. Se

ha de tener en cuenta que el entrevistado narra todo el proceso que necesitala lógica de su negocio. Se deberán separar los procedimientos de los datos.

Diseño Lógico. Realizar el paso al modelo relacional.

.¿En qué forma normal está la tabla Clientes?

Práctica 2.8: Requisitos deuna aplicación

Busca alguna persona que tenga un negocio. Puedes trabajar haciendo equipo con

otros compañeros. Tenga informatizado el negocio o nó, pídele que sea tu cliente y

realiza las siguientes tareas de análisis:

Entrevístale, 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

información en bases de datos y realiza un diagrama entidad relación quesatisfaga todos esos requisitos.

Reúnete de nuevo con el cliente y pídele 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 diseño de base de datos, trans-

formando el modelo E-R al modelo relacional ydespués, implementando ese modelo

en Access. <>

85

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 95/324

Bases de Datos

Práctica 2.9: MySQL Workbench

El objetivo de esta práctica es conocer en profundidad un software de diseño de

base de datos de licencia GNU. Debes tener en cuenta que los diagramas de MySQLWorkbench son una mezcla del modelo conceptual de Chen y del modelo relacional

de Codd, incluso más 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. Además, aunque tiene el apellido MySQL, este software

está basado en DB Designer, programa genérico de diseño de base de datos, y por

tanto se puede conectara cualquier SGBD (Oracle, DB2, Access..  y no solo a

MySQL.

1. Conectarse a la página web de l\rIySQL Workbench. http://wb.mysq1.com/ 

2. Seleccionar 1a opción 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 manual y descárgate el manual de

instrucciones de MySQL Workbench.

4. Instalar el software. El proceso de instalación es muy sencillo.

5. Iniciar la aplicación y seleccionar la opción Add Dzïagram para comenzar a

dibujar un diagrama entidad relación (EER (Extended Entity Relationship- Entidad Relación Extendido). En la opción de menú Model, seleccionar la

notación para los ob jetos y para las relaciones. Seleccionar la opción 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 96/324

10.

Capítulo 2. Diseño lógico relacional

File Edit View Arrnnge Model Dnabne Plugins Tools Community Htip

H H ° F7I} MySQL Model V Dlagram

<7

¡J ¡m1 1 - .-,T 0:69amu Nanhrevmmmqs)  _

  A  mydbu bles¡g + :1 Ecume-

 _ .:1 Jugador.

Selecciona aquí lastablas y relaciones

 _¿ RoutmeGroupsAtributos

i

I

i _*JI en!i

7 i

Coum Dennis ¡ _, <domuednd< tooverwue mula

n (OÚIQO Column iE  _ 15Dorsu ¿. e e  _

in Nombre RCHARHS} cmmems,l Equmcjcdngo

c w  O   

» TnbleColumns Xndexes ForeignKeys TruggersPartmonan; Ovtxnnslns 4 y  JDcñpcn iwal

iRelationshipbetween Jugador¡nd Equipocreated.

en la tabla jugador que representa el equipo en el que juega..Observar que al generar la relación, automáticamente se crea una clave foránea

. Experimentar con el diseño para crear la relación  juega como n-m en lugar

de 1 n. ¿Qué sucede?Observar que automáticamente crea una nueva tabla.. Descargar el chero sakila-db.zip de la página web de MySQL. Se encuentra

muy fácil escribiendo sakila-dazip en google. Descomprimir y abrir el archi-vo sakilamwb. Observar cómo están organizadas en regiones las tablas y lasrelaciones del modelo.

Realizar los diagramas de las prácticas anteriores con MySQL Workbench ymediante la opción de menú Database, Forward Engineer, generar automáti-camente los scripts de creación de base de datos.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 97/324

Bases de Datos

2.11.

88

Resumen

Los conceptos clave de este capítulo son los siguientes:

u Modelizar un problema consiste en realizar múltiples abstracciones. En bases

de datos, se utilizan tres modelos: el modelo conceptual, o diagrama entidad-

relación, que es más cercano al usuario, el modelo lógico, que es un modelo

más técnico y que tiene traducción directa al modelo físico que soportan los

SGBD.

Los componentes que hay que detallar en un diagrama entidad relación son:

Entidades, Atributos, Relaciones, Participaciones, Cardinalidades y Generali-zaciones.

Los tipos de Entidades son fuertes cuando su existencia no depende de ninguna

otra, y débiles, cuando su existencia depende de otra. Esta dependencia puede

ser ampliada si la entidad también depende en Identicación, es decir, necesitael 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, según su grado, binarias, ternarias, reexivas on-arias.

La cardinalidad de una relación se calcula tomando las participaciones máxi-

mas y mínimas de las ocurrencia de una entidad en la rela.ción. Estas puedenser 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 relación 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 transformación.

La normalización es un proceso que sirve para medir la calidad de un diseño,

la forma normal que cumple cada tabla es un indicador que se usa para evitar

redundancia; de datos.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 98/324

2.12. Test de repaso

1. ¿Cuál es el modelo que más se apro-

xima a la visión del usuario?

a) El modelo conceptual

b) El modelo lógico

c) El modelo físico

)d El lenguaje SQL

2. Una relación reflexiva es una entidad

de grado

a)Ob)1c)2d)3

3. La participación de una entidad en la

relación es:

a) El máximo de ocurrencias que pueden apa-recer en la relación

b) El mínimo de ocurrencias que pueden apa-recer en la relación

c) El máximo ymínimo de ocurrencias que

pueden aparecer en la relación

d) El máximo y mínimo de ocurrencias de la

entidad

4. Aqué participaciones correspondeuna cardinalidad 1:N

a) (0a1)y(1»1)

b) (1,11) y (0,11)

C) (171)y (lan)

d) (0,1) y(n,n)

5. Si un empleado puede trabajar enmúltiples proyectos

a) Trabajar es 1:1

b) Trabajar es N:N

c) Trabajar es NzM

ld Trabajar es 1:N

Capítulo 2. Diseño lógico relaciona]

6. Un atributo de relación es

a) Consecuencia de la relación

b) Consecuencia de una de las entidades

c) De las dos entidades

d) Son atributos compuestos

7. La dependencia de identicación

a

b

) Incluye la dependenciade existencia

) No incluye la dependencia de existencia

c) No se aplica a entidades débiles

)d Sólo es posible cuando hay dos entidades

fuertes

8. Una especialización inclusiva es aque-

lla que

a) Puede materializarse en más de una sub-

clase

b) Puede materializarse en solo una clase

c) Puede no materializarse en alguna clase

d) Tiene que materializarseen una clase

9. La transformación de una relación con

cardinalidad 1-N al modelo relacional

a) Genera una tabla para la relación

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 normalización:

a) Se rena el modelo conceptual

b) Se rena el modelo lógico

C) Se rena el modelo físico

)d No sirve para. nada

qmr6?&#39;se&#39;¿v&#39;9o&#39;9o&#39;v&#39;9&#39;2&#39;qzv&

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 99/324

Bases de Datos

2.13.

10.

90

.Nombra los distintos tipos de rela-

ciones que puede haber atendiendoa su grado.

.Explica para qué sirve cada uno delos modelos expuestos en el temapara el diseño de una base de da-tos.

.Pon un ejemplo de cada uno de lostipos de cardinalidades.

.¿Qué son las relaciones reflexivas?

.¿Qué diferencia hay entre ocurren-cia de entidad y entidad?

. ¿Cuándo una entidad es débil? ¿Ycuándo lo es una relación?

¿Qué signica que una entidadfuerte tenga una relación depen-diente en existencia de otra entidad

débil? Pon un ejemplo.

.¿Cuándo dos entidades tienen de-pendencia de identicación?

.¿Qué elementos incorpora el mode-lo entidad-relación extendido?

Dene los siguientes conceptos:

I

Atributo ClaveIAtributo Derivado

ISuperclave

IClave Candidata

- Dependencia Funcional

11.

12.

13.

14.

15.

16.

17.

18.19.

Comprueba tu aprendizaje

- Dependencia Funcional Com-pleta

IDependencia Funcional Tran-sitiva

¿Qué diferencia hay entre una es-pecia.lización total y otra parcial?

¿Qué diferencia hay entre una espe-cialización exclusiva y otra inclusi-va?

Crea una lista con los pasosque hayque dar para pasar un diagrama en-tidad relación 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 foránea?

Pon un ejemplo de especializacióny comenta 4 formas distintas de ge-nerar las tablas.

¿Cómo representa MySQL Work-bench las relaciones? ¿Y las depen-

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 100/324

CAPÍTULO 3

Diseño físico relacional

Objetivos

Ñ Denir las estructuras físicas de

almacenamiento

Contenidos Crear tablas

@ Herramientas grácas y de Seleccionar tipos de datos ade-texto proporcionadas por los cuadosSGBD

Denir campos Claves enlas ta-El lenguaje de denición de da- blas

tos

Implantar las restriccioneses-Creación, modicación y elími- tablecidas en el diseño lógiconación de BBDD

Vericación mediante conjun-Creación. modicación y elími- tos de pruebasnación de tablas  _   _

Uso de asistentes y herramien-Implementación de restriccio- tas grácas

nes .  _ _ Uso del lenguaje de denición

de datos (DDL)

Denir y documentar el diccio-nario de datos

En este tema se detalla e] proceso de implantación denitiva, o diseño físico,de la base de datos en un sistema. informático. Se describe e] uso del lenguajeSQL distinguiendo las peculiaridades de los principales SGBD.

91

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 101/324

Bases de Datos

3.1. Notación para la sintaxis

En informática, cuando se quiere utilizar cualquier tipo de lenguaje de programa-

ción, se necesita una sintaxis para. denir cómo construir sentencias en ese lenguaje

de programación. Para expresar la sintaxis se utiliza una notación. Esta notación

está compuesta por componentes léxicos o tokens. Estos tokens pueden ser palabrasclave del lenguaje, deniciones de otros elementos sintácticos más básicos, expresio-

nes, variables, etc. La notación utilizada en este libro es la siguiente:

92

-Palabras en mayúsculas. Estas son las palabras reservadas del lenguaje. Por

ejemplo SELECT, DROP, CREATE son palabras reservadas, estoquiere decir

que no pueden utilizarse para nombrar objetos de la base de datos porque

tienen una misión especíca.

Palabras en minúscula. Se utiliza para realizar descripciones de sintaxis más

en detalle. Por ejemplo, el token especicacion_de_ltro se puede desplegar en

más deniciones para. realizar ltros en las consultas.

Corchetes. Un elemento sintáctico 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 denición CREATE [TEMPORARY] TABLE, se puedeindicar de for-

ma opcional el token TEMPORARY para crear una tabla temporal, que solodurará en memoria mientras el usuario permanezca conectado. Si varios ele-

mentos vanseparados medianteel token pipe | , se puede elegiruno de ellos.

Llaves. Indica alternativa obligatoria. Se debe elegir entre los elementos se-

parados mediante el token pipe | . Por ejemplo, en la denición de sintaxis

para crear una basede 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 repetición, es decir, el último elemento sintáctico

puede repetirse varias veces. Por ejemplo, para codicar una consulta se usa

la denición SELECT columna columna] ...FROM tabla. Los puntos sus-

pensivos signican que sepuede repetirel token columna] tantas veces comose desee.Asi, es posible escribir SELECT Nombre, Direccion, Codigo FROM

Clientes.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 102/324

3.2.

SGBD

Capítulo 3. Diseño sico relacional

Herramientas grácas proporcionadas por los

Es muy sencillo manipular una base de datos compleja si se dispone de un interfazgráca de usuario que ayude al DBA, Database Administrator, a enviar comandosde administración de forma automática y sin necesidad de conocer su sintaxis:

3.2.1. PhpMyAdmin de MySQL

MySQL dispone de un interfaz basada en páginas web llamada PhpMyAdmin,que a través de un servidor Web, por ejemplo Apache, permite administrar las basesde datos de un servidor desde cualquier equipo de la red.

íig/Ïgáffslï) LU Servidor: localhostD¿gilBase dedatos: ¡ardineria

¡EME o raciones&#39; Priviloios XEliminarBase dedatos 1.5 ¡un ¡«khl

¡ardmena (8) V

¡amimna (a) Client-s ¡ S 2"" TÍ >< 3°

E ¿mas DculloPodldos Í ¡ Ï-i  Ï X 1952351??Empleados Í ES ÉEi  Ï 7 31g°""°°GamasPmductos E; Si  Ï X 1m?Ocinas É   :¿  Ï X 9

 Productos p¡g°¡ É  Si X 26

Pedidos Í É ÏÍ  l  Ï X 115Productos 73 ii Í X 375

8tablals) Número de filas 7"

t Marcar todos/asI Desmarcartodos

&#39;._ Vistade ÍmDFESlO3, Dncoonanode datos

Nombre:

¡gCrear nueva tabla en la base de datos jardineria

ve

lnno ln

 lnno

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 103/324

Bases de Datos

3.2.2. Oracle Enterprise Manager y Grid Control

El SGBD Oracle dispone de dos herramientas grácas, ambas con interfaz weby 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 creación de base de datos.Es capazde manipular todas lasfunciones básicasde una base dedatos (crea-ción de tablas, usuarios,exportación e importación de información, etc.)

Archivo Editaryet HostnnalMarta Herramimxasnda¿a v a  ¿a ¡(till/aluníoesk(ooilïsaiem/Snsoleíciambase/instoncïeIs:Kcrnapïeveniéaouzadmargewnbaïá umricasrypAv ÏClv .;

ORACLE EnlernnseManager Hg >@A"&#39;&#39; &#39; -&#39;--°""""&#39;5-4" ¡hïï-h&#39;"z - -. v- Base unDatos

Cvweïiaoa ti:f»C Ji-J.Instancia deBase deDatos: nbaalumno

Inido Rorrlodo Dasïnnhaaa SenasaEsouema Movmonto neDam; Soítwme¡ Sie

=a.. =c-rb;;:nu; -jurv-QOHJ¡Mu cast 9,5,5", vovDatos Marais-Juanmang; v

General CPU del Host Sesiones Aciivas Tiempo deRespuesla SOL

 e - &#39; 10a: 4.o 1.oEstan Activo 75l ultima Recgglacnon

IEsaa IActiva msm¡Han-EW 1G!!!CES?5o Otros ¡o IE Cy USM" 0,5 sgyucsNamnmlo ¡marunn Irma ¡ Recgglacrrrde¡mm "¿min 25 í REWHGÜCAB segundos

Ha! anumwcesnzg 0°-° °-°uUSFENER alumno

 Cvl 2;¡unieron tg Romano Banco|tiempo oe Respuestasol. miya)Ve, ¿masmmma: Emu. Pecopulacumae Peruana:

Resumen deDiagnostico: Resumen ue Espacio Alla DisponibilidadLogunNovus No m,m3.: evvovDRA Tamaño oe laBase deOnzas(GB) ï consola Detalles

¡mans Mm,og rn-spaces Pvuiofndtcug  _namas ¡horacio nlpm.su cm. 9Roca-mucosas no! Autorun segmentosg umma cop-a oo509mm wo

¡W801i OI¡d&#39;un4 C Rogsnodunumericun Sanon DansDesaczwnca m. no vanesa:una en rs

VAlertasCategoria Tono" n Cvmu o Amancio o4  _ Tennmado &#39;&#39; &#39; " " &#39;  &#39; alunm-deskmpzusa a

Figura 3.2: Enterprise Manager de Oracle.

<> Actividad 3.1: A través deuna máquinavirtual conun sistemaoperativode tipo Linux, por ejemplo, Ubuntu, instala los paquetes de mysql server y los

paquetes de phpmyadmin. Para ello, escribe en un terminal el comando sudoapt-get install mysql-server y después, el comando sudo apt-get ins-tall phpmyadmin. Es posible que antes de realizar esta operación necesitesactualizar el repositorio de paquetes mediante el comando sudo apt-get up-date. Selecciona que la instalación congure phpMyAdmin automáticamentepara apache yescribe una. contraseña de usuario. Cuando termine la instala-ción, ya puedes abrir un navegador en la máquina virtual y escribir la dirección

9-1

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 104/324

Capítulo 3. Diseño físico relacional

http: \\127 .O. O.1\phpmyadmin\index.php. Introduce el usuario phpmyad-min y la. contraseñaque hayas escrito en la conguración. Finalmente, exploralas opciones que te da la interfaz de usuario. Si lo preeres, puedes descargardel blog del libro la máquina virtual de prácticas, donde ya está instaladomysql-server y phpmyadmin. Crea una base de datos que contenga dos tablasde la temática que elijas.

<> Actividad 3.2: Arranca el EnterpriseManager dela máquinavirtual deprácticas (Linux) y accedeal servidor web paraconsultar cadauna de las pes-tañas de las que dispone y examinando la información de la base de datos quete proporciona. Abre un terminal y con el usuario oracle, utiliza el comandoemctl start dbconsole para arrancar el enterprise manager. A continuación,escribe en un navegador de internet la dirección http:\\1oca1host:1158\emo 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 gestionarmúltiples bases de datos en diversos servidores, permitiendo consultar el estadoy rendimiento de todas y cada una de ellas.

ORACLE Enterprise Manager 10g - asume:mui Flill!" Destinos Despliegues Alertas Politicas Trabaos Informes

Busqueda de Destino

V¡s¡°n Gener BuscarÏWÉW  ____s _,_  __ h,  ____  _,  _ _ o  _ Total deDestinos Controlados12551m0 (¡e10305105 Desunos Violaciones dePoimca deSeguridad

Críticox .i_6Advenencia ainformativo i 2

trueno enlas Últimas24 Horas 1

IAgiirg 

Asesores deParches Criricospara DirectoriosRaiz deOracleAsesores deParches0Directorios Raizde OracleAfectadosO 

credenciales deOracle rAetaLinkugC gng ¿vagasAlertas deTodos losDesimcis

Critico x 1

Advertencia á)1RÉS"EEÉÉ"ÉÏ&#39;ÏÉEÏÏ_, ,__,__ ,%,,_WErrores En 0Ver Instalaciones deBase deDatos v 

Jiolaciones dePoliiica rieTodos losZiesrinasCnïico X  

AÜIEWEWCÉ ¿IBL. Insialacioiies de Basede Daios¡"fmmalm i Z Oracle Daiabase 10g10 1040

Trabajos deTodos losDestinos onde amaba19g 1o2 o 3 oEiecuciones problemáticas[últimos 7días) J 0Ejecuciones suspendidas(últimos7días) «r 0

Figura 3.3: Grid Control de Oracle.

95

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 105/324

Bases de Datos

Ambas herramientas son extremadamente pesadas en términos de Consumo derecursos, por lo que en muchas ocasiones se ha de administrar la base de datos sinsu ayuda.

3.2.3. DB2 Data StudioEste software sustituirá en un futuro próximo a una herramienta más antigua

llamada Control Center. Permite manipular los objetos de bases de datos DB2 eInformix y sus permisos. Soporta la administración avanzada de DB2 tanto en Win-dows como en Linux, y simplica la construcción de consultas SQL. Su gran potenciaes que facilita la creación de Servicios Web que distribuyen datos de consultas SQLa las aplicaciones cliente.

QDatabase Administration-.sqlxeditor_projectlscript1.sql -|BM DataStudioEdu hawgeteSerán Prayer.Szrot ama-a.web

"&#39;a  _= g Optrrsoluuorvs Vi&#39;&#39;_&#39;  &#39;&#39;,&#39;;&#39;&#39;

5533:: SOJYCEE1301? 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".-er- a!54-95 ¿EMVxxx. La.en: &#39;..-::r: sm7, L Sa! c? -5

;  @ Leste-tei -I, s&#39;-&#39;-&#39;=&#39;.s s-ac 2- ázosw-t. ol 0  _Se? Does

9   =e:e&#39;a&#39;.e: 3855552Dsgensv _ masr b ¡este 95-2-59:

l o _951m" 61.95 ,: v __ ioes 1m- v | ,- __ Srras irse-e o! n- -.. u¡ &#39;" l-¿ï -Reaeze Di o _&#39;nases  _ 

Í r Q: mae-ces "ereñm"&#39;  593W??? Crzrt-ssss: (vr-Saezl &#39;* "ha" Caer-z: Cr -S&#39;=::»S:sa:e5 * _"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 soñaste»...&#39;"m  _  q .- :1| -  _ ¿ves " "Vy , - ¿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 páginaweb httpJ/www-Ol . ibm.com/software/data/ db2/ descarga el DB2 express. Deberásregistrarte para poder descargar tres cheros:

db2exc_971_WIN_x86.zip

ibm_data_studio_standalone_win.zipdb2exc_vsai_971_WIN_x86.exe

96

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 106/324

Capitulo 3. Diseño fisico relacional

Para arrancar el asistente de la instalación. haz doble clic sobre db2exc_971_WIN_ 

x86.zip\EXPC\image\setup.exe, pulsa sobre Instalar un producto y sigue lospasos del asistente para realizar una instalación típica. Una vez nalizada la instala-ción, con el Editor de mandatos, ejecuta el comando list db directory para comprobaralguno de sus parámetros.

É mznwruvaapamuaro b .3 -ra-e".esaeac-<wsrazóc eme-ab

a r Bol a -r&#39;*a*ie-:asse zcrFgxazóoD&#39; I i l- Pla ...,...,...a¡_......... .l EawdemmdatosSeleccionado Eaterver HenmertasAwda ,  _  _ Vi¡  m1Q V_ _h j erre-zasse smc-uso- .  a ¡"resaca-carmence virutasln i i  _ A wJ ". ¡va , &#39;i1-Ü 71-& E; J A ® H :3 hñvnuoe ¡[IQ ueezawecemrsatoslMaristas

línia-m viaáémraeüy las: db dxzcczozï

Minera decnctadAx endxrcccorxe I1

lnzrad; J. dc han de datos:

Í una: dc bno de datos ISAMPLEXíonbxc debase dedatos ISLIM!Dztoctorio do lanus duos Locuu - C:Plural {alonsodc basodl datos r(1.00

Figura 3.5: Editor de mandatos para DB2.

El consejo del buen administrador. . .

Muchos administradores solo conocen las herramientas grácas de gestión y

administración de una base de datos, puesto que es más cómodo y más intuiti-vo, y además, aprender los lenguajes de programación de basesde datos es unatarea difícil y laboriosa. Sin embargo, conocerlos comandos y las instruccionesque proporciona un SGBD,otorga una visión extra que posibilita automatizartareas rutinarias y permite solucionar problemas que no se pueden solucionarsolo con las herramientas grácas. Aun administrador que conoce a la perfec-ción todos estos comandos,le resulta muy sencillo actualizarse en los continuoscambios de versiones en estas herramientas grácas.

3.3. Intérpretes de comandos de los SGBD

La utilidad principal de un SGBD es su intérprete de comandos. Es una aplica-ción cliente cuya única misión es enviar comandos al SGBD y mostrar los resultadosdevueltos 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 107/324

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 típico:

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 \cto clear the buffer.

El comando puede ir acompañado de dos tokens opcionales, options, que permite

especicar una serie de parámetros de conexión y database, queespecica en qué base

de datos se ejecutarán los comandos introducidos. Las opciones que aquí se muestran

son solo algunas de las disponibles, para más información consultarla documentación

de MySQL:

ILaopción helpmuestra unresumen delas opcionesdisponibles.- La opción -u o user permite especicar el usuario de conexión, por ejemplo

-u paco.

- La opción -p o password permite introducir un password para la conexión

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 opción -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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 108/324

Capítulo 3. Diseño sico relacional

local y se deseaconectar vía tcp-ip u otra dirección IP. Si se omite, por defecto

se conecta al servidor por named pipes (o tuberías con nombre) que no salen

a la interfaz local de la tarjeta de red y son mecanismos de comunicación más

rápidos, pues son internos al ordenador.

n La opción -P o p permite especicar el número de puerto al que conectarse (sise conectavía TCP-IP al ordenador remoto). Si no se indica este parámetro,

por defecto se conecta al puerto 3306.

- Permite especicar el nombre del socket por defecto. esto será necesario cam-

biarlo cuando exista más de una versión del gestor de base dedatos ejecutando-

se en un ordenador.

A continuación se muestran unos cuantos ejemplos de conexión:

#conexión sin usuario y password (se conecta como anónimo y sin password)

mysql

#conexión con usuario y password (se conecta como root y su password )

mysql -u root -p

Enter password: *********

#conexión con usuario y password en claro a la base de datos jardineria

mysql -u root -pPasswordDe1Usuario jardineria

#conexión 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

#conexión 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. Ejecución 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 continuación, escribir en la consola el

comando SQL que se desea ejecutar y se obtienen los resultados. Cuando una línea

es precedida. del carácter #, el resto de la línea se ignora. Estas líneas se llaman

comentarios y son útiles para documentar las acciones realizadas. Por ejemplo:

99

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 109/324

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 escribeun comando, mysql lo manda al servidor para que lo ejecute,muestra los resultados y vuelve al prompt, indicando que está listo para recibirmás consultas.

IMuestra los resultados en forma de tabla (las y columnas). La primera filacontiene las etiquetas para las columnas y las las siguientes muestran losresultados de la consulta.

nMuestra las las devueltas y cuánto tiempo tardó en ejecutarse, lo cual puedeofrecer una idea de la eciencia del servidor, aunque estos valores pueden serimprecisos pues dependen de muchos factores, tales como la carga del servidor,velocidad de comunicación, etc.

Las palabras claves pueden ser escritas en mayúsculas o minúsculas, y los identi-cadores de tabla, campo, índice, etc son sensitivos a las mayúsculas y minúsculas enlas versionesde unix (no así en Windows). Por ejemplo,las siguientesconsultas sonequivalentes:

mysql> SELECT VERSIÜNO ,CURRENT_DATE();mysql> SELect version() ,current_Date();mysql> select version() ,current_date();

Es posible escribir más de una consulta por línea, siempre y cuando estén sepa-

radas por punto y coma:mysql> select userOzselect nowO;+ -------------- --+

I user() I+ -------------- --+

I rootmocalhost I+ -------------- --+

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 110/324

Capítulo 3. Diseño físico relacional

+------------------- --+

I now() I

+ --+

I 2009-10-20 09:53:29 I

+ ------------------- --+

No es necesario escribir un comando en una sola línea, así que los comandos que

requieran de varias líneas no son un problema. MySQL determinará donde naliza

la sentencia cuando encuentre el punto y coma, no cuando encuentre el n de línea:

mysq1> select user() ,

-> current_date();+ -------------- --+ -------------- --+

I user() I current_date() I

+ --+ -------------- --+

I root©1oca1host I 2009-10-20 I

+ -------------- --+ -------------- --+

Si no se deseaterminar 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 dándole información sobre qué ocurre, por

ejemplo:

-> Espera la siguiente línea 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 ejecución mediante el comando source, que recibe como parámetro un

 chero de comandos y ejecuta uno por uno todos los comandos que tenga el chero:

átejecución del script de creación crear_bbdd_startrek.sq1mysq1> source /home/ivan/crear_bbdd_startrek .sql

Por último, también 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, además de otras tareas de maxitenimiento del servidor a través de un

shell script:

101

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 111/324

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: Descargade lapágina Webde l\IySQLla última versión disponi-ble para Windows. A continuación. instala el software. Asegúrate de recordar la claveque eliges para el usuario root. Ejecuta la interfaz de comandos de mysql. Podrás ha-cerlo desde un terminal de MS-DOS (símbolo del sistema) o desde el menú de inicio.Ejecuta una consulta para ver el usuario con el que te has conectado, la versión debase de datos y la hora actual. Realiza las mismas consultas en la máquina virtualLinux disponible en el blog del libro (http:\\bbdd-garceta.b1ogspot .com)

3.3.3. SQL*Plus: El intérprete de comandos de Oracle

El intérprete de comando de Oracle es el programa sqlplus. Se puede invocardesde el sistema operativo con la siguiente sintaxis:

sqlplus [{usuario[/password>] [©<identificador_conexión>] | /| /no1og }][AS {SYSDBA I SYSOPERH

En Oracle, cada instancia está referenciada por uno o más identicadores de

conexión. ÍdGTZÉÍCGdOTLCOTLCIÍÓTZes el nombre de esta referencia.#conexión a la instancia jardineria con el usuario paco

sqlplus paco/password_paco©jardineria

La opción /nolog arranca sqlplus sin conectarse ala base de datos.

#arrancar sqlplus sin conexión

sqlplus /nolog

La opción /  conecta a la instancia sin usuario. Sueleusarse paratareas adminis-trativas:

#conexión a la instancia SÜRACLE_SID como SYSDBAsqlplus  /  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 cuandono está abierta, pudiendo de este modo. realizar tareas de administración y mante-nimiento.

102

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 112/324

Capítulo 3. Diseño sico relacional

3.3.4. Ejecución 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 procedea escribir las consultas terminadas

en punto y coma, con las siguientes consideraciones:

ISQL*PLUS no es sensible a mayúsculas y minúsculas ni en las palabras reser-

Vadas, ni en los nombres de los objetos.

ISe puede escribir una consulta en múltiples líneas:

SQL> select *

2 from

3 nbajugadores; "comentario de línea

- Los comentarios de línea se realizan precediendo una línea de dos caracteres -

IExisten los comentarios de bloque. es decir, que afectan a más de una línea.

Comienzan con los caracteres /* y terminan 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 expresión:

SQL> select sysdate, user from dual;

SYSDATE USER

27/06/10 SYS

SQL> select 5+4 from dual;

5+4

¿Sabías que . . . 7Existe un intérpretede comandosgráco en Oracle lla-mado iSQL*Plus. con interfaz web. Se instala aparte del software de Oracle,

descargando de la página Web de Oracle (wvv\v.oracle.com) el paquete isql-

plus.zip.

<> Actividad 3.5: Arrancala máquinaxirtual Ubuntuyabre un terminal.Conécta-te con el usuario oracle mediante el comando:

103

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 113/324

Bases de Datos

suoracle

Contraseña: oracle

Acontinuación, arrancasqlplus con elusuario nbay la passwordnba:

sqlplus nba/nba

Después, ejecuta las siguientesconsultas:

SQL> select tab1e_name from user_tab1es;

SQL> select tab1e_name from dba_tables;

Lee lasección 3.8.5 ycomenta brevementequé hacenlas sentenciasanterioresy en

qué sediferencian.

3.4. Ellenguaje de denición de datos

Elsublenguaje de SQL que permite ladenición de datos es el DDL (Data

Denition Language).Lasfunciones de estesublenguaje son:

- Crear tablas,índices yotros objetosde la basede datos(como vistas,sinóni-

mos, etc.)

n Denir lasestructurasfísicas donde sealmacenaránlos objetosde lasbasesde

datos(espacios de tablas(tablespaces), cherosde datos (datales), etc.)

Porejemplo, para crearel esquemade lapráctica resuelta 2.1se puede escribir

el siguiente código:

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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 114/324

Capítulo 3. Diseño sico relaciona]

En el código anterior, las palabras reservadas del lenguaje se han escrito en

mayúsculas (CREATE. DATE, VARCHAR). ylos nombres de objetos (Actores,Grado, Nombre) se han escrito en minúsculas para que el lector pueda identicar

fácilmente qué parte de la sintaxis se debe respetar ycuál se puede variar.

DDL tiene 3 instrucciones básicas:

CREATE tipo_objeto Nombre Denición. Crea un objeto de un determinado

tipo (DATABASE, TABLE, INDEX, etc.) con un nombre (por ejemplo Actores

o Personajes)y una denición (CodigoPersonaje, Nombre, etc.).

DROP tipo_objeto Nombre. Elimina un tipo de objeto especicado mediante

un nombre. Por ejemplo, la sentencia DROP TABLE Actores, borraría de la

base de datos la tabla Actores junto con todos sus datos.

ALTER tipo_objeto Nombre Modicación. Modica la denición de un obje-

to. Por ejemplo, la sentencia ALTER TABLE Actores DROP COLUMN Fecha,

eliminaría la columna Fecha de la tabla Actores.

3.5. Creación de bases de datos

3.5.1. Creación 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[especificación_create [, especificación_create] ...]

especificación_create:

[DEFAULT]CHARACTER SET juego_caracteresI [DEFAULT] CDLLATE nombre_co1ación

Por ejemplo, para crear la base de datos Startrek, en MySQL, habrá que teclear,

en la consola de comandos, la instrucciónl:

CREATE DATABASE Startrek CHARACTER SET Latinl CDLLATE 1atin1_spanish_ci;

Nótese que el término a elegir puede ser o DATABASE o SCHEMA, en cualquier

caso, el efecto es el mismo; MySQL usa algunos sinónimos para hacer más compa-

tible su sistema de gestión con otros SGBD. Por otro lado, el parámetro opcional

lTodas las sentencias mysqldeben terminar en un carácter puntoycoma (2)

105

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 115/324

Bases de Datos

(especicación_create) permite elegir el juego de caracteres que va a usar la base de

datos (utf8, latinl, latin2, etc.), y la colación, que especica cómo tratar el alfabeto

del juego de caracteres, es decir, cómo se ordena (por ejemplo, la ñ después de la m

y n y no conforme ala tablade códigosascii), ycómo secomparan loscaracteres(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 continuación 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 cuántas 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 ejecución de este comando se puede ver que, además de NBA y Star-

trek, hay otras dos que están siempre presentes, "information_schemay mysqlque

almacenan metadatos (datos sobre los datos) e información de usuarios y permisos.

<> Actividad 3.6: Ejecuta los siguientescomandos enla máquinavirtual Ubuntupara crear una base de datos y una tabla:

mysq1> CREATE DATABASE Veterinario;

mysq1> USE Veterinario;

mysq1> CREATE TABLE Mascotas (

Nombre VARCHAR(10),

106

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 116/324

Capítulo 3. Diseño físico relacional

FechaNacim DATE,

Amo VARCHAR(40) );

A continuación, prueba a crear una tabla llamada Vacunas, con una fecha y una

ilüfa para cada mascota. Si es necesario, lee la Sección 3.8

3.5.2. Creación de bases de datos en Oracle

El proceso de creación de una base de datos en Oracle es bastante más 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 deprocesos de Oracle que están en ejecución en el sistema operativo y cuya misiónes controlar todo lo referente a la gestión de la base de datos. Para crear una base

de datos,primero hay que crear una instancia para procedera invocar el comando«reate databasepertinente. Oracle dispone de la utilidad gráca dbca (database con- guration assistant  )que facilita este proceso. No obstante, a continuación se detallael procedimiento para crear una base de datos Oracle en un sistema operativo Unixde forma manual:

#desde el sistema operativosu oracle #conecta con el usuario oracle

cp SORACLE_HOME/dbs/init.ora SÜRACLE_HDME/dbs/initjardineria.oraexport 0RACLE_SID=jardineria #se conectará a la instancia jardineria#editar los parámetros del fichero init que contiene los parámetros de#inicio de la base de datos.

#Debe llamarse con el nombre initNombreInstancia.ora

gedit SORACLE_HUME/dbs/initjardineria.ora#cambiar los siguientes parámetros

db_name= jardin

memory_target=100M

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

audit_trail=db

db_b1ock_size=8192

db_domain= 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 117/324

Bases de Datos

--dentro de SQL PLUS, conectarse sin montar la base de datos

SQL> Startup nomountORACLE instance started.

Total System Global Area 104611840 bytesFixed Size 1334828 bytesVariable Size 83886548 bytes

Database Buffers 16777216 bytesRedo Buffers 2613248 bytes

--a continuación, se invoca el comando CREATE DATABASE

SQL> CREATEDATABASEjardinMAXINSTANCES 1

MAXLÜGFILES 16

MAXLÜGMEMBERS3

MAXDATAFILES 100

CHARACTER SET WE8ISO8859P15

DATAFILE /var/oracle/datos/jardineria/system01.dbfSIZE 300M EXTENT MANAGEMENT LOCAL

UNDO TABLESPACE UNDOTBSI DATAFILE

 /var/oracle/datos/jardineria/undotbsol.dbfSIZE 550M SYSAUX DATAFILE

 /var/oracle/datos/jardineria/sysauxol.dbf SIZE 300MDEFAULT TEMPORARY TABLESPACE TEMP

TEMPFILE /var/oracle/datos/jardineria/tempO1.dbf SIZE 100MLDGFILE 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.sq1SQL> G/rdbms/admin/ut1rp.sq1

Las opcionesdeCREATE DATABASE para Oracle sonlas siguientes

I MAXINSTAN CES indica el número máximo de instanciasque puedenestarusandoa la vez la basede datos objeto de la creación.Un valor distinto de1 implicaría que la.basede datos puedeser usadaen RAC, Real ApplicationCluster, lo cual signica que la basede datos puedeestar montada, abierta yen uso desde más de un servidor.

- MAXLOGFILES esel númeromáximode gruposdecheros delogquepuedencrearse.Un chero logregistratodaslasoperacionesquerealizan losusuarios.

I INIAXDATAFILES indica el númeromáximo de cheros de datos que puedenusarse.

- DATAFILE esel chero para el tablespaceSYSTEM.

108

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 118/324

Capítulo 3. Diseño físico relacional

MAXLOGMEMBERS es el número máximo 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 transacción quesuponga una modicación sobre aquéllos.

SYSAUX TABLESPACE es un nuevo tablespace aparecido en la versión 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-lizarán los usuarios que no tengan explícitamente asignado otro tablespace

temporal.

LOGFILE GROUP es la denición 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 presentesen 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-

ción de base de datos de Oracle (dbca, database conguration assistant). Este asis-

tente conduce al administrador automáticamente por el proceso de creación de una

instancia con su base de datos. Además, congura automáticamente 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 máquinavirtual Ubuntu y con un terminal,haz logincon el usuario oracle (su oracle).Acontinuación, ejecuta el comando dbcay siguelos pasos para Crear una nueva instancia y su base de datos asociada.

109

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 119/324

Bases de Datos

---&#39;.&#39;...L.:u.a\v- dagu" 2&#39;  LIaLgJL"¿ÏJJUJLI3""1&#39;J"

Seleccionelaoperaciónquedesearealizar

i crearBasedeDatos

l  ::n:&#39;:::>_-z tul&#39;

I&#39;m-n":1 ;;=&#39;»

r GestionarPlantillas

Í LasoperacionesdeconguracióndeASMsepuedenrealizarmedianteelAsistente.&#39;deConguracióndeGestióndeNmacenamientoAutomático(ASMCA)desdeel

directorioraízde9nddeOracle.

Cancelar 44 AWÜG

Figura 3.6: DatabaseConguration Assistant.

3.6. Modicación de una base de datos

El comandoALTER DATABASE permite cambiar las característicasde funcio-

namientode una basede datos.Por ejemplo,en MySQL. tan solosepuedecambiarel juego de caracteresy sucolación:

#cambia la colación de una base de datos

ALTER DATABASEStartrek COLLATE latin1_spanish_ci;

En Oracle, se puede cambiar cualquierade susmúltiples parámetros, aquí semuestranalgunosejemplos:

--Cambia el tamaño del fichero de datos del sistemaSQL> 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 opción de recuperación rápidaALTER DATABASE flashback off;

110

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 120/324

Capítulo 3. Diseño sico relacional

3.7. Borrado de bases de datos

El comando DROP DATABASE es el utilizado para eliminar bases de datos. EnINIySQL, el comando se acompaña del nombre de la base de datos a eliminar:

>mysq1 -u root -pdrop database Proveedores;

En Oracle, no hay que especicarlo, tan solo es necesarioconectarse a la instanciay escribir:

>sq1p1us  /  as sysdbashutdown abort; --parada de la instanciaStartup mount exclusive restrict; --reinicio en modo exclusivo

drop database; --borradoexit; --salir

Otra forma menos elegante de borrar una base de datos consiste en borrar físi-camente todos los cheros binarios de la base de datos.

3.8. Creación de tablas

Para crear tablas se usa el comando CREATE TABLE:

CREATE [TEMPDRARY]TABLE [esquema.]nombre_tab1a[(definición_create, . ..)]

[opciones_tab1a]

def inición_create :

definición_columna

I [CÜNSTRAINT [símbolo]] PRIMARY KEY (nombre_co1umna,...)I [CÜNSTRAINT [símbo1o]] FDREIGN KEY (nombre_co1umna,...)

[def inición_referencia]

definición_co1umna:

nombre_columnatipo_datos [NOTNULL lNULL] [DEFAULTvalor][UNIQUE [KEY] Í [PRIMARY] KEY][def inición_referencia]

definición_referencia:

REFERENCESnombre_tab1a [(nombre_columna,...)][ON DELETE {CASCADE I SET NULL I NO ACTION} ][ON UPDATE {CASCADE | SET NULL I ND ACTION} ]

111

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 121/324

Bases de Datos

El formato que aquí se presentaes un formato reducido, compatible con la mayoríade los gestores de bases dedatos, para más información sobre un comando CREATETABLE para un gestor en particular, se debe recurrir al manual de referencia del

gestor.

La porción de sentencia(denicióïncreate, .. .) especicará. ladenición de los cam-pos que va a contener la tabla y sus restricciones. Los puntos suspensivos sugierenque denicióïucreate se puede repetir tantas veces como sea necesario, por ejemplosi hay una tabla con 5columnas, habrá que especicar 5 veces denición_create.

El token opcional TEMPORARY se utiliza para crear tablas temporales (estoes, una tabla invisible al resto de usuarios y que se borrará en el momento de ladesconexión del usuario que la creó). La primera cláusula que lleva la denición esdenicióïncolumna, donde se especicará la denición de un campo o columna de latabla:

definición_co1umna:

nombre_columnatipo_datos [NOTNULL INULL] [DEFAULTvalor][UNIQUE [KEY] I [PRIMARY] KEY]

[definicióngreferencia]

Se indica el nombre de columna yel tipo de datos, por ejemplo, el Codigo Postalpodría ser un tipo NUMERIC(5,0) de MySQL, puesto que los códigos postales

tienen 5 dígitos 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 deforma explícita. Por ejemplo, si se declara la. siguiente columna:

CodigoPostal Numeric(5,0) NÜT NULL DEFAULT 28941

Se indica que el campo Código Postal es un número de 5 dígitos enteros, que noadmite valores nulos, y que en caso deno especificarlo, por ejemplo, en una inserción,el valor que tomará es 28941.

UNIQUE KEY especica la creación de un índice, esto es, una estructura de datosque permite un acceso rápido a la información de una tabla y además, controla queno haya ningún valor repetido en el campo. Se producirá un error si se intentainsertar un elemento que ya coincida con un valor anterior. A efectos prácticos, ladiferencia con una clave primaria es básicamente que un campo UNIQUE puedeadmitir valores NULL, mientras que un campo que se dene como clave primaria

no puede admitir nulos (debe ser NOT NULL).

112

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 122/324

Capítulo 3. Diseño 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. Implementación de restricciones

En la sintaxis de CREATE TABLE, deniciónJeferencia sirve para crear una

clave foránea. 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 dueño 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 deque las las de la tabla padre (es decir, la tabla referenciada)seborren o se actualicen. Los comportamientos pueden ser CASCADE, SET NULL y

NO ACTION.

ISi se usa NO ACTION y se intenta un borrado o actualización sobre la tabla

padre, la operación se impide, rechazando el borrado o la actualización.

ISi se especica CASCADE, la operación 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 estén referenciando al registro borrado.

113

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 123/324

Bases de Datos 

ISi se indica SET NULL, se establece a NULL la clave foránea afectada por unborrado o modicación 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 actúa como NO

ACTION.

Oracleno implementala opciónON UPDATEpor loque hayque recurrira otrosmétodos para realizar las acciones de actualización, como por ejemplo, medianteTRIGGERS (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 foráneascompuestas, etc.

[CÜNSTRAINT [símbo1o]] PRIMARY KEY (nombre_co1umna,. ..)I [CONSTRAINT [simbo1o]] FOREIGN KEY (nombre_co1umna, . ..)

[definiciómreferencia]

En SQL, todas las restricciones pueden tener un nombre para facilitar su poste-rior referencia, por tanto cuando aparezcael opcional CONSTRAINT [símbolo] seindica que la denición de una restricción tiene un nombre.

PRIMARY KEY sirve para especicar la creación de una clave primaria a nivel detabla. Existe la opción de crearla a nivel de columna, mediante denicióïncolumnao 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)

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 124/324

Capítulo 3. Diseño sico relacional

#segunda forma - nivel de tabla

create table vehicu1o(

matricula varchar(7),marca varchar(20),

modelo varchar(20),

precionumeric(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 análoga, también se puede crear claves foráneas a. nivel de tabla, ha-ciendo uso de:

[CONSTRAINT [symbo1]] FÜREIGN 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: Conéctate a MySQLy pruebaa ejecutarlos comandosCREA-TE TABLE anteriores. Posteriormente, Conéctate a. Oracle mediante SQL*Plus y

ejecútalos de nuevo. ¿Son compatibles?

115

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 125/324

Bases de Datos

Para terminar, cada gestor de base de datos efectúa sus propias modicaciones

al formato de la sintaxis create table. La cláusula opcionesiabla permite especicar

las peculiaridades de cada gestor con respecto al almacenamiento en soporte físico

de sus tablas. Además, cada gestor incorpora diversas características, 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 denición de una. columna son los siguientes:

MySQLXTINYINT [UNSIGNED] Entero

SMALLINT [UNSIGNED] Entero

MEDIUMIN T [UNSIGNED] EnteroINT [UNSIGNED] EnteroBIGINT [UNSIGNED] EnteroINTEGER [UNSIGNED] EnteroDOUBLE [UNSIGNED] Real Aproximado 8 bytesFLOAT [UNSIGNED] 4 bytesDECIMAL(longituddecimales) Real Exacto VariableNUMERIC(longitud,decimales) Real Exacto VariableNUMBER(longitudLdecimales]) Real Exacto VariableDATE 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 VariableVARCHAR2(longitud) caracteres Longitud VariableBLOB Objetos binarios Longitud Variable

TEXT Campos Memo Longitud Variable

CLOB Campos Memo Longitud Variable

EN UM(valor1,valor2,valor3...) Enumeraciones Lista de valoresSET(valor1, valor2, valor3. . . )Conjuntos Conjuntos de valores

Cuadro 3.1: Tipos de datos en MySQL y Oracle/DBZ

üPuede verse que no todos los tipos de datos están 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, esdecir, campos que admiten solo valores fijos,

por ejemplo Color EN UM ( rojo , hmaïvillo , verde ). En Oracle, en su lugar, se puede

implementar utilizando la directiva CHECK.

116

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 126/324

Capítulo 3. Diseño fisico relacional

3.8.3. Características de la creación de tablas para MySQL

Las opciones de tabla para l\vIySQL son las siguientes:

opciones_tab1a: opción_tab1a [opción_tab1a]

opción_tab1a:

ENGINE=nombre_motorl AUTÜ_INCREMENT = valor

I [DEFAULT] CHARACTER SET juego_caracteres [COLLATE colación]I CHECKSUM = {o I 1}

| COMMENT= stringl 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 opción 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 clavesforáneas, mylsam por defecto usado por MySQL y que genera tablas operadas agran velocidad, pero sin control de integridad referencial y Memory, que generatablas que están almacenadas en memoria en lugar de un archivo físico.

La opción AUTOJNCREMENT permite indicar el valor inicial para campos detipo AUTOJNCREMENT. AUTOJNCREMENT indica que ese campo es auto-incrementado después de cada. inserción. Un campo denido como autojncrementdebe ser numérico; de esta manera, cuando en ese campo se indica el valor NULL enuna inserción, el campo toma automáticamente el último valor incrementado en unaunidad. Este campo es muy útil para los campos código donde se especican valoresclave autogenerados. En MySQL para denir un campo AUTOJNCREMENT seespecica la palabra clave justo a continuación del tipo de datos. Para simular este

comportamiento enOracle, seutiliza una secuencia (SEQUENCE).

ÏDEFAULT] CHARACTER SETEspecica el conjunto de caracterespara la ta-bla y COLLATE dene la colación por defecto de la tabla. Si se especica CHECK-SUM, MySQL mantiene una suma de vericación para todos los registros. El co-mando CHECKSUM TABLE muestra esa sumade vericación (solo para motoresde almacenamiento 1\ilyISAl\l).

COMMENT es un comentario para la tabla, hasta 60 caracteres. También es posi-

ble crear comentarios para cada una de las columnas. Mediante el token COMMENT

117

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 127/324

Bases de Datos

se puede documentar el diccionario de datos. MySQL dispone de este token para

comentar no solo tablas, sino también columnas.

MAX_ROWS es el máximo número de registros que se quiere almacenar en la

tabla. No es un límite absoluto, sino un indicador que la tabla debe ser capaz de

almacenar al menos estos registros. MIN_ROWS es el mínimo número de registrosque se planea almacenar en la tabla.

Por último, al igual que en la creación de base de datos, MySQL dispone de la

cláusula IF NOT EXISTS,para que solamente se cree la tabla si no está creada

previamente.

#Ejemp1o de creación 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. Características de la creación de tablas para Oracle

En Oracle, la mayoría de las opciones tienen que ver con su almacenamiento

físico. Por ejemplo, las tablas deben ser almacenadas en un contenedor llamado

tablespace (Espaciode tablas). Por defecto, si no se indican opciones dealmacena-miento, la tabla se ubica en el tablespace del usuario, pero si se quiere ubicar en otro

tablespace, se puede incluir la opción tablespace nombre para designar otro tables-

pace. Además, se puede denir cómo se reserva.el espacio en disco para controlar

el crecimiento desmedido del tamaño de una tabla mediante la cláusula storage.

Estas y muchas otras opciones. son propias de Oracle. Por último, cabe destacar la

capacidad de Oracle de permitir la creación de restricciones de tipo CHECK, que

permite validar el valor de un campo mediante una expresión.

--Ejemplo de creación de tablas con opciones propias de Oracle

create table Pedido(

codigo integer primary key,

fecha date,

estado varchar(10).

118

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 128/324

Capítulo 3. Diseñofísicorelaciona]

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 tablasdisponiblesde una basede datosen MySQL, seutiliza

el comando SHOWTABLES

mysq1> show tables;+ -------------------- --+

I Tab1es_in_jardineriaI+ -------------------- --+

| Clientes

I Deta11ePedidos

I

I Productos

+ -------------------- --+

En Oracle, sepuedenconsultarlasvistasuser_tables,dbajcablesy alLtables.En

Oracle,lasvistasquecomienzanpor usen, aportan informaciónsobrelosobjetosque

poseeel usuarioconectado.Las vistasque comienzanpor dba- sonsoloaccesiblespor losadministradoresde basesde datosy muestraninformaciónsobretodos los

objetos.Finalmente, lasvistasquecomienzanpor all- muestranla informaciónsobre

losobjetosa losqueel usuariotiene acceso,seansuyoso no.

SQL> select table_name from user_tables;

TABLE_NAME

PARTIDOS

ESTADISTICAS JUGADORESEQUIPOS

3.8.6. Consulta de la estructura de una tabla

Para conocerla estructurade una tabla ya creadaesposibleutilizar el comando

119

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 129/324

Bases de Datos

DESCRIBE [esquema.] nombre_tab1a

Este comando muestra un listado con las Columnas de la tabla. aportando informa-ción 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. Modicación de tablas

El comando para modicar una tabla es ALTER TABLE y su sintaxis tambiénes bastante compleja:

ALTER TABLE nombre_tab1a

especificación_a1ter [, especificación_a1ter]

especificación_a1ter:ADDdefinición_co1umna [FIRSTI AFTERnombre_co1umna ]

I ADD (definición_columna,...)I ADD [CÜNSTRAINT [símboloïl]

PRIMARY KEY (nombre_co1umna,...)I ADD [CONSTRAINT [símbo1o]]

UNIQUE (nombre_co1umna,...)IADD [CONSTRAINT [simbo1o]]

FOREIGN KEY(nombre_co1umna,...)

[definición_referencia]I CHANGE [COLUMN] anterior_nombre_co1umna definición_co1umna

[FIRSTIAFTER nombre_columna]RENAME COLUMN anterior_nombre_co1umna TD nuevo_nombre_co1umna

MDDIFY definición_columna [FIRST I AFTER nombre_columna]DRÜP COLUMN nombre_co1umna

DROP PRIMARY KEY

DROP FOREIGN KEY fk_símbo1o

opciones_tabla

120

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 130/324

Capítulo 3. Diseño físico relacional

Al ver esta sintaxis se puede caer en la tentación de pensar que es mejor borraruna tabla y volver a crearla haciendo las modicaciones oportunas. Esto es posiblesi la tabla no tiene datos, pero. .. ¿qué ocurre si hay un centenar o un millar deregistros? No queda otra opción que ejecutar una sentencia ALTER TABLE paraevitar la pérdida de datos.

ILa opción ADD permite añadir una columna, se puede especicar el lugardonde se va a insertar mediante las cláusulas AFTER (después de una colum-na) y FIRST (la primera columna). Oracle no admite las cláusulas AFTER yFIRST.

ICon la opción MODIFY se cambia el tipo de datos de una columna y se añadenrestricciones.

ICon la opción DROP se pueden eliminar las restricciones de claves foráneas yprimarias, dejando el tipo de dato y su contenido intacto.

- Las opciones de tabla, al igual que en CREATE TABLE varían con cadaSGBD, y sirven principalmente para modicar las características del almace-namiento físico.

- Para cambiar el nombre de una columna, Oracle usa la cláusula RENAME yMySQL la cláusula CHANGE.

Por ejemplo, en MySQL, para añadir a la tabla mascotas el campo especie des-pués del campo Raza, habría que ejecutar la siguiente instrucción:

ALTER TABLE Mascotas ADD Especie VARCHAR(10) AFTER Raza;

Para eliminar la columna con clave primaria CodigoCliente de la tabla Clientesen Oracle y establecer como clave primaria. el campo NIF , hay que ejecutar lassiguientes sentencias:

ALTER TABLE Clientes DRDP PRIMARY KEY;

ALTER TABLE Clientes DROPCodigoC1iente;ALTER TABLE Clientes ADD CÜLUMN Nif VARCHAR(10) PRIMARY KEY FIRST ;

121

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 131/324

Bases de Datos

3.10. Borrado de tablas

El formato de instrucción 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 CÜNSTRAINT]

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 foráneas de lastablas relacionadas (en cascada).

--Elimina la tabla Partidos

DRDP TABLE Partidos;

--Elimina la tabla Jugadores y--borra las claves foráneas 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 132/324

Capítulo 3. Diseño sico relacional

3.12. Prácticas Resueltas

Práctica 3.1: Modelo físico para stratrekfanscom v.1.0

En un chero de texto con nombre startreklsql, escribe las sentencias SQL para

crear el modelo físico de la práctica 2.1. Después, crea una base de datos llamadastartrek en un servidor MySQL yejecuta las sentencias con comando source. A

continuación, Conéctatea 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, Conéctate 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 TABLEPersonajes(

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 TABLECapitulos(

¡Temporada integer,N Orden integer,

Titulo varchar(50) NOT NULL,

123

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 133/324

Bases de Datos

Fecha date NOTNULL,

PRIMARYKEY (Temporada, Orden)

);

CREATE TABLE Pe1iculas(

Codigo integer PRIMARY KEY,

Titulo varchar(50) NOT NULL,

Director varchar(30) NOTNULL,

Anyo DateNULL

);

CREATETABLEPersonajesCapitu1os(

CodigoPersonaje integer PRIMARY KEY,

Temporada integer NOTNULL,

Orden integer NOTNULL,

FOREIGNKEY (Temporada,Orden)REFERENCES Capitulos(Temporada,Orden)

);

CREATE TABLEPersonajesPe1icu1as(

CodigoPersonaje integerREFERENCES Personajes(Codigo),

CodigoPelicu1a integerREFERENCES Pe1icu1as(Codigo));

CREATE TABLE Naves(

Codigo integer PRIMARY KEY,

NTripu1antes integerNULL,

Nombre varchar(50) NOTNULL

);

CREATE TABLE Visitas(

CodigoNave integerREFERENCES Naves(Codigo),

CodigoP1aneta integerREFERENCES P1anetas(Codigo),

Temporada integer NOTNULL,

Orden integer NOTNULL,

FOREIGNKEY (Temporada,Orden)REFERENCES Capitulos(Temporada,Orden)

Con el chero anterior llamado startreILsqI, en mysql:

mysql>CREATE DATABASE Startrek; USE Stratrek;

mysql>source stratrelczsqlEn Oracle: sqlplus / as sysdba

SQL>CREA TE USER startrek IDENTIFIED BY startrekpwd;

SQL> GRANTCREATE SESSIOMCREATETABLE TO startrek; SQL>ezit

sqlplus  startrek/startrekpwd

SQL> @startrek.sql

124

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 134/324

Capítulo 3. Diseño físico relacional

Práctica 3.2: Restricciones parastartrekfanscom v.1.0Se deseaimponer las siguientes características al modelo físico, 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 lasclaves foráneas no sean ignoradas.

-Que las claves primarias numéricas sean de tipo autojncrement.

n Que el campo Galaxia de la tabla Planetas sea una enumeración de los valores

(Via LácteaÚAndrómedafsombrero).

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 entre1 y 500.

IQue el campo Galaxia de la tabla Planetas solo pueda tener los valores (Via

Láctea,Andrómeda,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 están vacías se puede hacer:DRÜP 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 enumeración:ALTER TABLE Planetas MODIFY

Galaxia ENUM (Via Láctea,Andrómeda,Sombrero);

Las sentencias SQL para efectuar los cambios en Oracle son:

125

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 135/324

Bases de Datos

Cambios en Oracle

--  Asignar el tablespaceSTARTREK a las tablas, solo se puede

--hacer si están vacías,y recrearlasz

drop table actores cascade constraints;

CREATE TABLE Actores(

Codigo integerPRIMARY KEY,Nombre varchar(50) NOT NULL,

Fecha DATE NOT NULL,

Nacionalidad varchar(20)DEFAULT EEUU

) TABLESPACE STARTREK;

--  Para cambiar el campo NTripu1antes:

ALTER TABLE NavesMDDIFY NTripu1antes integer

check (NTripu1antes>=1 and NTripu1antes<=500);-- Para añadir la restricción a galaxia:

ALTER TABLE PlanetasMDDIFY Galaxia varchar(10)

CHECK (Galaxia IN (Via Láctea,Andrómeda,Sombrero));

Práctica 3.3: Modelofísicoparastratrekfanscomv.2.0 Enun

 chero de texto connombrestartreklsql, escribelassentenciasSQL para modicar

elmodelofísicode la práctica 2.2. Después,creaunabasededatosllamada startrek

en un servidorMySQL. Ejecuta lassentenciasdel chero enun servidordeMySQL

conel comandosource.A continuación,Conéctatea Oracle conel usuariostartrek

y ejecutael chero que hascreado.

startrek2.sq1

ALTER TABLEPersonajes ADDCiudad varchar(50);

ALTER TABLE Personajes ADD FNacim date;

ALTER TABLEPersonajes ADDPlaneta integerREFERENCES P1anetas(Codigo);

ALTER TABLEPersonajes ADDFU1tCombate date;

ALTER TABLEPersonajes ADDMentor varchar(50);

ALTER TABLE Personajes ADD FechaGrado date;

Can el chero anterior llamado startrek2.sql, en mysql:

mysql> USE Stratrek;

mysql>source stratrekísqlEn Oracle: sqlplus startrek/startrekpwd

S QL> @startrek2.sql

126

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 136/324

Capítulo 3. Diseño físico relacional

Práctica 3.4: Modelo físico para stratrekfanscom v.3.0 Enun

 chero de texto con nombre startrek3.sql, escribe las sentencias SQL para modicar

el modelo físico de la práctica 2.2. Después, crea una base de datos llamada startreken un servidor MySQL. Ejecuta las sentencias del chero en un servidor de MySQL

con el comando source. A continuación, Conéctate 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 startrekísql, en mysql:

mysql) USE Stratrek;

mysql>source stratrekzsqlEn Oracle: sqlplus startrek/starirekpwd

SQL> @startrek2. sql

127

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 137/324

Bases de Datos

3.13. Prácticas Propuestas

Práctica 3.5: Modelo físicopara jerarquíasDado el diagrama E / R de la gura siguiente, genera el modelo físico, codicando en

SQL todas las sentencias para crear las tablas de dos maneras posibles, generando

una tabla para cada especialización. y generando una sola tabla para los empleados.

Ejecuta los dos modelos tanto en Oracle como en l\IySQL.

Práctica 3.6: Más modelos físicoPara los modelos lógicos creados en las prácticas 2.4. 2.5. 2.6 y2.7, crea el modelo

físico asociado mediante varios cheros con extensión sql. En l\&#39;IySQLcrea 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 delas diferentes prácticas. <>

128

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 138/324

Capítulo 3. Diseño sico relacional

Práctica 3.7: Parque Ecológico

Un parque ecológico quiere informatizar la gestión de su sistema de información

para poder obtener datos más concluyentes sobre las especies migratorias que se

establecen en su territorio. El parque desea clasicar todas las especies animalesy contabilizar el número de individuos de cada especie que se establecen en el te-

rritorio en cada época del año. Se desea que la base de datos almacene datos de

nuevas especiesy nuevos individuos de cada especie animal. Para cada especie, se

requiere el nombre de la especie, características generales de un individuo tipo y sus

periodos migratorios. Para cada individuo se tendrá en cuenta el peso, dimensiones,

y un código que identique de forma única cada individuo dentro de su especie.

Esta forma de identicación, irá almacenada en un pequeño dispositivo con una

batería autónoma 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 perímetro del parque. Estas torretas informan vía inalámbrica al sistema delas 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

información sobre migraciones de individuos de determinadas especies será enviada

cada tres meses aun grupo de expertos biólogos, encargados de hacer una valoración

sobre futuros periodos migratorios y posibles alteraciones del comportamiento de las

especies. Delos biólogos, se quiere almacenar, el nombre, la dirección, provincia y su

fecha de titulación. En principio, no se conoce todavía si se implementará en Oracle

o MySQL por lo que el diseño debe ser compatible para ambos gestores de bases dedatos. <>

Práctica 3.8: BuscoPareja.net

Se va a crear una página 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, dirección, ciudad, país, su sexo y orientación sexual, su

foto y una password que utilizará junto con su email para acceder al sistema. El

usuario a continuación rellena una lista de preferencias o gustos. De cada gusto o

preferencia se almacenará el tipo (Deporte, Música, Evento Social), la fecha de la

última. vez que hizo una actividad de ese estilo y si le gustaría o no que su pareja

tuviera la misma preferencia. A partir de esta información se organizan citas entre

los contactos en distintas ubicaciones. Se desea registrar las citas entre los contactos

almacenando quién se cita con quién. en qué lugar y a qué hora, y si la cita fracasó.

Se desearealizar el diseño conceptual. lógico y físico de la base de datos, creando el

modelo físico para Oracle y para MySQL. <>

129

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 139/324

Bases de Datos

3.14.

130

Resumen

Los conceptos clave de este capítulo son los siguientes:

Las herramientas grácas ayudan al informático a gestionar los componen-

tes de una base de datos, pero además, un buen administrador debe conocer

los comandos necesarios para hacer las tareas administrativas. Entre las he-

rramientas grácas que dispone el mercado, se encuentran PhpMyAdmin, de

MySQL, Enterprise Manager y Grid Control, de Oracle y Data Studio de DB2.

Un intérprete de comandos envía comandos en modo texto al SGDB y muestra

los resultados en una consola. Estos intérpretes de comandos suelen permitir

la ejecución remota de comandos a través de protocolos TCP-IP. Entre otros

están, mysqly 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 unaBBDD.

El comando CREATE DATABASE permite crear bases dedatos en los SGBD.

Algunos SGBD permiten manipular varias BBDD mediante una sola instan-

cia, otros, como Oracle, permiten solo manipular una BBDD por instancia.

Además, existen asistentes grácos (como dbca de Oracle), que permiten deforma sencilla crear bases de datos.

El comando ALTER DATABASE permite modicar ciertos parámetros de

funcionamiento de la BBDD. Estos parámetros dependen del funcionamientoy de la arquitectura del SGBD, por tanto, no son estándar.

El comando DROP DATABASE borra una base de datos de un servidor.

Los comandos CREATE TABLE, ALTER TABLE y DROP TABLE están

denidos en el estándar SQL para poder crear, modicar y borrar tablas, y,

salvo pequeñasdiferencias, se pueden escribir estos comandoscompatibles para

la mayoría de los SGBD.

Para implementar restricciones se usan las cláusulas PRIMARY KEY (cla-

ves primarias) y REFERENCES (para claves Foráneas). 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 también, 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.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 140/324

3.15. Test de repaso

1. ¿Qué función no permite realizar

phpMyAdmin?

a) Ejecución remota de comandosb ) Copias de seguridad

c) Creación y borrado de tablas

)d Parar y arrancar el servidor

2. Oracle Grid Control no permite

a Controlar el estado de múltiples BBDD

Creación y borrado de tablas

)

b) Controlar múltiples 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

d) Permite especicar el juego de caracteres

4. Una clave foránea

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 pordefecto

b) Hay que arrancarlo con el comando ernctlstart dbconsole

c) Hay que arrancarlo con el comando emctlstop dbconsole

d) Es un entorno gráco basado en ventanas

Capítulo 3. Diseño sico relacional

6. La opción ON DELETE CASCADE

del comando CREATE TABLE

a) No funciona en Oracle

b) No funciona en MySQL

c) Permite borrar registros relacionados encascada

d) Permite borrar claves foráneas en cascada

7. A una restricción

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 opción

a) Sólo de MySQL

b) Para incrementar valores numéricos de for-

ma automática

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

)

)

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 141/324

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

numérico, otro alfanumérico y otro

de fecha/hora.

. ¿Cómo se instala phpMyAdmin en

Linux? ¿Necesitas algún otro soft-

ware para poder instalarlo?

Nombra tres herramientas grá-

cas y sus correspondientes gestores.

Añade alguno de los que no aparez-

can enel tema (por ejemplo, MMC

de SQL Server).

.¿Por qué es fundamental para unadministrador de bases de datos

(DBA) conocer los comandosSQL

además de saber usar las herra-

mientas grácas?

. Escribe, sin mirar la sintaxis, un

comando CREATE TABLE para

crear una tabla de alumnos con 5

campos a tu elección.

. Escribe, sin mirar la sintaxis, un

comando ALTER TABLE para

añadir 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

añadir una clave foránea 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 creación 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.ción de bases de datos TA-

BLESPACE y DATAFILE en Ora-

cle.

sirven las

cláusulas ON DELETE y ON UP-

DATE de REFERENCES.

.Para las cláusulas 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.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 142/324

CAPÍTULO 4

Realización de Consultas

Objetivos

W Identicar herramientas y sen-Contenidos . .tencias para reahzar consultasW La sentencia SELECT .

Identicar y crear consultasB?Consultas básicas, ltros y or- Simples 50m9una tabla»

denación  _ Identicar y crear consultas

Consultas resufnen que gGHCÏHHvalores resumen

subconsmtas Identicar y crear consultascon composiciones internas y

Consultas multitabla. Compo- externassiciones internasy externas

Identicar ycrear subconsultaConsultas reexivas

Valorar lasventajas einconve-COHSUÏWS COTItablas deïiVadas nientes delas distintasopcionesválidas para realizar una con-sulta

Con este tema, se detalla Ia sintaxis completa de 1a sentencia SELECT entoda su extensión. Se proporciona a1 estudiante métodos para construir con-sultas simples y complejas de forma estructurada, con ltros, agrupaciones yordenaciones.

133

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 143/324

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 información 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 ejecución de un comando en un SGBD se denomina.CONSULTA, término

derivado del anglosajón QUERY. Este término debe ser entendido más que corno

una consulta de información, como una orden, esdecir, las QUERYS o CONSULTAS

no son solo SELECT, sino también cualquier sentencia de tipo UPDATE, INSERT,

CREATE, DROP, etc, entendidas todas ellas como peticiones al SGBD para realizar

una operación determinada.

4.2. La sentencia SELECT

La sentencia SELECT es la sentencia más versátil de todo SQL, y por tanto la

más compleja de todas. Como se ha expuesto anteriormente, se utiliza para consultar

información 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 información ltrada de múltiples 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 GROUPBY NumeroPedido) tot

WHERE Clientes.NumeroC1iente=Pedidos.NumeroC1iente

AND Pedidos.numeroPedido=tot.NumeroPedido ORDERBY Cantidad;

134

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 144/324

Capítulo 4. Realización de Consultas

4.3. Consultas básicas

El formato básico para hacer una consulta es el siguiente:

SELECT [DISTINCT] se1ect_expr [,select_expr] [FROM tabla]

select_expr:

nombre_co1umna [AS alias]

| 4:

I expresión

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 expresión algebraica

compuesta por operadores, operandos y funciones.El parámetro opcional DISTINCT fuerza que solo se muestren los registros con

valores distintos, o, dicho de otro modo, que suprima las repeticiones.

En la página siguiente, se muestran algunos ejemplos del uso de la sentencia

SELECT. Hay que prestar atención a algunas curiosidadesl:

n En la consulta 4 se selecciona una columna calculada (1+5), con la selección

de los registros de una tabla, incorporándose esa nueva columna creada al

conjunto de las devueltas por el gestor.

- En la consulta número 5 se hace uso de una expresión algebraica para crearuna columna cuyo resultado será el de sumar 1 y6. Para hacer esto, en MySQL

no es necesario indicar la cláusula FROM, pero en Oracle, hay que poner la

cláusula 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 función concat cuyo cometido es concatenar

dos columnas creando una única columna. En Oracle, la función concat solo

admite dos parámetros, mientras que en MySQL se puede concatenar múltiples

parámetros. Para concatenar en oracle múltiples columnas se puede hacer uso

del operador I I. Véase Sección 6.4.

IEn las consultas 6 y7 se muestran las marcas de los vehículos. La diferencia en-

tre ambas consultas está en el uso del DISTINCT, que elimina las repeticiones.

Hay dos vehículos seat en la consulta 6 y uno en la 7.

¡La ejecuciónde lasconsultas quese muestraa continuaciónestá realizadaen MySQL, pero sonperfectamente compatibles con Oracle, excepto la consulta 5, que hay que añadir FROM dual.

135

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 145/324

Bases  de Datos 

#consu1ta 4

#consu1ta1 SELECT matricula, mode1o,1+5

SELECT *  FROM vehiculos; FROM vehiculos;

+ --------- + -+-----+

I matriculaI modeloI 1+5I

+ --+ --+----+ 

I 1129FGT ibiza gtI 1129FGTI ibiza gtI 6I

I 1132GHT leon tdi 105cvI 1132GHTI leon tdi 105cvI 6I

I M6836YX corolla g6I M6836YXI corolla g6I 6I

I 7423FZY coupe I 7423FZYI coupeI 6I

I 3447BYD a3 tdi 130cvI 3447BYDI a3 tdi 130cvI 6I+ + -------------- --+-----+

#consu1ta5

SELECT 1+6;

#consu1ta 2 +-----+

SELECT matricula, modeloI 1+6I

FROMvehiculos; +-----+ 

I7 I+---+

1129FGT ibiza gt #consu1ta 6

I 1132GHT leon tdi105cv I SELECTmarca FROM vehiculos;

I M6836YX corolla g6I +------- --+

| 7423FZYcoupe | marcaI

I 3447BYDa3 tdi 130cv + ------- --+I seatI

I seatI

l toyotaI

I hyundaiI#consu1ta3 I audiI

SELECT matricula,+ ------- --+

concat(marca,mode1o) as  coche

FROM vehiculos;

+ --------- --+ ------------------- +

#consu1ta7

SELECT DISTINCT marca

I matriculaI FROM vehiculos;

1129FGT seatibiza gt

I 1132GHT seatleon tdi 105cv

I M6836YX toyotacorolla g6

I 7423FZY hyundaicoupeI 3447BYD audia3 tdi 130CV

136

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 146/324

Capítulo 4. Realización de Consultas

<> Actividad 4.1: Crea una tablaen MySQLcon lasiguiente estructura:

MASCOTAS(Nombre, especie, raza, edad, sexo).Introduce 6 registros2 y,a continuación,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 documentación deMySQL y usa la función date_suby 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. EnSQL la palabra

clave para realizar ltros es la cláusula WHERE.

A continuación se añade a la sintaxis de la cláusula SELECT la sintaxis de los

 ltros:

SELECT [DISTINCT] select_expr [,select_expr]

[FROM tabla] [WHEREfiltro]

 ltro es una ¡expresiónque indicala condicióno condicionesque debensatisfacerlos registros para ser seleccionados.

Un ejemplo de funcionamiento sería el siguiente:

itselecciona los vehículos de 1a marca seat

SELECT *FROM vehiculos

WHEREmarca= seat ;

+ --------- --+ -------------- --+ ----- -+

| matricula l modelo

+ --------- --+ -------------- --+ ----- --+

I 1129FGT I ibiza gt

| 1132GHT l leon tdi 105cv I seat

+ --------- --+ -------------- --+ ----- --+

2 VéaseCapítulo 5si es necesario.

137

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 147/324

Bases de Datos

4.4.1. Expresiones para ltros

Los ltros se construyen mediante expresiones. Una expresión, es una combina-

ción de operadores, operandos y funciones que producen un resultado. Por ejemplo,

una expresión puede ser:

#expresión 1(oracle): (2+3)*7

SELECT (2+3)*7 from dual;

ttexpresión 2 (mysql): (2+3)>(6*2)

SELECT (24-3)>(6*2);

#0 =falso, es falso que 5>12

itexpresión 3 (mysql): 1a fecha de hoy -31 años;

SELECT date_sub(now(), interval 31 year);+ --------------------------------- +

I date_sub(now(), interval 31 year)|

Se detalla a continuación los elementos que pueden formar parte de las expresio-

nes:

IOperandos: Los operandos pueden ser constantes. por ejemplo el número en-

tero 3, el número real 2.3, la cadena de caracteres Españao la fecha C2010-

01-02; también pueden ser variables, por ejemplo el campo edad o o el campo

NombreMascota; ypueden sertambién otras expresiones 3.

IOperadores aritméticos: +, -, *, /, 7c. El operador+  yel operador-se utilizanpara sumar o restar dos operandos(binario) o para poner el signo positivo onegativo a un operando (unario). El operador * es la multiplicación de dos

operandosyel operador /  es para dividir. El operador%o resto dela divisiónentera a°7ob devuelve el resto de dividir a entre b.

3Todas losoperandos numéricosya seanreales oenteros vansin comilla simple,ycualquier otracosa que no sea número, por ejemplo, cadenas de caracteres o fechas, van entre comillas simples.

138

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 148/324

Capítulo 4. Realización 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 número entero, de tal manera que si el resultado de la expresión

es cierto el resultado será 1, y si el resultado es falso el resultado será O. Por

ejemplo, la expresión a >b devuelve 1 si a es estrictamente mayor que b y Oen caso contrario. La. expresión d<>e devuelve 1 si d y e son valores distintos.

IOperadores lógicos: AND, OR, NOT. Los operadores lógicos toman como ope-

randos valores lógicos, esto es, cierto o falso, en caso de SQL, 1 o O. Los

operadores lógicos se comportan según las siguientes tablas de verdad:

Operando 1 Operando 2 Opl AND Op2 Opl OR Op2 NOT Oplfalso 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 lógicos.

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 Oplfalso 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 lógicos con valores nulos.

-Paréntesis: Los operadores tienenuna prioridad, por ejemplo, en la ex-

presión 3+4*2, la multiplicación 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 paréntesis, cuyo cometido es precisamente dar máxi-

ma prioridad a una parte de una expresión.Así, (3+4)*2, no es lo mismo que3+4*2.

139

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 149/324

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 continuación aparecen los resultados que provoca

la ejecución 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. Construcción de ltros

A continuación, se muestran ejemplos de construcción 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 150/324

Capítulo 4. Realizaciónde Consultas

I Kobe BryantI| Í

I PauGasol I+ -------------------- --+

#Consu1ta que selecciona los jugadores españoles de los Lakers

SELECT codigo,Nombre,AlturaFROMjugadores WHERENombre_equipo=Lakers

and Procedencia=Spain;+------ --+ --------- --+ --------+

I codigo I Nombre| AlturaI+ ------ --+ --------- --+ ------ --+

I 66I Pau GasolI 7-0I+ ------ --+ --------- --+ ------ --+

#Consulta que selecciona los jugadores españolesy eslovenos de los lakers

SELECT Nombre, A1tura,Procedencia FROM jugadores

WHERENombre_equipo=Lakers

AND (Procedencia=Spain ORProcedencia=S1ovenia);+ --+ ------ --+ --+

I NombreI AlturaI Procedencia|

4.4.3. Filtros con operador de pertenencia a conjuntos

Ademásdelosoperadorespresentadosanteriormente(aritméticos,lógicos,etc.)sepuedehacer usodel operadorde pertenenciaa conjuntosIN, cuya sintaxises la

siguiente:

nombre_co1umna IN (Valuel, Va1ue2, ...)

Este operadorpermite comprobarsi una columnatiene un valor igual que cual-

quier de los que están incluidosdentro del paréntesis,así por ejemplo,si sedesea

seleccionarlosjugadoresespañoles,eslovenoso serbiosde los Lakers,se codicaría

así 

#  versión larga

SELECT Nombre, Altura,Procedencia

FROM jugadores WHERENombre_equipo=Lakers AND

(Procedencia=Spain 

ORProcedencia=S1oveniaORProcedencia=Serbia & Montenegro);

141

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 151/324

Bases de Datos

I Pau Gasol

I Vladimir RadmanovicI Serbia & MontenegroI

I Sasha VujacicI Slovenia

#versión corta (con el operador IN)

SELECTNombre, A1tura,ProcedenciaFROM jugadores

WHERENombre_equipo=Lakers AND

Procedencia IN (Spain,S1ovenia,Serbia & Montenegro);+------------------- -+ -+ ------------------- -+

I NombreI AlturaI Procedencia

+ ------------------- -+ ------ -+ ------------------- -+

I Pau GasolI

I Vladimir RadmanovicI Serbia& MontenegroI

I Sasha VujacicI SloveniaI+ ------------------- -+ ------ -+ ------------------- -+

4.4.4. Filtros con operador de rango

El operador de rango BETWEEN permite seleccionarlos registrosque estén

incluidosen un rango. Su sintaxises:

nombre_co1umna BETWEEN Valuel AND Va1ue2

Por ejemplo,para seleccionarlosjugadoresde la nba cuyopesoestéentre 270y300 libras secodicaría la siguientequery:

SELECT Nombre,Nombre_equipo,Peso FROM jugadores

WHERE Peso BETWEEN 270 AND 300;

+ -------------- -+ ------------- -+ ---- -+

I NombreI Nombre_equipoI Peso l

I Chris RichardI Timberwolves

I Paul Davis| Clippers

I |I David HarrisonI Pacers

#sería equivalente a

SELECT Nombre,Nombre_equipo FROM jugadores

WHEREPeso >=  970 AND Peso <=300;

142

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 152/324

Capítulo 4.Realización de Consultas

<> Actividad 4.2: Saca el pesoen kilogramosde los jugadores dela NBA quepesen 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 patrón

Los ltros con test patrón seleccionan los registros que cumplan una serie de ca-racterísticas. Sepueden usarlos caracterescomodines 7oy  _ para buscar unacadenade caracteres. Por ejemplo, seleccionar de la tabla de vehículos aquellos vehículos

cuyo modelo sea t.di:

SELECT * FROM vehiculos where modelo like %tdiZ;

+ --------- --+ -------------- --+ ----- --+

143

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 153/324

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

+ --------- --+ -------------- --+ ----- --+

Elcarácter comodín %busca coincidencias de cualquier número de caracteres,

incluso cero caracteres. Elcarácter comodín  _ busca coincidencias de exactamente

un carácter.

Para ilustrar el funcionamiento del carácter  _ ,se consultan aquellos equipos que

empiecen por R, que terminen por S y 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 usaría el patrón:

SELECT Nombre,Conferencia

FROM equipos WHERENombre 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 límite de número de registros

Este tipo de ltros no es estándar ysu funcionamiento varía con el SGBD.

Consiste en limitar el número de registros devuelto por una consulta. EnMySQL,

la sintaxis es:

144

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 154/324

Capítulo 4. Realización de Consultas

[LIMIT [desplazamiento ,] nf ilas]

nlas especica. el número 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 limit4;+ -------------- --+ ------------- --+

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 LIMIT5,3;+ ----------------- --+ ------------- --+

I nombre | Nombre_equipo I+ ----------------- --+ ------------- --+

I Marko Jaric I Timberwolves

I A1 Jefferson I Timberwolves

I Mark Madsen I Timberwolves

+ ----------------- --+ ------------- --+

Oracle limita el número de las apoyándose en una pseudo columna, de nombre

rownum:

--Saca los 25 primeros jugadores

SELECT *

FROM jugadoresWHERE rownum <= 25;

4.5. Ordenación

Para mostrar ordenados un conjunto de registros se utiliza la cláusula ORDER 

BY de la sentencia SELECT.

145

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 155/324

Bases de Datos

SELECT [DISTINCT] select_expr [,se1ect_expr][FROM tabla]

[WHERE filtro]

[ORDER BY{nombre_co1umna I expr l posición} [ASC I DESC] ,...]

Esta claúsula permite ordenar el conjunto de resultados de forma ascendente(ASC) o descendente (DESC)por una o varias columnas. Si no se indica ASCo DESC por defecto es ASC. La columna por la que se quiere ordenar se puedeexpresar por el nombre de la columna, una expresión o bien la posición numéricadel 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 división

SELECT Nombre,Division

FROM equipos wHERE Conferencia=westÜRDERBY Division ASC;

+ ------------- --+ --------- --+I Nombre I Division I+ ------------- --+ --------- --+

I Jazz I Northwest I

I Nuggets I Northwest II Trail Blazers I Northwest I

I Timberwolves I Northwest I

I Supersonics I Northwest II Clippers I Pacific II Kings I Pacific II warriors I Pacific II Suns I Pacific |

Í Lakers I Pacific I

| Hornets I Southwest I

I Spurs I Southwest II Rockets I Southwest I

I Mavericks I Southwest I

I Grizzlies I Southwest I+ ------------- --+ --------- --+

146

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 156/324

Capítulo 4. Realizaciónde Consultas

#se puede ordenar por varios campos, p.ej: además de que cada

#división esté ordenada ascendentemente se ordene por nombre

#de equipo

SELECT Division,Nombre FROMequipos

WHERE Conferencia=west

ORDER BY Division ASC,Nombre DESC;

+ --------- --+ ------------- --+

I DivisionI NombreI+ --------- --+ ------------- --+

I NorthwestI Trail BlazersI

| NorthwestI Timberwolves|

I NorthwestI SupersonicsI

I NorthwestI NuggetsII NorthwestI JazzI

I PacificI warriorsI

I PacificI SunsI

I PacificI LakersI

I PacificI KingsI

I PacificI ClippersI

I SouthwestI SpurslI SouthwestI RocketsI

I SouthwestI MavericksI

I SouthwestI HornetsI

I SouthwestI GrizzliesI

+

4.6. Consultas de resumen

En SQL sepuedengenerarconsultasmáscomplejasqueresumencierta informa-

ción,extrayendoinformacióncalculadadevariosconjuntosde registros.Un ejemplo

de consultaresumenseria la siguiente:

SELECT count(*) FROMvehiculos;

Esta consultadevuelveel númerode registrosde la tabla vehículos,esdecir, se

generaun resumende la informacióncontenidaen la tabla vehículos.La expresión

count(*)esunafunciónquetomacomoentradalosregistrosdela tablaconsultada

147

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 157/324

Bases de Datos

y cuenta cuántos registros hay. Elresultado de la función count es un único valor (1

 la, 1 columna) con el número5(número de registrosde la tabla vehículos).

Para poder generar información resumida hay que hacer uso de las funciones de

columna. Estas funciones de columna convierten un conjunto de registros en una

información simple cuyo resultado es un cálculo. A continuación, se expone unalista de las funciones de columna disponibles en SQL:

SUM (Expresión) #Suma los valores indicados en el argumento

AVG (Expresión) #Ca1cu1a la media de los valores

MIN (Expresión) #Ca1cula el minimo

MAX (Expresión) #Ca1cu1a el máximo

COUNT(nbCo1umna) #Cuenta el número de valores de una columna

#(excepto los nulos)

COUNT(*) #Cuenta el número de valores de una fila

#Inc1uyendo los nulos.

A modo de ejemplo, se muestran algunas consultas resúmenes:

#consu1ta 1

#¿Cuánto pesa el jugador más pesado de la nba?

SELECT max(peso) FROM jugadores;

#consu1ta 2

#¿Cuánto mide el jugador más bajito de la nba?

SELECT min(a1tura) FROM jugadores;

#consu1ta 3 

#¿Cuántos jugadores tienen los Lakers?

SELECT count(*) FROM jugadores WHERENombre_equipo=Lakers;

#consu1ta 4

#¿Cuánto pesan de media los jugadores de los Blazers?

SELECTavg(peso) FROM jugadores WHERENombre_equipo=B1azers;

Con las consultas de resumen se pueden realizar agrupaciones de registros. Se

denomina agrupación de registros a un conjunto de registros que cumplen que tienenuna o varias columnas con el mismo valor. Por ejemplo, en 1a tabla vehículos:

SELECT* FROM vehiculos;

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 158/324

Capítulo 4.Realización 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 seat tiene los

modelos ibiza gt (1129FGT) y leon tdi 105cv (1132GHT). A este grupo de registros

se le puede aplicar una función de columna para realizar determinados cálculos, 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 función de columna, cuando se agrupa por uncampo, actúa para cada grupo. En este caso, para cada. grupo se ha contado el

número 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 BYexpr [, expr] . ... ]

[ORDER BY{nombre_columna I expr I posición} [ASC I DESC] , ...] 

Se observa que GROUP BY va justo antes de la cláusula ORDER BY. A conti-

nuación, a modo de ejemplo, se muestran algunas consultas con grupos y funciones

de columna.

149

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 159/324

Bases de Datos

#consu1ta 1

#¿Cuánto pesa el jugador más pesado de cada equipo?

SELECTNombre_equipo, max(peso)

FROM jugadoresGROUP BY Nombre_equipo;

#consulta 2

#¿Cuántos equipos tiene cada conferencia en la nba?

SELECTcount(*),conferenciaFROM equiposGROUP BY conferencia;+ ----------+ ----------- --+

count(*)I conferenciaI

+ -------- --+ ----------- --+

15I EastI

+ -------- --+ ----------- --+

#¿Cuánto pesan de media los jugadores de españa, francia e italia?SELECTavg(peso),procedenciaFROM jugadores

WHEREprocedencia IN (Spain,Ita1y,France)GROUP BY procedencia;+ --------- --+ ----------- --+

I avg(peso)I procedenciaI+ --------- --+ ----------- --+

218.4000I FranceI

I 221.0000I ItalyI

208.6000I Spain+ --------- --+ ----------- --+

IMPORTANTE: Seobservaqueparacadaagrupación.seha seleccionadotam-

biénel nombredela columnapor la cualseagrupa.Estonoesposiblesinoseincluye

elGROUP BY. Por ejemplo:

150

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 160/324

Capítulo 4. Realización de Consultas

mysq1> SELECT count(*),conferencia FROMequipos;ERROR 1140 (42000): Mixing of GROUPColumns

(MIN(),MAX(),COUNT()....) with no GROUPColumns is illegal

if thereis no GROUP BY clause

Precisamente, el SGBD advierte de que para mezclar funciones de columna y

columnas de una tabla hay que escribir una cláusula GROUPBY.

4.6.1. Filtros de Grupos

Los ltros de grupos deben realizarse mediante el uso de la cláusula HAVING

puesto que WHERE actúa antes de agrupar los registros. Es decir, si se desealtrar

resultados calculados mediante agrupaciones se debe usar la siguiente sintaxis:

SELECT [DISTINCT] se1ect_expr [,se1ect_expr]

[FROMtabla]

[WHEREfiltro]

[GROUP BYexpr [, expr].... ]

[HAVING fi1tro_grupos]

[ORDERBY {nombre_co1umna I expr I posición} [ASC | DESC] ,...]

HAVING aplica los mismos ltros que la cláusula WHERE.A continuación se

ilustran algunos ejemplos:

#query 1:

#Seleccionar los equipos de la nba cuyos jugadores

#pesen de media más de 228 libras

SELECT Nombre_equipo,avg(peso)

FROM jugadores

GROUPBY Nombre_equipo

HAVING avg(peso)>228 ORDERBY avg(peso);+ ------------- --+ --------- --+

I Nombre_equipo I avg(peso) l

228.8462

229.6923

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 161/324

Bases de Datos

#query 2

#seleccionar qué equipos de la nba tienen más de 1 jugador español

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 puedenser aplicados tanto en la cláusula WHEREpara ltrar registros

como en la cláusula 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 división SouthEast:

SELECTnombre FROM jugadores

WHERENombre_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

+ ------------------- --+

Seobserva que la subconsulta es precisamente la sentencia SELECTencerrada

entre paréntesis. De esta forma, se hace uso del operador in para tornar los equi-

pos de la división SouthEast. Sise ejecuta la subconsulta por separado se obtiene:

152

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 162/324

Capítulo 4. Realización de Consultas

SELECT NombreFROM equipos

WHEREdivision=SouthWest ;

"&#39; """"" "+ La subconsulta se convierte en algo equiva-

l Nmbre l lente a:+ --------- --+

¡Hornets SELECT nombre FROM jugadoresI¡ 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 Comparación

Consiste en usar los operadores de comparación --, >=, <=, <>, >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 jugadoresWHERE altura = 

(SELECT max(a1tura) FROM jugadores);+ -------- --+

| nombre

+ -------- --+

I Yao Ming |+ -------- --+

Se puede comprobar que la subconsulta produce un único resultado, utilizándolo

para ltrar.Nótese 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)

También fallaría que la subconsulta devolviera más de una la:

153

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 163/324

Bases de Datos

SELECT nombre FROM jugadoresWHEREaltura =(SELECT max(a1tura)

FROMjugadoresGROUP BY Nombre_Equipo);ERROR1242(21000): Subquery returns more than 1 row

Una restricción importante es que la subconsulta debe estar siempre al lado

derecho del operador de comparación. Es decir:

Campo <= subconsulta

siendo invalida la expresión:

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 sección. Consiste en usar el operador

IN para ltrar los registros cuya expresión coincida con algún valor producido porla subconsulta.

Por ejemplo, para extraer las divisiones de la nba donde juegan jugadores es-

pañoles:

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 número de las

distinto de O.

Para usar el test de existencia se utiliza el operador EXISTS:

154

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 164/324

Capítulo 4. Realización de Consultas

SELECT columnas FROM tabla

WHERE EXISTS(subconsulta)

Eloperador EXISTStambién puede ser precedido de la negación (NOT) para

 ltrar si no existen resultados en la subconsulta:

SELECT columnas FROM tabla

WHERENOT EXISTS(subconsulta)

Para seleccionar los equipos que no tengan jugadores españoles sepodría usar la

siguiente consulta:

SELECTNombre FROM equipos WHERENOT EXISTS

(SELECTNombre FROM jugadores

WHEREequipos.Nombre = jugadores.Nombre_Equipo

AND procedencia=Spain);+ ------------ --+

I Nombre

+ ------------ -+

I Bobcats

Para comprender la lógica de esta query, se puede asumir que cada registro de-

vuelto por la consulta principal provoca la ejecución de la subconsulta, así, si laconsulta principal (SELECTNombre 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 operación join que se estudiará más

adelante, pero sirve de ejemplo ilustrativo del funcionamiento de esta consulta:

SELECTNombre from equipos;+ ------------- -+

I Nombre

+ -+subconsulta ejecutada #1

I Bobcats subconsulta ejecutada #2|

|l |

I Raptors |

l |

+ ------------- -+

subconsulta ejecutada #22

155

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 165/324

Bases de Datos

Cada subconsulta ejecutada sería como sigue:

#subconsulta ejecutada #1

SELECT Nombre FROM jugadoresWHERE 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 españoles.Sin embargo para el registro 22 de la consulta principal, aquel cuyo Nombre es

Raptors, la consulta:

#subconsu1ta ejecutada #22SELECT 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 conclusión, 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 relación entre una expresión y todos

los registros de la subconsulta (ALL) o algunos de los registros de la subconsulta(ANY).

De esta manera se podría saber los jugadores de la nba que pesan más que todos

los jugadores españoles:

156

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 166/324

Capítulo 4. Realizaciónde Consultas

SELECT nombre,peso from jugadores

WHEREpeso >  ALL

(SELECTpeso FROMjugadores WHEREprocedencia=Spain);

I Michael Doleac

I A1 Jefferson

I Chris Richard

A1 igualqueenel casodeloperadorexists,sepuedeasumirquepor cadaregistro

de la consultaprincipal se ejecuta una subconsulta.En tal caso,para el jugador

Michae1Doleaccuyopesoes262libras,secomprobaríasi262esmayorquelospesos

de todos losjugadoresespañoles,que sondevueltospor la subconsulta(SELECT

pesoFROM jugadoresWHERE procedenciafspain).

También sepodría consultarlosbases(en inglésGuard G) posicion=G, que

pesanmásquecualquier(ANY) pívot (en inglésCenter "C) posicion: C dela nba:

SELECT nombre,peso from jugadores

WHEREposicion=G AND

peso >  ANY

(SELECTpeso FROMjugadores where posicion=C);

I Joe JohnsonI

+ ----------- --+ ---- --+

Secompruebaqueenel casodeJoeJohnson,supeso(235libras),esmayorquealgún pesode algún pívot de la nba, dándoseasí el peculiar casode un basemás

pesadoquealgúnpívot.

4.7.5. Subconsultas anidadas

Sepuedeusaruna subconsultapara ltrar los resultadosde otra subconsulta.

De estamaneraseanidanSubconsultas.Por ejemplo.si sedeseaobtenerel nombre

de la ciudad dondejuega el jugador más alto de la nba, habría que pensarcómo

hacerlo de forma estructurada:

157

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 167/324

Bases de Datos

1. Obtener la altura del jugador más alto:

X <- (SELECT max(a1tura) from jugadores)

2. Obtener el nombre del jugador, a través de la altura se localiza al jugador y

por tanto, su equipo:

Y <SELECT Nombre__equipo from jugadores WHEREAltura =  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 WHEREnombre =

(SELECTNombre_equipo FROM jugadores WHEREaltura =

(SELECTMAX(a1tura) FROM jugadores));+ ------- --+

| ciudad

+ ------- --+

I Houston I

+ --+

Esta manera de generar consultas es muy sencilla, y a la vez permite explorar

la información de la base de datos de forma. estructurada. En opinión de muchos

autores esta forma. estructurada de generar consultas es la que dio a SQLsu Sde

Structured.

4.8. Consultas multitabla

Una consulta multitabla es aquella en la que se puede Consultar información de

más de una tabla. Seaprovechan 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 BYexpr [, expr].... ]

[HAVING fi1tro_grupos][ORDER BY{nombre_co1umnas I expr I posición} [ASCI DESC] , . .

158

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 168/324

Capítulo 4. Realización de Consultas

La diferencia con las consultas sencillas se halla en la cláusula 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 condición]I referencia_tab1a LEFT [OUTER] JOIN referencia_tab1a ON condición

l referencia_tabla RIGHT [OUTER] JOIN referencia_tab1a ON condición

referencia_tab1a:

nombre_tab1a [[AS] alias]

La primera opción, (referencia_tabla[.referenciajabla] es típica de SQL 1(SQL-86) para las uniones, que consisten en un producto cartesiano más 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é Pérez I

I 28834177X I Matías Fernández I

I 37276317Z I Francisco Martínez 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 169/324

Bases de Datos

Cloncho

Yoda

Sprocket

Cloncho

Yoda

SprocketCloncho

Yoda

Sprocket

SELECT * FROM animales,propietarios;

51993482Y

51993482Y

372763172

51993482Y

51993482Y372763172

51993482Y519934

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 170/324

Capítulo 4. Realización de Consultas

Este mismo procedimiento se puede aplicar con N tablas, por ejemplo, con la basede datos jardineria, cuyo gráco de relaciones es el siguiente:

cungcNombrecliente

Nombrecontacu:

Apellidocontacu:TelefonoFaxLheaD reccionlLineaD reccion2Ciudad

RegionPais

Cod igoPostal

CodigoEITpleadoRepVentas

LimiwCreditD

,.

.4;

cuirrpbab

Nombr 

ApellidolApellid

 ExtensionEmail

CodigoofncinacodigoJefe

CuidadPais

Region

CodigoPostaITelefono

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 171/324

Bases de Datos

Se observa que en est.e casohay dos JOIN,el primer join entre la tabla Clien-

tes y Pedidos, con la condición Clientes.CodigoCliente=Pedidos.CodigoCliente y la

segunda join entre el resultado de la primera. join y la tabla Empleados (Emplea-

dos.CodigoEmpleado = Clientes.CodigoEmpleadoRepVentas). Nótese que los dos

 ltros de la join están unidas por el operador AND. De esta forma se va extrayen-

do de la base de datos toda la información relacionada, obteniendo así mucha máspotencia en las consultas.

También hay que jarse en que como hay dos campos CodigoCliente, para hacer-

les referencia, hay que precederlos desu 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 características de ltrado y agru-

pación que ofrece SQL, por ejemplo, si se desea realizar una consulta para obtener

cuántos pedidos ha gestionado cada empleado, se modicaría 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.CodigoC1ienteAND

Emp1eados.CodigoEmp1eado =Clientes.CodigoEmpleadoRepVentas

GROUP BY Emp1eados.Nombre

ORDER BY NumeroDePedidos;

I Michael

I Lorena

4.8.2. Consultas multitabla SQL 2

SQL 2 introduce otra sintaxis para los siguientes tipos de consultas multitablas:

las joins (o composiciones)internas, externasy productos cartesianos (tambiénlla-

madas composicionescruzadas):

1. Join Interna:

n De equivalencia (INNER JOIN)

162

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 172/324

Capítulo 4. Realización 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 operación INNER JOIN se calcula el producto cartesiano de todos los

registros, después, cada registro en la primera tabla es combinado con cada registrode 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 secombinan.

Como ejemplo, la siguiente consulta toma todos los registros de la tabla animalesy encuentra todas las combinaciones en la tabla propietarios. La JOIN compara losvalores de las columnas dni y propiet.arío. Cuando no existe esta correspondenciaentre algunas combinaciones, estas no se muestran; es decir, que si el dni de unpropietario de una mascota no coincide con algún dni de la tabla de propietarios,no se mostrará el animal con su respectivo propietario en los resultados.

SELECT *FROM animales INNER JOIN propietariosON 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é Pérez I

2 I Yoda I gato I 51993482Y I 51993482Y I José Pérez I3 I Sprocket I perro I 372763172 I 372763172 I Francisco Martinez I+ ------ --+ -------- --+ ----- --+ ----------- --+ --+ --+

#Nótese que es una consulta equivalente a la vista en el apartado anterior#select *from anima1es,propietarios

#where animales.propietario=propietarios.dni;

163

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 173/324

Bases de Datos

Además, debe tenerse en cuenta que si hay un animal sin propietario no saldrá enel 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 II 2 I Yoda I gato I 51993482Y IÍ 3 I Sprocket I perro I 372763172 II 4 I Arco I perro I NULL I #nueva mascota sin propietario+------ --+ -------- --+ ----- --+ ----------- --+

SELECT * FROM animales INNER JOIN propietariosON 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é Pérez Il 2l Yoda l gato I 51993482Y l 51993482Y l José Pérez lI 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, porejemplo:

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é Pérez

3 I Sprocket I perro I 372763172 I 51993482Y I José Pérez3 I Sprocket I perro I 372763172 I372763172 I Francisco Martínez

+ ------ --+ -------- --+ --+ --+ --+ ------------------ --+

I2 IYoda Igato I51993482Y I51993482Y IJosé Pérez|

I

I

Composiciones naturales. NATURAL JOIN

Es una especialización de la INNER JOIN. En este caso se comparan todas lascolumnas que tengan el mismo nombre en ambas tablas. La tabla. resultante contienesolo una columna por cada par de columnas con el mismo nombre.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 174/324

Capítulo 4. Realización de Consultas

DESCRIBE Empleados;+---- --+--+ ------- --+

I I | I

+ ------------ --+ ---- --+--+ ------- --+

I CodigoEmpleado I I I I I II 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 Codigoüficina I varchar(10) I N0 I I NULL I I #relación

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 Codigoüficina I varchar(10) I N0 I PRI I NULL I I #relación

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 Codigoüficina

SELECTCodigoEmpleado,Empleados.Nombre,

Oficinas.Codigo0ficina,0ficinas.Ciudad

FROMEmpleados NATURALJOIN Oficinas;+-------------- --+ --------------- --+ ------------- --+ -------------------- --+

I CodigoEmpleado I Nombre I Codigoüficina I Ciudad I+ -------------- --+ --------------- --+ ------------- --+ -------------------- --+

I 1I Marcos I TALESI Talavera de la Reina l

2 I Ruben I TAL-ES I Talavera de la Reina I

I 31 I Mariko I SYD-AUI Sydney I

Hay que jarse en que, aunque CodigoEmpleado es un campo que está en dos

tablas, esta vez no es necesarioprecederlo del nombre de tabla puesto que NATURAL

JOIN devuelve un único campo por cada pareja de campos con el mismo nombre.

165

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 175/324

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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 176/324

Capítulo 4. Realización de Consultas 

SELECT * FROM animales 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é Pérez I

| 2 I Yoda I gato I 51993482Y I 51993482Y I José Pérez II 3 I Sprocket I perro I 372763172 I 372763172 I Francisco Martinez II 4 I Arco I perro I NULLI NULL I NULLI+ ------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+  

Se observa que se incluye el perro Arco que no tiene propietario, por tanto, sus campos relacionados aparecencon valor NULL. El sentido de esta.query podría ser,sacar todos los animales y si tienen relación, sacar sus propietarios,y si no tiene propietario,índicarloconunvalorN ULO o conVACÍO.

¿Sabías que  . . . 7 Oracleimplementabalas consultasexternasantesde la aparición de las OUTER JOIN. utilizando el operador (+)= en lugar del  operador = en la cláusula WHERE. Esta sintaxis aún 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,se llama composición de tabla derecha RIGHT JOIN (o  RIGHTOUTER JOIN): 

#ejemp1o de RIGHT OUTER JOIN #anima1es RIGHT OUTER JOIN propietarios #anima1es está a la izquierda  #propietarios está a la derecha  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+ ------ --+ -------- --+ ----- --+ ----------- --+ --------- --+ ------------------ --+  

1 I Cloncho I gato I 51993482Y I 51993482Y I José Pérez I2 l Yoda  Í gato I 51993482Y I 51993482Y l José Pérez l  

NULL INULL INULL INULL I 2883477X | Matías Fernández I

|3 I Sprocket I perro I 372763172 I 372763172 I Francisco Martinez 

+ ------ --+ -------- --+ ----- --+ ----------- --+ --+ --+  

167 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 177/324

Bases de Datos

En este caso, losque aparecen son todos los propietarios, incluido Matías Fernández

que no tiene una mascota. Se ve que el perro Arco no aparece, pues esta vez los regis-

tros que se deseanmostrar son todos los de la tabla derecha (es decir, propietarios).

La operación que admite registros sin correspondencia tanto para la tabla izquier-

da como para la derecha, por ejemplo. animales sin propietario y propietarios sinanimales, se llama composición externa completa o FULL JOIN (FULL OUTER

JOIN). Esta operación 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é Pérez

Yoda gato I 51993482Y 51993482Y I José Pérez

Sprocket perro I 372763172 372763172 I Francisco Martinez I

l NULL NULL NULL

2883477X Matias Fernández

¿Sabías que . . . 7En SQL existeel operadorUNION, queañade alconjun-to de resultados producidos por una SELECT, los resultados de otra SELECT.

La sintaxis es:

SELECT FROM

UNION [ALL]

SELECT FROM

El parámetro 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 característica FULL OUTER JOIN, sí que se

puede simular haciendo una unión de los resultados de un LEFT OUTER JOIN y

168

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 178/324

Capítulo 4. Realización de Consultas

los resultados de un RIGHT OUTER JOIN, puesto que UNION,sin la opción ALL,

elimina los registros duplicados, por tanto, se podría 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 RIGHTOUTER JOIN propietarios

-> ONanima1es.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é Pérez I

I Yoda I gato I 51993482Y I 51993482Y I José Pérez I

I Sprocket I perro I 372763172 I372763172 I Francisco Martinez I

I Arco I perro I NULLI NULL I NULL I

I I I+ + +

NULL NULLI NULL2883477X Matias Fernández I

4.9. Consultas reexivas

A veces, es necesario obtener información 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 N0I PRI I NULLI |

I Nombre I varchar(50) I N0I I NULLI I

| Apellidol I varchar(50) I N0I I NULLI I

I Ape11ido2 I varchar(50) I YES I I NULLI |

I Extension I varchar(10) I N0I l NULLI I

| Email I varchar(100) I NDI I NULLI |

I Codigoüficina I varchar(10) I N0I I NULLI I

I CodigoJefe I int(11) I YES I I NULLI I #autore1ación

I Puesto I varchar(50) I YES I I NULLI I+ -------------- -+ ------------ -+ ---- -+----+ ------- -+ -+

SELECT concat(emp.Nombre, ,emp.Ape11ido1) as Empleado,

concat(jefe.Nombre,,jefe.Ape11ido1) as jefe

169

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 179/324

Bases de Datos

FROM Empleados emp INNER JOIN Empleados jefeON emp.CodigoEmp1eado=jeÍe.CodigoJefe;

+ -+ ----------------------- -+

I Empleado I Jefe I+ ----------------- -+ ----------------------- -+

I Marcos Magaña I Ruben López I

I Ruben López I Alberto Soria I

I Alberto Soria I KevinFallmer II Kevin Fallmer I Julian Bellinelli Il Kevin Fallmer I Mariko Kishi I+ ----------------- -+ ----------------------- -+

Analizando la query anterior, primero se observa el uso de la tabla empleadosdos veces, una con un alias emp que representa los empleados como subordinados yotra con alias jefe que representa los empleados como jefes. Ambas tablas (aunque en

realidad son la misma) se unen en una JOIN a través de la relación CodigoEmpleadoy CodigoJefe.

Por otro lado, el primer campo que se selecciona esla concatenación del nombrey apellido del empleado (concat(emp.Nombre,&#39; ,emp.Apellido1)al que a su vezle damos un alias (empleado) y el segundo campo que es la concatenación de losempleados jefes, al que le se le da el alias jefe.

Se puede observar que en esta query no aparecen los empleados sin jefe, puestoque se ha utilizado un INNER JOIN. Para mostrarlos, habría. que usar un LEFT oRIGHT 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 cláusula FROM en lugar de nombres de tablas, por ejemplo:

SELECT * FROM

(SELECT CodigoEmpleado, Nombre FROMEmpleadosWHERE CodigoOficina=TAL-ES) as tabla_derivada;

En este caso se ha de distinguir, por un lado la tabla derivada, (SELECT Co-digoEmpleado, NombreFROM Empleados) que tiene un alias tabla_derivada, esdecir, una especie de tabla temporal cuyo contenido es el resultado de ejecutar laconsulta, su nombre es tabla_derivada y tiene dos columnas, una CodigoEmpleadoy otra Nombre. Este tipo de consultas ayudará a obtener información relacionadade forma mucho más avanzada.

170

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 180/324

Capítulo 4. Realización de Consultas

Por ejemplo, en la base de datos jardineria, si se desea sacarel 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 función 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 función MIN

#obtener el menor de ellos:

SELECT MIN(total) FROM (

SELECT SUM(Cantidad*PrecioUnidad) as total,CodigoPedido

FROM Deta11ePedidos

GROUP BYCodigoPedido

) AS TotalPedidos;

+ ---------- --+

I MIN(tota1) l+ --+

| 4 I

+ ---------- --+

#Tota1Pedidos es la tabla derivada formada

#por el resultado de la consulta entre paréntesis

Las tablas derivadas no tienen limitación, es decir, se pueden unir a otras tablas,

 ltrar, agrupar, etc.

171

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 181/324

Bases de Datos

4.11. Prácticas Resueltas

Práctica 4.1: Consultas simplesen MS-Access

Con la BBDD Automóviles, genera sentencias SQL para obtener:

1. El nombre de las marcas y modelos de los vehículos.

2. El nombre de los modelos cuyas emisiones estén entre 150 y 165.

3. El nombre de los modelos cuyas emisiones estén 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 pestaña. Crear,

opción Diseño de Consulta, y a continuación, se pulsa en el botón SQL. Final-

mente, se escribe la sentencia SELECT y, para ejecutarla, se pulsa en la admiraciónde la pestaña Diseño .

#1

SELECTMarca,Mode1o FROMAutomóviles;

#2

SELECTmodelo FROMAutomóviles WHEREEmisiones >= 150 AND Emisiones <=165;

#3

SELECT mode1o,consumo,emisiones FROM Automóviles WHERE

(Emisiones >= 150 AND Emisiones <=165) OR (Consumo>=5 AND Consumo<=6)

ORDER BY consumo DESC;

#4

SELECTDISTINCT MarcaFROM Automóviles;

Práctica 4.2: Consultas simplescon Ia BBDD jardinería

Codica en MySQL y Oracle sentencias para obtener la siguiente información:

1. Sacar el código de ocina y la ciudad donde hay ocinas.

Sacar cuántos empleados hayen la compañía.

Sacar cuántos clientes tiene cada país.FP.Sacar cuálfue el pago medioen 2005 (pista: Usar la función YEAR de mysql

o la función to_char(fecha,yyyy) de Oracle).

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 182/324

Capítulo 4. Realización de Consultas

5. Sacar cuántos pedidos están en cada estado ordenado descendentepor el núme-

ro de pedidos.

6. Sacar el precio del producto más caro y del más barato.

#1

SELECT CodigoOficina,ciudad FROM Oficinas;

#2

SELECT Count(*) FROM Empleados;#3 

SELECT Count(*),Pais FROMClientes GROUPBY Pais;

#4

SELECT AVG(Cantidad) FROMPagos WHERE YEAR(FechaPago)=2005; #(mysql) ó#4

SELECT AVG(Cantidad) FROMPagos WHERE TO_CHAR(FechaPago,YYYY)=2005;#5

SELECT Count(*),Estado FROMPedidos GROUP BY EstadoORDERBY Count(*) DESC;

#6

SELECT Max(PrecioVenta),Min(PrecioVenta) FROM Productos;

Práctica 4.3: Subconsultas conIa BBDD jardinería

Codica en SQL sentencias para obtener la siguiente información:

1. Obtener el nombre del cliente con mayor limite de crédito.

2. Obtener el nombre, apellidol ycargo de los empleados que no representen a

ningún cliente.

#1

SELECTNombreclienteFROMClientes WHERELimiteCredito = (SELECT Max(LimiteCredito) FROMClientes);

#2

SELECT Nombre, Apellidol, Puesto FROMEmpleados WHERE CodigoEmp1eado

NOT IN (SELECT CodigoEmp1eadoRepVentas FROMClientes );

173

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 183/324

Bases de Datos

Práctica 4.4: Consultas multitabla con la BBDD jardineríaCodica en SQL consultas para obtener:

1. Sacar un listado con el nombre de cada cliente yel nombre y apellido de surepresentante de ventas.

2. Mostrar el nombre de los clientes que no hayan realizado pagos junto con elnombre de sus representantes de ventas.

3. Listar las ventas totales de los productos que hayan facturado más de 3000euros. Semostrará el nombre. unidades vendidas, total facturado y total fac-turado con impuestos (18(7o IVA).

4. Listar la dirección de las ocinas que tengan clientes en Fuenlabrada.

#1

SELECT NombreC1iente, Nombre as NombreEmp, Apellidol as ApeEmpFROM Clientes INNER JOIN Empleados ON

Clientes.CodigoEmpleadoRepVentas=Empleados.CodigoEmp1eado;#2

SELECT NombreC1iente,Nombre as NombreEmp, Apellidol as ApeEmpFROM Clientes INNER JOIN Empleados ON

Clientes.CodigoEmp1eadoRepVentas=Emp1ea whereCodigocliente notin (SELECTCodigoC1iente FROMPagos);

#3

SELECTNombre, SUM(Cantidad) As Tota1Unidades,SUM(Cantidad*PrecioUnidad) as Tota1Facturado,

SUM(Cantidad*PrecioUnidad)*1.18 as TotalconïmpuestosFROM Deta11ePedidos NATURAL JOIN Productos

GROUP BY Nombre

HAVING Sum(Cantidad*PrecioUnidad)>3000;

#4SELECTCONCAT(0ficinas.LineaDireccion1,0ficinas.LineaDir

Dficinas.Ciudad

FROM Oficinas, Emp1eados,C1ientesWHEREOficinas.CodigoÜficina=Emp1eados.Codigo0ficina AND

Empleados.CodigoEmp1eado=C1ientes.CodigoEmp1eadoRepVentas ANDClientes.Ciudad=Fuenlabrada;

174

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 184/324

Capítulo 4. Realizaciónde Consultas

Práctica 4.5: Consulta con tablas derivadas

Sacar el clientequehizo el pedidodemayor cuantía:

Esta. consulta esmejor codicarla en un. amhivo de texto para no tener que escribirla múltiples veces si

da  errores. La  estrategia para resolverlo es hacer  pequeñasconsultas (querys A,B y  C) para luego unirlas

y  generar la  denitiva:

#query A: Sacar la   cuantía 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 más caro:

select max(tota1) from

(select CodigoPedido, Codigocliente,sum(Cantidad*PrecioUnidad) as  total

from Pedidos natural join Deta1lePedidos

groupby CodigoPedido,CodigoC1iente) Tota1Pedidos;

#query C: Sacar  el código de cliente correspondiente

al  pedido más caro (querydefinitiva.sq1)

querydefinitiva.sq1

Select Tota1Pedidos.Codigocliente,NombreCliente from

(select CodigoPedido, Codigocliente,sum(Cantidad*PrecioUnidad) as  total

from Pedidos natural join Detal1ePedidos

groupby CodigoPedido,CodigoCliente) Tota1Pedidosinner join Clientes on

Clientes.CodigoC1iente=Tota1Pedidos.CodigoC1ientewhere tota1=

( select max(tota1) from

(select CodigoPedido, CodigoC1iente,

sum(Cantidad*PrecioUnidad) as  total

from Pedidos natural join Deta11ePedidos

group by CodigoPedido,CodigoCliente) TotalPedidos

);

175

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 185/324

Bases de Datos

4.12. Prácticas Propuestas

Práctica 4.6: Consultas simplesen MS-Access

Con la BBDD Automóviles, genera sentencias SELECT para obtener esta informa-

ción:

1.

2.

3.Modelos de vehículos TDlf

Modelos de la marca Audiy de la marca "Seatordenado por l\llarca y Modelo.

Alarcas de Vehículos que empiecen por T y terminen en a.

.Vehículos que tengan foto.

.El consumo de los vehículos está expresado en litros / IOOkm. Listar el consumo

de los vehículos Seaten MPG, l\Iillas por galón (10 MPG=23.49 1/100km).

Práctica 4.7: Consultas simplescon la BBDD jardinería

Codica en SQL (Oracle y MySQL) sentencias para obtener la siguiente información:

1.

2.

OWNQF-l

Sacar la ciudad y el teléfono de las ocinas de Estados Unidos.

Sacar el nombre, los apellidos y el email de los empleados a cargo de AlbertoSoria.

Sacar el cargo, nombre, apellidos y email del jefe de la empresa.

Sacar el nombre, apellidos y cargo de aquellos que no sean representantes deventas.

Sacar el número de clientes que tiene la empresa.

Sacar el nombre de los clientes españoles.

Sacar cuántos clientes tiene cada país.

Sacar cuántos clientes tiene la ciudad de Madrid.

.Sacar cuántos clientes tienen las ciudades que empiezan por M.

4Hay quetener en cuenta queen Access,el comodín°7c esun *

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 186/324

10.

11.

12.

13.

14.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 187/324

Bases de Datos

3. Obtener los clientes cuya línea de crédito sea mayor que los pagos que hayarealizado.

4. Sacar el producto que más unidades tiene en stock y el que menos unidades

tiene en stock.

Práctica 4.9: Consultas multitablacon Ia BBDD jardinería

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 información 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).

Práctica 4.10: Consultas variadascon la BBDD jardinería

Codica en SQL las siguientes consultas:

1. Sacar un listado de clientes indicando el nombre del cliente y cuántos 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 188/324

10.

11.

12.

13.

14.

15.

16.

17.

18.

Capítulo 4. Realización 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 cuántos 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 ningún 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 dónde está la ocina.

Sacar los clientes que residan en ciudades donde no hay ocinas ordenado por

la ciudad donde residen.

Sacar el número de clientes que tiene asignado ca.da representante de ventas.

Sacar cuál fue el cliente que hizo el pago con mayor cuantía y el que hizo el

pago con menor cuantía.

Sacar un listado con el precio total de cada pedido.

Sacar los clientes que hayan hecho pedidos en el 2008 por una cuantía superior

a 2000 euros.

Sacar cuántos pedidos tiene cada cliente en cada estado.

Sacar los clientes que han pedido más de 200 unidades de cualquier producto.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 189/324

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 pesenmás de 100 kilos y midan más de 1.82m (6pies).

Puntos por partido de los jugadores de los cavaliers.

Jugadores cuya tercera letra de su nombre sea la v.

Número de jugadores que tiene cada equipo de la conferencia oeste West. ©9051?.Número de jugadores Argentinos en la NBA.

10. Máxima media de puntos de Lebron James en su carrera.

11. Asistenciaspor partido de Jose Calderonen la temporada O7/O8.

12. Puntos por partido de Lebron Jamesen las temporadasdel 03/04 al 05/06.

13. Número 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. Número de jugadores que tiene cada equipo de la división N orthWest.

18. Número de jugadores de España y Francia en la NBA.

19. Número de pivots Cque tiene cada equipo.

20. ¿Cuánto mide el pívot más alto de la nba?

21. ¿Cuánto pesa (en libras y en kilos) el pívot más alto de la NBA?

22. Número de jugadores que empiezan por "Y".

23. Jugadores que no metieron ningún punto en alguna temporada.

24. Número total de jugadores de cada división.

25. Peso medio en kilos y en libras de los jugadores de los Raptors.

180

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 190/324

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

Capítulo 4. Realización de Consultas

Mostrar un listado de jugadores con el formato Nombre(Equipo) en una sola

columna.

Puntuación más baja de un partido de la NBA.

Primeros 10 jugadores por orden alfabético.

Temporada con más puntos por partido de Kobe Bryant.

Número de bases "G que tiene cada equipo de la conferencia este East.

Número de equipos que tiene cada conferencia.

Nombre de las divisiones de la Conferencia Este.

Máximo reboteador de los Suns.

Nláximo anotador de la toda base de datos en una temporada.

Sacar cuántas letras tiene el nombre de cada jugador de los grizzlies (Usar

función LENGTH).

¿Cuántas letras tiene el equipo con nombre más largo de la NBA (Ciudad y

Nombre)?

Práctica 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 número de partidos ganados por los equipos de la NBA.

Sacar la media de partidos ganados por los equipos del oeste.

¿Cuál es el pedido más caro del empleado que más clientes tiene?

181

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 191/324

Bases de Datos

4.13.

182

Resumen

Los conceptos clave de este capítulo son los siguientes:

La sentencia SELECT devuelve un conjunto de resultados en forma de tabla

compuesto porlas (o registros) y columnas (ocampos).

La cláusula FROM de la sentencia SELECT especica las tablas de las que

se extrae la información, y permite. a través de operaciones como el producto

cartesiano y las JOIN, construir conjuntos de datos de información relacionada.

Cuando se especica más de una tabla en la cláusula 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, además, composiciones externas (OUTER JOIN). Las NATURAL

JOIN, son un tipo de INNER JOIN que hace coincidir la información de dos

campos con el mismo nombre.

Los registros de una SELECT se pueden F ILTRAR mediante el uso de la

cláusula 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 patrón (LIKE), y limitación de registros

(LIMIT y numrows).

Para ordenar un conjunto de resultados se utiliza la palabra clave ORDERBY. Se puede ordenar ascendentemente (ASC) o descendentemente (DESC).

Las consultas de resumen se usanpara calcular información en base aconjuntos

o grupos de datos. Los grupos se construyen mediante la cláusula GROUP BY.

Los ltros sobre grupos se generan mediante la cláusula HAVING.

Las subconsultas son SELECT usadas para ltrar información mediante test

de comparación, Test de Existencia (EXISTS), Test cuanticados (ANY y

ALL). Pueden ser anidadas.

Las consultas reexivas son las que forman en su cláusula FROM la misma

tabla dos o más veces.

Las tablas derivadas son tablas virtuales generadas a través de consultas en

tiempo de ejecución. Tienen un alias que las identica.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 192/324

4.14.Test de repaso

1. ¿Para qué sirve DISTINCT en una

SELECT?

a) Para mostrar las las idénticasb) Para no mostrar las idénticas

c) Para mostrar, aparte, las las distintas

d) Ninguna de las anteriores

2. Un ltro WHERE puede incorporar

expresiones con

a) Operadores numéricos

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 ordenación

d) Encadenar varios condicionesde tipo AND

4. El test de valor nulo

a) Sirve para comprobarsi un conjunto dere-sultados es vacío

b) Sirve para comprobarsi el valor deun cam-po es desconocido

c) Sirve para comprobar si el valor de un cam-

po es o no es desconocido

d) Todas las anterioresson correctas

5. El patrón %AX_ _

seleccionaría el va-lor

a) XXXAX11

b) AX1111

c) XXXXIF

d) XXXAX1

Capítulo 4. Realización de Consultas

6. Filtrar por el número de resultados

a) No se puede de ninguna manera en Oracle

b) Se puede mediante la cláusula LIMIT en

Oracle

c) Se puede mediantela cláusulanumrows enOracle

d) No se puede hacer de ninguna manera en

MySQL

7.En SQL se puede ordenar por

a El número de columna (1,2,3. .

c Una expresión

d

)

b) El nombre de la columna

)

)Todas lasanteriores

8. Si junto a una función de columna, seselecciona 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 función 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 ¡

183

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 193/324

Bases de Datos

4.15.

184

.Realiza una lista con los operado-

res que puedes escribir en un ltro,clasicándolos según su tipo.

.La tabla alumno tiene un campo

llamado Nacionalidad. Escribe una

consulta para sacar los alumnos de

España, 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 cláusu-

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 ejecución

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 unejemplo 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 dosconsultas que hagan produzcan losmismos resultados.

¿Qué esuna consulta reexiva? Pon

un ejemplo de una sentencia SQL

con una consulta reflexiva.

¿Se podría utilizar una tabla deri-

vada dentro de una subconsulta?

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 194/324

CAPÍTULO 5

Tratamiento de los datos

Objetivos

C°ntenid°5 Identicar herramientas ysen-tencias para modicar el conte-e H&#39; t - ,erramlen asgra caspTOpOÏ nldo de labase dedatos

cionadas por el SGBD

Insertar, borrar y actualizarSentencia INSERT datos enlas tablasINSERT y SELECT

Incluir en una tabla informa-

sentencia UPDATE ción de una consulta

Adoptar medidas para mante-

ner la integridad y consistenciade la información

Sentencia DELETE

UPDATE y DELETE con sub-

consultas

Reconocer el funcionamientoBorrado y modicación de re-gistros con relaciones

Transacciones

de transacciones y anular par-cial o totalmente cambios pro-ducidos por una transacción

Identicar efectos de las políti-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 capítulo se detalla la sintaxis de las sentencias INSERT, UPDATE yDELETE. Se expone el tratamiento de las transacciones y los problemas delacceso concurrente a los datos. Además, se introducen las principales herra-mientas grácas de edición de datos y se explica cómo crear Vistas, usuarios yotorgar y revocar permisos.

185

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 195/324

Bases de Datos

5.1. Herramientas grácas para la edición de losdatos

Existen multitud de herramientas grácas para la edición de datos, algunas,incorporadas como parte del software del gestor de base de datos, por ejemplo, elentorno gráco de Access; otras herramientas se distribuyen como paquetes a añadira.l SGBD, como phplyAdmin de MySQL: yel software de terceros, programas porlos que hay que pagar una licencia aparte como TOAD o Aqua Data Studio. Otrosgestores como Oracle, no incorporan expresamente una herramienta de edición dedatos como tal (se pueden consultar, pero no se puede editar datos desde EnterpriseManager), perose aprovechande herramientasde tercerospara esta labor.

5.1.1. Edición con phpMyAdmin

Una de las muchas utilidades de phpMyAdmin es la inserción de datos a travésde formularios web, donde, de forma muy sencilla, se escriben los valores para cadacampo de la tabla deseada. Tan solo hay que seleccionar la pestaña Insertar yseleccionar la tabla donde se va a insertar los registros. Se rellenan los valores y sepulsa continuar.

Ép;jÉ=}._;JJL,"-.¿ u! Sorvidor: localhostb¡y late dodatos: startrokD¡suTabla: Aduna _ ¡Examinar inruttura ÍJSOL , Buscar ENWWÜJ Enar Im nar o racimos Ïvaciav ¿Eliminary 

Base dedatos Campo Tipo Función nulo Valorstamek (9) vCodigo mll) v 1 L

nmngNombre varcharíso) y597097,57 pimp!V i i: LIkm5 Fecha date o J 1531_o3:v26&#39; _ aEmNacional-dad vmmñzm vEELÏLÏÏW &#39; ""4 ;T " IHnculas=wm muCOHUHUBI| Mwmekhculas

E Ignorar

CampoTipo Funciónnulo ValorCodugo mui) y É z  &#39; "

N°m°&#39;°V3&#39;<"3&#39;(5° v wnnam Shazner

¡ha date v ¡sama-n 3

Nacionalidad varcharQO) v v/ VEEUU1

Continuar

Figura 5.1: Inserción de datos a través de phpmyadmin (paso 1).

De esta forma, se genera el código SQL automáticamente para insertar los valores.

¿Sabías que . . . 7En MySQL existela sintaxisextended insert, quepermite insertar varios registros con un solo INSERT. Véase Figura. 5.2

186

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 196/324

Capítulo 5. Tratamiento de 10s datos

2 lísi fueron insertadas.La Idde lala msertadaes:3

Ï-sín {nÏ --- -1 e!

9:,u"í&#39;l"v&#39;2-1. ,3L. Ez. "l: Editar]!(near códigoPHP]

Ejecutar lau)consultan) SOLen labaso dedatos sum-uk:mINSERT {VOsuryet una; 4 (5129:.hast; . Fejhn.Ivmnaïgaax¡ALUES Camposn 1. LeonardPuro;.l93lw83-26. ECWI. 12,¡Hizo! Shun!.¡LH-II . coúgo  _EEUUM Nombre

Fecha

NBCIOHEÍIÜBÚ

<<

Guardar estaconsulta enfovontos:Penmhr quetodo usuariopuede ¡raidera estefavoritoReempluar elfavorito QXISÍBHIQque tengael mnsmonombre

Cent: nuar

Figura 5.2: Inserción a través de phpmyadmin.(paso 2).

Para eliminar o modicar registros, se utiliza la pestaña Examinar:

HEHWÜMEstructura ¿[SOLBuscar idmorhr Enar Im rnds-anos¡Vaciar E Eliminar«v; noisrtrando-regcstvïais0- 1-(2total. LaConsul-Álamo seg) i

mmFW t": vLIIH 4 

PorllPorlnmnentol EdntarllExplicar e!SOL][CrearCÓÚIQO PHPI [ÁCUJBÍIZIÍ

Mostrar: ¿30 mas empezandode oen modononzontal v ympelurlos encabezadoscaoauooceldasDrgamzarsegúnla clave:nmgum y

v Opcuones

codigonombro loan Nacionalidad, X  1Leonard Nimoy 1931-03-26EEUU,>< 2 Williamshacner 1931-03-22eeuu

t Marcar todos/asI Desmarcartodos Paraloselementos que estan marcados:f x I

Mostrar: 3omas empezando deoen modohorizontal vy repeorios encabezadoscada 10o celdas

(¡p-racionessobralos nsuiudos dola zonsulu __ Vistadeampresuon .&#39;Prevusualuzacron para¡mpnmnrtdocumento completo)ExportarQCREATEVIEW |

Figura 5.3: Modicación y eliminación de datos a través de phpMyAdmin.

5.1.2. Access como entorno gráco 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 paraadministrar otros gestores de bases de datos. Esto es posible gracias a la utilización

de conectores ODBC. ODBC son las siglas de Open Database Connectivity. Es una

187

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 197/324

Bases de Datos

herramienta que, de forma estándar, permite conectar aplicaciones a cualquier gestor

de bases de datos. Muchas aplicaciones omáticas, como Excel, Word y el propio

Access permite el accesoremoto 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/ODBCDm Senna:Conguration

Cannon Puameters

Data SourceName:

:192. 168.224.128

Figura 5.4: Creación de un origen de datos ODBC para MySQL.

Esta referencia se crea en Windows a través del panel de Control, Herramientas

Administrativas, y la opción Onyenes de Datos ODBC. Cada origen de datos requie-

re, además de un nombre para el propio origen, el nombre del usuario, la contraseña,

el nombre de la base dedatos y los datos de conexión al servidor (Dirección IP y

puerto TCP / UDP por donde se conecta).A través 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 través de la pestaña de

Access Datos Externos, opción más, se elige la opción bases de datos de ODBC y a

continuación se siguen los pasos del asistente. Después, se elige la opción de vincular

al origen de datos creando una tabla vinculada, y nalmente, se selecciona la DSN

creada anteriormente desde la pestaña Origen de datos de equipo.

<> Actividad 5.1: Descargadesde lapágina webde mysqlwwmmysql.org, apar-tado Downloads, connectors, el conector ODBC para MySQL. Instálalo en tu

ordenador y Conéctate a la base de datos jardinería de la máquina virtual de

prácticas disponible en wwwgarcetaes. Si lo preeres, Conéctate a algún otro ser-

vidor que tengas disponible. (Asegúrate, en ese caso,de tener desactivada la opción

188

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 198/324

Capítulo 5. Tratamiento de los datos

bind-address delservidor mysqlen el chero / etc / mysql / my.cnfpara poderconectardesde fuerade la propia máquina virtual).

Creu 01:3:enema: HQVVÍÜHCÜÏ.ae nuue ¡nox ,7; 7 n, n: a * * me oA.» umvolml v &#39; su onoenoenaooaowwo Mo-óeuovdennom: ssEne! unade v. wE-conwones Ene!

Snavebmm Lgf}:  _ quruncas 7  gNowbvvedongeneowmToo DowpaónIrporïay ¡ Wdegmkm ¿aseoecaosnnmenï Sue-n"3V lrlnernv nnncuinr nun: tuude ¡nos th

,99m3 g, n,«m, no! ejemplo unanu neemos deSQL Set :1 panama-noHTML

lmccrur annzum aun euumenwHTML

Selecoone elorigen yel destnode losdatos.

ïamemrvnmdmdeduenúvucerwbsdomsenhbasedeomxui

¡mpwhreiuboldehumninevlbhhdehbnc vsselememesoeeudamnsrmnmmbaeris-daopmewec --nophonortndmwswhosveuzuosmmwxmaeaw- densidad.

encsrghccensuvawiwvuwodrvnbrndddatosucllsühmserekyïrvenbbseae

&#39;EéEEEEï¡h6En29-bïííAccesscreráuwuveuuermtwüimvi-nxabsamue-

mdommvvusvu.cnwbnurnhndosenbsnnmsenkznnsnreewü

l Amt! 1 (mehr

Figura 5.5: Vínculo de INIySQL a Access.

5.2. La sentencia INSERT

La sentencia INSERT de SQL permite insertar una la en una tabla, es decir,

añadir un registro de información 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. Despuésdel nombre de la tabla, de forma optativa, se pueden indicar las columnas dondese va a insertar la información. Si se especican las columnas, la lista de valores(VALUES) a insertar se asociará correlativamentecon los valores a las columnas

indicadas. Si no se especican las columnas, la lista de valores se escribirá conformeal orden de las columnas en la denición de la tabla. A continuación se muestran

unos cuantos ejemplos:

desc mascotas;+ ------- --+ ----------- --+ ---- --+-----+ ------- --+

I Field I Type I Null I Key I Default I

189

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 199/324

Bases de Datos

varchar(50)

varchar(50)

varchar(9)

#INSERT especificando la lista de columnasINSERT INTO mascotas (Codigo, Nombre, Raza)

VALUES

(1,Pequitas,GatoComún 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 Común 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 Común 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 están 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 vehículos, es decir, la columna marca tiene denida la

asignación por defecto del valor Seat.

Si se construye una sentencia INSERT con más campos en la lista de valores que

el número de columnas especicadas (o número de columnas de la tabla) el SGBD

informará del error.

#INSERT Erronea

insert into vehiculos (Matricula,Mode1o,Marca)

VALUES (4123 BFH,Ibiza);

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 200/324

Capítulo 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 admítiría algo del estilo:

insert into vehiculos (Matricula,Mode1o,Marca)

VALUES (4123 BFH,Ibiza,Seat),

(1314 FHD,To1edo,Seat),

(3923 GJS,León,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 vehículos

INSERT INTO Backupvehiculos

SELECT * FROM vehiculos;

La sentencia SELECT debe devolver tantas columnas como columnas tenga la

tabla donde se introduce la información. En el ejemplo anterior, la tabla Backup-

Vehiculos tiene una estructura idéntica a la tabla vehículos.

Se puede ver, además, que la sentencia SELECT puede ser tan compleja como

se desee,usando ltros, agrupaciones, ordenaciones, etc.

191

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 201/324

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 actualización 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 cláusula WHERE. Esta cláusula WHERE, es idéntica 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, habría 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 más 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 Inodicación de todos los registros de latabla, por ejemplo, para cambiar el peso de los jugadores de la NBA de libras a

kilos:

UPDATE jugadores SET Peso=Peso*0.4535;

192

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 202/324

Capítulo 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 idéntico al de la sentencia SELECT.

Si se desea borrar al jugador Jorge Garbajosa de la base de datos, habría 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 través de una sub-

consulta. La única limitación es que hay gestores que no permiten realizar cambios

en la tabla que se está leyendo a través de la subconsulta.

Por ejemplo. si se desea eliminar los empleados Representante Ventas que no

tengan clientes se podría codicar:

DELETE FROM Empleados

WHERE CodigoEmp1eado Not in

(SELECT CodigoEmp1eadoRepVentasFROM Clientes)

AND Puesto=Representante Ventas;

193

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 203/324

Bases de Datos

No sería 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 CodigoclienteFROM Clientes WHERE LimiteCredito=0);

ERROR 1093 (HY000): You cant specify target table Clientesfor update

in FROM clause

5.8. Borrado y modicación de registros con re-

laciones

Hay que tener en cuenta que no siempre se pueden borrar o modicar datos:

Considérese por ejemplo, que un cliente llama a una. empresapidiendo 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 debería informar de que no

es posible eliminar ese registro puesto que hay registros relacionados.

O por ejemplo, sedesea cambiar(UPDATE) el nombre deun equipo de la NBA

(que es su clave primaria), ¿qué sucede con los jugadores? También habrá que cam-

biar el nombre del equipo de los jugadores, puesto que el campo Nombre_Equipo esuna clave foránea.

En este punto, hay que recordar las cláusulas REFERENCES de la sentencia

CREATE TABLE para crear las relaciones de clave foránea-clave primaria de alguna

columna de una tabla:

definiciómreferencia:

REFERENCESnombre_tab1a[(nombre_columna,...)][ON DELETEopción_referencia]

[DN UPDATEopción_referencia]

opción_referencia:

CASCADEI SETNULL IND ACTIONLas cláusulasON DELETEy ON UPDATE personalizanel comportamientode

estos dos casos. Si por ejemplo, se intenta eliminar un registro con otros registros

194

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 204/324

Capítulo 5. Trataznientode los datos

relacionados,y se ha seleccionadola opción ON DELETE NOACTION y ONUPDATE NO ACTION el comportamientoseríael 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 clientey dos pagos pendientesINSERT 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 posibleDELETE FROM clientes WHERE dni=5555672L;

ERROR1451 (23000): Cannot delete or update a parent row:

a foreign key constraint fails (gestion/pagos_pendientes,CONSTRAINTpagos_pendientes_ibfk_1FÜREIGN KEY (dni) REFERENCES &#39;clienteS (&#39;dni))

#Se intenta modificar el dni del cliente y no lo permiteUPDATE clientes set dni=55555555L WHERE dni=5555672L;

ERROR1451(23000): Cannot delete or update a parent row:a foreign key constraint fails (gestion/pagos_pendientes,

CONSTRAINTpagos_pendientes_ibfk_1FOREIGN KEY (dni) REFERENCES clientes (dni))

#de igual modo si se intenta borrar la tabla clientes,

#tampoco podemosDROP TABLE clientes;

ERROR1217(23000): Cannot delete or updatea parent row: a foreign key constraint fails

Sin embargo,si la creaciónde la relaciónestuviesepersonalizadaconlas opcionesON UPDATE CASCADE y ON DELETE CASCADE, el comportamientosería:

195

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 205/324

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 INTOclientes

values (5555672L,Pepe Cifuentes,C/Los a1mendros,23);

INSERTINTO pagos_pendientes VALUES (5555672L,500);

INSERT INTOpagos_pendientes VALUES (5555672L,234.5);

#se borra el cliente...

DELETEFROM clientes WHERE dni=5555672L;

Query DK, 1 row affected (0.00 sec)

#además, 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 WHEREdni=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. EnOracle. solo existela cláusulaONDELETE.Para implemen-tar ON UPDATE. se debe generarun TRIGGER (Véase Capítulo 6)

196

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 206/324

Capítulo 5. Tratamiento de los datos

<> Actividad 5.2: Crea las tablasde mascotasy clientescon la opción ONUP-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 múltiples datos a través de una transacción. Una transacción

es un conjunto de sentencias SQL que se tratan como una sola instrucción (atómica).

Una transacción puede ser conrmada (commit). si todas las operaciones individua-

les seejecutaron correctamente,o, abortada (rollback) a la mitad de su ejecución si

hubo algún problema (por ejemplo, el producto pedido no está en stock, por tanto

no se puede generar el envío). Trabajar con transacciones puede ser esencial para

mantener la integridad de los datos. Por ejemplo, se puede dar el caso de que sedescuenta el stock de un producto antes de proceder a su envío, pero cuando se va a

generar la cabecera del pedido, la aplicación cliente sufre un corte en las comunica-

ciones y no da tiempo a generarlo. Esto supone una pérdida de stock. La transacción

garantiza la atomicidad de la operación: 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 transacción independiente. Para activar las transacciones

de múltiples sentencias hay que establecer el modo A U TOCOMMI T=OF F.A partir

de esemomento, todos los comandos SQL enviados al SGBD tendrán que terminarse

con una orden COMMIT o una orden ROLLBACK. De este modo, se asegura la

integridad de los datos a un nivel más alto. Muchos SGBD requieren de una orden

START TRANS/l CTI ON o START WORK para comenzar una transacción y otros

lo hacen de forma implícita al establecer el modo autocommit=off.

#MySQL, 3 formas para comenzar una transacción:

SET AUTDCOMMIT=O; #6

START TRANSACTIDN; #6BEGIN WORK;

--Oracle:

SET AUTOCOMIT OFF

Para terminar una transacción, tanto en MySQL como en ORACLE, hay que acep-

tar, o rechazar los cambios mediante:

197

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 207/324

Bases de Datos

#La palabra clave WORK es opcionalCOMMIT WORK; #Acepta los cambios.RÜLLBACK WORK; #Cancela los cambios

Cualquier conjunto de sentencias SQL se considera cancelado si termina abrupta-mente la sesión de un usuario sin hacer COl\Il\IIT. Un ejemplo de transacción enMySQL sería la siguiente:

SET AUTÜCDMMIT 0;

#se actualiza el stock

UPDATE Productos SET Stock=Stock-2 WHERE CodigoProducto=AAAF102;#se inserta la cabecera del pedidoINSERTINTO Pedidos VALUES

(25,now(),Francisco Garcia,Pendiente de Entrega);#se inserta el detalle del pedidoINSERTINTO Deta11ePedidos

(CodigoPedido,CodigoProducto,Unidades) VALUES(25,AAAF102,2);

#aceptar transacciónCOMMIT WORK;

5.10. Acceso concurrente a los datos

Cuando se utilizan transacciones, pueden suceder problemas de concurrencia enel acceso a los datos, es decir, problemas ocasionados por el acceso al mismo datode dos transacciones distintas. Estos problemas están descritos por SQL estándar yson los siguientes:

Dirty Read (Lectura Sucia). Una transacciónlee datosescritos poruna transac-ción que no ha hecho COMMIT.

Nonrepeateable Read (Lectura No Repetible). Una transacción vuelvealeer

datos que leyó previamente y encuentra que han sido modicados por otratransacción.

Phantom Read (Lectura Fantasma). Una transacción lee unos datos que noexistían cuando se inició la transacción.

Cuando se trabaja con transacciones, el SGBD puede bloquear conjuntos de datospara evitar o permitir que sucedan estos problemas. Según el nivel de concurrencia

198

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 208/324

Capítulo 5. Tratamiento de los datos

que se desee, esposible solicitar al SGBD cuatro niveles de aislamiento. Un nivel deaislamiento dene cómo los cambios hechos por una transacción son visibles a otrastransacciones:

Read Uncommited (Lectura no acometida). Permite que sucedanlos trespro-blemas. Las sentencias SELECT son efectuadas sin realizar bloqueos, portanto, todos los cambios hechos por una transacción pueden verlos las otrastransacciones.

Read Commited (Lectura acometida). Los datos leídos por una transacciónpueden ser modicados por otras transacciones. Se pueden dar los problemasde Phantom Read y Non Repeteable Read.

Repeateable Read (Lectura Repetible). Tan solo se permite el problema delPhantom Read. Consiste en que ningún registro leído con un SELECT se puedecambiar en otra transacción.

Serializable. Las transacciones ocurren de forma totalmente aislada a otras transac-

ciones. Sebloquean las transacciones de tal manera que ocurren unas detrás deotras, sin capacidad de concurrencia. El SGBD las ejecuta concurrentementesi 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 cambiándolo en el chero deconguración mycnf o ejecutando:

SET TRANSACTION ISÜLATION

LEVEL {READ UNCÜMMITTED I READ COMMITTEDI REPEATABLE READ I SERIALIZABLE}

En Oracle, el nivel por defecto es READ COMMI T ED y,además de este, solopermite SERIALIZABLE. Se puede cambiar ejecutando el comando:

SET TRANSACTIDN ISÜLATIDN LEVEL {READ CÜMMITTEDISERIALIZABLE};

¿Sabías que . .. 7Algunas transacciones puedenquedar interbloqueadasdependiendo del nivel de aislamiento seleccionado. Esta situación de interblo-

queo, odeadlock entre dos transacciones. consiste en que ninguna de ellas puedeseguir ejecutándose porque la primera intenta acceder a un bloque de datos quetiene bloqueada la segunda, y la segunda, intenta acceder a un bloque de datosque tiene bloqueada la primera. En esta situación de interbloqueo, el SGBDelimina a una de las dos transacciones. siendo la víctima del interbloqueo laque hace rollback de sus operaciones.

199

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 209/324

Bases de Datos

5.10.1. Ejemplo de problemas en el acceso concurrente

A continuación se muestran, mediante una serie de consultas en MySQL cómo

reproducir los problemas típicos de la concurrencia en bases dedatos. 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-READI+ --------------- -+

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 continuación, 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

#sesión 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 210/324

Capítulo 5. Tratamiento de los datos

La sesión 1 inició una transacción para hacer operaciones y segundos despuésuna

segunda sesión realiza cambios en la tabla mientras la transacción continúa en la

sesión 1:Lectura no repetible-2

#sesión 2

mysq1> update cochesset nombre=vo1vovhere nombre=audi;QueryDK, 1row affected (0.00 sec)

Rowsmatched: 1Changed: 1Warnings: 0

La sesión 2 ha realizado un cambio en los datos, por tanto, la transacción de la

primera sesión no será capaz de reproducir la situación 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 II volvo |

+ ------ --+

3 rows in set (0.00 sec)

La lectura fantasma

Si a continuación, el cliente 2 inserta un nuevo registro en la tabla, la sesión 1podrá 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 211/324

Bases de Datos

La potencial situación problemática tanto de la lectura no repetible como de la

lectura fantasma es que datos que participan en una transacción cambian o aparecen

sin previo aviso, pudiendo provocar que la transacción genere información que no es

del todo íntegra.

La lectura sucia

El último problema, ymás grave, es el de la lectura sucia. A continuación, si-

guiendo con las dos sesiones delos ejemplos anteriores, se reproduce esta situación.

En este caso, la sesión 2 inicia una transacción y realiza operaciones DML sobre los

datos:

Lectura sucia-1

#sesión 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

Después, la sesión 1 lee los datos que hay en la tabla:

Lectura sucia-2

#sesión 1

mysq1> select t from coches;

rows in set (0.00sec)

Se puedeobservar, que gracias a esa lectura la sesión 1 puede generar nueva informa-

ción o realizar algún trabajo que implique trabajar con la información modicada

por la sesión 2. Pero, supóngase que ahora, la sesión 2 realiza un rollback de sus

operaciones:

202

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 212/324

Capítulo 5. Tratamiento de 10s datos

Lectura sucia-3

#sesión 2

mysq1> rollback;Query OK, 0rows affected (0.00 sec)

Se puede observar que la sesión 1, aunque ya no puede acceder a la información que

fue insertada por la sesión 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

sesión 1

mysq1> select *  from coches;

rows in set (0.00 sec)

5.11. El acceso a la información

Cuando se administra la. seguridad en el acceso a información de una base dedatos, es común 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 través de

SQL explicando el funcionamiento básico 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 213/324

Bases de Datos

por un proceso de compilación, la vista es una consulta cuya denición ha sido

almacenada previamente y que ya ha sido compilada, siendo por tanto el tiempo de

ejecución bastante menor. También tiene una implicación importante en el hecho

de que un usuario podría no tener acceso a la información 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 Usuariode MadridL a

xústaii j

CLIENTES

DE

Figura 5.6: Vistas.

Por ejemplo, en una tabla de clientes, un usuario de una ocina de Madrid

podría tener solo acceso a la información de los clientes de Madrid, y tan solo a

ciertos campos. De esta manera, no tendría acceso a ningun campo de la tabla de

clientes y, sin embargo, podría tener acceso auna 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 ejecución del CREATE VIEWprovoca que secompile 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 214/324

Capítulo 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;

Además, se pueden crear vistas para que los usuarios no expertos puedan acceder

de forma fácil a la información, proporcionándoles, a través de una vista, información

obtenida a través de una sentencia SQL compleja:

CREATE VIEWVistaPedidos (CodigoPedido,C1iente,Tota1) AS

SELECT CodigoPedido, NombreC1iente, SUM(Cantidad*PrecioUnidad)FROM Clientes NATURAL JOIN Pedidos NATURAL JOIN Deta11ePedidos

GROUP BYCodigoPedido;

Para eliminar una vista se hace uso del comando DROP VIEW:

DROP VIEW [esquema.]nombre_vista;

Hay pequeñas variaciones en la sintaxis de los comandos CREATE VIEW y

DROP VIEW dependiendo del SGBD que se utilice. Además, se dispone tambiénde un comando ALTER VIEW para hacer modicaciones a la denición de la vista.

Para más información 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 USERnombre_usuario IDENTIFIED BY password [opciones];

Esta sencilla sentencia crea una cuenta usuario que permite la autenticación

de un usuario en el SGBD a traves de la password identicada mediante la opción

IDENTIFIED BY. Esta sintaxis de create user es válida tanto para MySQL como

205

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 215/324

Bases de Datos

para Oracle, aunque a Oracle se le pueden incluir multitud de opciones extras paradar características adicionales, como la asignación de cuota para añadir informacióna un tablespace o bloquear la cuenta temporalmente. En DB2 no se utiliza el co-mando CREATE USER puesto que la mayor parte de la gestión de usuarios se hacede forma integrada con el Sistema Operativo. A continua.ción se muestran ejemplos

de creación de usuarios:

#creación de usuario en MySQL

CREATE USER paco IDENTIFIED BY o99238kjkA;

--creación de usuario en Oracle

CREATE USER pacoIDENTIFIED BY o99238kjkADEFAULT TABLESPACE Nominas

QUÜTA UNLIMITED DN Nominas

ACCÜUNT LOCK;

<> Actividad 5.32 Crealos usuariosPedro yJavier enlos SGBDmysql y Oraclecon passwords apropiadas. En Oracle, asigna quota de 1MB en algún tablespace.

Para eliminar usuarios, se puede utilizar la sentencia DROP USER:

DRÜP USER nombre_usuario [CASCADE];

En Oracle, se puede incluir el token CASCADE para indicar que junto con elusuario se borren todos los objetos de su esquema. En l\iIySQL, se pueden borrarla 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 queCREATE USER.

--Modificación 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 propiatabla mysq1.user del sistema. Por ejemplo, para cambiar el host desde el que el

206

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 216/324

Capítulo 5. Tratamiento de los datos

usuario Javier se puede conectar, habría que ejecutar la siguiente sentencia. Cuando

en MySQL se modica algún permiso modicando el contenido de las tablas del

sistema, hay que ejecutar además 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.

#Modificación de usuario en mysql.

UPDATE mysql.user

SET host=192.168.3.1 where user=JAVIER;

FLUSH PRIVILEGES;

En MySQL también se puede renombrar un usuario conservando todos sus pri-

vilegios utilizando el comando RENAME USER ycambiar la password mediante el

comando SET PASSWORD:

#Modificación de usuarios en MySQL. Cambiar nombre y password al usuario Paco

RENAME USER Paco@1oca1host to PacoSanchez@1ocalhost;

SET PASSWORDfor Pacoclocalhost =PASSw0RD(nueva_pass);

<> Actividad 5.4: Ejecuta el siguientecomando paracambiar lapassword deunusuario en mysql:

UPDATE mysql.user

SET Password = PASSWORD("nueva_pwd")

WHERE user=paco AND host=loca1host;

o Actividad 5.5: Cambia la passwordde los usuarios Pedroy Javier creados en

Oracle y bloquea sus cuentas mediante la opción 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 217/324

Bases de Datos

comando REVOKE. Estos comandos varian en su sintaxis dependiendo del SGBDque se está usuando puesto que el sistema de seguridad de cada uno es distinto.Además, inuye también la forma en que el subsistema de permisos del SGBD seintegra 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 countI MAX_UPDATES_PER_HOUR countI MAX_CDNNECTIÜNS_PER_HDUR countI MAX_USER_CONNECTIONS count

En MySQL se puede otorgar a un usuario permisos para hacer cualquier opera-

ción 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, Dirección yTelefono de la tabla clientes:

GRANTSELECT (Nombrecliente,Telefono,Ciudad)ON Clientes TU paco@1oca1host;

Con esta sentencia el usuario paco@localhost solo podrá seleccionar las colum-nas NombreCliente, Telefono y Ciudad de la tabla clientes, siéndole denegada unaconsulta del tipo select * from clientes.

tipo_privi1egio es la clase de permiso que puede ser a otorgar, típicamente puedenser select, insert, update. . . .Pueden ser de los más variados. En el Cuadro 5.3 dela página 210 hay algunos ejemplos de los permisos disponibles en MySQL.

208

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 218/324

Capítulo 5. Ïiatamiento de los datos

Estos tipos de privilegio se pueden aplicar a las siguientes expresiones:

Expresión Se aplica el permiso anombre_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 datosbase_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 elpermiso. Si el usuario user no existe, se crea, opcionalmente con la password indicadamediante la cláusula identied by.

Adicionalmente, se puede indicar ciertas opciones precedidas de la cláusula WITH:

ExpresiónGRANT OPTION Permite conceder a otros usuarios los permisos

que tiene el usuario, por tanto, el administradordebe ser muy cauto a la hora de concederesta opción a los usuarios de la base de datos.

MAX_QUERIES_PER_HOUR countPermite restringir el número de consultaspor hora que puede realizar un usuario.

MAX_UPDATES_PER_HOUR countPermite restringir el número de modicaciones

MAX-CONNECTIONS_PER_HOUR countPermite restringir las conexiones(logins) por hora que realiza un usuario.

MAX_USER-CONNECTIONS countAPermite limitar el número deconexionessimultáneas 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 219/324

Bases de Datos

Privilegio SignicadoALL [PRIVILEGES] Da todos los permisossimples exceptoGRANT OPTIONALTER Permite el uso de ALTER TABLE

ALTER ROUTINE Modica o borra rutinas almacenadas

CREATE Permite el uso de CREATE TABLE

CREATE ROUTINE Crea rutinas almacenadasCREATE 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 VIEWCREATE 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 INFILEINDEX 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 dónde

están los servidores maestro o esclavo

Necesario para los esclavos de replicación

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

Sinónimo de no privileges,

permite únicamente la conexión al gestor

GRANT OPTION

Cuadro 5.3: Tipos de privilegios en mjysql.

REPLICATION SLAVE

SELECTSHOW DATABASES

SHOW VIEW

SHUTDOWN

UPDATEUSAGE

10

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 220/324

Capítulo 5. Tratamiento de los datos

Algunos ejemplos de consultas para asignación de permisos en MySQL son lossiguientes:

#0torga permisos de select e insert a todas las tablas de nbaGRANT SELECT, INSERTon nba.* T0paco@loca1host;

#0torga todos los privilegios a la tabla Clientes de jardineriaGRANT ALL PRIVILEGES on jardineria.C1ientes TDpaco©localhost;

#Ütorga permisos de select a todas las tablas de todas las bases de datos

#permitiendo al usuario ceder esos permisos a otros usuariosGRANT SELECTon *.* to paco@1oca1host WITH GRANTDPTIÜN;

#0torga permisos de SELECT, INSERT,UPDATE y DELETEcon un límite de 10#consu1tas a la hora en la tabla jugadores de la nba

GRANTSELECT,INSERT,UPDATE,DELETEon nba.jugadores to paco@1oca1hostWITHMAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HGUR 10

La sentencia revoke deniega permisos a un usuario sobre un objeto. A continuaciónse 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 continuación se muestranunos cuantos ejemplos:

#quita el permiso de select en la tabla jardineria.C1ienterevoke 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 tablasdel catálogo de metadatos, es decir, las tablas de la base de datos mysql creadaen toda instalación del SGBDy que almacena toda la información sobre todos los

211

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 221/324

Bases de Datos

ob jetos manejados por el gestor. En esta base de datos existen 5 tablas relacionadascon 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 otorgary denegar permisos a nivel de usuario, base de datos, equipo, tablas y columnasrespectivamente.

A continuación se ilustra cómo MySQL procesa una consulta. Al recibir la ins-trucción SQL, se comprueba si el acceso a los diversos objetos están autorizados encualquiera de estas tablas. Si ninguno de los niveles permite el acceso, la consultaes denegada por falta de permisos.

5.14.2.

El sistema de privilegios de Oracle clasica los permisos en dos tipos, privilegiosdel sistema y privilegios de objetos. Además 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 anivel db. y @host

Grado 3; Consulta

Grado 4: Consulta

dbiablacolumna

AUTORIZACIÓN

DEEJECUCIONDE CONSULTA

CONSULTA DEPERMISOS EN

¡Va -&#39;- LA TABLAHSH

PERMISOS ENLAS TABLASob ha

PERMISOS ENLA TABLAStables a riv

de permisos anivel dbiabla

o - nPERMISOS EN

LA TABLAS-,u .-

de permisos anivel

N0

ACCESO

 /, DENEGADO

Figura 5.7: Estructura de permisos en mysql.

El sistema de privilegios de Oracle

rio. Un usuario puede pertenecer a múltiples roles.

212

Devuelveresultados

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 222/324

Capítulo 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 través 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_sistemaI 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 cláusula 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 223/324

Bases de Datos

Privilegio 

ALTERDATABASEALTER SYSTEM

AUDIT SYSTEM

CREATE [ANY]

ALTER [ANY] objeto

SYSDBA

ANALYZE [ANY] objeto

"asignar el rolADMINISTRACION a JavierGRANT ADMINISTRACION to Javier;

I Un privilegiodeobjetoo sistemaa todoel mundo(PUBLIC).

--pemiso de acceso y consumo de recurso a todos

GRANT CONNECT,RESOURCE toPUBLIC;

--permiso de update sobre las columnas Nombrey email de empleadosGRANT UPDATE(Nombre, email) UN Jardineria.Emp1eados to Public;

PrivilegioALL[PRIVILEGESDELETE

INSERT

SELECT

UPDATE

REFERENCES

EXECUTEALTER

INDEX

SignicadoDa todoslospermisossimplesincluidoGRANT OPTIONPermite el uso deDELETE

Permite el uso deINSERT

Permite el uso deSELECT

Permite el uso deUPDATE

Permite crear claves foráneas

Permite ejecutar un procedimiento,función,paquete.. .Permite cambiar la denición de un objetoPermite crear índices de una tabla

l

Cuadro 5.4: Tipos de privilegiosde objeto en Oracle.

¿ Ï  

En

ÉPermite ejecutar el comandoALTER DATABASEPermite el uso deALTER SYSTEM

Permite la auditoría mediante la sentenciaAUDITPermite el usodeCREATE para un tipo de objeto(TABLE, VIEW, PROCEDURE, USER, PROFILE, etc...)Permite el usodeALTER para un tipo de objeto

(TABLE, VIEW, PROCEDURE, USER, PROFILE, etc...)Permite ejecutar operacionesde paraday puestaen marchade la BBDD

objeto

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 224/324

Capítulo 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_sistemaI 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 todosREVOKE 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 opción WITH GRANT o WITH ADMIN.

Los roles

Para simplicar la tarea de organizar los permisos, Oracle permite la creación

de Roles con la sentencia CREATE ROLE:

CREATE ROLEnombre_ro1 [opciones_identificacion];

opciones_identificacion:NOT IDENTIFIED

I IDENTIFIED

{BYpassword IEXTERNALLY IGLOBALLY IUSING [esquema].pac

Al crear un rol, se puede especicar el tipo de autenticación. Si se especica

NOT IDENTIFIED, el rol está autorizado por la base de datos y no es necesaria

ninguna contraseña para. activarlo, sin embargo si se especica IDENTIFIED, el

215

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 225/324

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 contraseña antes de activar el

papel.

nEXTERNALLY,para ser autorizado mediante un servicio externo (como el sistema

operativo).

I GLÜBALLY,que cede la autorización al servicio Oracle Security Service.

ISi se elige USING, se elige crear un rol de aplicación segura, es decir, un rolque 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 explícitamente mediante la orden GRANT y los permisos quetengan los roles por defecto del usuario. Para asignar un rol por defecto a un usuariose utiliza la sentencia ALTER USER de la siguiente forma:

ALTER USERusuario DEFAULT RDLE [opciones_ro1];

opciones_ro1:

rol[, rol]...I ALL[EXCEPT rol]I NÜNE

Se puede anular el rol por defecto mediante la opción N ONE, o habilitar todos losroles mediante ALL, o todos menos uno mediante ALLEXCEPT rol, o concedervarios separados por coma. Por ejemplo, para asignar los roles ADMINISTRACIONy CONTABILIDAD al usuario Javier:

GRANT Contabilidad,Administracion to Javier;

ALTER USER Javier DEFAULT ROLE ADMINISTRACION,CONTABILIDAD;

Finalmente, se puede utilizar también la sentencia SET ROLE para dotar mo-mentáneamente de ciertos privilegios a un usuario que tenga autorizado su uso. Porejemplo, se puede crear el rol ALMACEN, con todos los privilegios sobre la tablaProductos y asignarselo al usuario Javier. Si el usuario Javier no activa el rol AL-MACEN mediante SET ROLE y su contraseña, no podrá disfrutar de sus privilegios

216

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 226/324

Capítulo 5. Tratamiento de los datos

CREATE ROLE ALMACEN IDENTIFIED BY AlmacenPwd;

GRANT ALL Privileges UN Jardineria.Productos TD ALMACEN;GRANT ALMACEN to Javier;

--conexión con el usuario JavierSQL> select count(*) from Jardineria.productos;

select count(*)from Jardineria.productos

*ERRORen línea 1:

ORA-00942: la tabla o vista no existe

SQL> SET ROLE ALMACEN identified by A1macenPwd;Rol definido.

SQL> select count(*) from Jardineria.productos;

Creación 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 queconcede recursos ilimitados a todos los usuarios. Para evitar esto, se puede haceruso de la sentencia CREATE PROFILE para crear nuevos perles.

CREATE PROFILE perfil LIMITrecursos ...recursos = 

recurso {cantidad I UNLIMITED I DEFAULT }

I passwordrecurso = 

SESSIONS_PER_USER

I CPU_PER_SESSIONI CPU_PER_CALL

I CONNECT_TIMEI IDLE_TIME

I LOGICAL_READS_PER_SESSIONÍ LÜGICAL_READS_PER_CALLI COMPOSITE_LIMITI PRIVATE_SGA

password =

parametro {cantidad I UNLIMITED I DEFAULT }

I PASSw0RD_VERIFY_FUNCTIDN {función I NULL I DEFAULT }

217

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 227/324

Bases de Datos

parametro = 

FAILED_LÜGIN_ATTEMPTS

IPASSWORD_LIFE_TIMEI PASSWÜRD_REUSE_TIMEl PASSWÜRD_REUSE_MAX

|

IPASSWORD_LOCK_TIME

PASSWORD_GRACE_TIME

Los diferentes límites que se pueden utilizar están denidos en la siguiente tabla:

Límite

SESSIONS_PER_USER

CPU.PER_SESSION

CPU_PER_CALL

CONNECT_TIME

IDLE_TIME

LOGICALBEADS_PER_SESSION

LOGICALBEADS-PER-CALL

PRIVATELSGA

COMPOSITELLIMIT

Flmción

Número máximo de sesiones abiertas a la vezpor un usuario

Tiempo límite para una sesión expresadoen centésimas de segundosTiempo límite de respuesta.para una. llamada(parse. fetch o ejecución) en centésimas de segundosTiempo límite total de una sesión,expresado en minutosTiempo máximo de inactividad de una sesiónexpresa.dos enminutos

Número máximo de bloques de datos leidosen una sesión

Número máximo de bloques de datos leidosen una llamada

Tamaño de memoria que una sesión puedereservar del espacio privado de memoria del SGACoste total en recursos de una sesión,expresado mediante el promedio de ciertos parámetros

Cuadro 5.6: Tipos de recursos.

Por ejemplo, se puede crear el perl OPERADOR con los siguientes límites:

CREATE PROFILE OPERADOR LIMIT

--5 sesiones concurrentes

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 228/324

Capítulo 5. Tratamiento de Ios datos

CONNECT_TIME 120 -- 2 horas totales de conexion

J

También es posible alterar un perl mediante la sentencia ALTER PROFILE:

--modificar el perfil DEFAULT para que la password no caduque

alter profile DEFAULTLIMITPASSWORD\_LIFE\_TIME Unlimited;

--modificar el perfil OPERADOR para que su limite de sesión sea de 1hora

-- y un máximo de 10 sesiones concurrentes

alter profile OPERADORLIMITCONNECT_TIME 60 SESSIONS_PER_USER 10;

Un perl se puede asignar en el momento de crear o modicar el usuario, por

ejemplo:

-- creación 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 gestión de los privilegios de acceso:

1. Autenticación

2. Autorización

3. Privilegio

La autenticación busca responder a las siguientes preguntas: ¿quién puede acce-

der a la instancia o base de datosï, ¿dónde se vericará la password de usuario? En

DB2 los usuarios de autenticación deben estar dados de alta en el sistema operati-

vo, es decir, que para resolver la primera pregunta, bastaría con decir que solo los

usuarios del sistema pueden acceder a la instancia o base de datos, pero ¡ojo!, losusuarios pueden serlo del sistema local o de un sistema cliente remoto que esté in-

tentando la conexión, esto sería así en función de cómo se dena la variada política

de autenticación que dará respuesta a la segunda pregunta. La política de autenti-

cación no solo permite o no la conexión desde clientes, sino que, entre otras cosas,

indica si habrá encriptación o no del usuario y password, e incluso de los datos

intercambiados durante la comunicación con el servidor.

219

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 229/324

Bases de Datos

La autorización hace referencia al nivel de permisos con que un usuario materializa

el acceso a la instancia o base de datos. También determina los comandos que el

usuario puede ejecutar, los datos que puede leer o modicar, o los tipos de objetos de

base dedatos que se le permite crear, modicar o borrar. Todas estas consideraciones

están preprogramadas en siete grupos de autorizaciones que pueden ser concedidos,

en función del caso, aun grupo de usuarios o a un usuario determinado.

ISYSADM: es el único al que se le permite modicar los parámetros 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 administración (crear y bo-

rrar bases de datos y tablespaces) y mantenimiento (hacer backups, pasar

estadísticas, actualizarparámetros de la base de datos), pero no podrá ac-

ceder a ningún dato de las bases de datos a no ser que le sean concedidosexplícitamente los privilegios adecuados.

nSYSMAINT: solo puede ejecutar labores de mantenimiento (hacer backups,

pasar estadísticas, actualizar parámetros de la base de datos).

ISYSMON: pueden obtener fotos estáticas de monitorización (en inglés 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 estadísticas, y conceder o quitar privile-

gios, pero en ningún caso podrá borrar la base de datos, ni crear tablespaces,

nihacer backups, o modicar parámetros de conguración.

ILOAD: permite ejecutar cargas de datos sobre las tablas y pasar estadísticas.

Es un permiso a nivel de usuario.

ISECADM: es la autorización encargada de gestionar toda la implementación

de las LBAC (del inglés 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 datoso 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 típicos ALTER, DROP.. .

220

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 230/324

Capítulo 5. Tratamiento de los datos

5.15. Prácticas Resueltas

Práctica 5.1: Inserciones, Actualizacionesy Borrados

Con la base de datos Jardinería, 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 2productoscon una transacción.

5. Actualiza el código del cliente insertado yaverigua si hubo cambios en las

tablas relacionadas.

6. Borra el cliente y verifica si hubo cambios.

actua1iza.sq1

#1

INSERT INTOOficinas VALUES

(FUE-ES,Fuen1abrada,España,Madrid,

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

 INSERTINTOEmpleados(CodigoEmp1eado,Nombre,

Apellidol,Email,Codigo0ficina,Puesto) VALUES

(400,Ismae1,Sánchez,isanchezQjardineria.com,FUE-ES,Rep.Ventas);#3

INSERT INTOC1ientes(CodigoC1iente, Nombrecliente, Telefono,

CodigoEmp1eadoRepVentas)VALUES(288,Riegos Pérez,918882763,400);#4

START TRANSACTION;

INSERT INTOPedidos (CodigoPedido, FechaPedido, Estado, CodigoC1iente)

VALUES(1900,2010-O6-03,Pendiente,288);

INSERT INTODetallePedidos (CodigoPedido, CodigoProducto,Cantidad,

PrecioUnidad,NumeroLinea) VALUES(1900,OR-99,1,15.99,1);

INSERT INTODetal1ePedidos (CodigoPedido, CodigoProducto ,Cantidad,

PrecioUnidad,NumeroLinea) VALUES(1900,OR-251,3,168,2);

COMIT WORK;#5

UPDATEClientes SET CodigoC1iente=290 WHERECodigoC1iente=288;

#no permite la modificación, deberia tener la FK con ON UPDATE CASCADE

221

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 231/324

Bases de Datos 

#6

DELETE FROM Clientes WHERE CodigoCliente=288;

#tampoco permite el borrado, debería tener la FK con ON DELETE CASCADE

Práctica 5.2: Actualizaciones y borrados consubconsultasUsa subconsultas en los ltros y realiza las siguientes actualizacionesyborrados:

1. Borra los clientes que no tengan pedidos.

2. Incrementa enun 20 (7o el precio de los productos queno tenganpedidos.

3. Borra los pagos del cliente con menor límite de crédito.

4. Establece a Oel límite de crédito del cliente que menos unidades pedidas tengadel producto OR-179.

#1

delete from Clientes whereCodigoCliente not in

(Select distinct Codigocliente from Pedidos);#2 

update Productos set PrecioVenta=PrecioVenta*1.2 wherenot exists(Select distinct CodigoProducto from DetallePedidoswhereDetallePedidos.CodigoProducto=Productos.CodigoProducto);#3

delete from Pagos whereCodigoCliente=(Select Codigocliente from Clientes whereLimiteCredito =

(Select min(LimiteCredito) from Clientes)

);#4

update Clientes set LimiteCredito=0 whereCodigoCliente=

(Select Codigocliente from Pedidos natural join Deta11ePedidoswhereCantidad =(Select Min(Cantidad) From Deta11ePedidos where

CodigoProducto=0R-179) AND CodigoProducto=ÜR-179);

222

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 232/324

Capítulo 5. Tratamiento de los datos

5.16. Prácticas Propuestas

Práctica 5.3: Vincular tablas a través de Access /  ODBCMediante el driver ODBC para MySQL, enlaza a una BBDD Access las tablas de

la NBA y las tablas de la BBDD jardineria. A continuación, realiza las siguientesacciones:

1. Exporta a Excel la tabla jugadores de la NBA.

2. Con Word, crea una carta modelo de felicitación de navidad a los clientes de

la base de datos y combina la correspondencia para que, automáticamente, 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 después, inserta dos jugadores de la NBA siguiendo

el mismo procedimiento. Hay que asegurarse de que, efectivamente, están los

registros insertados.

Se puede repetir esta misma operación 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. <>

Práctica 5.4: Actualizaciones y borrados variados

1. Modica la tabla DetallePedido para insertar un campo numérico llamado IVA.

Mediante una transacción, establece el valor de ese campo al 18 para aquellos

registros cuyo pedido tenga fecha a partir de Julio de 2010. A continuaciónactualiza el resto de Pedidos estableciendo al 16 el IVA.

2. Modica la tabla DetallePedido para incorporar un campo numérico llamado

TotalLinea, y actualiza todos sus registros para calcular su valor con la fórmula

TotalLineazPrecioUnidad*Cantidad*IVA/ 100.

3. Borra el cliente que menor límite de crédito tenga. ¿Es posible borrarlo solo

con una consulta? ¿Por qué?

4. A través de phpMyAdmin o, mediante Access (vinculado vía ODBC), inserta

dos clientes nuevos para un empleado a tu elección. A continuación, inserta un

pedido con al menos 3 líneas de detalle. Después, ejecuta una consulta para

rebajar enun 5%el precio delos productosque seanInás carosde 200euros.

<>

223

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 233/324

Bases de Datos

Práctica 5.5: Inserciones, Actualizacionesy Borrados

En Oracle, con la BBDD Jardinería, codica en SQL las siguientes acciones:

1.

2.

3.

6.

224

Inserta una ocina con sede en Leganés 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 transacción.

.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

foránea con la cláusula ON DELETE CASCADE.

.Ejecuta el siguiente código para simular el ON UPDATE CASCADE de latabla Pedidos y modica el código de algún pedido. Comprueba que hayamodicado los registros relacionados en la tabla DetallePedidoz

CREATE OR REPLACE TRIGGER Actua1izaPedidos

AFTER UPDATEUN Pedidos FUR EACHROW 3

BEGIN

UPDATE Deta11ePedidos SET CodigoPedido =

WHERE CodigoPedido= :o1d.CodigoPedido;END Actualizaclientes;

:new.CodigoPedido

Crea ahora el siguiente disparador y prueba a cambiarle el código 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

UPDATEClientes SETCodigoEmp1eadoRepVentas =:new.CodígoEmp1eaWHERE CodigoEmp1eadoRepVentas =:o1d.CodigoEmp1eado;

UPDATE Empleados SET CodigoJefe = :new.CodigoEmp1eado

WHERE CodigoJefe = :old.CodigoEmp1eado;

END Actualizaclientes;

/

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 234/324

Capítulo 5. Tratamiento de los datos

Práctica 5.6: MySQL: Crear usuarios y asignar permisosenlocal

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 conexión y comprueba que se pueda conectar.

2. Crea un usuario llamado juan@localhost con la sintaxis grant con permisos de

solo conexión y comprueba que se pueda conectar.

3. Otorga al usuario paco@localhost permisosde 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. Conéctate con el usuario juan y otorga permisos a paco de selección en la tabla

 jardineriaEmpleados.

6. Quítale ahora los permisos a paco de selección sobrela tabla jardineria.Clientes.

7. Conéctate 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. Conéctate con juan y ejecuta la query SELECT * from jardineriaOcinas

¿Qué sucede?.

10. Borra el usuario paco@localhost.

225

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 235/324

Bases de Datos

Práctica 5.7: MySQL: Crear usuarios y asignar permisosenremoto

Realiza las siguientes operaciones y almacena los comandos y los resultados en un chero:

1.

226

Crea un nuevo usuario llamado usuarioíldireccionip donde direccion_ip es una

máquina de un compañero tuyo y usuario su nombre.

.Otórgale 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 seael especicado (127.0.0.1). Asegúratede reiniciar el servidor..Pide a tu compañero que se conecte desde su máquina y que averigue qué per-

misos le has otorgado. El a tí te pedirá lo mismo, es decir, que te conectes a

su máquina, indica qué instrucción sql ejecutas para conocer los permisos quetienes.

Revócale los permisos concedidos al usuario usuario@direccion_ip.

.Concédele ahora permisos de creación de tablas en una nueva base de datos

que has creado.

.Solicítale que se conecte y que pruebe a crear una tabla. ¿Puede consular la

informaciónï.

. 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.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 236/324

Capítulo 5. Tratamiento de los datos

Práctica 5.8: Oracle: Creaciónde usuarios,roles yperfiles

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 contraseña,

.A continuación, crea un usuario Fernando en Oracle con las siguientes opcio-

nes: DEFAULT TABLESPACE Users, TEMPORARY TABLESPACE Temp,

QUOTA 100 Megabytes en Usersyotorga 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 Clientesy otra sobre la tabla PAGOS.

.A continuación, 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 237/324

Bases de Datos

5.17.

228

Resumen

Los conceptos clave de este capítulo son los siguientes:

La sentencia INSERT se utiliza para insertar una la o registro en una ta-

bla. Algunos SGBD, como MySQL, permiten la inserción de más de una lamediante 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

información a modicar o borrar mediante un ltro WHERE. El ltro, puede

tener todas las características del ltro de la SELECT. Si no se especíca ltro,

se actualizan o borran todas las las de la tabla. También se pueden actualizar

o borrar las con UPDATE yDELETE ltrando a través de una subconsulta.

En este caso, la limitación consiste en no poder modicar o borrar registrosde una tabla a la que se accede en la subconsulta.

Se puede realizar la inserción de múltiples 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 información de tablas puesto que

existen restricciones. Además, algunas restricciones provocan cambios en cas-

cada en tablas relacionadas.

Las transacciones son conjuntos de operaciones SQL que se ejecutan de for-

ma atómica. 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 están clasicados por

ANSI/ISO en 3 problemas típicos. 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. información.

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.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 238/324

5.18.

1. En la sentencia INSERT

Test de repaso

a) No se puedenomitir valores de columnas

b) Se pueden especicar un número distinto

de valores y columnas

c) Se pueden omitir los nombresde columnas

d) Ninguna de las anteriores

2. Con GRANT yREVOKE

a) Se pueden otorgar permisos de select a unao varias tablas

b) Se pueden otorgar permisos para borraruna tabla

c) Se puede otorgar permisos para ejecutarcomandos 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 posiblehacerlo

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 mismotipo de ltroque para HAVING

c) Se puede ltrar mediante una subconsulta

d) Todas las anteriores

5. Si se especica ON DELETE CAS-

CADE

a)No sepuede borrarel registroreferenciadob) Se borra en cascada elregistro referenciado

c) No se puedeborrar el registro quereferen-cia

d) Se borra en cascada elregistro quereferen-cia

Capítulo 5. Tratamiento de los datos

6. En una sola sentencia UPDATE

a) Sólo se puede modicar un campo de un

registros

b) Sólo se puede modicar un campo de varios

registros

c) Sólo se pueden modicar varios campos de

un registro

d) Se pueden modicar varios camposde va-rios registros

7. Una transacción

a) Puede tener sentencias SELECT

b) No puede tener sentencias INSERT

c) No puede tener sentencias SELECT

d) Sólo puede tener sentencias UPDATE

8. Para comenzar una transacción 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 limitarlos 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;

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 239/324

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 actualicetodas 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 queborre 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 modicación

en una tabla, sus cambios se pro-paguen a la tabla. que la. referencia

mediante una clave foránea?

10.

11.

12.

13.

Comprueba tu aprendizaje

. Imagina una situación, y pon un

ejemplo de borrado en cascada deregistros.

.Imagina otra situación distinta, y

pon un ejemplo de actualización en

cascada tanto en Oracle, como en

1\IySQL.

.¿Qué quiere decir que una actuali-

zación o borrado se ltra mediante

una consulta? ¿Existe alguna res-tricción al respecto?

Dene el concepto de transacción

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 política de aislamiento?

Enumera. los tipos de aislamiento

estándar.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 240/324

CAPÍTULO 6

Programación de bases de datos

ObjetivosContenidos ,

 Introducir el Concepto de pro- Introducción a loslenguajes de graïnacïón de133595 dedatos

programación de bases dedatosAprender los Inecanismos bási-

Tipos dedatos, identicadores C05 dela P1ogïalïïaCïólï debasesyvariables de datos

operadores yexpresiones Diseñar y codicar scripts paratareas complejas

Estructuras decontrol

Incorporar el usode lasGestión de BTTOTGS transacciones en tareas com-

. _. plej asTransacciones en scripts

Manejar cursores

En este tema e] alumno aprenderá a programar una base de datos, desarro-Ilando programas y guiones utilizando las técnicas apropiadas.

231

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 241/324

Bases de Datos

6.1. Introducción a la programación 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 interactúa con ella.

Hay muchas maneras de programar una base de datos, la elección del modo más

adecuado dependede con qué tecnologíade basede datos se estátrabajando (por

ejemplo, Oracle),de quécompiladores setengan instaladosen la máquina objeto deejecución (por ejemplo, C++), de qué ventajas e inconvenientes se persigan, o de la

naturaleza de la aplicación de base de datos que se va a desarrollar. La aplicación

de base de datos puede ser de tres tipos distintos:

n Codicación en el lado del servidor: La lógica de la aplicación reside en-

teramente en la base de datos. La aplicación está basada en la implementación

de disparadores que se ejecutan automáticamente cuando ocurre algún cambio

en los datos almacenados. y en el almacenamiento de procedimientos y funcio-

nes que son llamados explícitamente. Una ventaja importante es que, de esta

forma, se puede reutilizar el mismo código para muchos clientes.

n Modelo cliente/servidor (también llamado modelo en dos niveles):El código de la aplicación corre en otra máquina distinta del servidor donde se

encuentra la base de datos. Las llamadas a la base de datos son transmitidas

desde la máquina cliente al servidor. Los datos son transmitidos desde elcliente

al servidor para las operaciones de inserción y actualización, y desde el servidor

al cliente durante las consultas. Los datos son procesados enla máquina c1ient.e.

Normalmente, estas aplicaciones se escriben usando precompiladores con las

sentencias SQL embebidas en el código.

IModelo en tres niveles: Al modelo en dos niveles se le añade un servidor de

aplicación separado que procesa las peticiones. Este podría ser, por ejemplo.un servidor Web básico, 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. ademásde necesitar un interfaz de programación

donde hacer el desarrollo. se precisa de un software de cliente que enlace el código

desarrollado con la base de datos. Los interfaces más 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 242/324

Capítulo 6. Programación de bases de datos

incorporado que se encuentran insertadas dentro de una aplicación escrita en

un lenguaje principal (típicamente C, C++ o COBOL). Las sentencias SQL

se pueden ejecutar estática o dinámicamente.

IODBC: Microsoft desarrolló una interfaz SQL denominada Open Database

Connectivity (ODBC) para los sistemas operativos de Microsoft. Los contro-ladores ODBC especícos de la BBDD se cargan dinámicamente en el tiempo

de ejecución, mediante un gestor de controladores basado en la fuente de da-

tos (nombre de la base de datos) proporcionada en la petición de conexión.La aplicación 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 función de la aplicación

en el momento de la ejecución y asegura que estas se dirijan hasta el contro-

lador ODBC adecuado que sea especíco para el motor. Dado que el gestor

del controlador ODBC solo conoce las funciones especícas de ODBC, no se

podrá acceder a las funciones especícas del motor de base de datos. ODBC

no está limitado a los sistemas operativos de Microsoft; otras implementacio-

nes están 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-

gramación de aplicaciones C y C++ para el acceso a bases de datos relacio-

nales, que utiliza llamadas de función para pasar sentencias de SQL dinámico

como argumentos de función. Es una alternativa al SQL dinámico incorpora-

do, pero a diferencia de SQL incorporado, CLI de DB2 no necesita variables

del sistema principal o precompilador. Se basa en la especicación 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 más corta para

aquellos programadores de aplicaciones, ya familiarizados con cualquiera deestas interfaces de bases de datos.

u JDBC: Java Database Connectivity es un API (Applications Programming

Interface, interfaz de programación de aplicaciones) que permite enviar sen-tencias SQL a una base de datos relacional.

ISQLJ: Es un estándar ANSI SQL-1999 para incorporar sentencias SQL en

código 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 código

fuente SQLJ es más breve que su equivalente en código fuente JDBC.

lPara la plataforma Windows, el SDK de ODBC es parte del SDK de Microsoft Data Access

Components (MDAC), disponible para descarga enhttpz/ /mm.microsoft .com/data.

233

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 243/324

Bases de Datos

n OCI yOCCI: Oracle Call Interface (OCI) y Oracle C++ Call Interface

(OCCI) son APIsque permiten crear aplicaciones que invocan procedimien-

tos y funciones nativas para acceder y controlar todas las fases de ejecución

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 dinámico. Estas propiedades convierten a Perl en un

lenguaje perfecto para crear y revisar rápidamente aplicaciones de bases de

datos (DB2). El Módulo DBI de Perl utiliza una interfaz que es muy parecida

a las interfaces CLI y JDBC, lo cual facilita la traducción de las aplicaciones

Perl a aplicaciones CLI y JDBC, y viceversa.

Hypertext Preprocessor (PHP): Es un lenguaje de programación inter-

pretado. La primera versión de PHP fue creada por Rasmus Lerdorf y reci-bió contribuciones bajo una licencia de código 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

PHPhan ido añadiendo funciones de acceso a bases de datos, han reescrito

el intérprete, han incorporado soporte orientado a objetos y han mejorado el

rendimiento. Actualmente, PHPse ha convertido en un lenguaje muy utilizado

para el desarrollo de aplicaciones Web porque se centra en soluciones prácticas

y da soporte a las funcionesmás utilizadas en aplicacionesWeb?

OLE DB: Microsoft OLE DB es un conjunto de interfaces OLE/ COM queproporciona a las aplicaciones un acceso uniforme a datos almacenados en

distintas fuentes de información. 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 aplicación 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 programación debe ir acompañada de su correspondiente depuración de

errores. Hay estudios queconcluyen quese dedica un 60-80% del tiempo in-vertido en fabricar un programa a 1a detección y corrección de errores.

¿Para Windows,se puedenencontrar versionesbinarias precompiladasde PHPen http : / /  php.net.

234

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 244/324

Capítulo 6. Programación de bases de datos

6.2. Los lenguajes de programación 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 omenor medida, terminarán recurriendo a sentencias SQL para extraer o insertar

datos de la base de datos, por lo que es imprescindible y fundamental conocer y

desenvolverse adecuadamentecon SQL.

Para añadir más potencia de ejecución 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 estándar de SQL, pero además,DB2, desde su versión 9.7, ofrece la posibilidad de desarrollar directamente en

PL /  SQL, existiendo compatibilidadplena conOracle, lo cual haceque lasmigracio-nes de la lógica de la aplicación de una base de datos Oracle a DB2 9.7 sean prácti-

camente transparentes para el desarrollador, facilitando además la reutilización del

conocimiento y evitando la necesidad de tener que aprender las características del

nuevo gestor (el equipo de trabajo sigue siendo productivo desde el mismo día de la

migración).

Los programasPL /  SQL, pueden ejecutarsehaciendo usodel SQL*Plus; los tipos

básicos deun programaPL /  

SQL son: procedimientos,funciones ybloques anónimos.Todos ellos están compuestos de tres bloques bien diferenciados:

Partes de un programa

DECLARE

--declaraciónde variablesque seusarán enla secciónde ejecución--es opcional, ya que no siempre la complejidad del programa a

--realizar precisa del uso de variables y constantes

BEGIN

--sentenciasa ejecutar,bloque deejecución propiamentedicho.EXCEPTION

--chequeode erroresde interésocurridos durantetodo laejecución--y acciones a tomar en consecuencia

--Bs opcional, pero si existe, está ubicado junto antes de END

END;

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 245/324

Bases de Datos  

El consejo del buen administrador. . .

Cuantos más comentarios se pongan en un programa, más fácil será su man- tenimiento y posterior modicación, sobre todo si 1apersona encargada de retocarlo no es la misma que la persona que creó el programa originalmente.

Los bloques anónimos solo se pueden utilizar en el momento de su creación.ya que al no tener nombre que los identique, no pueden ser referenciados. Si lo que se pretende es reutilizar el código, habrá que guardar el programa PL/ SQL en el catálogo de la base de datos, ya sea como procedimiento almacenado o función almacenada, demodo que quede identicado unívocamente con un nombre y un tipo.Tanto el procedimiento como la función podrán aceptar parámetros deentrada, pero solo la función devolverá a su vez un valor al término de su ejecución. En caso de querer crear un procedimiento, se sustituirá la palabra DECLARE por la sentencia CREATE PROCED  URE.

CREATE UR REPLACE PROCEDUREnombre_de1_procedimiento (lista_de_parámetros) AS 

Y si lo que sedeseaescrear una función, sesustituirá la palabra DECLARE por la sentencia CREATE F UN CTI ON.

CREATE DR REPLACEFUNCTIÜNnombre_de_la_funcion(1ista_de_parámetros)RETURNtipo_de_dato_devuelto IS 

En ambos casos,la lista de parámetros esopcional, de modo que si no seprecisa pasarparámetroalguno,bastacon omitir la lista (incluyendolos paréntesis).

Para hacer uso de un procedimiento basta con invocar la instrucción CALL.

CALL nombre_de1_procedimiento(lista_de_va1ores); 

En el casode las funciones, puesto que estas tienen necesariamenteque devolver un valor, para hacer uso de ellas esobligatorio recoger dicho valor. Una forma fácil 

sería asignándoselo a una variable que fuese del mismo tipo que el valor devuelto por la función, o también. invocarla desdeuna sentencia SELECT.

SELECT

nombre_de_1a_función(1ista_de_va1ores) 

FROMDUAL;

236 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 246/324

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 247/324

Bases de Datos

Recuerda. En Oracle, latabla DUAL es unatabla auxiliar muy útil paraejecutar todo tipo de funciones. Concretamente las que proporciona el gestorpara por ejemplo, extraer el DDL de un objeto de la base de datos, o paraconocer qué fecha es:

SELECT SYSDATE FROM DUAL;En DB2, la tabla auxiliar se llama S YSIBALS YSD UMM Yl. El mismo ejemplopara obtener la fecha actual se haría con la sentencia:SELECT CURRENT. TIMESTAAÍP FROM SYSIBALSYSD UMMYI;

Los procedimientos y funciones que están dentro de paquetes, también pueden serinvocados individualmente y, de la misma manera que los procedimientos y funcionesindependientes, basta con calicarlos por delante con el nombre del paquete al quepertenecen, ya que esta es la.única forma de identicarlos unívocamente respecto dela 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 función

SELECT nombre_del_paquete.nombre_de_1a_función(1ista_de_va1ores)FROM dual;

<>Actividad 6.1: Crea dos tablasque sellamen igualpero endistintos esquemas.Crear, en el mismo esquema. dos objetos que se llamen exactamente igual, porejemplo, una tabla y un procedimiento.

Aparte de los programas mencionados (procedimientos, funciones y paquetes).también se puede codicar lógica de negocio en los dispara.dores o TRIGGERS

asociados a tablas, vistas o eventos. que podrán ejecutarse una. vez (por ejemplo alintentar un usuario conectarse a la base de datos). o tantas veces como las de unatabla se vayan a insertar, borrar o actualizar. El disparador podrá programarse paraque se active inmediatamente antes o después del evento.

Para dar de alta o recrear un disparador basta con sustituir la palabra DECLAREpor la sentencia de denición del disparador. Un ejemplo para denir un disparadorde tabla que se ejecute en cada la antes de ser insertada. es el siguiente:

238

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 248/324

Capítulo 6. Programación de bases de datos

Creación o recreación de un disparador

CREATE DR REPLACE TRIGGER nombre_de1_disparador BEFORE INSERT 

DN nombre_de_1a_tab1a FOR EACH RÜW

En ese caso, elmomento enel que se ejecutael disparadoresBEFORE (antes),y el evento que lo dispara es la instrucción DML INSERT (inserción en la tabladestino del disparador). Otro momento de ejecución podría serAFTER (después),y otros eventos, además de la inserción, podrían ser el borrado (DELE TE)y laactualización (UPDATE OF lista_de_columnas), o incluso varios a la vez (INSERT OR DELETE OR UPDATE).Además. también se podría añadir una condición(WHEN Por ejemplo, sepodría crear un disparadorllamado actualizaSueldoMini-mo denido antes (BEFORE)de la actualización (UPDATE OF)del campo sueldode la tabla nominas del esquema contratados. que se activara solo cuando se cum-

pliese la condición de que el valor del campo que se quiere actualizar fuese menorde 1000 euros, de modo que impidiese que se pudieran asignar sueldos por debajode 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; 

  / 

¿Sabías que .. . 7Se puede denir más deun disparadorpara la mismatabla y para la misma combinación de momento y evento, pero el orden en elque Oracle los ejecutará. será indeterminado. por ello es mejor opción agruparla lógica de negocio en un solo disparador.

DB2, en cambio, los ejecutaría según el orden en el que fueron creados.

Dentro de la programación 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 asignársele al campo lla-mado nombre_del_campo,pudiendo este valor new ser modicado en el bloque deejecución del disparador. Nótese que en la cláusula WHEN.las variables :old y mewno deben ir precedidas de los dos puntos (z).

239

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 249/324

Bases de Datos

Recuerda. En una basede datostodos losobjetos sonúnicos, esdecir, queestan 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 podría

tener dos tablas que se llamen exactamente igual. pero sí podría existir una

tabla llamada nominas en dos esquemas distintos (contratados y subcontra-tados), ya que la base de datos las conocería como contratadosnominas ysubcontmtadosmominas.

En el caso delos procedimientos y funciones, existe además el nivel de paque-

tes, es decir, que podría existir un procedimiento independiente que se llamara

calculaNominas que perteneciera al usuario pepito, pero además podría tam-

bién haber otro procedimiento calculaNominas dentro de un paquete paque-

teDeContabilidad del mismo esquema contratados. Se referenciarían por con-

tratadoscalculaNominas, contratadospaqueteDeContabilidad.calculaNominas,respectivamente. Incluso podría existir una función que se llamara también

contratados. calculaNominas, pues al ser objetos de distinto tipo, en una sen-

tencia SQL determinada, la base de datos los distinguiría por el contexto.

6.3. Tipos de datos, identicadores y variables

En Oracle existen varios juegos de datos soportados, unos especícos de Oracle.

otros compatibles con el estándar ANSI y los tipos de datos del DB2 de IBM, otrosdenidos por el usuario a partir de los dos tipos anteriores mediante el uso de la

instrucción CREA TE TYPE, y otros como los tipos de datos XML (para la consulta

y tratamiento de documentosXML) o los tipos de datos espa.ciales (paratratar lainformación geográca). Aquí solo se tratarán los tipos básicos del primer juego:

ICHAR(tamaño): cadena detamaño jo. El número máximo de caractereses 2000. Los valores de tipo cadena deberán ir entrecomillados con comilla

simple.

IVARCHAR2(tamaño): cadena delongitud variable. El tamaño máximo es4000 caracteres. Los valores de tipo cadena deberán ir entrecomillados con

comilla simple.

INUMBER(precisión,escala): número decimal. La precisión puede tomarvalores entre 1 y 38. La escala puede estar entre 84 y 127. Un número de

escala positivo indica cuántos dígitos signicativos de entre el total de la pre-

cisión se guardarán a la derecha de la coma decimal. Un número de escala

240

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 250/324

Capítulo 6. Programación de bases de datos

negativo indica el número de dígitos que se redondearán del número a la iz-

quierda de la coma. Tanto la precisión como la escala son opcionales, pero

si hubiera escala, necesariamente tendría que haberse indicado la precisión.

Por ejemplo, para crear una Variable que pueda albergar valores del 999999

hasta el 999999, bastacon denir una de tipo NUl\IBERl(6). Una variable de

tipo NUMBER(6,2) aceptará valores de hasta seis cifras, pero las unidadesy las decenas se redondearán, por ejemplo, el número 123456,44 se almace-

nará como 123500.En cambio, NUMBER(6,2) guardará cuatro dígitos a la

izquierda de la. coma y redondeará los dígitos a la derecha de la coma dejando

solo dos. Los subtipos INTEGER,IN T,y SMALLIN T también pueden usarse

para denir números enteros con un máximo de 38 dígitos de precisión.

- BINARYILOAT: número de coma otante de 32 bits de precisión. Los

valores positivosestán enel intervalo (1. 17549E-38, 3, 40282E+38).

IBINARYDOUBLE: número de coma otante de 64 bits de precisión. Los

valores positivos están en el intervalo

(2, 22507485850720E308,1, 79769313486231E+308).

- DATE:fecha y hora. La función TO_DATE es muy útil para insertar datos ti-

po fecha o comparar dos fechas:TO_DATE (31-01-2010 , DD-MM- YYYY).

- TIMESTAMP: es una extensión del tipo DATE que guarda además fraccio-

nes de segundo.

IBLOB,CLOB,BFILE 3: datosmuy grandesy desestructurados,por ejemplo

texto, imágenes, vídeos o datos espaciales. Pueden guardarse en tablespacesdiferentes 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 dirección física de cada la. Mediante esta dirección

se puede localizar el número de objeto, chero de datos, tablespace donde

se encuentra y la posición 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 través de la localización de un valor en esta columna son

rapidísimos.

Además de estos tipos, existen otros no soportados por el estándar SQL, que no

pueden usarsepara denir columnas, perosí en la programación de PL/ SQL, porejemplo el tipo BOOLEAN, que puede albergar los valores lógicos TRUE (verdade-

ro), FALSE (falso) o NULL(nulo) muy útiles en comparaciones.

3Oracle recomiendasustituir los datos tipo LONG, LONG RAW y RAW por estos tipo LOB.

241

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 251/324

Bases de Datos 

Basándose en estos tipos de datos, se podrá proceder a la definición de variables

y constantes en los bloques DECLARE. y en la denición de los procedimientos y

funciones.

Sintaxis para la definición de variables.

nombre_de_la_variable tipo_de_dato ;

o

nombre_de_1a_variab1e tipo_de_dato := va1or_de_inicia1ización;

Sintaxis para la definición de constantes

nombre_de_la_constante CONSTANT tipo_de_dato := va1or_de_inicia1ización;

¿Sabías que . . . ?Los valores detipo cadenavan entrecomilladosconcomilla simple.

En PL/SQL, la asignación del valor a una variable o constante siempreva

precedida de los signos :=. En la asignación u operación con valores, PL / SQL

puede convertir implícitamente el tipo de dato para adecuarlo al tipo de la

variable al que se asigna el valor o al tipo necesario en la operación. En el

siguiente ejemplo, se puede hacer la resta gracias a la conversión implícita de

los meses.En caso de que los mesestuvieran alguna letra, la opera.ción arro j aria

un error.

DECLARE

mesInicioCHAR(2) :=6;mesFin CHAR(2) := &#39;10;

mesesTranscurridos NUMBER(2);

BEGIN 

mesesTranscurridos:= mesFin- meslnicio;END;

/

Cuando se desee declararuna 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 denición y cor.

ello el mantenimiento del programa PL  /  SQL. ya que la modicación del tipo original

se extenderá. al resto de variables derivadas sin necesidad de tener que cambiar

ninguna línea de código. Esos atributos son el % TYPE y el %ROWTYPE.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 252/324

Capítulo 6. Programación 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 paráme-

tros pueden ser de tres tipos: IN (parámetro de entrada), OUT (parámetro desalida) e IN OUT (parámetro de entrada y de salida). Si no se especica nada, elparámetro en cuestión sería IN. Hacer que un procedimiento tenga parámetros OUT

es un truco muy bueno para conseguir que el procedimiento devuelva datos.

Procedimiento con parámetro de salida

CREATE OR REPLACE PROCEDURE contratados.dameSue1doMinimo

(sueldoMinimo OUT contratados.nominas.sue1do%TYPE) AS

BEGIN

sue1doMinimo:=1000;

END;

 / 

¿Sabías que . .. 7La función SUBSTR( cadenaxzrgumento, posi-cióminicial, longitud_de_la_subcadena) sirve para extraer trozos de la cade-

nanrgumento, de modo que se devolverán un total de longitud_de_la_subcadena

caracteres comenzando por los que van desde la posiciónjnicial. En caso de

omitir el parámetro longitud_de_la-subcadena,la función devolverá la subcade-

na desde la posiciónjnicial hasta el nal de la cadencuzrgumento.

6.4. Operadores y expresiones

Para relacionar variables y constantes entre sí. se usan los operadores, que com-

binándolas con aquéllas darán lugar a expresiones cuyos resultados serán el funda-

mento de la lógica de programación de la base de datos.

Las operaciones que se pueden realizar y el orden en el que se ejecutarían (en

ausencia de paréntesis) son:

243

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 253/324

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 254/324

Capítulo 6. Programación de bases de datos

6.5. Estructuras de control

Cuando se crea. un programa, todas las sentencias se ejecutan siguiendo unasecuencia, es decir, el ujo de ejecución del programa Consiste en ejecutar una ins-trucción detrás de otra. Las estructuras de control sirven para controlar ese ujo del

programa, la toma de decisiones y programar las acciones enconsecuencia. Todaslasestructuras de control están basadas en la evaluación de una expresión lógica más omenos compleja que constituye en sí misma una condición. En caso de cumplirse lacondición, es decir, en caso de que la evaluación de la condición dé como resultadoel valor TR UE, se tomará una acción, en caso negativo otra o nada. Hay dos tiposde sentencias de control de ujo, condicionales e iterativas. En las condicionales, ladecisión que se toma es alternativa, es decir, se ejecuta un bloque de sentencias uotro. En las iterativas o bucles, la decisión que se toma es si repetir la ejecución deun 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-ción (IF-THEN ), más deuna condición(ELSIF- THEN), y/o añadiendo una opciónde acción por defecto en caso de que no se cumpla ninguna condición de las exigidas(ELSE Las cláusulas ELSIF y ELSE son opcionales.

Ejemplo de condicional

CREATE OR REPLACE PROCEDURE Calificacion(Nota NUMBER) as

BEGINIFNota >=0 ANDNota< 5THEN

DBMS_0UTPUT.PUT_LINE(Suspenso);ELSIF Nota >= 5 AND Nota < 6 THEN

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(Ca1ificaciónerrónea);ENDIF;

END; 

/

En el ejemplo anterior se hace uso de la función DBMSLOU TP U T.P U T_LINE paraescribir el resultado de la evaluación de cada condición. La misión de dicha función

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 255/324

Bases de Datos

es la de mostrar por pantalla un mensaje visible al usuario, pero para que este puedaverlo, ha de activarse la variable de entorno del SQL*Plus llamada SERVEROU T-PU T, que es local a la sesión actual en curso.

6.5.2.   CASE-WHEN..THEN-ELSE-ENDCASE

Esuna estructura de control condicional que permite ejecutar distintas sentenciasante los distintos valores posibles de lamisma condición.

Enlos ejemplos siguientes se exponen dos formas de programar esta estructura,una escribiendo cada vez la condición candidata, y la otra, poniéndola solo una vez.

Ejemplo 1 de CASE-WHEN..THEN-ELSE-ENDCASE

SET SERVERÜUTPUT DN

CREATE OR REPLACEPROCEDURE Ca1ificacion(Nota NUMBER) as

BEGIN 

CASE

WHENNota>= ODBMS_OUTPUT.

WHENNota >= 5

DBMS_OUTPUT.

WHENNota >= 6 

DBMS_OUTPUT.

WHENNota >= 7

DBMS_OUTPUT.

WHENNota >= 9

DBMS_OUTPUT.

END CASE;

END;  /  

AND Nota < 5 THEN

PUT_LINE(Suspenso);AND Nota < 6 THEN

PUT_LINE(Suficiente);AND Nota <7 THEN

PUT_LINE( Bien); jAND Nota <  9 THEN

PUT_LINE(Notab1e);iAND Nota <= 10 THEN

PUT_LINE(Sobresa1iente);ELSEDBMS_0UTPUT.PUT_LINE(Calificación errónea);

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 256/324

Capítulo 6. Programación de bases de datos

Ejemplo 2 de CASE-WHEN..THEN-ELSE-ENDCASE

SET SERVERDUTPUT ON

CREATE DRREPLACE PRÜCEDURE Ca1ificacion(Nota VARCHAR) as

BEGIN

  CASENotaWHENSuspenso THEN

DBMS_0UTPUT.PUT_LINE(Calificación menorde 5.);WHENSuficiente THEN

DBMS_0UTPUT.PUT_LINE(Calificación entre 5 y 6.);WHENBien THEN

DBMS_OUTPUT.PUT_LINE(Ca1ificación entre 6 y7.);WHENNotab1e THEN

DBMS_0UTPUT.PUT_LINE(Ca1ificación entre 7 y 9.);WHENSobresaliente THEN

DBMS_0UTPUT.PUT_LINE(Ca1ificación entre 9 y 10.);ELSEDBMS_DUTPUT.PUT_LINE(Ca1ificación errónea);

END CASE;

END; 

 / 

6.5.3. LOOP-EXIT WHEN-END LOOP

Para construir sentencias iterativas o bucles existen varias opciones, la primerade ellas es esta, que garantiza que por lo menos una vez, la ejecución del programaentra en la codicación hecha dentro del bucle.

Existen dos formas de salir del bucle, en cualquier circunstancia(EXIT), o po-níendo unacondición (EXIT  WHEN).

Ejemplo de LOOP-EXIT WHEN-ENDLOOP

SET SERVEROUTPUT ON

DECLARE

contador NUMBER(3);BEGIN

contador :=1;

LOOP

EXIT WHENcontador > 99;

contador := contador + 1;

ENDLOOP;

DBMS_OUTPUT.PUT_LINE (E1 valor de salida deberia ser 100: || contador);

END;

  /  

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 257/324

Bases de Datos

Ejemplo equivalente de LOOP-EXIT WHEN-ENDLÜÜP

SET SERVERÜUTPUT DN

DECLARE 

contadorNUMBERCS);BEGIN contador:=1;LOOP 

IFcontador> 99THENEXIT;

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 esotro tipo debucle. Se diferenciadel anterior enquela ejecucióndel programatieneque evaluarla condiciónantesde ejecutarel bloquede sentencias delbucle.

Ejemplo de WHILE..LDDP-END LOOP

SET SERVERDUTPUT ON

DECLARE 

contadorNUMBER(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;  / 

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 258/324

Capítulo 6. Programación de bases de datos

Usando en vez de IN, la opción IN  REVERSE, se conseguiría que el bucle fueracontando de manera descendente, de mayor a menor.

En el siguiente ejemplo, el contenido del bucle se ejecuta 100 veces, desde el 1hasta el 100. Si el límite inferior del contador coincide con el superior (FOR z" IN100..100 LOOP), el cuerpo del bucle se ejecutaríauna sola vez, otorgandoel valor

100 a la variable i.

Ejemplo de FOR. .IN. .LDOP-END LODP

SET SERVERÜUTPUT ON 

DECLARE

contador NUMBER(3);BEGIN

FOR contador IN 1..100 LOÜP

DBMS_OUTPUT.PUT_LINE (El valor del contador es: II contador);

END LODP;

END;  / 

Es posible interrumpir la ejecución del bucle y salir de él. Como en el caso de losbucles simples, pueden usarse en cualquier momento dentro de la programación delbucle FOR las cláusulas EXI T y EXI T WHEN.

Los bucles FOR son ideales para recorrer los registros resultantes de una consulta(sentencia SELECT),ya seamediante eluso decursores5o directamente incluyendola sentencia en la cláusula IN. Véase los ejemplos.

Ejemplo de FOR. .IN. ¿DOP-END LOÜP con consulta

SET SERVEROUTPUT ON 

DECLARE

BEGIN 

DBMS_0UTPUT.PUT_LINE(Los sueldosordenados demenor amayor son:);FOR i IN (SELECT sueldo

FROM contratadosmominas

ORDERBY sueldo) LÜDP

DBMS_0UTPUT.PUT_LINE (i.sue1do);ENDLDÜP;

END; 

 / 

5Un cursor es una estructura de datos concebida para recorrer el resultado de una consulta(sentencia SELECT). Mediante el uso de la instrucción FETCH nombre_del_cursorINTO lis-ta_de_var¿ables, elregistro objeto de la consulta se extrae del cursor yse introduce dentro de unavariable, listo para ser referenciado.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 259/324

Bases de Datos

Ejemplo de FDR..IN..LOOP-END LOOPcon cursor

SET SERVEROUTPUTDN

DECLARE

vSue1docontratados.nominas.sue1do%TYPE;CURSORcurSueldo IS SELECTsueldo FROM contratados.nominas

ORDERBY sueldo DESC;

BEGIN OPENcurSue1do;DBMS_OUTPUT.PUT_LINE(Los diez sueldos más altos (de mayor a menor):);

FORi IN 1..10 LOOP

FETCHcurSueldo INTOvSue1do;DBMS_OUTPUT.PUT_LINE(vSue1do);

END LOOP;

CLOSEcursueldo;

END; 

 / 

Pero, ¿qué pasaría si en el ejemplo del bucle FORcon cursor no hubiera más de

3 registros en la tabla contratadosnominas? Al intentar imprimir el dato del sueldo

tras hacer el FE TCHcuando i fuese >= 4, aparecería repetido el valor del último

sueldo recuperado, esto es debido a que, como la tabla no tiene más registros, el

FE TCHno consigue volver a inicializar la variable vSueldo. Para evitar ese mal

funcionamiento se podría optar por incluir una cláusula EXI T WHENque obligara

a abandonar el lazo al llegar al nal del cursor (atributo N OTFO UNDdel cursor).

Ejemplo de FOR..IN..LOOP-END LOOPcon cursor y EXIT WHEN ___________¡

SET SERVEROUTPUTON

DECLARE 

vSue1docontratados.nominas.sue1do%TYPE;CURSORcursueldo IS SELECTsueldo FROM contratados.nominas

ORDERBY sueldo DESC;

BEGIN

  OPENcursueldo;DBMS_OUTPUT.PUT_LINE(Los diezsueldos más altos (de mayor a menor):);

FOR i IN 1..10 LOOP

FETCHcursueldo INTDvsueldo;

EXIT WHENcurSue1do%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(vsueldo);

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 260/324

6.6.

Capítulo 6. Programación de bases de datos

Gestión de errores

Algo imprescindible en toda programación es la codicación de una sección para

interceptar posibles errores que pudieran ocurrir durante la ejecución del programa

(ya seanerrores conocidoso desconocidos,previstos oimprevistos), y en consecuen-

cia, tomar las medidas oportunas o escribir un mensaje apropiado. Para ello se usael bloque EX CEPTI ON con la cláusula WHEN THEN que sirve para ltrar el tipo

de error deseado.

Algunos de los errores predenidos que pueden interceptarse son:

CASE_NOT.FOUND: ningunode las condiciones de la sentencia

WHEN en 1a estructura CASE se

corresponde con el valor evaluado y

no existe cláusula ELSE.

CURSOR_ALREADY_OPEN:

el cursor que intenta abrirse ya

está abierto.

INVALID_CURSOR: la opera-

ción que está intentando realizar-

se con el cursor no es válida, por

ejemplo, porque quiera cerrarse un

cursor que no se ha abierto previa-

mente.

INVALID_NUMBER o VA-

LUE_ERROR: la conversión de

una cadena a valor numérico no es

posible porque la cadena no repre-senta un valor numérico válido.

VALUEERROR: error ocurrido

en alguna operación aritmética, de

conversión o truncado, por ejemplo,

cuando se intenta insertar en una

variable un valor de más tamaño.

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 conexión.

NO_DATA_FOUND: una sen-

tencia SELECT IN T0  no devuelve

ningún registro.

TOO_MANY_ROWS: una sen-

tencia SELECT INTO  devuelve

más de un registro.

TIMEOUT_ON_RESOURCE:

se ha acabado el tiempo que el

SGBD puede esperar por algún re-curso.

ZERODIVIDE: algún programaintenta hacer una división de un

número entre cero.

OTHERS: es la opción por defec-to. Interceptará todos los errores no

tenidos en cuenta en las condicio-

nes WHEN de la cláusula EXCEP- 

TI ON donde se encuentre.

251

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 261/324

Bases de Datos

Ejemplo de gestión de errores

SET SERVERDUTPUT ON

DECLARE

meslnicioCHAR(2) :=6a;mesFin CHAR(2) := 10;

mesesTranscurridos NUMBER(2);

BEGIN 

mesesTranscurridos:= mesFin-meslnicio;EXCEPTIDN

WHENINVALID_NUMBERTHENDBMS_OUTPUT.PUT_LINE(Error INVALID_NUMBER interceptado.);

WHENVALUE_ERRDR THEN

DBMS_OUTPUT.PUT_LINE(Error VALUE_ERRORinterceptado.);

END;  /  

Ejemplo de CASE-WHEN..THEN-ENDCASE sin ELSEy con gestión de errores

SET SERVERÜUTPUT DN

CREATE OR REPLACE PROCEDURE Nota(Calificacion VARCHAR) as

BEGIN 

CASECalificacionWHEN 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>=7y <9) ;WHEN Sobresa1iente THEN

DBMS_UUTPUT.PUT_LINE(Nota>=9 y <=10);ENDCASE;

EXCEPTION

WHENCASE_NÜT_FOUNDTHENDBMS_0UTPUT.PUT_LINE(Calificación errónea);

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 262/324

Capítulo 6. Programaciónde basesde datos

Ejemplo de gestión de errores extrayendo los códigos de error

SET SERVEROUTPUT UN

DECLARE

  sue1doMaximoNUMBER(4);--saltaráexcepciónsisueldo>9999codigoError NUMBER;textoError VARCHAR2(64);

BEGIN SELECTMAX(sue1do)INTOsue1doMaximoFROMcontratados.nominas;DBMS_0UTPUT.PUT_LINE(E1 sueldo más alto es:|Isue1doMaximo);

EXCEPTIDN WHENÜTHERSTHEN

codigoError := SQLCDDE;textoError := SUBSTR(SQLERRM, 1, 64);DBMS_ÜUTPUT.PUT_LINE(E1código del error interceptado es:  II

codigoErrorII y su texto:  II textoError);

La variable sueldoMazrimoestádenida comoNUMBER(4)y soloadmitirá valoresentre-9999 y 9999. Si en la tabla de nóminashay algún empleadoqueganemásde9999 euros,la sentenciaSELECT Max(sueldo) retornará un valor quenopuedeseralmacenadadentro de la variable sueldoMazimogenerándoseasíuna excepción:

El código del error interceptado es:-6502 y su texto: ÜRA-O6502:PL/SQL: error: precision de numero demasiado grande

6.7. Transacciones en scriptsCuandoen los programasademásde consultar los objetosde la basede datos

también sehacenmodicaciones en losmismos,resulta de vital importancia cono-cer qué esuna transacción.Es la herramienta que tienen las basesde datos paragarantizar la integridadde losdatos.Taly comose introdujo en el capítulo 5, una transacciónesuna seriede ins-

truccionesdemanipulaciónde datos(DML) queconstituyenunaunidadde trabajocompleta.Si el programafallara enmitad de una transacción,deberíasercapazde

deshacertodoslos cambioshechoshastaesemomentoen la transacciónpara dejarlas tablas de la basede datostal y comoestabanoriginalmente.Por ejemplo,en cualquieroperaciónde transferenciabancaria,una unidad com-

pleta de trabajo sería sumar el dinero a la cuenta destinoy restarlo de la cuentaorigen.Si despuésde sumar el dinero a la cuentadestino,la transacciónfallara a1restarlode la cuentaorigen, el programadeberíadeshacer1asuma del dinero a la

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 263/324

Bases de Datos

cuenta destino, de otro modo. el banco origen perdería el dinero de la transferencia.

Recuerda. A la operaciónde deshacerse laconoce comohacer ROLLBACK,mientras que la operación de validar el total de la transacción es hacer

COJMMI T. Explícitamente. se pueden escribir esos comandos (ROLLBA CK y

COMMI T) en el programa para terminar la transacción, no obstante, debetenerse en cuenta que existen operaciones que implican un commit implícito.

Tal es el caso de las sentencias de denición de datos (DDL), es decir, si en

medio de una transacción se creara una nueva tabla. implícitamente se estaría

haciendo un commit, con lo que quedarían validadas todos las operaciones

anteriores y se pondría n a la transacción. Otras formas de hacer commit

implícito es ejecutar un simple DISCONNECT para cerrar la conexión del

usuario actual a la base de datos. o ejecutar EXIT o QUIT para salir de la

sesión actual del SQL*Plus: en cambio, si en vez de sa.lir ordenadamente del

SQL*Plus se abortara su sesión, la base de datos haría un rollback implícito.

<> Actividad 5.2: Para comprobar elcommit orollback implícitoen Oracle,creacon SQL*Plus una tabla y haz pruebas con ella: insértale un registro, valídalo con

COMMI T, inserta otro y aborta la sesión del SQL*Plus, vuelve a abrir una sesión

de SQL*Plus, comprueba que el número de registros que hay en la tabla. es solo uno.

inserta otro, crea otra tabla (se hará commit implícito de la sesión), aborta la sesión

de SQL*Plus y comprueba que esta vez sí que hay dos registros en la tabla original.

¿Sabías que . . . 7En muchos SGBDtambién esmuy usadolo quese cono-ce como TWO_PHASE-COMI\IIT. que es una forma de denir transacciones

en dos partes. de modo que una parte pertenecería a una base de datos y otra

a otra. Esto es muy corriente en sistemas que están distribuidos en varias bases

de datos, por ejemplo. los datos de banca tradicionalmente se han encontrado

almacenados en bases de datos residentes en máquinas HOST. a las que tiene

que accedersedesde basesde datos localizadas en máquinas UNIX para hacer

determinadas operaciones, las cuales solo podrán quedar validadas si las ope-

raciones hechas en las bases de datos del HOST han tenido éxito, por lo que

la transacción 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 264/324

Capitulo 6. Programación de bases de datos

A continuación se ofrece un ejemplo en el que se actualiza el sueldo a todoslos empleados contratados. La actualización consiste en subirles el IPC, pero solodeberá validarse en el caso de que todas las actualizaciones hayan tenido éxito.

Ejemplo de subida de sueldo

SET SERVERÜUTPUT ON

DECLARE

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

BEGIN

FORi IN(SELECT sueldo,nifFROM contratados.nominas) LOOP

UPDATE contratados.nominas SET sueldo =sueldo + sueldo *ipc  / 100WHERE nif =i.nif;

END LÜOP;

CÜMMIT;

EXCEPTIDN

WHEN ÜTHERS THEN

codigoError :=SQLCDDE;textoError := SUBSTR(SQLERRM, 1, 64);DBMS_0UTPUT.PUT_LINE(E1 código 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 ocasión, en vez de validar la transacción solo si todas lasactualizaciones 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 basede datos.

El consejo del buen administrador. . .

En actualizaciones, inserciones o borrados masivos, hay que tener presente e]espacio paradeshacer loscambios deque sedispone (espaciodel tablespacede

UNDO).

255

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 265/324

13ases de [Datos

SETSERVERDUTPUT ON

DECLARE

  ipc contadorcodigoError

textoError contadorErrores

BEGIN

FORi IN(SELECTBEGIN

EXCEPTION

WHENDTHERS

1 J 

END;

contador:=IF contador >=

CDMMIT; contador:=

END IF;

END LODP;

-- (que no hayanCÜMMIT

Ejemplo de subida de sueldo cada 1000 actualizaciones

FROM contratados.nominas) LDOP

UPDATE contratados.nominasSET sueldo " 

WHERE nif

--Se pone un bloque de excepción aqui para evitar que en caso de error--en la sentencia de actualización el programa se acabe, de este modo,--el bucle continuaría actualizando el resto de sueldos

codigoError

textoError DBMS_DUTPUT.PUT_LINE(ErrorenelUPDATE:II codigoErrorII

II textoError);contadorErrores :=

CÜNSTANTNUMBER(2,1) :=

NUMBER(4) := 0;

NUMBER; VARCHAR2(64); 

NUMBER(38):=

3.2;

0:

sueldo, nif

sueldo+ sueldo* ipc  /   100

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 266/324

Capítulo 6. Programación 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 valoressecuenciales autoincrementados.Es más manual que el campo AUTOJNCREMENT

de MySQL, pero también es mucho más versátil, pudiendo ser utilizado en otros sitiosaparte de la clave primaria de una t.ab1a.

La sintaxis para la creación de estos objetos es:

CREATE SEQUENCE secuencia

INCREMENT BY n

START WITH n

{MAXVALUE n I NÜMAXVALUE}

{MINVALUE NI NÜMINVALUE}{CACHE NI NÜCACHE};

Por ejemplo:

CREATE SEQUENCE NumFactura INCREMENT BY 1 STARTWITH 20

NÜMAXVALUE 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 máximo. Además, en la memoriacaché del SGBD se almacenarán los 40 números siguientes por lo que el acceso a lasecuencia será muy rápido.

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 número siguienteSELECT NumFactura.NEXTVAL from DUAL;

--para devolver el número de factura actual

SELECT NumFactura.CURRVAL from DUAL;

257

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 267/324

Bases de Datos

6.9. Prácticas Resueltas

Práctica 6.1: Bajada desueldo un5 %

Con motivo de una crisis económica se tiene que proceder a bajar el sueldo a todoslos funcionarios un 5%. Implementar un procedimiento en PL-SQL de Oracle que,basándose en una tabla inventada, simule cómo se haría esa disminución masiva del

sueldo, para ello:

1. Crea el esquema funcionarios al que pertenecerán todos los objetos del pro-blema, otorgarle permiso de DBAy abrir una sesión con él.

solución

CREATE USER funcionarios IDENTIFIED BY passfunDEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

ALTER USER funcionarios QUÜTA UNLIMITED ON users;GRANT DBA TU funcionarios;

conn funcionarios/passfun

2. Crea la tabla nominas con un campo llamado sueldo tipo N UMBER(8,2) yotro llamado nif tipo VARCHAR2(9).

solución

--La tabla se creará en el tablespace por defectoCREATE TABLE nominas

(nif VARCHAR2(9) NOT NULL,sueldo NUMBER(8,2) NOT NULL);

3. Crea una tabla donde se registren los errores en la actualización del sueldo. Latabla se llamará erroresBajadaSue1do y tendrá tres campos: nif, codigoErrory tezrtoError.

solución

--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_sueldoque será el que contenga todaslas funciones y procedimientos para llevar a cabo el problema. Dene una

258

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 268/324

Capítulo 6. Programación de bases de datos

constante para el porcentaje de bajada de sueldo.Elpaquete deberá tenerademás:

a) Un procedimiento paq_bajada_sueldo.bajmsueldos queabrirá un cursor pa-ra recorrer todos los sueldos de los funcionarios y proceder a su dismi-

nución. Además, el procedimiento será capaz de ir rellenando la tablaerroresBajadaSuveldo conlos errores encontrados en la actualización delsueldo.

b) Una función llamada paq_bajada_sueldo.hubo-erroresjajandmsueldos queevalúe la tabla de errores y determine si ha habido algún error o no. Lafunción tendrá como parámetro de salida un booleano que indicará sihubo algún error o no.

solución

CREATE OR REPLACE PACKAGE paq_bajada_sue1do AS

PRDCEDUREbaja_sue1dos;FUNCTIÜNhubo_errores_bajando_sue1dos RETURN BOOLEAN;--El porcentaje de bajada se define como

--una constante global al paqueteporcentaje CDNSTANTNUMBER := 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, sueldoFROM nominas) LOOP

BEGIN 

UPDATEnominasSETsueldo- i.sueldo-i.sueldo*porcentaje / 100WHEREnif = i.nif;

--Se pone un bloque de excepción aqui para evitar que--en caso de error en la sentencia de actualización el

--programa se acabe, de este modo, el bucle continuaría

--actualizando el resto de sueldos

EXCEPTION WHENÜTHERSTHEN

codigoE :=SQLCODE;textoE := SUBSTR(SQLERRM, 1, 64);

INSERT INTOerroresBajadaSue1do (nif, codigoError, textoError)VALUES (i.nif, codigoE, textoE);

END;

  COMMIT;ENDLÜOP;

ENDbaja_sue1dos;

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 269/324

Bases de Datos

FUNCTION hubo_errores_bajando_sue1dos RETURN BÜOLEANIS

resBDOLEAN := FALSE;

numErrores NUMBER;

BEGIN

SELECTCOUNT(*)intonumErroresfromerroresBajadaSue1do;IF numErrores > O THEN

res :=TRUE;

END IF;

RETURN res;

END hubo_errores_bajando_sue1dos;

END paq_bajada_sueldo; / 

5. Escribecómoseinvocaríala operativa completa:borradodel contenidode latabla deerrores,llamadaal procedimientobajmsueldosy llamada a la función

hubo-erroreabajandmsueldos.solución

SET SERVERDUTPUT DN

--Se borra el contenido antiguo de la tabla de errores

DELETE FROM erroresBajadaSue1do;

--Se invoca el procedimiento de bajada de sueldosCALLpaq_bajada_sueldo.baja_sueldos();--Se comprueba si hubo algún errorBEGIN

IF paq_bajada_sueldo.hubo_errores_bajando_sue1dosTHEN

--Hubo errores. Se presentan por pantalla.FOR iIN (SELECT * 

FROMerroresBajadaSue1do) LOÜPDBMS_0UTPUTPUT_LINE(Error al actualizar el sueldo del  II

 funcionario con NIF  II i.nif II. Código  II i.codigoErrorIl

 y su texto:  II i.textoError);

END LOOP;END IF;

END;

 / 

0

Práctica 6.2: ProcedimientosalmacenadosenMySQL Creaunatabla innodb en laBBDD jardineria llamada ActualizacionLímíteCreditocontres

260

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 270/324

Capítulo 6. Programación de bases de datos

campos: Fecha, CodigoCliente, Incremento. Crea un procedimiento almacenado pa-ra actualizar los límites de crédito de los clientes en un°7o del total pedido entre

2008 y 2010 registrando el incremento en la tabla creada. Alterminar, invoca al

procedimiento paraactualizar el límite de Crédito enun 15(7o.solución

CREATE TABLE ActualizacionLimiteCredito(

Fecha DATETIME,CodigoC1iente INTEGER,Incremento NUMERIC(15,2)

) engine=innodb;

delimiter // 

CREATEPROCEDUREIncrementaLimCredito (INporcentaje INTEGER)

BEGIN

DECLARETota1Pedidos,Credito,Incremento NUMERIC(15,2);

DECLAREC1iente,Terminado INTEGER DEFAULTO;

#cursor para recorrer clientes

DECLAREcurclientes CURSORFOR

SELECTLimitecredito,CodigoC1iente FROMClientes;#A1 terminar de recorrerse, se activará la variable terminado

DECLARE CONTINUE HANDLERFOR SQLSTATE O2000 SETTerminado =1;

#Si ocurre alguna excepción se producirá un rollback

DECLARE EXIT HANDLERFOR NOT FOUNDrollback;

DECLARE EXIT HANDLER FOR SQLEXCEPTIONrollback;

OPENcurC1ientes;

START TRANSACTION;

FETCHcurC1ientes INTOCredito,C1iente; #primer cliente

WHILENOT Terminado DO

SELECTSUM(Cantidad*PrecioUnidad) INTOTota1Pedidos #Tota1 de pedidos?

FROMDeta11ePedidos

NATURAL JOINPedidos WHEREYEAR(FechaPedido)

BETWEEN2008 AND 2010 AND Pedidos.CodigoCliente=Cliente;

IF Tota1Pedidos IS NOT NULL THEN#Si hay pedidos

SETIncremento=Tota1Pedidos*Porcentaje/100;UPDATEClientes SET LimiteCredito=LimiteCredito+Incremento

WHERECodigoC1iente=C1iente;

INSERT INTOActualizacionLimiteCredito VALUES(now(),C1iente,Incremento);

END IF;

FETCHcurC1ientes INTOCredito,C1iente; #siguiente cliente

END WHILE;

COMMIT;

END; // 

delimiter ;

call IncrementaLimCredito(15); #Invocar al procedimiento

261

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 271/324

Bases de Datos

6.10. Prácticas Propuestas

Práctica 6.3: Bajada de sueldo v.2.0

Se va a efectuar una segunda versión del procedimiento de bajada de sueldo. Consiste

en bajar el sueldo a todos los funcionarios, esta vez en base a un determinado

porcentaje en función de su escala salarial. Extrapolar los objetos de la actividad

anterior para contemplar esta nueva situación, para ello:

1. Añade a la tabla funcionaosmominas un campo que represente la escala

salarial. El campo se llamará grupo yserá. de tipo CHAR

2. Crea una función llamada dame_porcentaje_segun_escaladentro del paquete

paq_bajada_sueldo que acepte como parámetro la escala salarial y devuelva

el porcentaje de disminución 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 función baja_sueldos de la práctica anterior para que llame a la

nueva damaporcentajasegun-escala para extraer el porcentaje.

4. Escribe cómo se invocaría la operativa completa: borrado del contenido de la

tabla de errores, llamada al procedimiento baja_sueldos yllamada a la función

hubmerrores-bajandmsueldos.

Práctica 6.4: Bajada de sueldo v.3.0

Modica la función damaporcentajejegun_escala para que en vez de extraer la in-

formación a través 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 práctica anterior por un procedimiento que también

esté almacenado en el paquete funcionarios. paq_bajada_sueldo. <>

262

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 272/324

Capítulo 6. Programación de bases de datos

Práctica Facturación Sedesea codicarun programaen PL-SQLpara

poder lanzar el proceso de facturación de la BBDD jardineria. Para ello, se deberán

crear tres tablas con los siguientes comandos DDL:solución

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 continuación programar, en un paquete llamado Facturación:

1. Una función llamada UltimaFactura que devuelva el último código de factura

generado. Si no hay ningún 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 comisión 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 273/324

Bases de Datos

6.11.

264

Resumen

Los conceptos clave de este capítulo son los siguientes:

Las aplicaciones de base de datos pueden ser de tres tipos distintos: codicada

en el lado del servidor, modelocliente/ servidory modelo en tres niveles.

Las sentencias SQL se pueden ejecutar de forma estática o dinámica. Una

sentencia estática debe precompilarse, vincularse y compilarse antes de ser

ejecutada en la aplicación. Una sentencia dinámica. es creada en el momento

de la ejecución.

El lenguaje PL/SQL fue desarrollado por Oracle para añadir más potenciade ejecución 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 quepueden crearsecon el uso del lenguajePL / SQL

son: procedimientos, funciones, bloques anónimos y triggers.

Los procedimientos y funciones pueden estar contenidos dentro de otros objetos

más grandes llamados paquetes, los cuales están compuestos por la cabecera y

el cuerpo.

SQL*Plus es la herramienta que proporciona Oracle para conectarse a la base

de datos por línea de comandos y ejecutar todo tipo de comandos de base dedatos, incluidos programas PL  / SQL.

En PL/SQL hay datos de tipo carácter, numérico,fecha, booleanos,y datosgrandes entre otros. Además existen muchas funciones para gestionarlos, aun-

que aquí solo se ha tratado la S UBS TR. Existen también, operadores para

hacer operaciones aritméticas, 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 programación

pero muy recomendable. Sirve para interceptar los errores de ejecución del

programa y tomar las medidas oportunas en consecuencia, de otro modo el

programa terminaría abrupta y descontroladamente.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 274/324

6.12.

Capítulo 6. Programación de bases de datos

Test de repaso

1. ¿Qué tipo de variable tendría 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 función ideal para generar las au-tomáticamente

c) Es una columna interna que almacena la

dirección física de cada la

d) Es un tipo de excepciónmuy utilizada

3. ¿Cómo 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_constanteCONSTANT ti-

po_de_dato := valor

4. La expresión 5 = 5 es:

a) FALSE

b) TRUE

5. El extracto de denición

dame_sueldo() RETURN NUMBER(6)

IS corresponde a

a) Un procedimiento

b) Una función

C) Un disparador

)d Un paquete

6. Si la variable suspenso es TR UE,

qué valor tendrá la expresión NOT sus-

penso

a) NULL

b) FALSE

c) TRUE

7. Si la variable gallo es Wikir-ikí,

qué valor resultará de la función

REPLACE(gallo, i, o):

a) o

b) oooooooo

c) kokoroko

)d kokorokí

8. ¿Qué función 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 lafunción de la pregunta 8 escriba por la

salida estándard?

a) La función escribe siempre

b) SEVER_OUTPUT

c) SERVEROUTPUT

a&#39;s&#39;esp&#39;¿&#39;q&#39;9q&#39;9qr&#39;e&#39;sn&#39

265

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 275/324

Bases de Datos

.Explica qué es la

¿Qué es una transacción?

¿En qué consiste la validación

transaccional implícita?

¿Para qué se usael atributo %TYPE?

¿y %ROWTYPE?

Pon ejemplos con todos los opera-

dores de comparación.

Ventajas del uso del R0 WID.

¿Dónde se puede usar la cláusula

EX]T WHEN?  

¿Para qué sirve la tabla de sistema

¿Cuál es el signo comodín en las

comparaciones entre datos de tipo

cadena?, ¿cómo se usa?

¿Qué hace la instrucción FETCH

en el contexto de los cursores?

El atributo NOTFOUND, ¿de

dónde es, para qué es y cómo se

conversión

implícita de tipos de datos.

¿Qué signica que en una base de

datos todos los objetos tienen que

estar identicados unívocamente?

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 componeun programaPL /  SQL. 17&#39;

3. ¿Paraqué seusan lospaquetes? 18

4. Dene qué esun disparador y los ti-

pos distintos que hay. Pon un ejem-plo. 19&#39;

5. Enuncia las diferencias entre el 20&#39;

SQL dinámico y el estático.

6. ¿Quéson losdatos tipoLOB? ¿Pa- 21&#39;ra quésirven? D UAL?

7. Enumeralos tiposde datostipo 22&#39;carácter.

8. Enumera los tipos y subtipos de da-tos tiponumérico. 23&#39;

9. Enumera los tipos de datos tipo fe-Cha_ 24.

10. Ventajas del CASE frente al usa?

IF..ELSIF yal revés. 2_

11. Ventajas del LOOP frente al WHI-

LE yal revés.26.

12. ¿Qué error intercepta el evento

NO_DATA_FOUND?

13. ¿Cuándo se producirá un 27.

T00_MANY_RO WS?

14. Explica cómo 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.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 276/324

CAPÍTULO 7

BBDD distribuidas

Contenidos Qbjet ¡VOS

É BBDD Y SGBD distribuidos "S? Reconocer lautilidad de las ba-

g Colnponentesde unaBBDD ses de datosdistribuidasdistribuida Conocer cómo realizar consul-

,. ., tasTecnicas de fragmentacion

W Conocer el funcionamiento deConsultas distribuidas las transaccionesdistribuidasTransacciones distribuidas . . . . , .

 Describir las distintas politicas

bre bases de datos distribuidas C101-

En este capítulo se explican las peculiaridades de las consultas en bases dedatos distribuidas, se realizan operaciones básicas para que e] alumno aprecieIa complejidad de este tipo de sistemasy a1 mismo tiempo su sencilla implan-tación, gracias a las propias herramientas proporcionadas por 10s SGBD.

267

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 277/324

Bases de Datos

7.1. BBDD y SGBD distribuidos

Cuando una base de datos está controlada por más de un servidor se dice que

está distribuida. Estos servidores están interconectados mediante una red de te-

lecomunicaciones y los SGBD proporcionan mecanismos para poder consultar la

información independientemente del servidor y la ubicación de los datos. Así porejemplo, 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 están particionadas es posible que la misma consulta esté acce-

diendo a más de dos servidores. Esto proporciona una especie de balanceo de carga

para que la información pueda ser accedida lo más rápidamente posible. De esta

manera se consiguen los siguientes benecios:

1. Más rapidez en el acceso a los datos y capacidad de almacenamiento. Al au-

mentar el número de ordenadores donde se depositan los datos, aumenta la

capacidad de computación, y por tanto, la capacidad de búsqueda de la infor-mación.

2. Acceso más exible. El número de usuarios conectados que puede mantener el

sistema se incrementa al haber más capacidad de cómputo y,gracias a la red

de la BBDD distribuida, los usuarios pueden acceder desde más 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 buenapolítica de fragmentación de la base de datos es posible conseguir que aunque

algún nodo de la base de datos distribuida sufra algún 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

términos de red y servidores, también por la dicultad de la administración de los

datos ubicados en distintas localizaciones y porque se introduce un elemento caótico

como la dependencia de las redes de comunicaciones para el correcto funcionamiento

del intercambio de los datos. Ademas, la atomicidad de las operaciones es más com-

plicada de conseguir por lo que la gestión transaccional tiene dicultades añadidas

como se comentará en la sección 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 278/324

Capítulo 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-

garán 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é ubicación 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 formación de una base de

datos distribuida se pueden tener:

1. BBDD distribuidas homogéneas: En estas el SGBD utilizado es el mismo para

todas las BBDD locales. Generalmente, el SGBD proporciona. la tecnología

para el enlace de las distintas BBDD locales.

2. BBDD distribuidas heterogéneas: Las bases de datos están distribuidas inde-

pendientemente del SGBD utilizado como local. En este caso, las aplicaciones

269

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 279/324

Bases de Datos

que consultan la base de datos distribuida juegan un papel fundamental como

media.dor.

7.2. Técnicas de fragmentación

El contenido de una tabla puede separarse en varios fragmentos que contendrán

suciente información como para poder reconstruir la tabla original en caso de que

sea necesario. Cada fragmento se encontrará en un nodo diferente, pero esta distri-

bución a través de distintos nodos no duplica los registros, solo existirá una copia

de cada elemento, por lo que, al no haber replicación. disminuye el coste de alma-

cenamiento en detrimento de la disponibilidad y abilidad de los datos en caso de

caída de algún nodo.

La fragmentación puede ser horizontal o vertical y se puede aplicar sucesiva yalternativamente sobre la misma tabla:

Horizontal: los fragmentos son subconjuntos de una tabla y se denen a través

de una operación de selección. La tabla original se reconstruye en base a una

operación de unión 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 técnicas anteriores.

Para que una fragmentación sea correcta, esta debe cumplir con las siguientes

reglas:

IDebe ser completa, es decir, cada elemento de la tabla debe estar en algún

fragmento.

n Debe ser reconstruible, lo cual implica que debe ser posible conseguir una tabla

completa a partir de la combinación de todos los fragmentos.

ILos fragmentos deben ser disjuntos, esto signica que si la fragmentación es

horizontal, un elemento que esté en un fragmento concreto no puede estar en

ningún otro fragmento más que en aquél. En el caso de fragmentación vertical,

puesto que es necesarioque se repitan las claves primarias, esta condición solo

se tiene que cumplir para el conjunto de atributos que no son clave primaria.

270

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 280/324

Capítulo 7. BBDD distribuidas

7.3. Consultas distribuidas

Algunos SGBD manejan el concepto de sistemas de bases de datos distribuidas

de forma que cualquier aplicación que haga consultas al gestor pueda acceder a su

base de datos de forma local y además, 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 abase dedatos). LosDATABASE LINKs son unaconexión

unidireccional entre una base de datos (cliente) y otra (servidor). Oracle puede sopor-

tar bases de datos homogéneas y heterogéneas. Para soportar sistemas heterogéneos

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 información de forma

transparente para las aplicaciones que se ejecutan desde Oracle.

7.3.1. DB Links

Un database link es una conexión 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 también los enlaces compartidos o SHARED DB LINKS. La diferencia

es que múltiples procesos clientes pueden usar el enlace compartido simultáneamen-

te. Para crear un DB link es necesario que exista la conexión entre las bases de

datos a través de Oracle Net Services, por lo que se debe crear una entrada en eltnsnames.ora de la base de datos a la que se quiere referenciar. Dentro de la de-

 nición se puede elegir si la conexión es dedicada o compartida, y no es lo mismo

denir que la conexión que va a usar el DB link sea compartida a crear un DB

link compartido. A continuación, se muestra un ejemplo de creación de un DB link

para conectar una BBDD en versión 10gR2 con una BBDD 11gR2. La entrada en

el chero tnsnames.ora es:

271

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 281/324

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 conexión remota al

servidor con dirección 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 parámetros utilizados:

C:\orac1e\product\10.2.0\db_1\network\admin\sq1net.ora

Adaptador TNSNAMBS utilizado para resolver el aliasAttempting 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 públicos o privados, y es posible, además, usar un usuario especíco para laconexión en la base de datos a referenciar. Para crear un DB Link desde el usuario

local al usuario remoto, se ejecutaría el siguiente comando:

SQL> CREATEDATABASE LINK tj_11r2

2 CONNECT TD usuario IDENTIFIED BY password

3 USING 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. Después, para probar

la conexión, se utiliza el nombre del enlace (tj_11r2) para ejecutar una consulta:

272

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 282/324

Capítulo 7. BBDD distribuidas

SQL> select *  from dua1@tj_11r2;

También se pueden crear DB Links públicos que pueden ser usados por cualquier

usuario, y además, sean usados por usuarios que también existan en la BBDD quese referencia:

SQL> CREATEPUBLIC DATABASELINK tj_11r2 2USING t11r2_u;

Enlace con la base de datos creado.

7.3.2. Ejecución de consultas distribuidas

Las consultas distribuidas son consultas que recuperan información de 2 o más

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 más

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 público creado a una BBDD 11gR2 en Linux, y la basede datos cliente está en 10gR2 en Windows. La ejecución de la consulta anterior

prueba que existen conexión entre versiones diferentes. Esto se logra a través 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 283/324

Bases de Datos

Primero se muestra la tabla PACIENTES, fragmentada en dos bases de datos en

distintos servidores y con la siguiente descripción:

SQL> desc pacientes

NOTNULLNUMBER

VARCHAR2(100)HABITACION

SQL) desc pacientes@t11r2

NOTNULLNUMBER

VARCHAR2(100)

FECHA_ENTRADA DATE

Ahora, se consulta un paciente con ID 1, su habitación y fecha de ingreso:

SQL> select 1.id, 1.habitacion, r.fecha_entrada

2 from pacientes 1,

pacientesOt11r2 rwhere 1.id=r.id

and 1.id=1

ID HABITACION FECHA_EN

10 26/04/11

Esta consulta extrae información de dos bases de datos ubicadas en servidores dis-

tintos, por tanto, es distribuida. Además, desde la base de datos servidor se puede

ver lo siguiente en la vista VSSESSION:

SQL> select sid, seria1#, username, program, event, machine ,server2 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 sesión con server processdedicado 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 284/324

Capítulo 7. BBDD distribuidas

entorno de bases de datos distribuido, y que además este proceso lo van a ejecutar

muchas sesiones, en diferentes nodos, es seguro que se generará una explosión de

conexiones abiertas, incrementando de forma radical el consumo de recursos.

Para evitar esta explosión de conexiones abiertas, se puede ejecutar el cierre de

los DB Links ejecutando:

SQL> alter session close database link t11r2;

Sesión modificada.

--Esto cierra la sesión en la base de datos servidor:

SQL) select sid, seria1#, username, program, event, machine, server2 from vSsession

3* where username=TJ

no rows selected

7.4. Transacciones distribuidas

Una transacción distribuida es una transacción que contiene una o más sentencia

y que se realiza en 2 o más nodos dentro de un entorno de base de datos distribuido.

También existen las transacciones remotas, y al igual que las consultas remotas,

son transacciones con una o más sentencias que se realizan en una base de datos

remota.

Los elementos que pueden intervenir a tener en cuenta en una transación distri-

buida se pueden ver en la siguiente gura:

oo:-ina-or o-aCOHHIT point sic:Coordinador Local BD Cliente

.i

 \Rr

BD Servidor 1 no Servidor 2  BDServidor n

\

Figura 7.2: Transacción distribuida.

En esta gura se observan los siguientes elementos:

BD Cliente Es un nodo que actúa como cliente donde se referencia la transacción

distribuida. Esta BD tiene los DB links que conectan con el resto.

275

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 285/324

Bases de Datos

BD Servidor Son las bases de datos que contienen información que va a ser mo-dicada por la transacción distribuida.

Coordinador Local Es un nodo que debe referenciar datos sobre otros nodos paracompletar su parte de la transacción distribuida.

Coordinador Global El nodo donde se origina la transacción 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 sedene con el parámetro COMMITPOINTSTRENGTH, en un entorno ho-mogéneo todas las BBDD tienen un parámetro como este. La base de datoscon el valor mayor en este parámetro se convierte en COMMIT POINT SITE.

7.4.1. TWO-PHASE COMMIT

Un SGBD debe garantizar la atomicidad en la información de sus basesde datosy en los entornos con basesde datos distribuidas también. Para que esto se produzca,se usael mecanismo de TWO-PHASE COMMIT o proceso de COIÑIMIT en entornosdistribuidos. Su ejecución es un poco más complicada. Se divide en 3 partes:

Fase de preparación Es la primera fase y consiste en que el coordinador globalinforma 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 finalización dela transacción distribuida. Para. ello realiza 2 tareas:

1. Almacena la información de Redologs.

2. Genera un bloqueo distribuido sobre la tabla para prevenir lecturas.

Cuando se realizan estas 2 operaciones el nodo dice que está comprometidopara la nalización de la transacción distribuida.

Fase de commit Después de que todos los nodos se comprometen a realizar latransacción, 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 envían mensajes a todos los nodospara hacer COMMIT de la transacción.

276

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 286/324

Capítulo 7. BBDD distribuidas

5. Cada nodo realiza su parte local del COMMIT de la transacción 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 información acerca del estado de la

transacción distribuida.

2. El COMMIT POINT SITE informa al coordinador global que ha borrado

ese estado.

3. El coordinador global borra la información de la transacción distribuida.

7.4.2. Ejemplo de transacción distribuidaCon 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 pacientesset nombre=P1

where id=1;

1fila actualizada.

SQL> update pacientes@t11r22 set nombre=P1

3* where id=1

1 fila actualizada.

SQL> update pacientes2 set habitacion=10

3 where id=2;

1fila actualizada.

277

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 287/324

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 288/324

Capítulo 7. BBDD distribuidas

SADDRSID SERIAL# USERNAME PROGRAM

30F42BFC 1773 TJ sq1p1us.exe

SQL> select SES,ADDR,START_TIME,STATUS,XID2* from vstransaction

SES_ADDR START_TIME

30F42BFC 05/06/11 16:02:46ACTIVE 08002EO0F818000O

SQL> select t 

2 from vslock3 where sid=146;

ADDR KADDR LMODE REQUEST CTIME

2F5C67E4 2F5C67FC 146 TM 459262F616204 2F616228 146 TX 524334 6392

También se puede observar la información de los DB links abiertos en la sesióncon la vista VSDBLINK. Esta consulta se ejecuta en la propia sesión que tiene latransacción:

SQL> desc vsdblink

DB_LINK vmcmazuzs)OHNERJD NUMBERLOGGED_0N VARCHAR2(3)HETEROGENEOUS VARCHAR2 (3)PROTÜCDL VARCHAR2(6)opmLcunsons NUMBERIN_TR.ANSACTION vacunas)UPDATE_SENT VARCHAR2(3)COMHIT_POINT_STRENGTH NUHBER

SQL> select # 

2 from vsdblink;

DB_LINK OWNER_ID LOG HET PRDTOC ÜPEN_CURSORSIN_ UPD CÜMIT_POINT_STRENGTH

38 YES N0UNKN

Una vez realizado el COMMIT, desaparecen las transacciones y los bloqueos. Y

la vista de estado de DB links abiertos en la sesión muestra:

SQL) select t 

2 from vSdb1ink;

DB_LINK 0HNER_ID LOG HET PROTOC 0PEN_CURSORSIN_ UPD COMMIT_POINT_STRENGTH

38 YES ND UNKN

279

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 289/324

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 290/324

Capítulo 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@t11r2where id=1) r

where 1.id=r.id

and 1.id=1

De esta manera, se recupera tan solo la información 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. Optimización mediante hints

En entornos distribuidos es más común que el optimizador pueda no ser del todo

bueno con los planes de ejecución, así que el uso de Hints (y su constante control)

puede ser útil en mucho casos.

Con los Hints se pueden controlar cómo 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 información sea la que va a recibir menor

cantidad de información a través de la red. Ejemplos de los cambios que producen

estos Hints:

Ejecución 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 291/324

Bases de Datos

Ejecuciónconelhint 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

Ejecuciónconel hint DRIVINCLSITE:

SQL> select /*+ DRIVING_SITB(r) */

2 1.id, 1.habitacion, r.fecha_entrada

3 from pacientes 1, pacientes@t11r2r

where 1.id=r.id and 1.id=1;

ID HABITACION FECHA_EN

10 26/O4/11

282

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 292/324

Capítulo 7. BBDD distribuidas

7.6. Prácticas Resueltas

Práctica 7.1: Configuración deBBDD distribuidasPrepara dos máquinas virtuales con Oracle y congúralas dando a una má.quina la

dirección 192.168.1.101 y a la otra la dirección 192.168.1.102. A continuación:1. Edita el chero tnsnamesora que está ubicado en el directorio \SORACLE_ 

HOME/network/ admin de ambas máquinas para agregar dos entradas que per-mitan enlazar las dos instancias.

Editar el chero tnsnames en cada una de las máquinas introduciendo el siguiente código:

JARDIN=

(DESCRIPTIDN

(ADDRESS-(PROTOCOL= TCP)(HOST=192.168.1.101)(PDRT(CÜNNECT_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 máquina 192.168.] .101 y con el usuario oracle, introducir el comando:tnsping jardin2y en la máquina 192.168.] .102 introducir el comando:tnsping jardin

3. Crea enlaces entre cada máquina. necesarios para poder hacer consultas desdeuna máquina a la otra con el esquema jardineria. Desde la máquina 192. 168.1.101a la 102 el enlace se llamará contabilidad, mientras que de la 102 a la 101 sellamará facturacion.

Primero hay que dar al usuario jardineria permisos de CREATE LINK en cada una de las máquinas:

sqlplus / as sysdbaDespués, ejecutamos el comando SQL:grant create database link to jardineria;Finalmente, podemos ejecutar los comandos de creación de los enlaces. Desde la máquina 1921631.101:

283

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 293/324

Bases de Da tos

CREATE DATABASELINK contabilidad

CONNECT T0 jardineria IDENTIFIED BY jardineria

USING jardin2;

Y en la máquina 192.J68.1.102:

CREATE DATABASELINK facturacion\\ 

CONNECT T0 jardineria IDENTIFIED BY jardineria\\ 

USING  jardin;\\ 

}

Práctica 7.2: Trabajando con BBDD distribuidas

Realiza los siguientes ejercicios para aprender cómo trabajar con DB Links:

1. Edita la tabla. empleados en la. máquina 192.168.1101 para añadir un campo

que indique qué porcentaje de comisión se lleva cada empleado de los pedidos

que gestiona y pon a todos los empleados un 5 C78 decomisión.

Desde la máquina 1921631.101, ejecutar:

alter table empleados addPorcentajeComision number(5,2);update empleados set PorcentajeComision. = 5;

2. Crea una tabla llamada Comisiones en la máquina 192.168.1102 con los cam-

pos CodigoEmpleado, CodigoPedido, TotalPedido yComision.

No es posible ejecutar comandos DDL a. través de DB Links, por tanto, desde la máquina 1921681.102,

ejecutamos el siguiente comando DDL: 

create table Comisiones(

CodigoEmp1eado integer,

CodigoPedido integer,TotalPedido number(15,2),

Comision number(7,2)

);

284

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 294/324

Capítulo 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 máquina 192.168.1.101.

Hay que ejecutar la siguiente sentencia de tipo insert-select:

INSERT into comisionesccontabilidad

SELECT CodigoEmp1eado, CodigoPedido, Tota1Pedido,

Tota1PedidotPorcentajeComision/100FROM Empleados inner join Clientes on

Empleados.CodigoEmp1eado=C1ientes.CodigoEmp1eadoRepVentas natural join

(select Codigocliente,CodigoPedido,sum(Cantidad*PrecioUnidad) asTota1Pedido from Pedidos natural join Deta11ePedidos

groupby Codigocliente,CodigoPedido) Totales

4. Crea un trigger en la tabla Empleados que mantenga actualizada la tabla de

comisiones cuando se modica el porcentaje de comisión de la misma. Modica

la comisión de un empleado y comprueba que, efectivamente se ha modicado.

En la máquina 192.168.1.101 se ejecuta el siguiente código:

create or replace trigger Tímpleadocomisionesafter update of PorcentajeComision on empleados for each row

begin

updatecomisionescontabilidadset comision = totalpedidotznev.Porcentajecomision/100

where CodigoEmp1eado=:o1d.CodigoEmp1eado;

end; /  

5. Modica el Empleado con código 31 estableciendo un porcentaje de comisión

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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 295/324

Bases de Datos 

7.7. Prácticas propuestas

Práctica 7.3: Fragmentación horizontalde tablas

Una empresa de telefonía está implementando un sistema de recepción de inciden-

cias. Estas incidencias se recogerán desde un único número de asistencia telefónicay se almacenarán 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 estén 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

estarán equilibradas en número de registros por el número de población. Se pide:

1. Crear la estructura de las tablas en los tres nodos. La tabla incidencia tendrá los

campos IdIncidencia, Fecha, Código 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 según la letra de la provincia.

5. Crear un procedimiento que borre una incidencia del nodo adecuado basándose

en el campo de provincia.

A continuación se desea fragmentar la tabla a través del campo IdIncídencia y

el operador Mod (Resto de la división entera). La. operaciónIdIncidencia 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 función llamada SiguienteIncidencia que devuelva el siguiente número

de secuencia.

3. Ejecuta la consulta select siguienteIncidenciaO Qnodoü desde los otros dos no-

dos.

286

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 296/324

Capítulo 7. BBDD distribuidas

Práctica 7.4: Fragmentación vertical

Una aplicación comercial de marketing tiene una tabla de clientes muy grande con

los siguientes campos:

ICampos principales: Código de Cliente, Nombre, Apellidol, Apellido2, email,

identicador de facebook, dirección, código postal y país.

ICampos secundarios: película 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 fragmentación de la tabla separando los campos principales ycreándolos en un nodo y los campos secundarios (gustos y aciones) creándolos

en otro nodo.

2. Crear un procedimiento que muestre por pantalla la información de un cliente

determinado. El procedimiento recibirá como parámetro el código de cliente y

consultará los dos nodos para mostrar toda la información.

3. Crear un prodecimiento que elimine un cliente de la base de datos.

287

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 297/324

Bases de Datos

Práctica 7.5: Consultas distribuidas

Sigue los siguientes pasos para ejecutar consultas distribuidas en Oracle:

1.

10.

288

Genera una copia de la máquina virtual con tu servidor Oracle, cámbiale la

dirección IP y asegúrate 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 máquina virtual copiada.

.Prueba con la utilidad tnsping que es posible conectar de la máquina virtual

original a la copiada.

Crea un usuario llamado Userl en la instacia oracle de la máquina virtual

original con los permisos CREATE DATABASE LINK y CREATE PUBLICDATABASE LINK y el rol RESOURCE.

.Crea un usuario llamado User2 en la instancia oracle de la máquina virtual

copiada con permiso CREATE SESSION y el rol RESOURCE.

.Crea una tabla llamada Cliente(Código, Nombre, Dirección) en la máquina

virtual original en el esquema Userl e inserta dos registros.

.Crea una tabla llamada l\Iascotas(Código, Tipo, Raza, Nombre) en la máquina

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 dirección 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 ejecución con el comando explain plan.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 298/324

7.8.

Capítulo 7. BBDD distribuidas

Resumen

Los conceptos clave de este capítulo son los siguientes:

Una base de datos está controlada por más de un servidor se dice que está dis-

tribuida.

Este tipo de organización proporciona más rapidez y exibilidad en el acceso

y más capacidad de almacenamiento. Proporciona también escalabilidad y

 abilidad.

Un sistema de BBDD distribuidas requiere una red de comunicacionesy enlaces

entre bases de datos locales a cada servidor (DBLINKS).

Se clasican en:

o Homogéneas: todas las BBDD locales usan el mismo SGBD.

o Heterogéneas: 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 múltiples tablas ubicadas en

distintas ubicaciones.Se puedehacer usode nombreTabla@servidor parahacerreferencia a una tabla en un servidor enlazado con un DBLINK.

El comando DML create database link se utiliza para crear enlaces a través deun enlace declarado en el chero tnsnamesora.

Con la utilidad tnsping se puedecomprobar si hay conectividad con una BBDD

remota.

Una transacción distribuida utiliza el método TWO PHASE COMMIT a

través 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 conexión abierta con el comando alter session close

database link.

Es posible utilizar hints en Oracle para parametrizar cómo se va a guiar la

ejecución de la consulta.

289

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 299/324

Bases de Datos

7.9. Test de repaso

1. Un DBLink es

a) Una conexión unidireccional entre unaBBDD cliente y una servidora

b) Una conexión bidireccional entre dos

BBDD locales

c) Una conexión bidireccional entre dosBBDD distribuidas

d) Ninguna de las anteriores

2. Es posible tener BBDD Distribuidas

heterogéneas

a) Si, a través de DB Links comunes

b) Si, a t.ravés de software que hace las BBDD

compatibles

c) No, es imposiblecomunicar dosBBDD condistintos SGBD

d) Sí, a través de agentesllamados transpa-rent gateways

3. Con muchos DBLinks puede ocurrir

que:

a) Mejora el rendimiento del servidor

b) No hay problemacon lasconexiones, pues-to que se cierran solas

c) Es posible quese quedendemasiadas cone-xiones abiertas

d) Hay problemas deseguridad

4. TWO PHASE COMMIT es

a) Un enlace doblea BBDD

b) Un mecanismo para realizar transaccioneslocales

c) Un mecanismo pararealizar transaccionesdistribuidas

d) Un mecanismo pararealizar transaccionesdistribuidas y locales

290

5. Las fases de TWO PHASE COMMIT

a Son dos fases

b Son la fase de preparación, commit y olvido

c Son 4 fases

))

)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. ¿Cuál 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 transacción

b) Máximo número de conexiones abiertas

c) Tiempo máximo de ejecución

d) Ninguna de las anteriores

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 300/324

7.10.

10.

.¿Qué es una base de datos distri-

buida?

.Enumera los tipos de BBDD distri-

buidas según el SGBD que se utili-

za.

. Enumera las características 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:

IFragmentación vertical

n Fragmentación horizontal

- Fragmentación mixta

.¿Qué reglas hay para que una frag-mentación 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.

Capítulo 7. BBDD distribuidas

Comprueba tu aprendizaje

¿Cómo 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

público y uno privado?

Escribe el comando DDL para crear

DBLINKS.

¿Para quésirve lautilidad tnsping?

¿Cómo secierra una conexión a una

base de datos remota?

Describe el funcionamiento de una

transacción distribuida a través del

mecanismo TWO PHASE COM-

MIT.

Enumera los hints que tiene Oracle

para optimizar las consultas distri-buidas.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 301/324

CAPÍTULO 8

BBDD Objeto-Relacionales

Contenidos Objetivos

W Las bases de datos Ñ Identicar las características de

Objeto - Relacionales las bases de datos objeto rela-

 _  _cionalesLos atr1butos multlvaluados

Crear tipos de datos ob jeto, susLas Colecciones atributos v métodos

Tablas anidadas Crear tablasde objetosv tablasTipos deObjetos de columnas tipoobjetoLos identicacionesde Objeto Crear tlposde datosco1ecc1on

Métodos enBBDD_OR Realizar Consultas.Modicar la información alma-

Herencxa en BBDD-OR  _ _ _ 

cenada manteniendo la 1ntegr1-DML con BBDD-OR_ dad y consistencia de los datos

En este capítulo se explica cómo se gestiona la información almacenada en

bases de datos objeto-relacionales, evaluando y utilizando las posibilidadesque proporciona el sistema gestor.

293

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 302/324

Bases de Datos

8.1. Las Bases de datos ob jetos-relacionales

A medida que el mundo de la informática va generando modelos del mundo real

para crear aplicaciones, van apareciendo nuevas necesidades parapoder dar solución

a estos problemas. A lo largo del libro se ha estudia.do queun modelo de datos cuenta

con las siguientes características: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 características. En un modelo más complejo

incluso se puede incluir acciones, operaciones o procedimientos entre entidades y

atributos. Se puede decir que las Bases de Datos Objeto-Relacional (BBDDOR) sonuna extensión del modelo relacional que además, rompe ciertas reglas, tanto en el

modelo relacional como en el paradigma de la orientación a objetos, pero seguro que

aporta otra solución al modelado de información.

A lo largo de este capítulo se podrá observar con ejemplos la diferencia de un

modelo entidad relación 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 serán la base del desarrollo de BBDD O-R. Por

tanto, para denir el modelo objeto-relacional habría que añadir a las característicasbásicas deun modelo E/ R: entidades, atributos,relaciones yreglas y los tipos.

8.2. Los atributos multivaluados

Los atributos multivaluados, según lo estudiado, rompen directamente la primera

formal normal. Con este tipo de atributo básicamente se expresa todo lo contrario

a la IFN. Se dice, que un atributo puede tener más 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, portanto se enfoca más 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 múltiples valores.

294

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 303/324

Capítulo 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 través de las colec-

ciones. Una colección es un grupo de elementos del mismo tipo. En Oracle se usan

los tipos para crear colecciones.

Supóngase que se desea guardar los nombres de los hijos de los empleados. Para

esto se puede usar una. colección. La relación puede tener las siguientes ocurrencias:

III Apellidosm

(luis-Insula (Jose Carlos»pedro)

Lo primero sería crear la colección:

SQL> create type colec_hijos as varray(10) of varchar2(30);

2 /

Tipo creado.

En esta instrucción se ha denido un nuevo tipo de datos llamado coleahijos

que tendrán como máximo grupos de 10 valores y además, que serán de máximo 30

caracteres. A continuación, 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 expresaque la columna de hijos será una colección 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:

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 304/324

Bases de Datos

insert into empleado values

(2,Esperanza,Jiménez,co1ec_hijos( josé,carlos,pedro));

Obsérvese quees necesarioespecicar el tipo colecJzijos para que el SGBD realicelas comprobaciones necesarias.

Para consultar, también se puede utilizar SELECT:

SQL> select *

2 from empleado;

IDNOMBRE APELLIDO HIJOS

1 Francisco Pérez COLEC_HIJOS(luis, ursu1a)

2 Esperanza Jiménez CULEC_HIJOS( josé,carlos,pedro)

De esta manera se ha introducido una restricción al mundo real: que un empleado

no puede tener más de 10 hijos.

<> Actividad 8.1: Dene un tipo tabla llamadoAsignaturas. Después,crea unatabla 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 años atrás, existía la posibilidad de que 10 hijos fuese un parámetro corto

en algunas ocasionesyfuese posible ampliarlo hasta 20 o incluso 50, pero siempretendría una restricción. 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 305/324

Capítulo 8. BBDD Objeto-Relacionadas

Y al igual que con el ejemplo anterior, se crea la tabla basándola 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, tablajzíjos, ya no es un tipo colección . 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 segmentoespecial llamado tabla anidada. A diferencia de la colección, se ha denido esta tabla

especial que permitirá almacenar en el atributo multivaluado tantos valores como

sea necesario.

¿Sabías que .. . ?En Oracle, sepuede consultarla tabla dba_objects paraexaminar los objetos que se han creado en el SGBD. También se puede consul-

tar mediante dba_segments laestructura 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_HIJOSSQL> select segment_name, segment_type

2 from dba_segments

3* where segment_name like ZHIJOS%

SEGMENT_NAME SEGMENT_TYPE

T_HIJDS NESTED TABLE

297

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 306/324

Bases de Datos

Para consultar, insertar, borrar o actualizar información 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 características autónomas.

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 características 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 capítulo explicar la teoría de la programación orientada

a objetos (POO), se recordará queuna clasees comoel molde o un patrón para lafabricación de los objetos. Yvisto desde el otro sentido, un objeto es una instancia

de una clase.

En Oracle, se pueden crear clases a través de los tipos, más concretamente de los

tipos de objetos, usando la sentencia create type as object. Gracias a este tipo objeto

se puede agregar información a la base de datos anidando la. información en única

 la en tantos niveles como se desee.

Para ilustrar el funcionamiento de esta estructura recurrimos a la siguiente rela-

ción:

CLIENTES( Id,Nombre, Apellido,Dirección, Población,Provincia, TeléfoMóvil)Se puede armar que todos sus atributos son atómicos y que cumple, al menos, la

primera forma normal. Una instancia de esa relación cliente (Modelo Relacional),podría ser:

[EI ApellidoMayor.20 Madrid Madrid 912823722 600000001

Suponiendo que este Cliente no cuenta con un móvil, sino que cuenta con 3

móviles, el móvil de su trabajo, su móvil particular de una compañía que le da una

buena tarifa. por la mañana, y otro móvil de una compañía que le da buenos des-

cuentos en SMS. Se podría pensar en conservar el mismo modelo de datos de forma

elegante, y no con una entidad cliente que contenga hasta 10 atributos llamados

298

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 307/324

Capítulo 8. BBDD Objeto-Relacionales

movill, movi12,...movil10 (no es muy inusual encontrarse con BBDD que tienen

estas soluciones).

Ajustándose únicamente al modelo E-R la solución óptima sería crear una Re-lación que sea cliente-móvil, yque contenga el ID del chente y su número de móvil.

Por ejemplo:

É  

16000000011 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 teléfono

móvil y el número. A continuación, se crea una tabla tipo llamada listin basada en

el objeto tipo para añadir la funcionalidad de múltiples 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 308/324

Bases de Datos

A partir de aquí, se pueden ejecutar sentencias DML en la tabla clientes haciendo

valer la deseada ampliación con relación al modelo de datos tradicional:

SQL> insert into clientes

2 values

3 (1,Paco,Pérez,mayor 20,madrid,madrid,

41istin(te1efono(fijo,911234567).

5 te1efono(movi1 persona1,60000O001),

6 te1efono(movi1 empresa,600000002)))7   /  

1fila creada.

SQL> commit;

Confirmación terminada.

Si se consulta la tabla se obtiene:

SQL> select * from cliente;

IDNOMRE APELLIDO DIRECCION POBLACION PROVINCIATELEFONOS(TIPO, NUMRO)

LISTIN(TELEFONO(fijo, 911234567),

TELEFON0(movi1 personal, 600000001),

TELEFON0(movi1 empresa, 60000O0O2))

Se puede observar cómo se anida la información dentro de la propia la. De esta

manera, 1 cliente puede tener múltiples teléfonos y cada teléfono, varios atributos.

Esto es la representación 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 búsqueda de la información. Cuando se crea una columna cuyo tipo es

un tipo de objeto, en lugar de almacenarse todos los datos del objeto en la propiacolumna de la tabla, el SGBD solo almacena un identicador, que será la dirección

de una la en una tabla auxiliar que el SGBD para almacenar los datos del objeto.

Es decir, internamente, el SGBD solo almacena un número de 16-Bytes que le sirve

como referencia para ir a buscar la información 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

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 309/324

Capítulo 8. BBDD  Objeto-Relacíonales

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 deusarOIDs esquela informacióndel objetoestáalmacenadaenotro

sitio distinto de la propia la, por tanto, en casode no usar esteobjeto, el SGBD

no tendrá que accedera toda esta informaciónreduciendoel tiempo de respuesta.

La desventajaesqueenelmomentoderealizarconsultassobrelastablas,el SGBD

deberealizar accesosa bloquesextras de información,consumiendomásCPU.

8.4. Los métodos

Al igual que en la POO cada clasedene el comportamientode susobjetos a

travésdemétodos,en lasBBDD-OR también esposiblecrearmétodospara lostipo

objeto.

Se puedendenir funcioneso procedimientosmiembros,cuyas accionesmode-

lan el comportamientode un tipo de objeto. Estas funcioneso procedimientosque

pertenecena un tipo de objeto sedenominanmétodos.

Para ilustrar como usar funcionesmiembro en tipos de objetos, se expone el

siguienteejemplo:si sedeseamodelar un objeto triángulo para almacenarsusca-

301

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 310/324

Bases de Datos

racterísticas (la base y la altura), y almacenar en la BBDD cientos de triángulospudiendo calcular el área de cada triángulo, se podría. 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 deuna función llamada área (método o member function area).A continuación se creará la denición del método área a través del cuerpo del

tipo create 01" replacetype body:

SQL> create or replace type body tipo_triangu1o as2 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 triángulo, se puede crear una tabla para almacenar

triángulos:

SQL> create table triangulos2 (id number,

3 triangulo tipo_triangulo);Tabla creada.

SQL> desc triangulos

TRIANGULD TIPD_TRIANGULD

302

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 311/324

Capítulo 8. BBDD Objeto-Relacionales

Y después, 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;

Confirmación terminada.

SQL> select * from triangulos;IDTRIANGULÜ(BASE, ALTURA)

1TIPÜ_TRIANGULÜ(5, 5)

2 TIPD_TRIANGULÜ(10, 10)

Finalmente. se puede declarar un pequeño bloque anónimo en PL-SQL para recorrerla tabla e invocar a1 método area:

SQL> declare

t tipo_triangu1o;begin

fori in (select *from triangulos)loopt:=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:1Con base: 5

Yaltura: 5

tiene un area de: 12,5

Eltriangulo con id:2Con base: 10

Yaltura: 10

tiene un area de: 50

Procedimiento PL/SQL terminado correctamente.

303

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 312/324

Bases de Datos

Por cada iteración del bucle, se hace una referencia a un objeto t. Obsérvese que

tbase y t. altura son los atributos del objeto t, mientras que t. area es la invocación

al método.

<> Actividad 3.2: Al igual queen POO,en BBDDes posiblecrear constructores.Consulta en la documentación de Oracle cómo 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 después, crear subclases más especicas

que hereden los atributos y métodos 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-

terísticas de una persona: un nombre, un número de identicación, un teléfono, etc.

Por tanto se puede construir un super tipo de objeto llamado tipo_persona que

aglutine los atributos característicos de una persona.

create or replace type tipo_persona as object

(id number,

nombre varchar2(10),

telefonos listin)

not final

 /  

creado.

La creación del tipo lleva includa la claúsula not nal que indica que se pueden

generar más tipos de objetos a partir de este. Dicho con nomenclatura POO, se

pueden crear subclases apartir de la superclase, o dicho con un lenguaje más natural

se pueden crear tipos de persona más especicos a partir del tipo genérico persona.

A continuación se crea un tipo de persona especíca, el estudiante:

304

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 313/324

Capítulo 8. BBDD Objeto-Relacionales

SQL> create or replace type tipo_estudiante under tipo_persona2 (facultad varchar2(10),

3 nota_media number)4 not final

5  /  

Tipo creado.

En estecaso, lacláusula underespecica a qué supertipo perteneceel tipo estu-diante. Nuevamente,se denecomo notnal parapoder generarclasicacionesmásamplias.

Obsérvesequeestetipo de construccionespuedenusarsetambién para las jerar-

quíasenel modelo entidad relación.Ver sección2.4.1.

Al igual queconcualquierotro objeto, sepuede comprobar la estructuradel tipoestudianteutilizando el comando describe, abreviadodesc:

SQL> desc tipo_estudiantetipo_estudiante extiende TJ.TIPD_PERSONAtipo_estudiante N0 es FINAL

VARCHAR2(10)

TELEFONOS LISTINFACULTAD VARCHAR2(10)

NÜTA_MEDIA NUMBER

Incluso seríaposible crear untipo desubobjeto quetenga losatributosy méto-dosdel tipmestudiante. Si además, se desearacrear untipo para representarlos

estudiantesde intercambio,sepodría denir:

SQL> create or replace type tipo_estudiante_intercambio2 under tipo_estudiante3 (pais varchar2(30),4 universidad varchar2(30))

5 /

Tipo creado.

SQL> desc tipo_estudiante_intercambio

305

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 314/324

Bases de Datos

tipo_estudiante_intercambio extiende TJ.TIPÜ_ESTUDIANTE

VARCHAR2 (1o)TELEFONOS LISTIN

FACULTAD VARCHAR2(10)NÜTA_MEDIA NUMBER

PAIS VARCHAR2(30)

UNIVERSIDAD VARCHAR2(30)

8.6. Operaciones DML

A lo largo del capítulo ya. se ha mostrado en los ejemplos cómo utilizar la sen-

tencia insert y select cuando se tratan tipos de objetos:

SQL> insert into empleado2 values(1,Fernando,Moreno,tab1a_hijos(E1ena,Pab1o));

1fila creada.

SQL> insert into empleado2 values(2,David,Sanchez,tab1a_hijos(Carmen,Candela));

1fila creada.

SQL> col hijos format a40SQL> select *  from empleado;

ID NOMBRE APELLIDO HIJOS

1Fernando Moreno TABLA_HIJÜS(Elena, Pab1o)

2 DavidSanchez TABLA_HIJOS(Carmen, Candela)

La única restricción 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 dealmacenamiento de una columna de tabla anidada

306

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 315/324

Capítulo 8. BBDD Objeto-Relacionadas

Para realizar actualizaciones se utiliza update:

SQL> update empleado2 set hijos=TABLA_HIJOS(Carmen,Cande1a,Cayetana)3 where id =1;

1fila actualizada.

Ypara realizar borrados se utiliza delete. Obsérvese cómo se puede utilizar undeterminado método para la selección 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 utilizaprincipalmente para apuntar a un objeto que ya. existe y no tener que duplicar lainformación. Por ejemplo, si se desea crear una tabla de mascotas en la que ca.damascota tiene su veterinario, yesos veterinarios ya están almacenados en una tablade objetos, se podría hacer uso de la palabra reservada REF para indicar que elveterinario ya existe y por tanto. solo se almacena una referencia a ese veterinarioen la tabla de mascotas.

SQL> create type veterinario as object2( id integer,3 nombre varchar(100),4direccion varchar(255));

5 / 

Tipo creado.

SQL> create type mascota as object2 (

307

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 316/324

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,Jesús Sánchez,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 veterinariosv

4 where v.id=1;

1 fila creada.

Se puede ver cómoREF se utiliza en dos situaciones:Al crear el tipo mascota,

para indicar que suveterinarioseráuna referenciaal veterinarioreal,y después,al

insertar la mascota,serealiza una sentenciade tipo ínsertselect para obtener una

referenciaal veterinariocuyoid =  1.Si a continuación, se realiza una consulta se obtiene:

SQL> select* from mascotas;

ID RAZA NOMBRE VET

1 perro sprocket 000O220208A59467OFAD9FO874E040007F01002AF3A594670FAD9E08

Para obtener losdatos realessepuedeutilizar la palabra DEREF:

SQL> select nombre,deref(vet) from mascotas;

NOMBRE DEREF(VET)(ID, NOMBRE, DIRECCION)

sprocket VETERINARIO(1, Jesús Sánchez, C/E1 mareo 29)

308

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 317/324

Capítulo 8. BBDD Objeto-Relacionales

8.8. Prácticas Resueltas

Práctica 8.1: Supermercado

Para la gestión de un supermercado, se desea construir un modelo para la gestión

de las listas de la compra:

1. Crea un tipo para almacenar direcciones postales con dos campos, la dirección

y el código postal.

create or replace type tipo_direccion as object( dir varchar2(100), CP number(5))

/

2. Crea un tipo contacto para almacenar un número de teléfono 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, dirección y contacto.

Después, crea un Subtipo cliente con otro campo adicional llamado número 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 artículos con los campos id, nombre, descripción, precio y porcen-

taje de IVA. Después crea un tipo tabla de objetos para registros de artículos.

create or replace type tipo_articulo as object

(id_art number,

309

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 318/324

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 parala lista dela compray otro para sudetalle. Lalista dela

compracontendrá un identicador, fecha,cliente y una tabla de detalles de

lista dela compra.A su vez, undetalle delista de compraestará compuesto

por un artículoy un campoquedenote la cantidad pedida de eseartículo. Se

deberá incluir en la denición unafunción miembro para calcular el total de

la lista dela 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,memberfunction total return number

)

 /  

6.Crea ahora el cuerpodel tipolista dela compraparadenir el métodototal:

310

create or replace type body tipo_1ista_compra asmemberfunction total return numberis

i integer; tot number := O;

begin fori in1..Deta1le.countlooptot := tot+ (Detal1e(i).cantidad *  Deta11e(i).articu1o.precio) t

(1+(Detal1e(i).articu1o.porct_iva/100)); end loop;return tot;

end;

end;/

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 319/324

10.

Capítulo 8. BBDD  Objeto-Relacionadas

Crea unatabla 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,[email protected]),0);

Crea una tablapara las listas de la comprae inserta una lista de la compraconun detalle de dosartículospara el cliente insertadoanteriormente:

create table listas_de_compras of tipo_1ista_compranested table Detalle store as tDeta11e;

insert into 1istas_de_comprasselect 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 jamón,Iberico Be11ota,6,7),4)) from Clientes c where c.id=1;

Muestra.conuna selectlosdatosde la lista de la compra:

col cliente formats40col detalla formatn50set linesize 132select idjcchmdcrccli) u cliente. detallo fromliltagdhcompns;

l 13/06/11TIPILCLIENTEÜI,&#39;Padxo.Suarez. TIPTAB_LISTA_DÉI&#39;ALLE(TIPO_LISTA_DÉI&#39;ALLE(1,TIPÜ_ARTICO_DIR.ECCIDN(Puoodel Husoo15&#39;,28099)ULOU,Burn depu, Tipo bnguotto,1, 7), d).. TIPU_CONTACl&#39;0(917726525,Tsuuezdono.TIPO_LISTA_DÉTALLE(2.TIPCLARTICULCK?,Wonchudocom). 0) jamón, Iberico BeuataHG.7). 4))

Construyeunaselectparamostrarpor pantalla el id deuna lista dela compray su total.

SQL> select id, c.tota1() from 1istas_de_compras c;

ID C.TOTAL()

311

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 320/324

Bases de Datos

8.9. Prácticas Propuestas

Práctica 8.2: Tipos básicosy herencia

Realiza los siguientes ejercicios:

1. Crea. un tipo para las direcciones de empresas, contendrá el tipo de dirección

y la dirección (número, calle y piso).

2. Crea un tipo colección 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 Anónima con los atributos

número 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 posesión

de la empresa.

6. Crea una tabla de empleados que tenga una referencia a una Empresa.

Práctica 8.3: Comandos DML con objetosCon los tipos de la. práctica 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 función DEREF.

312

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 321/324

Capítulo 8. BBDD Objeto-Relacionales

Práctica 8.4: Números complejos

Un númerocomplejo a+bi está compuestopor una parte imaginaria (b) y una partereal (a). Se desea crear un tipo de objeto llamado tipo_complejo con una serie de

métodos para poder operar con ellos. Se pide:

1. Crea el tipo tipo_complejo que contenga los atributos imaginario y real, y quedena la cabecera de los siguientes métodos:

IMódulo: Retorna un valor numérico resultado de operar los valores ima-

ginarios y reales con la fórmula x/ a2+ b?

- Valor: Retorna una cadena de caracteres con la representación del número

complejo (a+bi).

IConjugado: Retorna una cadena de caracteres con la representación del

conjugado del número complejo (a-bi).

- Multiplicar(Número Complejo): Actualizarálos atributosdel númerocom-

plejo resultado de multiplicar los propios atributos por otro número com-

plejo que será pasadocomo parámetro: (a+bi)(c+di) = acbd+(ad+bc)i

2. Crea el cuerpo del tipo desarrollando los métodos denidos en la cabecera del

tipo.

3. Crea el tipo tipo_tabla_co1nplejos para almacenar una serie de números com-

plejos. Después, crea el tipo tipo_lista_complejos que almacene una tabla de

complejos.

4. Crea una tabla de listas de números complejos e inserta un registro con 5

números.

5. Crea un bloque anónimo para multiplicar el primer número insertado por el

segundo.

6. Crea un bloque anónimo que muestre el módulo, valor y conjugado de los

números complejos insertados.

7. Crea una función que reciba una tabla de números complejos y devuelva unnúmero complejo con la suma de todos ellos.

8. Crea un bloque anónimo que invoque a la función anterior y visualice la suma

de los números complejos insertados.

313

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 322/324

Bases de Datos

8.10.

314

Resumen

Los conceptos clave de este capítulo son los siguientes:

Muchos SGBD permiten la creación de tipos personalizados, que son la base

de las BBDD-OR.

Los atributos multivaluados puedenalmacenarse encolecciones (varray)de un

número jo de elementoso en tablas anidadas(nested tables)para almacenarun número variable de elementos .

Los ob jetos denidos en Oracle se puedenconsultar 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 creación de tipos en tantos niveles como se desee.

Un OID es un número de 16 bytes para mejorar la búsqueda de la información.

Se puede consultar con la función object_id.

Un método es una función o un procedimiento miembro denido dentro de un

tipo.

Para invocar a un método se utiliza el operador punto objeto.metodo(

Se pueden crear jerarquías de clases (u objetos tipo) deniendo tipos NOTFINAL .

Para crear un subtipo de objetos se utiliza la cláusula under supertipo.

Es posible compartir objetos mediante referencias a objetos utilizando la cláusu-la REF.

Para ver la información de un objeto referenciado mediante REF se utiliza la

función DEREF.

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 323/324

8.11.

1. En BBDD-OR un tipo

Test de repaso

a) Es la denición de unaestructura quesirve

para crear objetos

b) Se usa en la denición de una columna deuna tabla

c) Se puede utilizar como basepara 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 segmentoespecial

c) Se crea con la cláusula 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 función object_id

c) Es el equivalente al ROWID en objetos

d) Todas las anteriores

Capítulo 8. BBDD Objeto-Relacionales

6. Para denir métodos en BBDD-OR

a) Se usan funciones o procedimientos miem-

bros de un tipo de datos

b) Se utilizan paquetescon cuerpoy cabecera

c) No es posible utilizar métodos

d) Ninguna de las anteriores

7. Para invocar a un método en BBDD-

OR

a) Se utiliza el operador ->

b) Se usa la función REF

c) Se usa la función 0bject_value()

d) Se usa el operador punto

8. En BBDD-RO la herencia

a) Permite que un tipo herede de más 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 realizarinserts y updates

b) Se pueden usardeletes

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;rP¬9&#39;ZP&#

315

7/21/2019 Bases de Datos

http://slidepdf.com/reader/full/bases-de-datos-56e16abd7ea4f 324/324

Bases de Datos 

8.12. Comprueba tu aprendizaje

1. ¿Qué es una base de datos OR? 12. Explica cómo se puede invocar a un _ , _ _ _ _método denido en un tipo.

2. ¿Cual es la principal diferencia conlas basesde daÉOSTGÏaCÍOHHÏGS? 13. Comenta cómose aplicala herencia

3. ¿Quées unatributo multivaluado?a lasBBDD-OR4. ¿Cómoencaja unatributo multiva-14&#39; ¿CómoSe puedeinsert?u?regis-

luado enlas basesde datosOR? tro en unatabla deObjetos

5_ Enumerados formasdistintas de 15. Denepara quésirven lassiguien-almacenar atributos multivaluados tes funclones

en unatabla. IObject-id6. Explicalas diferenciasentre usar  _ Objechvalue

una tablaanidadayunacoleccion. DEREFI

7. Escribela sintaxispara crear:  _ REF

ITipos ,  _ , ,  _ _16. Dene para que sirven las siguien-

- TlpOS colecciones tes Cláusulas

- TiposTabla

tore asITabla de objetos IS

Iunder

8. ¿Quées untipo tabla?¿Cómo se 1crean? &#39; na

nnot nal9. ¿Cómo se pueden consultar en Ora-

cle quétipos deob jetoshay deni- &#39; ¡memberd Í , .OS 17. ¿Que es una referenciaÍQPara

10. ¿Cómose puedeconsultar enOra- qué 1153?cle las tablas anidadas creadas? ,  _ 

18. ¿Como se puede insertar una refe-11. ¿Cómo se crea un método en un ti- rencia a un objeto en un tabla de

316

po? objetos?