Bases de Datos Arturo Mora
Bases de Datos Arturo Mora
Bases de Datos Arturo Mora
ases de datos.
y gestión
Consulte nuestra página web: www.sintesis.com
En ella encontrará el catálogo completo y comentado
B Diseño
ases de datos.
y gestión
Arturo Mora Rioja
© Arturo Mora Rioja
© EDITORIAL SÍNTESIS, S. A.
Vallehermoso, 34. 28015 Madrid
Teléfono 91 593 20 98
http://www.sintesis.com
ISBN: 978-84-907704-2-9
Depósito Legal: M-26.099-2014
INTRODUCCIÓN .................................................................................................................. 9
ÍNDICE
6 BASES DE DATOS . DISEÑO Y GESTIÓN
ÍNDICE
BASES DE DATOS . DISEÑO Y GESTIÓN 7
ÍNDICE
8 BASES DE DATOS . DISEÑO Y GESTIÓN
ÍNDICE
S
I ntroducción
En 1597 sir Francis Bacon acuñó la conocida frase “Knowledge itself is a power”, adaptada ge-
neralmente al castellano como “La información es poder”. Cuatro siglos y medio después,
los padres de la informática se devanaron los sesos diseñando sistemas óptimos de almacena-
miento, procedimientos de consulta y modificación de datos, mecanismos de seguridad...
Como vaticinaba sir Francis, hoy en día la información es el activo más valioso de toda or-
ganización, y las bases de datos son la respuesta a las necesidades técnicas surgidas hace unas
décadas.
Este libro trata las bases de datos relacionales y objeto-relacionales desde dos puntos de vista
fundamentales: primero aborda su diseño y creación, recorriendo los pasos que hay que seguir
desde la primera idea de negocio hasta su implantación funcional, combinando conceptos teó-
ricos con actividades prácticas y apoyándose en herramientas validadas por la ingeniería del soft-
ware, entre las que destacan la teoría de la normalización y el diagrama entidad/relación; después
se centra en la gestión de la información almacenada a través del lenguaje SQL y su extensión
procedimental SQL/PSM.
Durante la elaboración del texto se ha intentado no caer presa de imposiciones puntuales
del mercado ni de modas pasajeras, motivo por el que la sintaxis técnica tratada, así como todos
los ejemplos, corresponden a normativas internacionales, no a herramientas comerciales. Salvo
donde se indique lo contrario, se utilizan las normas del estándar ISO SQL:1999, fácilmente
adaptables a la sintaxis de cualquier base de datos.
Las descripciones de sentencias de los lenguajes SQL y SQL/PSM utilizan la siguiente no-
tación, habitual en obras técnicas:
10 BASES DE DATOS . DISEÑO Y GESTIÓN
Para complementar los contenidos de los reales decretos también se ha consultado el desarro-
llo del currículo de los módulos mencionados en la normativa de diversas comunidades autó-
nomas españolas.
Desde hace diez años soy docente de la familia profesional de Informática en Ciclos For-
mativos de Grado Superior de Formación Profesional. Los diez años anteriores los dediqué al
desarrollo de software en el mundo de la empresa privada, cubriendo el espectro existente entre
INTRODUCCIÓN
BASES DE DATOS . DISEÑO Y GESTIÓN 11
INTRODUCCIÓN
1
Sistemas de
almacenamiento
de la información
Objetivos
INTRODUCCIÓN
FICHEROS
Definición
BASES DE DATOS
CAPÍTULO 1
SISTEMAS DE ALMACENAMIENTO DE LA INFORMACIÓN 15
Glosario
1.1. Introducción
CAPÍTULO 1
16 BASES DE DATOS . DISEÑO Y GESTIÓ N
1.2. Ficheros
Las aplicaciones gestoras de bases de datos se encargan de configurar una estructura óptima de
almacenamiento de información con mínima intervención por parte del usuario. No obstante,
es interesante completar la perspectiva histórica con una breve descripción teórica sobre orga-
nización de ficheros.
CAPÍTULO 1
SISTEMAS DE ALMACENAMIENTO DE LA INFORMACIÓN 17
Ejemplos: los ficheros de texto con extensión .txt, los .csv de valores separados por
comas, los .htm y .html correspondientes a páginas web, los de lenguajes de marcas .xml
o .rss.
Cuando se utilizan ficheros de texto plano para almacenar información se pueden clasificar
de acuerdo a su organización interna:
00789521T#Paula#Sanz#González#619554687$50687452Y#José Luis#García#Viñals#
667859621$38546998X#Javier#Peinado#Martín#666932541$09653801B#Ruth#Lázaro#
Cardenal#689330247%
CAPÍTULO 1
18 BASES DE DATOS . DISEÑO Y GESTIÓ N
• De acceso directo o aleatorio. Cada línea de contenido se organiza con unos tamaños fijos
de dato. Se puede acceder directamente al principio de cada línea.
En esta ocasión cada contacto ocupa una línea del fichero (al final de cada una el sistema
operativo incluirá uno o dos caracteres de salto de línea invisibles para el usuario), y cada
dato utiliza un número de caracteres fijo, aunque no lo ocupe totalmente (en el ejemplo se
reservan 15 caracteres para el nombre, aunque en el caso de Ruth solo se utilicen 4).
Como todos los clientes ocupan el mismo espacio en el fichero, podemos acceder fá-
cilmente a cualquiera de ellos multiplicando la posición en la que se encuentra menos una
por el número de caracteres que mide cada línea. Por ejemplo, si el fichero se ha creado en
un sistema Windows y queremos acceder al tercer cliente, tendremos que restar uno a su
posición (3 − 1 = 2) y multiplicar el valor resultante por la longitud de la línea (63 caracteres
más los dos caracteres de salto de línea que incluye el sistema operativo, es decir, 65). Como
2 × 65 = 130, la información del tercer cliente se encontrará en la posición 131.
La contrapartida a esta facilidad de posicionamiento es que el tamaño del fichero
crece considerablemente respecto a su versión secuencial.
Figura 1.4. Fichero de índice por NIF de cliente y fichero de clientes original
CAPÍTULO 1
SISTEMAS DE ALMACENAMIENTO DE LA INFORMACIÓN 19
En la figura 1.4 los NIF aparecen ordenados. Tras cada uno de ellos se ha añadido el
número de línea del fichero principal donde se encuentra la información asociada. Si
una aplicación software quisiera listar los clientes ordenados por NIF, recorrería secuen-
cialmente el fichero de índice, y al final de cada línea encontraría la línea del fichero
principal que debe leer para encontrar a cada cliente.
El siguiente fichero indexaría los clientes ordenados por su primer apellido:
Figura 1.5
Fichero de índice por primer apellido de cliente y fichero de clientes original
Crear manualmente un fichero índice que ordene el ejemplo de la figura 1.3 por pri-
mer apellido, segundo apellido y nombre.
• Secuenciales. Para acceder a un dato hay que recorrer todo el contenido del soporte previo
a dicho dato (ejemplo: cintas magnéticas).
Figura 1.6
Cinta magnética para guardar
información de respaldo
CAPÍTULO 1
20 BASES DE DATOS . DISEÑO Y GESTIÓ N
• Direccionables. Se puede acceder directamente a un dato sin tener que recorrer todos los
anteriores (ejemplo: disco duro).
Figura 1.7
Disco duro, uno de los soportes para datos más extendidos en la actualidad
1.3.1. Definición
Volviendo nuevamente al DRAE, este nos dice que base de datos es un término relacionado con
el mundo de la informática, y lo define como «Conjunto de datos organizado de tal modo que
permita obtener con rapidez diversos tipos de información». Adoración de Miguel y Mario
Piattini ofrecen una definición más precisa:
CAPÍTULO 1
SISTEMAS DE ALMACENAMIENTO DE LA INFORMACIÓN 21
• Jerárquico. Es el más antiguo. Refina la idea de fichero indexado, creando una estricta re-
lación de jerarquía entre los datos de varios ficheros, motivo por el que presenta serias li-
mitaciones semánticas. Relacionado con grandes máquinas (mainframes), su implantación
comercial más conocida es IMS de IBM.
• En red. Introduce mejoras respecto al modelo jerárquico (mayor independencia y fle-
xibilidad de los datos) a costa de aumentar el nivel de complejidad. Implantaciones:
CODASYL, IDMS/DB de Computer Associates (actualmente CA Technologies).
• Relacional. Representa la información en forma de entidades y relaciones entre ellas, evi-
tando rutas preconcebidas para localizar los datos y huyendo de la rigidez de los modelos
previos. Cada entidad y cada relación aparece en forma de tablas bidimensionales (con
filas y columnas). Es el modelo más extendido desde hace décadas, gracias a compañías
como Oracle, IBM o Microsoft (que posteriormente evolucionaron hacia el modelo
objeto-relacional), aunque hoy en día podemos encontrar bases de datos relacionales
puras, como MySQL o SAP Sybase.
• Orientado a objetos. Aplica a los datos el paradigma de la orientación a objetos (OOP,
object-oriented programming). Irrumpió con fuerza en los años noventa debido a las nuevas
necesidades de almacenamiento de las bases de datos relacionales (imágenes, documentos,
ficheros de audio y vídeo). Implantaciones:Versant, db4o, InterSystems, Objectivity.
• Objeto-relacional. En los últimos años los fabricantes de bases de datos relacionales han in-
corporado a su software diversas capacidades de las bases de datos orientadas a objetos,
creando modelos híbridos con base relacional. Ejemplos: Oracle, Microsoft SQL Server,
IBM DB2, IBM Informix, PostgreSQL.
• Otros modelos.
Con la ayuda de Internet, elaborar una lista de bases de datos comerciales y libres
relacionando cada una de ellas con su modelo de datos correspondiente.
CAPÍTULO 1
22 BASES DE DATOS . DISEÑO Y GESTIÓ N
Si, en cambio, utilizamos como criterio la ubicación física de la información, podemos di-
ferenciar entre dos grandes tipos de bases de datos:
Figura 1.8
Símbolo de base de datos
Figura 1.9
Memoria de tambor
CAPÍTULO 1
SISTEMAS DE ALMACENAMIENTO DE LA INFORMACIÓN 23
En el mercado hay una amplia tipología de SGBD que corresponde con el modelo de base
de datos subyacente.
CAPÍTULO 1
24 BASES DE DATOS . DISEÑO Y GESTIÓ N
9 Teradata Teradata
CAPÍTULO 1
SISTEMAS DE ALMACENAMIENTO DE LA INFORMACIÓN 25
Resumen
El almacenamiento de información ha sido uno de los grandes problemas de la infor-
mática desde sus comienzos. Inicialmente el uso de ficheros ofrecía una enorme falta
de flexibilidad, creándose redundancia y dependencia de la estructura de cada archivo
concreto. Si bien la inclusión de ficheros de índice aumentó considerablemente la agi-
lidad de consulta, inserción, modificación y borrado de información, la aparición de las
bases de datos dio solución al problema de forma estandarizada.
De entre los distintos modelos de base de datos, el relacional ha sido el más exten-
dido históricamente. En la actualidad las bases de datos objeto-relacionales combinan
el modelo relacional con elementos del modelo orientado a objetos.
El manejo de las bases de datos se lleva a cabo a través de los sistemas gestores de
bases de datos, aplicaciones software que ofrecen utilidades mediante las que manipular
la información a gusto del cliente.
EJERCICIOS PROPUESTOS
1. Crear un fichero de texto secuencial agenda_secuencial.txt con una agenda de te-
léfonos. Los datos que hay que incluir serán:
Nombre
Apellidos
Dirección
Ciudad
Teléfono
2. Partiendo de los datos del ejercicio anterior, crear un fichero de texto de acceso
directo agenda_acceso_directo.txt. Se debe presentar una justificación del número
de caracteres elegidos para cada dato.
3. Copiar el fichero agenda_acceso_directo.txt del ejercicio anterior a un nuevo fi-
chero llamado agenda_indexada.txt. Crear un fichero de índice agenda_apelli-
dos_nombre.txt que lo ordene por apellidos y nombre, y otro agenda_ciudad.txt
que lo ordene por ciudad.
4. Borrar un contacto cualquiera de agenda_indexada.txt e insertar un contacto
nuevo, actualizando a la vez los ficheros de índice asociados.
5. Consultar en Internet información sobre las prestaciones de los SGBD comerciales
y libres más utilizados en la actualidad.
CAPÍTULO 1
26 BASES DE DATOS . DISEÑO Y GESTIÓ N
ACTIVIDADES DE AUTOEVALUACIÓN
3. Respecto a los ficheros secuenciales y de acceso directo, los ficheros indexados son
más rápidos:
■ a) En inserciones y modificaciones de datos.
■ b) En borrado de datos.
■ c) En búsqueda de datos.
5. Un SGBD:
■ a) Debe ofrecer herramientas gráficas para acceder a la información.
■ b) Debe ofrecer al menos una línea de comandos desde la que acceder a la
información.
■ c) Se gestiona con herramientas externas.
SOLUCIONES:
a ■
1. ■ b ■
c a ■
3. ■ c
b ■
5. ■ b ■
a ■ c
a ■
2. ■ c
b ■ b ■
a ■
4. ■ c
CAPÍTULO 1
2
Diseño de bases
de datos relacionales.
El modelo entidad/relación
Objetivos
Modelización de datos
MODELIZACIÓN
CONCEPTUAL DEL Diccionario de datos
SOFTWARE
Entidad
Relación
Cardinalidad y modalidad
DIAGRAMA
ENTIDAD/RELACIÓN (DER)
Atributos de relación
DIAGRAMA
ENTIDAD/RELACIÓN
EXTENDIDO
CAPÍTULO 2
DISEÑO DE BASES DE DATOS RELACIONALES 29
Glosario
Análisis (de requisitos del software). Proceso sistemático orientado a obtener los re-
quisitos que debe cumplir un software (necesidades del usuario, comportamiento interno
y externo, documentación y evolución del sistema).
ANSI. Instituto Nacional Estadounidense de Estándares (American National Standards
Institute). Organismo de estandarización.
Diagrama de flujo de datos (DFD). Técnica que representa gráficamente los límites de
un sistema de información, mostrando el flujo de datos entre sus integrantes y ofreciendo
una descomposición de procesos a varios niveles.
Diagrama de transición de estados (DTE). Herramienta gráfica que representa los dis-
tintos estados que puede tomar cada parte de un sistema de información, así como los
eventos que propician el cambio entre estados.
Herramienta CASE (computer-aided software engineering, ingeniería del software
asistida por ordenador). Aplicación que presta soporte a diversas fases del desarrollo
de software aportando un enfoque de ingeniería.
Ingeniería del software. Aplicación de un enfoque sistemático, disciplinado y cuanti-
ficable hacia el desarrollo, operación y mantenimiento del software (definición del Ins-
tituto de Ingeniería Eléctrica y Electrónica –IEEE, Institute of Electrical and Electronics
Engineers–, 1993).
Metodología (de desarrollo de software). Conjunto de filosofías, fases, procedimien-
tos, reglas, técnicas, herramientas, documentación y aspectos de formación para los
desarrolladores de sistemas de información (definición de Richard Maddison, 1983).
CAPÍTULO 2
30 BASES DE DATOS . DISEÑO Y GESTIÓ N
os Espe
d e dat cific
tos aci
obje ón
d
de e
lp
ció
roc
Diagrama Diagrama de
rip
eso
entidad/relación flujo de datos
Desc
Diccionario
de datos
Diagrama de transición
de estados
Figura 2.1
Modelo de análisis Espec
ificación de contro
l
de Roger S. Pressman
• Descripción de objetos de datos. Representa dichos objetos y las relaciones entre ellos. Utiliza
el diagrama entidad/relación (DER).
• Especificación de proceso. Identifica las distintas funcionalidades del sistema y sus relaciones,
así como la forma en que la información se transforma a su paso por ellas. Se expresa en
el diagrama de flujo de datos (DFD).
• Especificación de control. Muestra los distintos estados en los que se puede encontrar el sis-
tema y las transiciones de uno a otro gracias al diagrama de transición de estados (DTE).
Nuestra problemática nos lleva a analizar de cerca el primero de estos tres ámbitos.
CAPÍTULO 2
DISEÑO DE BASES DE DATOS RELACIONALES 31
...
Tabla: TSocio
Campos:
cNIF CHAR(9) NOT NULL UNIQUE
cNombre VARCHAR(30) NOT NULL
cApellidos VARCHAR(60) NOT NULL
cDireccion VARCHAR(100)
cTelefono CHAR(9) NOT NULL
dNacimiento DATE NOT NULL
dAlta DATE NOT NULL
Clave primaria: cNIF
Claves ajenas:
N/A
Índices:
iSocio_PK cNIF ASC
iSocio_Apellidos_Nombre cApellidos ASC + cNombre ASC
iSocio_Alta dAlta DESC
--------------------------------------------------------------------------
Tabla: TPrestamo
Campos:
cSignatura VARCHAR(15) NOT NULL
cNIF CHAR(9) NOT NULL
dPrestamo DATE NOT NULL
Clave primaria: cSignatura ASC + cNIF ASC + dPrestamo DESC
Claves ajenas:
cSignatura TEjemplar.cSignatura
cNIF TSocio.cNIF
Índices:
iPrestamo_PK cSignatura ASC + cNIF ASC + dPrestamo DESC
iPrestamo_FK_NIF cNIF ASC
iPrestamo_FK_Signatura cSignatura ASC
--------------------------------------------------------------------------
...
CAPÍTULO 2
32 BASES DE DATOS . DISEÑO Y GESTIÓ N
1. Debe albergar el universo del discurso, es decir, toda la información que ha de manejar
el sistema.
2. Ha de representar el estado final al que pueden llegar los datos.
3. Cualquier cambio en el sistema de información se debe reflejar en el modelo de datos y
viceversa.
CAPÍTULO 2
DISEÑO DE BASES DE DATOS RELACIONALES 33
una técnica cuyo objetivo es la representación y definición de todos los datos que se introducen,
almacenan, transforman y producen dentro de un sistema de información, sin tener en cuenta
las necesidades de la tecnología existente, ni otras restricciones.
Merece la pena recalcar ese factor de independencia con respecto a la implementación final.
El DER dará solución al problema planteado sin importar cuál sea el SGBD comercial que se
vaya a utilizar. Para ello parte de una serie de conceptos abstractos que se detallan a continuación.
2.2.1. Entidad
Una entidad es cualquier objeto real o abstracto que tiene existencia por sí mismo y se puede
identificar de una forma clara y precisa, y del cual se desea registrar información en el sistema.
Es el elemento fundamental que hay que caracterizar. Se representa con sustantivos en singular
que encierran un concepto, y es labor del analista identificar dichos sustantivos. Ejemplos de
entidad: “Empleado”, “Cliente”, “Factura”, “Línea de factura”, “Proveedor”.
Entidad es un concepto abstracto. Cada elemento concreto de una entidad es una ocurrencia.
En el ejemplo de la entidad “Empleado”, cada uno de los empleados es una ocurrencia de dicha
entidad.
A su vez, cada ocurrencia presenta una serie de datos asociados. Un empleado tendrá nombre,
apellidos, NIF, dirección postal, número de teléfono, etc. Cada uno de esos datos es un atributo,
y cada ocurrencia tiene distintos valores para cada atributo (en la entidad “Empleado”, un em-
pleado concreto tendrá “Juan Antonio” como valor de su atributo “Nombre”,“García Corredor”
como valor de su atributo “Apellidos” y “52874660Y” como valor de su atributo “NIF”).
Toda entidad debe cumplir dos características:
• Presencia del mismo conjunto de atributos para todas las ocurrencias, independiente-
mente de que alguna ocurrencia carezca de valor para algún atributo.
• Diferenciación unívoca de ocurrencias. No puede haber dos ocurrencias con los mismos
valores para todos sus atributos.
CAPÍTULO 2
34 BASES DE DATOS . DISEÑO Y GESTIÓ N
NIF
apellidos
MULTA
Elaborar una lista de posibles entidades de una aplicación de gestión de la caja re-
gistradora de un bar.
CAPÍTULO 2
DISEÑO DE BASES DE DATOS RELACIONALES 35
2.2.2. Relación
Una relación es una asociación o vínculo entre ocurrencias de varias entidades. Se nombran
con expresiones verbales. Ejemplos de relaciones serían la existente entre las ocurrencias de la
entidad “Cliente” y las de la entidad “Factura” (ya que toda factura corresponde a un cliente),
y a la que podríamos llamar “genera” (se leería “cliente genera factura”).
La representación gráfica de una relación consiste en un rombo rodeando su nombre:
genera
De acuerdo al número de entidades cuyas ocurrencias relacionan, podemos dividir las rela-
ciones en varias categorías:
GRUPO
CAPÍTULO 2
36 BASES DE DATOS . DISEÑO Y GESTIÓ N
AULA
GRUPO
EMPLEADO es jefe de
CAPÍTULO 2
DISEÑO DE BASES DE DATOS RELACIONALES 37
Listar las posibles relaciones entre las entidades resultantes de la actividad propuesta
2.1. Debatir cuáles son candidatas a ser reflexivas, ternarias o n-arias.
• 1:N (uno a ene/uno a muchos). Una ocurrencia de una entidad puede relacionarse con
varias de otra entidad, pero cada ocurrencia de la segunda entidad solo puede relacionarse
con una única ocurrencia de la primera entidad.
Supongamos una empresa donde cada empleado pertenece a un departamento y en
cada departamento puede haber varios empleados. Esta sería la representación gráfica:
1:N
CAPÍTULO 2
38 BASES DE DATOS . DISEÑO Y GESTIÓ N
• M:N (eme a ene/muchos a muchos). Cada ocurrencia de una entidad puede relacionarse
con varias de otra entidad, y cada ocurrencia de la segunda entidad también puede rela-
cionarse con varias de la primera.
Si en nuestro sistema de información un músico puede tocar varios instrumentos y
un instrumento puede ser tocado por varios músicos:
M:N
• 1:1 (uno a uno). Una ocurrencia de una entidad se relaciona con otra ocurrencia de otra
entidad y viceversa.
Una consultora financiera podría asignar a cada cliente una única cartera de inversión
propia:
1:1
posee CARTERA
CLIENTE
DE INVERSIÓN
La cardinalidad delimita los límites superiores de una relación, pero no define su obligato-
riedad. ¿Todo instrumento debe ser tocado por algún músico? ¿Podría haber alguna ocurrencia
en la entidad “Instrumento” que no tuviera relación con otra ocurrencia en la entidad “Músico”?
Puede que, como requisito del sistema de información, la entidad “Instrumento” deba contener
una lista de instrumentos independientemente de que haya algún músico que los toque (quizás
una de las ocurrencias de “Instrumento” corresponda al acordeón y, en cambio, en “Músico”
CAPÍTULO 2
DISEÑO DE BASES DE DATOS RELACIONALES 39
no haya ninguna ocurrencia correspondiente a un músico que toque el acordeón). Pero también
puede que el sistema de información exija que las ocurrencias de “Instrumento” se carguen a
medida que se introduzcan en “Músico” ocurrencias de músicos, de modo que todos los ins-
trumentos tendrían su correspondencia con, al menos, un músico. Obviamente, las dos situa-
ciones son incompatibles en un buen diseño de datos, y la cardinalidad no nos aporta la
información necesaria para solventar esta disyuntiva. Hemos de abordar un nuevo concepto.
La modalidad (llamada por algunos autores cardinalidad, con la consiguiente confusión) define
el número mínimo y máximo de ocurrencias de una entidad que pueden estar relacionadas con
una ocurrencia de otra u otras entidades, identificando relaciones optativas (en las que no tiene
por qué haber correspondencia). La modalidad se indica a ambos lados de la relación, y su valor
máximo coincide con el valor de la cardinalidad correspondiente al lado de la relación en el
que nos encontremos. Puede ser de los siguientes tipos:
• 0..1 (cero a uno). Cada ocurrencia de la primera entidad puede relacionarse con una
ocurrencia de la segunda entidad o no. No puede relacionarse con varias.
• 1..1 (uno a uno). Cada ocurrencia de la primera entidad debe relacionarse obligatoria-
mente con una y solo una ocurrencia de la segunda entidad.
• 1..N (uno a ene/uno a muchos). Cada ocurrencia de la primera entidad debe relacionarse
obligatoriamente con al menos una ocurrencia de la segunda entidad. Puede relacionarse
con varias.
• 0..N (cero a ene/cero a muchos). Cada ocurrencia de la primera entidad no tiene limi-
tada su relación con ocurrencias de la segunda entidad. Puede relacionarse con una, varias
o ninguna.
1:N
(0,1) (0,N)
CLIENTE compra AUTOMÓVIL
Para cada entidad de la relación debemos leer su modalidad en el lado opuesto. En este caso,
la modalidad de “Cliente” con respecto a “Automóvil” es de 0..N, y la de “Automóvil” con res-
pecto a “Cliente” es de 0..1. Esta relación “compra” se leería del siguiente modo:
CAPÍTULO 2
40 BASES DE DATOS . DISEÑO Y GESTIÓ N
1:N
(1,1) (1,N)
GRUPO tiene ALUMNO
Al igual que en el caso anterior, la cardinalidad es 1:N, pero la modalidad es más restrictiva
(1..N de “Grupo” a “Alumno” y 1..1 de “Alumno” a “Grupo”):
• Toda ocurrencia de “Grupo” está obligada a relacionarse con al menos una ocurrencia
de “Alumno”, pudiendo relacionarse con varias (todo grupo de alumnos debe tener
alumnos).
• Toda ocurrencia de “Alumno” está obligada a relacionarse con una y solo una ocurrencia
de “Grupo” (cada alumno debe pertenecer de forma obligatoria a un grupo y solamente
a uno).
M:N
(0,N) recibe en (1,N)
SOCIO préstamo LIBRO
La interpretación sería:
• Toda ocurrencia de “Socio” está obligada a relacionarse con al menos una ocurrencia de
“Libro”, y puede relacionarse con varias (todo socio debe haber recibido al menos un
libro en préstamo).
• Toda ocurrencia de “Libro” puede relacionarse con varias ocurrencias de “Socio”,
con una o con ninguna (un libro puede haber sido prestado a un socio, a varios o a
ninguno).
CAPÍTULO 2
DISEÑO DE BASES DE DATOS RELACIONALES 41
Nótese que, una vez que se utiliza el concepto de modalidad, no es necesario indicar la car-
dinalidad, ya que esta se puede deducir a partir de aquella (tomando los valores máximos a cada
lado de la relación).
En las relaciones ternarias y n-arias la modalidad se lee de una forma algo distinta. La indi-
cación de modalidad correspondiente a cada entidad indica cómo se relacionan las ocurrencias
de dicha entidad con una vinculación de ocurrencias del resto de las entidades participantes en
la relación.Veamos el siguiente ejemplo:
AULA
(1,N)
(1,1) (0,N)
PROFESOR imparte ASIGNATURA
(1,N)
GRUPO
CAPÍTULO 2
42 BASES DE DATOS . DISEÑO Y GESTIÓ N
NIF signatura
fecha de préstamo
nombre título
apellidos autor
dirección editorial
teléfono año de publicación
fecha de nacimiento
fecha de alta
CAPÍTULO 2
DISEÑO DE BASES DE DATOS RELACIONALES 43
EMPLEADO
código de empleado
NIF
número de la seguridad social
nombre
apellidos
dirección Figura 2.18
teléfono Entidad con atributos
Si queremos elegir un conjunto de atributos que identifiquen de forma única a cada empleado,
podemos pensar en la combinación de “Nombre” y “Apellidos”, pero presenta un gran problema:
no garantiza la unicidad (puede haber dos empleados llamados “Juan Pérez García”). Si seguimos
buscando entre la lista de atributos, veremos tres posibles opciones:“Código de empleado”,“NIF” y
“Número de la Seguridad Social”. Cada uno de los tres sirve para identificar a cada ocurrencia de
forma única e inconfundible (no puede haber dos empleados con el mismo NIF, ni con el mismo
número de la Seguridad Social, ni con el mismo código de empleado, suponiendo que dicho código
haya sido definido de forma única). Esos tres atributos son llamados claves candidatas, y el que elijamos
para identificar a las ocurrencias de la entidad será la clave primaria (primary key). Por motivos de ren-
dimiento de la base de datos resultante, se recomienda elegir la clave primaria más pequeña posible.
En un diagrama entidad/relación las claves primarias se representan subrayando el nombre
del atributo si se ha optado por dibujar los atributos en el interior de un óvalo, u oscureciendo
el círculo si se ha decidido utilizar el otro tipo de representación gráfica. Supongamos que hemos
elegido “NIF” como clave primaria:
EMPLEADO
NIF nombre apellidos
código de empleado
NIF
EMPLEADO número de la seguridad social
nombre
apellidos
dirección
teléfono
A veces un solo atributo no es suficiente para identificar de forma unívoca todas las ocu-
rrencias de una entidad, por lo que hay que construir una clave primaria que incluya los valores
de varios atributos en el orden especificado, es decir, una clave primaria compuesta. En el siguiente
ejemplo, la entidad “Cuenta bancaria” necesita cuatro atributos para definir su clave primaria,
ya que cada uno de ellos es susceptible de repetir valores en distintas ocurrencias:
CAPÍTULO 2
44 BASES DE DATOS . DISEÑO Y GESTIÓ N
CUENTA BANCARIA
código de banco
código de oficina
dígito de control
código de cuenta
titular
fecha de apertura
A pesar de que falta mucha información sobre los requisitos de la aplicación, el siguiente
diagrama cumple con las restricciones expuestas:
CAPÍTULO 2
DISEÑO DE BASES DE DATOS RELACIONALES 45
prestado
a escrito tiene publicado
por por
fecha de préstamo
(0,N) (0,N)
NIF código de autor código de tema código de editorial
nombre nombre nombre nombre
apellidos apellidos dirección
dirección
es de tiene su
teléfono nombre sede en
fecha de nacimiento código de país
fecha de alta
Se ha dotado de clave primaria a todas las entidades. Las cardinalidades de cada relación res-
ponden a los requerimientos especificados, pero intentan incluir las mínimas restricciones po-
sibles. Por ejemplo, la cardinalidad de “Autor” hacia “Libro” es de 0:N, ya que un autor podría
serlo de más de un libro (de ahí la N), pero en ningún momento se especifica que todas las
ocurrencias de “Autor” deban corresponder obligatoriamente a autores de libros de esta biblio-
teca (quizás la base de datos resultante arranque con una carga inicial de una serie de autores,
independientemente de que la biblioteca cuente con alguna de sus obras). Por eso figura cero
como modalidad mínima.
CAPÍTULO 2
46 BASES DE DATOS . DISEÑO Y GESTIÓ N
Se desea almacenar información sobre la red de metro, sabiendo que los trenes
están asignados a una línea determinada, cada uno se guarda en una cochera de-
terminada (que está en una estación concreta) y en cada línea cada estación tiene
un número de orden.
(0,N)
imparte ASIGNATURA
(1,N)
PROFESOR
(0,1)
(1,N) realiza INVESTIGACIÓN
CAPÍTULO 2
DISEÑO DE BASES DE DATOS RELACIONALES 47
• Jerarquías. Se relacionan las ocurrencias de una entidad (supertipo) con las de varias enti-
dades (subtipos) que, además de compartir los atributos del supertipo, cuentan con atri-
butos propios. En el siguiente ejemplo asociado al sistema de información de una agencia
inmobiliaria se muestra el supertipo “Alquiler” y sus subtipos derivados, cada uno de ellos
con sus atributos:
es
un
Cada ocurrencia de “Chalet”, “Piso” y “Local comercial” tiene una ocurrencia co-
rrespondiente en “Alquiler”. Como todas las ocurrencias de los subtipos también lo son
del supertipo, la modalidad es invariable (0..1 en el lado de los subtipos y 1..1 en el del
supertipo).
Si la idea de jerarquía parte del supertipo, hablamos de especialización (ciertos atributos
tienen sentido para algunas ocurrencias, pero no para otras, por lo que se decide crear
entidades dependientes de la original). Si, en cambio, la idea parte de los subtipos, habla-
mos de generalización (entidades aisladas comparten varios atributos, motivo por el que
se crea una entidad que los agrupe).
• Agregación. Ocurrencias de varias entidades constituyen las partes de un todo representado
en una ocurrencia de otra entidad.Vemos un ejemplo en el que la agregación de varios
componentes conforma un automóvil:
AUTOMÓVIL
CAPÍTULO 2
48 BASES DE DATOS . DISEÑO Y GESTIÓ N
Resumen
Todo desarrollo de software parte de un análisis estructurado, uno de cuyos elementos
clave es la descripción de los datos. Si bien el diccionario de datos ofrecerá información
sobre el contenido de la base de datos resultante, en un contexto relacional el diagrama
entidad/relación será el primer paso de diseño de dicha base de datos.
El diagrama entidad/relación categoriza el universo del discurso que se va a informa-
tizar como un conjunto de entidades que cubren las distintas apariciones (ocurrencias)
de objetos concretos o abstractos del mundo real y las relaciones entre dichas entidades,
cuyas restricciones vienen definidas por los conceptos de cardinalidad y modalidad.
Tanto entidades como relaciones cuentan con atributos que incluyen cada uno de los
datos que se van a tratar.
De cara a ampliar la funcionalidad del diagrama entidad/relación, diversos autores
concibieron el diagrama entidad/relación extendido, que incluye los conceptos de ex-
clusividad, jerarquía y agregación de información.
CAPÍTULO 2
DISEÑO DE BASES DE DATOS RELACIONALES 49
EJERCICIOS PROPUESTOS
1. Representar un diagrama entidad/relación para el siguiente supuesto:
– Los clientes de nuestro videoclub pueden alquilar varias películas, y cada pelí-
cula se puede alquilar a varios clientes.
– Una ferretería vende distintos productos, y cada uno de ellos puede ser creado
por varios fabricantes e incluso variar el precio dependiendo de su fabricante.
Cada vez que un cliente compra uno o varios productos se genera una factura
que incluye la fecha, los productos comprados, la cantidad de cada producto,
el precio unitario y el porcentaje de impuestos sobre el total de la factura.
5. Modificar el diagrama entidad/relación de la figura 2.21 para que cumpla con los
siguientes requisitos:
CAPÍTULO 2
50 BASES DE DATOS . DISEÑO Y GESTIÓ N
ACTIVIDADES DE AUTOEVALUACIÓN
4. Si una ocurrencia de una entidad no tiene por qué relacionarse con ocurrencias de
otra entidad con la que existe una relación:
■ a) La modalidad mínima será cero en el lado de la segunda entidad.
■ b) La modalidad mínima será cero en el lado de la primera entidad.
■ c) La modalidad mínima será cero en ambos lados.
SOLUCIONES:
a ■
1. ■ c
b ■ b ■
a ■
3. ■ c
a ■
5. ■ b ■
c
a b c
2. ■ ■ ■ a b c
4. ■ ■ ■
CAPÍTULO 2
3
El modelo relacional.
Normalización
Objetivos
EL MODELO RELACIONAL
Nomenclatura
Índices
Vistas
OTRAS CONSIDERACIONES
SOBRE EL MODELO Integridad referencial
RELACIONAL
Usuarios y privilegios
Accesos concurrentes
Políticas de bloqueo
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 53
Glosario
Clave ajena. En una base de datos relacional, presencia en una tabla de un campo que
ejerce de clave primaria en otra tabla distinta.
Normalización. Técnica para eliminar redundancias en una base de datos relacional.
Perfil. Patrón de características comunes a varios usuarios de una base de datos.
Tabla. Estructura bidimensional de almacenamiento de información presente en una
base de datos relacional.
Tipo de datos. Definición de los posibles valores que puede tomar un campo de una
tabla relacional.
Variable. Datos almacenados en memoria temporal cuyo contenido puede cambiar a
lo largo de la ejecución de un programa.
valor atributo
CAPÍTULO 3
54 BASES DE DATOS . DISEÑO Y GESTIÓ N
Llamamos dominio de un atributo al conjunto de valores que puede tomar para una ocu-
rrencia concreta. Aunque de acuerdo a la definición teórica del modelo relacional cada dominio
corresponde exclusivamente a los valores posibles (es decir, el dominio del atributo “Apellidos”
es el conjunto de apellidos de los socios), la idea de dominio típicamente se asocia con la de tipo
de datos (es decir, el conjunto de combinaciones de datos que podría constituir un dominio, de
modo que desde un punto de vista técnico cualquier combinación de caracteres alfanuméricos,
aunque no tenga sentido, podría representar los apellidos de un socio). Se identifican los siguien-
tes tipos de datos base:
• Números enteros.
• Números decimales.
• Cadenas de caracteres.
• Fechas y horas.
• Valores lógicos (verdadero o falso).
• Objetos (ficheros binarios).
3.2. Normalización
También a Codd se debe la definición de una serie de normas cuya aplicación elimina las re-
dundancias de información en una solución relacional. La técnica es conocida como normali-
zación, y consiste en llevar todas las relaciones a determinados estados llamados formas normales.
A continuación se describen dichas formas normales y cómo se llega hasta ellas.
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 55
619554687
00789521T Paula Sanz González
915196347
667859621
09653801B José Luis García Viñals 914079880
913200121
Una primera solución para alcanzar la 1FN consiste en atomizar el atributo “Teléfono”, del
siguiente modo:
Esta solución implica una fuerte redundancia (“Nombre” y “Apellidos” se repiten por cada
teléfono), e invalida a “NIF” como clave primaria, obligando a ampliar dicha clave primaria con
el atributo “Teléfono”. Por ese motivo se propone una solución más elaborada consistente en
dividir la relación original en dos (una con las personas y otra con los teléfonos), vinculándolas
mediante los valores de la clave primaria original:
CAPÍTULO 3
56 BASES DE DATOS . DISEÑO Y GESTIÓ N
NIF Teléfono
00789521T 619554687
00789521T 915196347
09653801B 667859621
09653801B 914079880
09653801B 913200121
• Está en 1FN.
• Todos los atributos que no forman parte de la clave primaria dependen de ella por completo.
La relación siguiente ilustra el stock de una librería. La clave primaria está compuesta por
dos atributos (“Código de libro” y “Código de tienda”), pero el atributo “Dirección” no depende
de toda la clave, sino únicamente del atributo “Código de tienda”. Por ese motivo se repite la
dirección de la tienda 9, con la consiguiente redundancia de información:
342 12 3 C/Luchana, 34
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 57
En este caso, el proceso de normalización obliga a dividir la relación en dos, una con la in-
formación de la tienda y otra con la del stock:
342 12 3
268 9 1
250 10 5
181 9 7
12 C/Luchana, 34
9 Pº de la Castellana, 132
Nótese que la 2FN solo se puede violar si la clave primaria está compuesta por más de un
atributo, por lo que toda relación en 1FN cuya clave primaria esté formada por un solo atributo
también está en 2FN.
Explicar por qué la siguiente relación no está en 2FN y convertirla en dos relaciones
en 2FN:
Cód. factura CIF cliente Razón social Fecha factura Importe factura
CAPÍTULO 3
58 BASES DE DATOS . DISEÑO Y GESTIÓ N
• Está en 2FN.
• Todos los atributos que no forman parte de la clave primaria son independientes entre
sí, es decir, no dan información sobre otros atributos de la relación.
El siguiente ejemplo ilustra una relación con información sobre empleados. Todos los atri-
butos dependen directamente de la clave primaria (“Código de empleado”) excepto “Nombre
de departamento”, que depende de “Código de departamento”:
Cód. emp. Nombre Apellidos Dirección Cód. dpto. Nombre dpto. Fecha nac.
3 Financiero
2 Informática
5 RRHH
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 59
Se desea almacenar información sobre citas médicas, sabiendo que cada doctor
puede ver a varios pacientes y cada paciente puede pedir cita con doctores distintos.
Organizar los siguientes atributos en relaciones normalizadas hasta la 3FN:
• NIF de doctor
• Nombre de doctor
• Dirección de doctor
• NIF de paciente
• Nombre de paciente
• Teléfono de paciente
• Fecha de la cita
CAPÍTULO 3
60 BASES DE DATOS . DISEÑO Y GESTIÓ N
valor campo
TSocio
3.3.1. Nomenclatura
A partir de este momento vamos a definir una nomenclatura común a todos los elementos de
modelo físico y base de datos referidos. Para ello se usará como punto de partida la notación
húngara, definida en los años 70 por Charles Simonyi, programador húngaro de Xerox. Simonyi
estableció unas reglas de nominación de variables que aportaba información sobre su ámbito y
tipo de datos. Centrada originalmente en código fuente de programación, se presenta a conti-
nuación una adaptación reducida de la notación húngara a los nombres de elementos de una
base de datos relacional, según los siguientes criterios:
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 61
• Identificadores. Todo campo creado para identificar de forma unívoca los registros de una
tabla (código de cliente, código de libro, código de país) llevará como sufijo las letras
“ID” (identificador) en mayúscula (nClienteID, nLibroID, nPaisID).
• Las tablas se representan como un rectángulo con el nombre de la tabla en la parte su-
perior y la lista de campos en la inferior. Los campos que conformen la clave primaria
irán subrayados y en orden:
TAutor
nAutorID
cNombre Figura 3.11
Representación gráfica
cApellidos
de una tabla
CAPÍTULO 3
62 BASES DE DATOS . DISEÑO Y GESTIÓ N
• La modalidad irá implícita en la terminación de las líneas que relacionan tablas, del si-
guiente modo:
En algunos casos, las relaciones generan tablas (se verá en breve). A la hora de dar nombre a
dichas tablas se pueden seguir dos criterios:
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 63
(0,N) (1,N)
AUTOR es de PAÍS
TAutor
TAutorPais TPais
nAutorID
nAutorID nPaisID
cNombre
nPaisID cNombre
cApellidos
CAPÍTULO 3
64 BASES DE DATOS . DISEÑO Y GESTIÓ N
(1,1) (1,N)
CLIENTE contrata SERVICIO
TContrato
TCliente
nClienteID TServicio
nClienteID nServicioID
cNombre nServicioID
dContratacion
cApellidos cDescripcion
dCancelacion
IContrataSeguro
TContrato
TCliente
nClienteID TServicio
nClienteID nServicioID
cNombre nServicioID
dContratacion
cApellidos cDescripcion
dCancelacion
IContrataSeguro
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 65
Este tipo de problemática tiene que ver con la dimensión temporal de la infor-
mación almacenada en una base de datos, y suele requerir intervención especial por
parte del analista, que evaluará cuál es la solución más eficiente para cada caso.
– Si la modalidad mínima en el lado de cardinalidad 1 es 1 y no hay atributos, la relación
desaparece. Los atributos que conforman la clave primaria de la entidad de modalidad
máxima 1 se propagarán a la entidad de modalidad máxima N:
(0,N) (1,1)
LIBRO es de EDITORIAL
TLibro
TEditorial
nLibroID
nEditorialID
cTitulo
cNombre
nAnyoPublicacion
cDireccion
nEditorialID
(1,N) (0,1)
CLIENTE tiene DESCUENTO
TCliente TDescuento
TClienteDescuento
nClienteID nDescuentoID
nClienteID
cNombre cDescripcion
nDescuentoID
cApellidos nPorcentaje
CAPÍTULO 3
66 BASES DE DATOS . DISEÑO Y GESTIÓ N
• Relaciones 1:1. Es la casuística más compleja. El objetivo es evitar a toda costa que queden
campos sin valor. Generalmente requiere un estudio detallado de las circunstancias con-
cretas de cada caso, pero se pueden definir unas reglas para ciertas situaciones:
– Si ambas modalidades son 0..1, la relación genera una tabla. Obsérvese el siguiente
ejemplo, donde se relacionan empleados con ubicaciones físicas dentro de una ofi-
cina, dándose la posibilidad de que haya empleados sin ubicación (personal de lim-
pieza o mensajería) y ubicaciones vacías (mesas sin ocupar). Propagar cualquiera de
las claves primarias a la otra entidad ocasionaría valores ausentes en campos (em-
pleados sin valor en su código de ubicación o ubicaciones sin valor en su código de
empleado):
(0,1) (0,1)
EMPLEADO ocupa UBICACIÓN
TEmpleado
TEmpleadoUbicacion TUbicacion
nEmpleadoID
cNombre nEmpleadoID nUbicacionID
cApellidos nUbicacionID nPlanta
– Si una modalidad es 0..1 y la otra 1..1, la clave de la entidad con modalidad mínima
1 se propaga a la entidad con modalidad mínima 0. De forma más intuitiva, en el si-
guiente ejemplo se puede ver que todo chalet es un inmueble, pero no todo inmueble
es un chalet, por lo que lo lógico es que la clave de “Inmueble” se propague a “Cha-
let”, y no al revés:
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 67
(1,1) (0,1)
INMUEBLE es CHALET
TChalet
TInmueble
nInmuebleID
nInmuebleID
nPlantas
cDireccion
nTamanyoJardin
nTamanyo
nPlazasGaraje
Nótese que en este caso la clave primaria de TInmueble se propaga a TChalet como
clave ajena, pero también funcionará en TChalet como clave primaria (se garantiza la
unicidad), aunque se rellene con valores ya existentes en TInmueble. En este caso, en
el que una entidad débil necesita de la clave primaria de la entidad fuerte de la que
depende, se dice que hay una relación de dependencia en identificación. Cuando la entidad
débil puede generar su propia clave primaria se habla de dependencia en existencia. Si, en
vez de conformar la clave primaria de TChalet por completo, nInmuebleID fuese parte
de una clave compuesta, la relación seguiría siendo de dependencia en identificación.
– Si ambas modalidades son 1..1, pero una de las entidades es débil, la clave de la entidad
fuerte se propaga a la débil. Supongamos una relación 1 a 1 entre clientes y carteras
de inversión donde la cartera de inversión se crea exclusivamente a partir del cliente:
(1,1) (1,1)
CLIENTE contrata CHALET
CARTERA INVERSIÓN
TCliente
TCarteraInversion
nClienteID
nClienteID
cNombre
dApertura
cApellidos
CAPÍTULO 3
68 BASES DE DATOS . DISEÑO Y GESTIÓ N
– Si ambas modalidades son 1..1 y no hay entidades débiles, o bien si existe algún atri-
buto de relación, habrá que estudiar en detalle cuál es la opción adecuada en cada
caso, dependiendo de la semántica de los datos almacenados y de otros detalles téc-
nicos, como el número estimado de accesos a cada una de las tablas o el orden de
consulta de la información.
a) 1..N a 1..N
b) 1..1 a 0..N
c) 1..1 a 1..1
d) 0..1 a 0..1
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 69
(0,N)
(1,N)
imparte ASIGNATURA
PROFESOR
(1,N) (0,1)
realiza INVESTIGACIÓN
(0,N)
(1,N)
imparte ASIGNATURA
PROFESOR
(1,N) (0,1)
realiza INVESTIGACIÓN
– Las relaciones de jerarquía se convierten en relaciones 1:1 con modalidades 0..1 y 1..1.
código de inmueble
ALQUILER dirección
tamaño
(1,1) (1,1) (1,1)
es es es
LOCAL
CHALET PISO COMERCIAL
plantas habitaciones tiene vado
tamaño del jardín exterior tamaño de la trastienda
plazas de garaje vecinos por planta
CAPÍTULO 3
70 BASES DE DATOS . DISEÑO Y GESTIÓ N
– Las relaciones de agregación se tratan como relaciones individuales entre cada entidad
agregada y la entidad principal, en cuyo lado habría que determinar la modalidad de
acuerdo a los requisitos especificados en cada caso.
AUTOMÓVIL
AUTOMÓVIL
En este caso se ha asignado modalidad 0..N a las tres relaciones en el lado de “Au-
tomóvil”, suponiendo que “Motor” almacene modelos de motor, “Chasis” modelos
de chasis y “Rueda” modelos de rueda, de modo que el mismo motor, el mismo chasis
y la misma rueda pueden instalarse en varios automóviles. En otras circunstancias la
modalidad en el lado de automóvil podría ser 1..N, 1..1 o incluso 0..1.
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 71
prestado a
escrito por tiene publicado por
fecha de préstamo
TLibroTema TTema
nLibroID nTemaID
nTemaID cNombre
TPrestamo
cSignatura TLibroAutor TPais
cNIF nLibroID nPaisID
dPrestamo nAutorID cNombre
TSocio
TAutor TAutorPais
cNIF
cNombre nAutorID nAutorID
cApellidos cNombre nPaisID
cDireccion cApellidos
cTelefono Figura 3.28
dNacimiento Ejemplo de modelo
dAlta físico de datos
CAPÍTULO 3
72 BASES DE DATOS . DISEÑO Y GESTIÓ N
3.4.1. Índices
El orden de presentación de la información en pantalla o listado no tiene por qué coincidir
con su orden de almacenamiento, por lo que el modelo relacional provee herramientas que
independizan ambos escenarios. De modo análogo a lo explicado en el tema 1 en relación
con los ficheros indexados, las tablas de una base de datos relacional también cuentan con
ficheros de índice asociados, fundamentales para buscar información y para acceder a ella de
forma ordenada.
Como mínimo habrá un fichero de índice que relacione cada registro con su valor corres-
pondiente de clave primaria. A partir de ahí, es tarea del diseñador definir los índices que se
considere necesarios, si bien hay algunos criterios básicos:
• Campos por los que se van a ordenar las consultas más habituales. Miremos la tabla TSocio. Tí-
picamente los bibliotecarios utilizarán una aplicación software mediante la que manipularán
la información de la base de datos, y contarán con una pantalla donde poder dar de alta
socios, modificar sus datos, eliminarlos o simplemente consultarlos. La clave primaria de
TSocio es cNIF, pero ordenar a los socios por su NIF no aportará ventajas a los usuarios
de la aplicación. Lo normal será que quieran ordenarlos por apellidos y nombre, o bien
por fecha de alta. Para ello se deberían crear dos índices, uno por cApellidos + cNombre,
y otro por dAlta. De esa forma, cada vez que un bibliotecario quiera consultar la lista de
socios ordenados por apellido y nombre, el SGBD detectará que existe un índice por
ambos campos, y leerá dicho índice en vez de recorrer la tabla secuencialmente.
Es necesario señalar la importancia del orden de campos en la definición de un índice
(no es lo mismo ordenar por cApellidos + cNombre que por cNombre + cApellidos).
• Campos accedidos con mucha frecuencia. El ordenamiento de información que implican los
índices no solo sirve para mostrar grupos de registros ordenados. Además permite buscar
valores con mayor rapidez. Generalmente el bibliotecario buscará a los socios por sus
apellidos, por lo que el índice cApellidos + cNombre también servirá para agilizar sus
consultas.
• Claves ajenas. Es muy habitual ejecutar consultas que afectan a varias tablas relacionadas.
Para localizar los libros publicados por una editorial tendríamos que seguir los siguientes
pasos:
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 73
Para una consulta como esta nos vendría muy bien que TLibro contase con un
índice por nEditorialID. De lo contrario, la búsqueda tendrá que realizarse directa-
mente sobre la tabla, cuyos datos pueden estar desordenados, o bien ordenados de
acuerdo a un criterio que no satisfaga nuestra búsqueda.
A pesar de todas sus ventajas, la existencia de índices crea redundancia y ralentiza los
procesos de inserción, actualización y borrado, al implicar la reordenación de los índices
asociados. Por ese motivo es importante no abusar de su número ni de su tamaño (un
índice compuesto por todos los campos de una tabla ocuparía más espacio que la propia
tabla, y ralentizaría sustancialmente su acceso).
Analizar la base de datos de la figura 3.28 y enumerar posibles índices para cada
una de sus tablas, justificando la elección de acuerdo a su utilidad.
3.4.2. Vistas
Una vista es una consulta sobre una o varias tablas almacenada en la base de datos. De cara al
usuario la información obtenida mediante una vista parece una tabla más, pero el uso de vistas
incrementa el nivel de seguridad en el acceso a los datos y son más eficientes que las consultas
efectuadas puntualmente, al encontrarse ya definidas en la base de datos.
No obstante las vistas no permiten recibir parámetros, es decir, no se pueden ejecutar para
distintos valores de campos concretos de la base de datos. Una vista puede obtener una lista de
clientes, o una relación de facturas cuyo importe esté dentro de un rango, pero no puede filtrar
sus valores por un dato variable. Esa estaticidad provoca que muchos desarrolladores ignoren su
existencia, especialmente si ya se han establecido otros mecanismos de seguridad.
• UNIQUE. Todos los valores del campo deben ser únicos, y no se permiten valores repe-
tidos. Cuando una clave primaria está compuesta por un solo campo, dicho campo está
obligado a cumplir la restricción UNIQUE, aunque esta no es exclusiva de los campos
que conforman una clave primaria.
• NOT NULL. Prohíbe que un campo pueda tener valores nulos. Es una restricción obli-
gatoria en los campos que conforman la clave primaria.
• DEFAULT. En caso de que no se especifique un valor concreto para un campo, en vez
de dejarlo a NULL se le asigna un valor por defecto. El SGBD correspondiente ofrecerá
herramientas para definir dicho valor.
CAPÍTULO 3
74 BASES DE DATOS . DISEÑO Y GESTIÓ N
• Asignar un usuario de la base de datos a cada usuario físico del SGBD o bien crear usuarios
genéricos que puedan corresponder a varios usuarios físicos (administrador, operador,
desarrollador, usuario no técnico, etc.).
• En el primero de los casos se pueden agrupar varios usuarios en perfiles, de modo que
varias personas, cada una de ellas con su usuario de la base de datos, correspondan al
perfil de administrador, al de desarrollador, etc.
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 75
• Para cada usuario o perfil hay que establecer qué tipo de acceso tiene al conjunto de ob-
jetos de la base de datos (bases de datos, tablas, tareas de administración, gestión de usua-
rios). Se puede definir un acceso de solo lectura a ciertos objetos, pero con la posibilidad
de modificar otros, se puede impedir el acceso a partes de la base de datos, incluso dentro
de tablas (si la empresa contrata a un becario para el Departamento de Recursos Huma-
nos, tendrá que acceder a la tabla con los datos del personal de la empresa, pero no sería
conveniente que pueda consultar el salario de los empleados).
• A veces un usuario de la base de datos no corresponde ni a un usuario físico ni a varios,
sino a una aplicación software a través de la que el usuario físico interactuará con la base
de datos de forma transparente.
Perfil: Admin
Usuarios: Admin
Permisos: Lectura, escritura, creación, borrado y backup sobre todas
las bases de datos.
Creación, modificación y borrado de perfiles y usuarios.
Administración del servidor.
Perfil: Operador
Usuarios: Operador
Permisos: Lectura, escritura, creación, borrado y backup sobre todas
las bases de datos.
Creación, modificación y borrado de perfiles y usuarios.
Perfil: Desarrollo
Usuarios: JimenezJ, GrandesA, GarciaF, PuigM, MachadoA
Permisos: Lectura, escritura, creación, borrado y backup sobre todas
las bases de datos.
Perfil: RRHH
Usuarios: GomezR, PerezB
Permisos: Lectura y escritura sobre BD Empleados
Perfil: RRHHBecario
Usuarios: VargasM, PazO, GarciaG, CollJ
Permisos: BD Empleados: Lectura sobre nSalario de TEmpleado
Lectura y escritura sobre resto de tablas
Perfil: Operaciones
Usuarios: CasoA, FuertesG, GalaA, CastroR, LlamazaresJ, ...
Permisos: BD Empleados: Lectura sobre TEmpleado excepto nSalario
y cCuentaBancaria
BD Operaciones: Lectura sobre TClientes
Lectura y escritura sobre resto de tablas
CAPÍTULO 3
76 BASES DE DATOS . DISEÑO Y GESTIÓ N
Se puede observar que, en el caso del personal técnico asociado con las bases de datos (ad-
ministradores y operadores) se ha creado un usuario genérico asociado al perfil correspondiente,
mientras los usuarios técnicos (personal de desarrollo) y no técnicos (personal de recursos hu-
manos y operaciones) cuentan con un usuario por persona.
Stock de almacén
Mientras Primo apura su café, el empleado Segundo realiza una venta de 3 llaves inglesas
modelo 37P, por lo que abre la aplicación y rápidamente las descuenta del stock:
Stock de almacén
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 77
Stock de almacén
Figura 3.32
Aplicación de stock de ferretería
Primo presiona el botón “Aceptar”. En la base de datos, donde había 17 llaves inglesas ahora
hay 30. Debería haber 27 (20 iniciales menos las 3 vendidas por Primo más las 10 recibidas por
Segundo).
• Compartidos. Se puede consultar el valor del elemento bloqueado, pero no se puede mo-
dificar.
• Exclusivos. Se puede leer y modificar el valor del elemento bloqueado.
CAPÍTULO 3
78 BASES DE DATOS . DISEÑO Y GESTIÓ N
Resumen
En los años setenta, E. F. Codd definió el modelo relacional, que flexibiliza los modelos
de base de datos previos, y la teoría de la normalización, que elimina redundancias en
el diseño de una base de datos.
Una vez que se cuenta con un diagrama entidad/relación, antes de llevarlo a la prác-
tica es necesario convertirlo a modelo físico de datos, diseñando la estructura final de
las tablas, campos y registros de la base de datos resultante. Para ello hay que aplicar
una serie de reglas de transformación.
El modelo relacional también aborda los índices aplicados a las bases de datos,
la definición de vistas, las restricciones sobre los campos de tablas, la definición de
usuarios y perfiles de usuario, los criterios de integridad referencial, los accesos con-
currentes y las políticas de bloqueo.
EJERCICIOS PROPUESTOS
1. Transformar la solución del ejercicio propuesto 1 del capítulo 2 (clientes de vide-
oclub) en modelo físico de datos.
2. Transformar la solución del ejercicio propuesto 2 del capítulo 2 (departamentos
de empresa) en modelo físico de datos.
3. Transformar la solución del ejercicio propuesto 3 del capítulo 2 (ampliación del
ejercicio propuesto 2) en modelo físico de datos.
4. Transformar la solución del ejercicio propuesto 4 del capítulo 2 (ferretería) en mo-
delo físico de datos.
5. Transformar la solución del ejercicio propuesto 5 del capítulo 2 (ampliación de la
figura 2.21) en modelo físico de datos.
CAPÍTULO 3
EL MODELO RELACIONAL . NORMALIZACIÓN 79
ACTIVIDADES DE AUTOEVALUACIÓN
3. Al pasar una relación 1:N (con modalidades 1..1 y 1..N) del DER al modelo físico de
datos:
■ a) La clave primaria de la entidad con modalidad 1..N pasa a la entidad con
modalidad 1..1.
■ b) La clave primaria de la entidad con modalidad 1..1 pasa a la entidad con
modalidad 1..N.
■ c) Se genera una tabla de relación.
SOLUCIONES:
a ■
1. ■ c
b ■ b ■
a ■
3. ■ c
a ■
5. ■ c
b ■
2. ■ b ■
a ■ c a ■
4. ■ b ■
c
CAPÍTULO 3
4
El lenguaje SQL. DDL
Objetivos
INTRODUCCIÓN AL
LENGUAJE SQL
Definición de tablas
LENGUAJE DE DEFINICIÓN
Definición de vistas
DE DATOS (DDL)
Definición de índices
CAPÍTULO 4
EL LENGUAJE SQL. DDL 83
Glosario
CAPÍTULO 4
84 BASES DE DATOS . DISEÑO Y GESTIÓ N
Las compañías que desarrollan SGBDR han ido ampliado notablemente el ámbito de SQL,
acercándose y alejándose del estándar según la evolución de este y del mercado. En este sentido,
han introducido una sintaxis propietaria que, si bien simplifica ciertas instrucciones u ofrece
nuevas funcionalidades, dificulta la migración de bases de datos entre distintos sistemas gestores
y crea dependencia por parte de sus clientes.
Las funcionalidades de SQL se suelen dividir en tres sublenguajes:
• DDL (data definition language, lenguaje de definición de datos). Permite crear la estructura
de los elementos de la base de datos (tablas, índices, la propia base de datos).
• DML (data manipulation language, lenguaje de manipulación de datos). Opera sobre la in-
formación contenida en la base de datos (valores de los campos y registros). Al DML co-
rresponde la inserción, modificación, borrado y consulta de los datos.
• DCL (data control language, lenguaje de control de datos). Se encarga de gestionar los per-
misos de los usuarios y los perfiles, así como la integridad de las transacciones sobre in-
formación de la base de datos.
• Cadenas de caracteres
CAPÍTULO 4
EL LENGUAJE SQL. DDL 85
• Números exactos
Se deben utilizar para almacenar códigos (al ser su acceso más rápido que el de un
campo alfanumérico) y valores numéricos operables. Un teléfono, por ejemplo, se debe
almacenar en un campo de tipo cadena de caracteres, ya que, aunque está formado por
números, no se puede utilizar para ejecutar una operación aritmética (no tiene sentido
sumar o dividir teléfonos). Otro ejemplo aún más claro es el del código postal español.
Está formado por cinco valores numéricos, pero no solo no es operable, sino que alma-
cenar un código postal en un campo de tipo numérico desvirtuaría el dato, ya que el có-
digo postal “08080” de Barcelona quedaría registrado como 8080, perdiendo el cero a la
izquierda que, en este caso, sí importa.
• Números aproximados
Ofrecen un rango mayor de representación de valores decimales, pero son menos
precisos que el tipo NUMERIC, por lo que se recomienda utilizar este último para al-
macenar información muy sensible, como datos monetarios.
CAPÍTULO 4
86 BASES DE DATOS . DISEÑO Y GESTIÓ N
• Valores lógicos
– BOOLEAN. Incluye los valores “true” (verdadero) y “false” (falso), y puede almacenar
el valor NULL en algunas implementaciones.
• Objetos binarios
– BLOB (BINARY LARGE OBJECT). Se suele utilizar para almacenar imágenes, do-
cumentos u otros objetos, generalmente almacenados en ficheros distintos del de la
tabla correspondiente.
El estándar SQL:2003 eliminó los tipos de datos BIT y BIT VARYING, e incluyó
los tipos AUTO-GENERATED VALUES y IDENTITY-COLUMNS, destinados a per-
mitir que un campo que conforma la clave primaria de una tabla pueda generar sus va-
lores de forma automática (generalmente incrementando el valor de ese campo en el
último registro insertado), minimizando la intervención humana y añadiendo restriccio-
nes de seguridad. En varios SGBD, este tipo de campo se conoce como autonumérico.
Elegir los tipos de datos más adecuados para los campos de la tabla representada
en la figura 3.1.
CAPÍTULO 4
EL LENGUAJE SQL. DDL 87
CAPÍTULO 4
88 BASES DE DATOS . DISEÑO Y GESTIÓ N
Figura 4.4
Ejemplo de creación de la tabla TEditorial con nPaisID
como clave ajena de TPais
Figura 4.5
Ejemplo de creación de la tabla TSocio
CAPÍTULO 4
EL LENGUAJE SQL. DDL 89
En este caso se ha decidido dar a cTelefono una longitud de 12 caracteres para poder
incluir teléfonos internacionales. cDireccion es opcional, motivo por el que no lleva apa-
rejada la cláusula NOT NULL. Mediante la cláusula CHECK se ha indicado una condición
que debe cumplir el campo dAlta: que la fecha de alta de todo socio sea igual o superior
al 1 de septiembre de 2003.
Como la clave primaria de TPrestamo está formada por más de un campo, se define al final.
• Modificación de una tabla. La sentencia ALTER TABLE permite añadir un campo a una tabla,
modificar sus características o borrarlo.
– Añadir un campo:
CAPÍTULO 4
90 BASES DE DATOS . DISEÑO Y GESTIÓ N
– Modificar un campo:
– Borrar un campo:
Escribir las sentencias ALTER TABLE que permitan eliminar la fecha de nacimiento,
incluir el correo electrónico y ampliar en cinco caracteres la dirección de los emplea-
dos de las tablas resultantes de la actividad propuesta 4.2.
CAPÍTULO 4
EL LENGUAJE SQL. DDL 91
Figura 4.11
Ejemplo de definición de una vista con información sobre socios. Nótese que los
nombres de campo de la vista no tienen por qué coincidir con los de la tabla
• Creación de un índice
CAPÍTULO 4
92 BASES DE DATOS . DISEÑO Y GESTIÓ N
Figura 4.13. Ejemplo de definición de un índice sobre TSocio por apellidos y nombre
• Borrado de un índice
Escribir la sentencia de creación de un índice sobre TSocio por fecha de alta (los so-
cios más recientes primero), apellidos y nombre.
CAPÍTULO 4
EL LENGUAJE SQL. DDL 93
Estudiar la base de datos de la figura 3.28 y decidir qué tipos de datos son candi-
datos a definirse explícitamente como tipos definidos por el usuario. Escribir las sen-
tencias de creación de tipo correspondientes.
Resumen
El lenguaje SQL es la herramienta fundamental para interactuar con la información con-
tenida en una base de datos relacional. Estandarizado por ANSI, permite al programador
enviar instrucciones al SGBD sin necesidad de especificar paso a paso cómo debe llevar
a cabo su tarea. ANSI también definió una serie de tipos de datos estándar que se asignan
a los distintos campos de tablas relacionales.
SQL se divide en el lenguaje de definición de datos (DDL), el lenguaje de manipu-
lación de datos (DML) y el lenguaje de control de datos (DCL), destinados a trabajar con
objetos de la base de datos, con el contenido de dichos objetos y con la información de
control, respectivamente.
El DDL permite crear, modificar y eliminar la base de datos y sus objetos (tablas,
campos, vistas, índices).
EJERCICIOS PROPUESTOS
1. Buscar en Internet información sobre las novedades incorporadas por las distintas
versiones del estándar SQL.
2. Elegir tipos de datos precisos para todos los campos de la base de datos de ejemplo
del capítulo 3 (figura 3.28).
3. Escribir las sentencias CREATE TABLE correspondientes a todas las tablas de dicha
base de datos.
4. Escribir las sentencias ALTER TABLE necesarias para incluir en la tabla TAutor los
campos dNacimiento y dFallecimiento.
5. Escribir las sentencias de creación de índices obtenidas como resultado de la
actividad propuesta 3.6.
CAPÍTULO 4
94 BASES DE DATOS . DISEÑO Y GESTIÓ N
ACTIVIDADES DE AUTOEVALUACIÓN
1. El lenguaje SQL:
■ a) Carece de estructuras de control.
■ b) Es un lenguaje Turing completo.
■ c) Es un lenguaje de cuarta generación.
SOLUCIONES:
a ■
1. ■ b ■
c a ■
3. ■ c
b ■
5. ■ b ■
a ■ c
2. ■ b ■
a ■ c a ■
4. ■ c
b ■
CAPÍTULO 4
5
El lenguaje SQL. DML y DCL
Objetivos
La sentencia SELECT
Funciones de agregación
LENGUAJE DE
MANIPULACIÓN DE DATOS Subconsultas
(DML)
Alias
Funciones integradas
Inserción de registros
Modificación de registros
Eliminación de registros
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 97
Glosario
<lista_tablas> puede incluir una o varias tablas. Primero veremos cómo implementar
una sentencia SELECT sobre una sola tabla.
CAPÍTULO 5
98 BASES DE DATOS . DISEÑO Y GESTIÓ N
• De comparación: <, <=, >, >=, <>, =. Comparan dos valores, típicamente el valor de un
campo con un valor fijo, expresión o valor de otro campo.
Figura 5.1
Consulta de nombre y apellido de todos los socios
dados de alta el 3 de octubre de 2013
SELECT *
FROM TLibro
WHERE nAnyoPublicacion >= 2010;
Figura 5.2
Consulta de los valores de todos los campos
de los libros publicados desde 2010 inclusive
Figura 5.3
Consulta de nombre y apellidos de los socios dados de alta en 2011
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 99
• Lógicos: AND, OR, NOT. La teoría del álgebra booleana aplicada a un contexto de programa-
ción informática establece los siguientes usos de los operadores lógicos:
– Dos expresiones lógicas unidas por el operador AND se evaluarán a cierto (true) si
ambas son ciertas.
– Para que dos expresiones lógicas unidas por el operador OR se evalúen a cierto basta
con que una de ellas sea cierta.
OR Cierto Falso
– Una expresión lógica precedida por el operador NOT se evalúa al valor opuesto (si la
expresión es cierta se convertirá en falsa –false– y viceversa).
SELECT *
FROM TSocio
WHERE cNombre = "Javier"
AND cApellidos = "Peinado Martín";
Figura 5.4. Consulta de los valores de todos los campos para el socio o socios de
nombre "Javier" y apellidos "Peinado Martín". Ambas condiciones deben cumplirse
Figura 5.5. Consulta del año de publicación de todos los libros de título
“The Tempest”, excepto los de la editorial 16 y excluyendo los años duplicados
CAPÍTULO 5
100 BASES DE DATOS . DISEÑO Y GESTIÓ N
Figura 5.6. Consulta del NIF, el nombre y los apellidos de los socios
dados de alta antes de 2000 y de los dados de alta de 2010 en adelante
SELECT cSignatura
FROM TPrestamo
WHERE NOT (cNIF = "09653801B"
AND dPrestamo = "2007-05-13");
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 101
Figura 5.8
Consulta de nombre y apellidos de los socios y resultado de la consulta
SELECT *
FROM TSocio
WHERE cDireccion IS NOT NULL;
Figura 5.9. Consulta de los datos de los socios que tienen dirección
Es necesario recordar en este punto la diferencia entre un valor nulo y un valor vacío
(0 en campos numéricos y “” –cadena vacía– en campos de tipo cadena de caracteres).
La siguiente consulta provocaría un error si el valor de cDireccion fuera nulo, algo que
no ocurriría si dicho valor fuese una cadena vacía:
• LIKE. Compara cadenas de caracteres de forma aproximada (es decir, sin que tenga que
coincidir su contenido exacto), mediante el uso de los comodines % (sustituye a cualquier
cadena de caracteres) y _ (sustituye a un único carácter). Para usos simples de este ope-
rador se pueden definir las siguientes reglas:
CAPÍTULO 5
102 BASES DE DATOS . DISEÑO Y GESTIÓ N
SELECT *
FROM TSocio
WHERE cApellidos LIKE "Garc_a R%guez";
Figura 5.11
Consulta que busca distintas representaciones de la secuencia
de apellidos “García Rodríguez” y posibles resultados encontrados
Escribir las sentencias SQL que ejecuten las siguientes consultas sobre la base de
datos de la figura 3.28:
a) Listar los socios de nombre “Jacinto“ nacidos antes de 1970 que se dieron
de alta como socios de la biblioteca en la década de los noventa.
b) Obtener los libros que no hayan sido publicados por las editoriales de código
15 o 32, o bien los publicados antes del año 2000.
c) Mostrar el nombre y los apellidos de los socios que tienen teléfono, pero no
dirección.
d) Listar los autores de apellido “Byatt“ cuyo nombre empiece por una “A” (ma-
yúscula) y contenga una “S” (mayúscula).
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 103
SELECT COUNT(*)
FROM TSocio
WHERE dAlta BETWEEN "2012-01-01" AND "2012-12-31";
SELECT COUNT(cDireccion)
FROM TSocio;
Figura 5.13
Consulta del número de socios que tienen dirección. Obtiene el mismo resultado
que la consulta SELECT COUNT(*) FROM TSocio WHERE cDireccion IS NOT NULL;
SELECT AVG(nSalario)
FROM TEmpleado;
SELECT SUM(nSalario)
FROM TEmpleado
WHERE nDepartamentoID = 3;
CAPÍTULO 5
104 BASES DE DATOS . DISEÑO Y GESTIÓ N
Figura 5.16
Consulta de la fecha de alta del socio más reciente
y la de nacimiento del más anciano
Si en una consulta queremos recuperar los valores de otros campos junto con el re-
sultado de una función agregada, hemos de hacer que el resultado de dicha función se
refiera a cada combinación exclusiva de valores de los campos que se van a obtener. Eso
se consigue mediante la cláusula GROUP BY:
Es obligatorio que todos los campos que aparecen en el SELECT también aparezcan
en el GROUP BY.
nAnyoPublicacion COUNT(*)
---------------- --------
2014 12
2008 35
1997 4
2009 75
...
Figura 5.17
Consulta del número de libros publicados por año, y su resultado
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 105
Figura 5.18
Consulta del número de libros tomados en préstamo por cada socio,
y su resultado
Figura 5.19
Consulta, por cada libro y editorial, del año de publicación más antiguo,
y su resultado
CAPÍTULO 5
106 BASES DE DATOS . DISEÑO Y GESTIÓ N
cNIF COUNT(*)
--------- --------
50687452Y 24
38546998X 11
...
Figura 5.20. Consulta de los NIF de todos los socios que se han llevado un mínimo de
cuatro libros prestados, junto con el número de libros que cada uno ha sacado de la
biblioteca, y su resultado
Figura 5.21. Consulta, por cada libro y editorial, del año de publicación más antiguo,
solamente para libros publicados antes de 1950, y su resultado
GROUP BY y HAVING se pueden combinar con la cláusula WHERE, que filtrará la in-
formación de forma previa a su agregación.
Figura 5.22. Consulta de la figura 5.21 excluyendo los libros de la editorial 32,
y su resultado
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 107
Por otro lado, la cláusula ORDER BY especifica por qué campos se van a ordenar los
registros resultado de la consulta, y si dicho orden va a ser ascendente o descendente para
cada uno de esos campos (por defecto es ascendente). De cara a optimizar el rendimiento
de la base de datos, es importante que el orden especificado coincida con el de los campos
de un índice existente.
Figura 5.23
Consulta de libros ordenados según la editorial y, dentro de cada editorial,
descendentemente por año de publicación (el más reciente primero)
Escribir las sentencias SQL que ejecuten las siguientes consultas sobre la base de
datos de la figura 3.28:
CAPÍTULO 5
108 BASES DE DATOS . DISEÑO Y GESTIÓ N
En los siguientes ejemplos se muestra una composición de dos y tres tablas, respectivamente:
cSignatura cTitulo
--------------- -------------
N MIL lau Laura y Julio
N COR ray Rayuela
T SHA tem The Tempest
...
Figura 5.24
Consulta de la lista de signaturas junto con el nombre del libro correspondiente,
y su resultado
Figura 5.25
Ampliación de la consulta anterior incluyendo el nombre de la editorial,
y su resultado
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 109
Escribir las sentencias SQL que ejecuten las siguientes consultas sobre la base de
datos de la figura 3.28:
El estándar SQL-92 incluyó nuevas funcionalidades relacionadas con JOIN, así como una
nueva nomenclatura que parte de la expresión INNER JOIN.
Figura 5.27. Consulta de signaturas, libros y editoriales con la sintaxis INNER JOIN
Repetir las consultas de la actividad propuesta 5.3 con la sintaxis INNER JOIN.
CAPÍTULO 5
110 BASES DE DATOS . DISEÑO Y GESTIÓ N
TSocio
TEjemplar
cSignatura nLibroID
----------- --------
68 LOP bas 37
68 PRE ing 41
687 CAB ana 15
TPrestamo
Figura 5.29
Composición interna de préstamos de ejemplares a socios y resultado de la consulta
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 111
Nótese que no aparecen datos de “José Luis García Viñals”, al no haber tomado ningún libro
en préstamo, ni del ejemplar con signatura “68 LOP bas”, que nadie se llevó.
Entre las nuevas funcionalidades del estándar SQL-92 se encuentra la composición externa o
OUTER JOIN, que permite incluir entre los resultados de la consulta los registros de alguna o de
ambas tablas que no tengan relación. Hay tres subtipos:
• LEFT (OUTER) JOIN. Incluye en los resultados los registros de la tabla situada a la iz-
quierda de la consulta sin relación con registros a la derecha.
Figura 5.30
Composición externa de préstamos de ejemplares y resultado de la consulta. Aparece el
ejemplar de signatura “68 LOP bas”, aunque ningún socio lo haya tomado en préstamo
• RIGHT (OUTER) JOIN. Incluye en los resultados los registros de la tabla situada a la de-
recha de la consulta sin relación con registros a la izquierda.
CAPÍTULO 5
112 BASES DE DATOS . DISEÑO Y GESTIÓ N
• FULL (OUTER) JOIN. Incluye en los resultados todos los registros, independientemente
de si cuentan con registros relacionados en otras tablas.
Escribir las sentencias SQL que ejecuten las siguientes consultas sobre la base de
datos de la figura 3.28:
a) Listar todos los nombres de tema junto con los títulos de los libros asociados
a cada tema. Da igual que se repitan temas, pero deben aparecer todos (in-
cluso los temas para los que no hay libros en la biblioteca). Ordenar por nom-
bre de tema.
b) Mostrar los nombres y apellidos de todos los socios dados de alta en el año
2013 junto con el título de los libros que tomaron en préstamo durante dicho
año. Deben aparecer todos los socios dados de alta en 2013, incluso aunque
no se hayan llevado libros en préstamo. Ordenar por apellidos y nombre de
socio.
c) Consultar el nombre y apellidos de todos los autores junto con su nacionalidad
o nacionalidades y los títulos de sus libros en esta biblioteca. Deben aparecer
todos los autores, aunque no tengan libros en la biblioteca. Ordenar por nom-
bre y apellidos de autor.
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 113
• UNION [ALL]. Unión de conjuntos (todos los datos que retorna una consulta más todos
los datos que retorna otra). Por defecto se excluyen los resultados repetidos, a no ser que
se especifique la cláusula ALL.
SELECT cTitulo
FROM TLibro
UNION
SELECT cTitulo
FROM BDCatalogoBibliotecaNacional.TLibro;
Figura 5.33
Consulta de todos los libros y, además, los existentes en
la base de datos BDCatalogoBibliotecaNacional
Nótese que para referenciar una tabla de otra base de datos basta con prefijar el
nombre de la tabla con el de la base de datos y un punto.
• MINUS. Diferencia de conjuntos (todos los datos que retorna una consulta excepto los
que retorna la otra).
SELECT cTitulo
FROM BDCatalogoBibliotecaNacional.TLibro
MINUS
SELECT cTitulo
FROM TLibro;
Figura 5.34
Consulta de los libros del catálogo de la Biblioteca Nacional
que no existen en nuestra biblioteca
CAPÍTULO 5
114 BASES DE DATOS . DISEÑO Y GESTIÓ N
SELECT cTitulo
FROM TLibro
INTERSECT
SELECT cTitulo
FROM BDCatalogoBibliotecaNacional.TLibro;
Figura 5.35
Consulta de los títulos que están tanto en nuestra biblioteca
como en el catálogo de la Biblioteca Nacional
Escribir las sentencias SQL que ejecuten las siguientes consultas sobre la base de
datos de la figura 3.28:
5.1.6. Subconsultas
SQL también permite combinar consultas mediante la evaluación de valores con los resultados
de subconsultas.
Se puede anidar un número ilimitado de subconsultas. La relación se establece, entre otros,
mediante los siguientes operadores:
SELECT cSignatura
FROM TPrestamo
WHERE cNIF = (SELECT cNIF
FROM TSocio
WHERE cApellidos = "Sanz González"
AND cNombre = "Paula");
Figura 5.36
Consulta de la signatura de los ejemplares prestados
a “Paula Sanz González”
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 115
SELECT cTitulo
FROM TLibro
WHERE nAnyoPublicacion < (SELECT MIN(nAnyoPublicacion)
FROM TLibro
WHERE cNombre = "Alfaguara");
Figura 5.37
Consulta del título de los libros cuyo año de publicación sea inferior
al libro más antiguo de la editorial “Alfaguara”
• IN. Comprueba la pertenencia de un valor a los valores devueltos por una subconsulta.
SELECT cSignatura
FROM TEjemplar
WHERE nLibroID IN (SELECT nLibroID
FROM TLibro
WHERE nEditorialID = 32);
Figura 5.38
Consulta de signatura de los ejemplares correspondientes
a libros de la editorial 32
Dado que el operador IN trata el resultado de la subconsulta como una lista de valores,
la comparación no se establece contra un valor concreto, por lo que no hay problemas
con los valores nulos.
CAPÍTULO 5
116 BASES DE DATOS . DISEÑO Y GESTIÓ N
Escribir las sentencias SQL que ejecuten las siguientes consultas con subconsultas
sobre la base de datos de la figura 3.28:
5.1.7. Alias
Los alias permiten asignar nombres alternativos a campos, expresiones de consulta o tablas com-
pletas. Recordemos la consulta de la figura 5.8:
Socio
------------------------------------
00789521T – Sanz González, Paula
50687452Y – García Viñals, José Luis
38546998X – Peinado Martín, Javier
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 117
Los alias también se pueden asociar a nombres de tablas, de modo que en una consulta po-
damos utilizar la misma tabla más de una vez con distintos fines. En el siguiente ejemplo se
muestran los libros de la biblioteca junto con sus autores y editorial. También aparecerá la na-
cionalidad de los autores y el país donde reside cada editorial, por lo que serán necesarios dos
JOIN independientes a TPais. Dicha independencia se basa en la asociación de una de las dos
apariciones de TPais a un alias (TPaisEditorial):
Figura 5.41
Consulta de libros, autores y editoriales, y salida por pantalla
CAPÍTULO 5
118 BASES DE DATOS . DISEÑO Y GESTIÓ N
SELECT ABS(SUM(nImporte))
FROM TFactura
WHERE dFactura BETWEEN "2013-01-01" AND "2013-12-31";
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 119
TLibro TEditorial
Título Editorial
--------- ----------------
Clipper. ANAYA MULTIMEDIA
Socio NIF
---------------------------- ---------
Paula Sanz González (19) 00789521T
José Luis García Viñals (23) 50687452Y
Javier Peinado Martín (21) 38546998X
...
CAPÍTULO 5
120 BASES DE DATOS . DISEÑO Y GESTIÓ N
Nótese que los valores van entrecomillados. Esto ocurre siempre con los campos de
tipo cadena de caracteres, pero no siempre con los de tipo fecha, cuya especificación
puede variar dependiendo del SGBD utilizado.
En la consulta del siguiente ejemplo no se ha incluido el campo nEditorialID (clave
primaria) en la sentencia, ya que, al ser de tipo IDENTITY, su valor será asignado de
forma automática por el SGBD. Por otro lado, el valor de nPaisID no va entrecomillado,
al tratarse de un valor numérico.
Figura 5.46
Relleno de TPais tomando la información de la tabla
de países de otra base de datos distinta
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 121
Dar de alta un nuevo libro en la tabla TLibro de la base de datos de la figura 3.28.
UPDATE <tabla>
SET <campo1> = <valor1>[,
<campo2> = <valor2>,
...
<campoN> = <valorN>]
[WHERE <condición>];
El siguiente ejemplo solo afecta a un registro, ya que la cláusula WHERE se refiere a un valor
de clave primaria:
UPDATE TLibro
SET nAnyoPublicacion = 1994
WHERE nLibroID = 321;
Figura 5.47
Actualización del año de publicación de un libro concreto
En cambio, el ejemplo de la figura 5.48 puede afectar a varios autores, ya que se está utili-
zando un criterio menos restrictivo:
UPDATE TAutor
SET cNombre = "Miguel Ángel"
WHERE cNombre = "M. Ángel";
CAPÍTULO 5
122 BASES DE DATOS . DISEÑO Y GESTIÓ N
Como se apuntaba anteriormente, no especificar la cláusula WHERE afecta a todos los registros:
UPDATE TSocio
SET dAlta = "2013-10-03";
UPDATE TLibro
SET nAnyoPublicacion = 2010
WHERE cTitulo = "El mundo"
AND nEditorialID = 32;
Figura 5.50
Actualización del año de publicación de acuerdo con el título y la editorial
UPDATE TSocio
SET cDireccion = "C/Pez, 4",
cTelefono = "677898899",
dAlta = "2013-10-03"
WHERE cNIF = "50687452Y";
Modificar la tabla TLibro de la base de datos de la figura 3.28 para que el nuevo
título del libro de código 312 sea “Historias de cronopios y de famas” y su año de
edición 2007.
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 123
Figura 5.53
Borrado de varios libros de acuerdo a un criterio (su código de editorial)
En la base de datos de la figura 3.28, borrar todos los socios sin dirección dados
de alta en 2014.
CAPÍTULO 5
124 BASES DE DATOS . DISEÑO Y GESTIÓ N
UPDATE TEjemplar
SET cSignatura = "689 LOP bas"
WHERE nLibroID IN (SELECT nLibroID
FROM TLibro
WHERE nEditorialID = 32
AND nAnyoPublicacion = 2004);
Figura 5.56
Se conceden todos los privilegios al usuario “GarciaF” sobre la tabla TSocio
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 125
REVOKE DELETE
FROM "GarciaF"
ON TSocio;
Figura 5.57
Se revocan los privilegios de borrado al usuario “GarciaF” sobre la tabla TSocio
5.2.2. Transacciones
En algunas ocasiones nos interesa que varias inserciones, modificaciones o borrados sobre una
o varias tablas se hagan de una vez, de modo que toda la información quede alterada, o bien no
se modifique nada.
Tomemos como ejemplo el alta de una factura. Esta operación implica escribir un nuevo re-
gistro en una tabla de facturas y un registro por cada línea que conforma el documento en una
tabla de líneas de factura. Si damos de alta una factura con cuatro líneas y surge un error al escribir
la tercera, nuestra base de datos quedará con información inconsistente (una factura compuesta
por dos líneas cuyos importes no coincidirán con el total al ser sumados).
TFactura
nFacturaID dFactura cCliente
---------- ---------- ------------------
16 2014-08-03 Mecanizados García
TLineaFactura
nFacturaID nLinea cProducto nCantidad nPrecio
---------- ------ ---------------------- --------- ------- Figura 5.58
16 1 Tornillo 6 mm 14 3,60
16 2 Tuerca 6 mm 15 2,55 Factura, y almacenamiento de
16 3 Llave inglesa mod. 37P 3 12,00
su información en tablas
CAPÍTULO 5
126 BASES DE DATOS . DISEÑO Y GESTIÓ N
La transacción es un mecanismo que contempla como un todo este tipo de acciones inde-
pendientes pero relacionadas. Antes de iniciar las actualizaciones se abre la transacción. Si se eje-
cutan correctamente, quedan confirmadas y la transacción se cierra, pero si hay algún error la
transacción se deshace por completo, garantizando la integridad de las inserciones, modificaciones
y eliminaciones de datos.
El estándar SQL define una instrucción START TRANSACTION (BEGIN TRANSACTION en
muchos SGBDR comerciales) que da por iniciada una transacción. Todas las sentencias de ac-
tualización posteriores no se harán efectivas hasta que se encuentre una sentencia de confirma-
ción (COMMIT). Si se detectase algún error durante la transacción, se puede deshacer volviendo
al estado original mediante la sentencia ROLLBACK.
START TRANSACTION
...
IF ERROR
ROLLBACK
ELSE
COMMIT
Las transacciones son delicadas de gestionar, ya que presentan problemas relacionados con
los accesos concurrentes vistos en el tema 3. Uno de ellos surge cuando dos transacciones que
se ejecutan de forma simultánea acceden al mismo dato. En ese caso, surgen tres posibles pro-
blemas:
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 127
• Dirty read (lectura sucia). Una transacción A consulta información escrita por otra transac-
ción B que aún no ha sido confirmada. Si la transacción B acabase en un ROLLBACK, la
transacción A estaría manejando información incorrecta.
• Nonrepeatable read (lectura irrepetible). Una transacción A consulta un valor dos veces y
obtiene distinto resultado, ya que dicho dato ha sido modificado por una transacción B
en el intervalo entre ambas consultas.
• Phantom read (lectura fantasma). Al efectuar una consulta, una transacción A encuentra
unos datos que no existían cuando se inició. Otra transacción B los ha insertado.
Como se vio anteriormente, la solución a este este tipo de problemas pasa por implementar po-
líticas de bloqueo, pero estas, a su vez, causan otros problemas. El más habitual es el deadlock, situación
en la que dos transacciones quedan bloqueadas indefinidamente, ya que ambas intentan acceder a
datos bloqueados por la otra transacción. En ese caso, el SGBDR debe implementar algoritmos de
detección de deadlocks, forzando el ROLLBACK de una de las transacciones comprometidas.
Resumen
El DML es la parte del lenguaje SQL que se encarga de la gestión de la información con-
tenida en una base de datos, y la sentencia SELECT es su herramienta de recuperación
de información. Su sintaxis varía entre la sencillez de las consultas a una tabla y la com-
plejidad de las composiciones internas y externas (consultas a varias tablas, en el se-
gundo de los casos incluyendo los registros que no guardan correspondencia con
registros en otras tablas). SELECT también permite embeber consultas (subconsultas) den-
tro de consultas y combinar consultas mediante los operadores UNION, MINUS e IN-
TERSECT. La información que se obtiene se depura aún más gracias al uso de funciones
de agregación usadas en solitario o con las cláusulas GROUP BY y HAVING.
Además de gestionar las consultas a la base de datos, el DML también se encarga de
las inserciones, actualizaciones y borrados, gracias a las sentencias INSERT, UPDATE y
DELETE, respectivamente.
Otra parte de SQL es el DCL, encargado de las operaciones de control. Mediante el
DCL se pueden conceder o revocar permisos a usuarios y gestionar transacciones, es
decir, secuencias de operaciones relacionadas que se tratan como una sola operación a
efectos de la información resultante en la base de datos.
CAPÍTULO 5
128 BASES DE DATOS . DISEÑO Y GESTIÓ N
EJERCICIOS PROPUESTOS
1. Sobre la base de datos de la figura 3.28 escribir las sentencias SELECT que obten-
gan los siguientes resultados:
a) Los títulos de los libros publicados entre 1926 y 1978 que no estén publicados
por la editorial número 32.
b) El nombre y apellidos de todos los socios dados de alta después de 2009 que
cuenten con dirección.
c) Todos los códigos de país en los que haya editoriales, sin valores repetidos.
2. Sobre la base de datos de la figura 3.28, escribir las sentencias SELECT que ob-
tengan los siguientes resultados:
a) Los títulos de los libros cuyo nombre comience por “Guía” que no estén pu-
blicados por la editorial “Alfaguara”.
b) La lista de temas para los que la editorial “Alfaguara” tiene libros publicados,
sin valores repetidos.
c) Los títulos de los libros que nunca han sido tomados en préstamo.
3. Sobre la base de datos de la figura 3.28, escribir las sentencias SELECT que ob-
tengan los siguientes resultados:
CAPÍTULO 5
EL LENGUAJE SQL. DML Y DCL 129
ACTIVIDADES DE AUTOEVALUACIÓN
1. El DML permite:
■ a) Crear, modificar y borrar objetos de la base de datos.
■ b) Dar de alta, modificar, borrar y consultar información de las tablas.
■ c) Gestionar permisos de usuarios y transacciones.
4. La cláusula HAVING:
■ a) Puede aparecer en una consulta independientemente de GROUP BY.
■ b) Se puede aplicar sobre cualquier campo o expresión.
■ c) Solo se puede aplicar sobre funciones de agregación.
5. El deadlock se produce:
■ a) Cuando dos transacciones quieren acceder a la vez al mismo dato.
■ b) Cuando dos transacciones quieren acceder a datos bloqueados por la otra
transacción.
■ c) Como consecuencia del dirty read.
SOLUCIONES:
1. ■ b ■
a ■ c a ■
3. ■ c
b ■
5. ■ b ■
a ■ c
a ■
2. ■ c
b ■ a ■
4. ■ c
b ■
CAPÍTULO 5
6
Lenguaje de programación.
Construcción de guiones
Objetivos
LA NECESIDAD DE UN
LENGUAJE DE PROGRAMACIÓN Construcción de guiones
EN EL SGBD
Variables. Cursores
Triggers
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 133
Glosario
En los dos temas anteriores se ha abordado el lenguaje SQL y la ejecución de sus instrucciones
de forma aislada. No obstante, lo habitual en cualquier software que trabaje con una base de datos
es ejecutar secuencias de instrucciones que realicen varias comprobaciones, tareas secuenciales
o repetitivas, etc. El código fuente del lenguaje de programación de dicho software debe enviar
constantemente sentencias SQL al servidor de base de datos.
En el siguiente ejemplo, un usuario introduce información sobre un producto en una apli-
cación de gestión de stock de un almacén. La aplicación se ejecuta en un PC, pero debe acceder
a la información almacenada en una base de datos residente en un servidor:
CAPÍTULO 6
134 BASES DE DATOS . DISEÑO Y GESTIÓ N
Si existe
UPDATE TProducto
Sumar 4 al stock SET nStock = nStock + 4
WHERE cDescripcion = "Compresor 32H";
Si no
Figura 6.1
Proceso de actualización de stock en la base de datos. La aplicación software
que se ejecuta en el PC debe efectuar tres llamadas independientes al servidor
para ejecutar las tres sentencias SQL
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 135
Si existe
UPDATE TProducto
SET nStock = nStock + pnCantidad
WHERE cDescripcion = pcProducto;
Si no
INSERT INTO TProducto
(cDescripcion, nStock)
VALUES
(pcProducto, pnCantidad);
Figura 6.2
Proceso de actualización de stock en la base de datos
con SQL/PSM (código no estándar)
CAPÍTULO 6
136 BASES DE DATOS . DISEÑO Y GESTIÓ N
Elaborar una lista con los lenguajes procedimentales de los SGBD(O)R más populares.
Se puede partir de la relación ofrecida en el cuadro 1.1 del capítulo 1.
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 137
También se pueden declarar varias variables a la vez, si todas corresponden al mismo tipo de
datos:
...
SET vnImporte = 1430;
...
SET vnIVA = 21;
SET vnImporte = vnImporte + ((vnImporte / 100) * vnIVA)
SET vcTexto = "Importe final: " || vnImporte || " €.";
...
...
Nótese que, como ampliación de la Notación Húngara comentada en el tema 3, y para di-
ferenciar variables de nombres de campo, en el presente texto los nombres de variable irán pre-
cedidos por una “v” minúscula.
SQL/PSM cuenta con variables de sistema, es decir, valores a los que el programador puede
acudir cuando lo desee. Algunos de los más útiles son los siguientes:
En algunos SGBD los valores del cuadro no están disponibles en variables de sistema, sino
en forma de funciones integradas.
CAPÍTULO 6
138 BASES DE DATOS . DISEÑO Y GESTIÓ N
Mediante las variables se pueden recuperar datos de una consulta SQL, tarea que se puede
realizar de tres formas distintas:
SELECT <campo>
INTO <variable>
[<resto_consulta>];
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 139
2. Abrir el cursor.
OPEN <nombre_cursor>;
3. Recorrer el cursor. Cada vez que se ejecuta la sentencia FETCH se lee un nuevo re-
gistro. Si la consulta devuelve varios campos sus valores se pueden almacenar en varias
variables, separadas por comas.
Si se especifica el valor NEXT, la sentencia FETCH devolverá los valores del siguiente
registro disponible. Dado que NEXT es el valor por defecto, no es necesario especifi-
carlo.
Si se especifica PRIOR, se devolverán los datos del registro anterior. FIRST se des-
plaza hasta el primer registro y LAST hasta el último. RELATIVE se desplaza desde el
registro actual tantos registros como indique <núm_registros>. Si <núm_regis-
tros> es positivo se desplazará hacia adelante, si es negativo hacia atrás. ABSOLUTE se
posicionará en el número de registro especificado por <núm_registros> si este es
positivo, o bien hacia atrás desde el último registro si <núm_registros> es negativo.
Para utilizar cualquier cláusula distinta de NEXT es necesario especificar SCROLL en la
declaración del cursor.
4. Cerrar el cursor.
CLOSE <nombre_cursor>;
OPEN curSocios;
CLOSE curSocios;
Figura 6.6. Ejemplo de uso de un cursor. Se leen los dos primeros registros
CAPÍTULO 6
140 BASES DE DATOS . DISEÑO Y GESTIÓ N
Nuevamente, para adaptarnos a la notación húngara, y al tratarse los cursores de tipos espe-
ciales de variables, los prefijaremos con las letras “cur” en minúscula.
En SQL/PSM los cursores permiten modificar o borrar el registro en el que se esté posicio-
nado. Para ello hay que ejecutar las siguientes versiones de las sentencias UPDATE y DELETE:
UPDATE <nombre_tabla>
SET <campo1> = <valor1>[,
<campo2> = <valor2>,
...
<campoN> = <valorN>]
WHERE CURRENT OF <nombre_cursor>;
DELETE <nombre_tabla>
WHERE CURRENT OF <nombre_cursor>;
OPEN curPrestamos;
CLOSE curPrestamos;
Figura 6.7. Ejemplo de borrado dentro de un cursor. Se buscan libros con fechas
incorrectas y se borran en el momento
Partiendo de la base de datos de la figura 3.28, escribir código SQL/PSM que calcule
el número de libros editado en el año 1992. Posteriormente habrá que almacenar en
una cadena de caracteres el texto “En el año 1992 se editaron <n1> libros.”, donde
<n1> es el número de libros editados en 1992.
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 141
• IF. Evalúa una condición, llevando a cabo una acción en caso de que la condición sea
cierta.
IF <condición> THEN
<lista_sentencias>
[ELSEIF <condición> THEN
<lista_sentencias>]
[ELSE
<lista_sentencias>]
END IF;
IF vnImporte = 0 THEN
DELETE FROM TFactura Figura 6.8
WHERE nFacturaID = 37;
END IF;
Ejemplo de IF. Se comprueba
... el importe de una factura y,
si es cero, se elimina
Opcionalmente se puede utilizar la palabra ELSE para llevar a cabo otra acción si la
condición es falsa.
IF vnImporte = 0 THEN
DELETE FROM TFactura
WHERE nFacturaID = 37;
ELSE
Figura 6.9 UPDATE TFactura
Ejemplo de IF con ELSE. Se comprueba SET nImporte = nImporte + 100
el importe de una factura. Si es cero, WHERE nFacturaID = 37;
END IF;
se elimina, pero si es distinto de cero ...
se incrementa en 100
CAPÍTULO 6
142 BASES DE DATOS . DISEÑO Y GESTIÓ N
SQL/PSM, al igual que otros lenguajes, también incluye la palabra ELSEIF para evitar
la anidación excesiva de sentencias IF.
IF vnImporte = 0 THEN
DELETE FROM TFactura
WHERE nFacturaID = 37;
ELSE
IF vnImporte < 0 THEN
UPDATE TFactura
SET nImporte = 50
WHERE nFacturaID = 37;
ELSE
IF vnImporte < 100 THEN
UPDATE TFactura
SET nImporte = nImporte + 50
WHERE nFacturaID = 37;
ELSE
UPDATE TFactura
SET nImporte = nImporte + 100
WHERE nFacturaID = 37;
END IF;
END IF;
END IF;
...
IF vnImporte = 0 THEN
DELETE FROM TFactura
WHERE nFacturaID = 37;
ELSEIF vnImporte < 0 THEN
UPDATE TFactura
SET nImporte = 50
WHERE nFacturaID = 37;
ELSEIF vnImporte < 100 THEN
UPDATE TFactura
SET nImporte = nImporte + 50
WHERE nFacturaID = 37;
ELSE
UPDATE TFactura
SET nImporte = nImporte + 100
WHERE nFacturaID = 37;
END IF;
...
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 143
• CASE. Compara el resultado de una expresión con varios valores, llevando a cabo una
acción concreta si la expresión se evalúa a verdadero para alguno de ellos. De forma aná-
loga a IF, también incluye una cláusula ELSE si la expresión no se evalúa a verdadero al
compararla con ninguno de los valores propuestos.
CASE <expresión>
WHEN <valor1> THEN
<lista_sentencias>
[WHEN <valor2> THEN
<lista_sentencias>
...
WHEN <valorN> THEN
<lista_sentencias>]
[ELSE
<lista_sentencias>]
END CASE;
CASE vcPais
WHEN "España" THEN
SET vcCodPais = "ESP";
WHEN "Estados Unidos" THEN
SET vcCodPais = "USA";
WHEN "Francia" THEN
SET vcCodPais = "FRA";
ELSE
SET vcCodPais = "";
END CASE;
...
Figura 6.11. Ejemplo de CASE. Se rellena una variable con un código alfanumérico
de país correspondiente al país de una editorial concreta
CAPÍTULO 6
144 BASES DE DATOS . DISEÑO Y GESTIÓ N
A partir de este momento se verán las sentencias iterativas o repetitivas, llamadas de ese
modo porque permiten repetir una o varias líneas de código hasta que se cumpla una
condición determinada. Al bloque de código delimitado por una sentencia iterativa se lo
conoce como bucle.
• WHILE. Evalúa al principio del bucle la condición que ha de cumplirse para seguir iterando
dentro del mismo. En cuanto dicha condición no se cumpla, el flujo de código continuará
en la sentencia inmediatamente siguiente al final del bucle. Si la condición no se cumple
la primera vez que el flujo del código llega al bucle, este no se ejecuta nunca.
WHILE <condición_de_permanencia> DO
<lista_sentencias>
END WHILE;
SET vnImporteAcumulado = 0;
OPEN curFacturas;
CLOSE curFacturas;
...
Figura 6.12. Ejemplo de WHILE. Recorre un cursor con las facturas del año 2013
ordenadas cronológicamente hasta que encuentra la que permitió a la empresa superar
el millón de euros de facturación
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 145
REPEAT
<lista_sentencias>
UNTIL <condición_de_salida>
END REPEAT;
SET vnImporteAcumulado = 0;
OPEN curFacturas;
REPEAT
FETCH FROM curFacturas INTO vnFacturaID, vnImporte;
CLOSE curFacturas;
...
Figura 6.13. Ejemplo de REPEAT. Lleva a cabo el mismo proceso que la figura 6.12,
pero la condición es opuesta, al ser condición de salida y no de permanencia
CAPÍTULO 6
146 BASES DE DATOS . DISEÑO Y GESTIÓ N
...
Figura 6.14. Ejemplo de FOR. Incluye un nuevo campo lógico lVigente en TSocio, a cierto
por defecto. Si el socio se dio de alta antes del año 2010 y no se ha llevado ningún libro
en préstamo, se actualizará a falso el valor de lVigente. Si el socio se dio de alta en 2010
o posteriormente, sus datos se darán de alta en la nueva tabla TSocioNuevo. Nótese el
uso de la función EXISTS() para comprobar si el socio ha efectuado préstamos
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 147
SQL/PSM provee otro tipo de bucle, la estructura LOOP...END LOOP, cuya salida ha de
forzarse mediante la instrucción LEAVE. Dado que esa ruptura del flujo contradice las normas
básicas de la programación estructurada, además de que no es necesario utilizarla, no se verá en
este libro.
BEGIN
SET vnImporte = SELECT nImporte
FROM TFactura
WHERE nFacturaID = 37;
IF vnImporte = 0 THEN
DELETE FROM TFactura
WHERE nFacturaID = 37;
ELSE
UPDATE TFactura
SET nImporte = nImporte + 100
WHERE nFacturaID = 37;
END IF;
END;
CAPÍTULO 6
148 BASES DE DATOS . DISEÑO Y GESTIÓ N
Una vez que queda claro cómo escribir código, el siguiente paso es almacenar los bloques de
código en el SGBD para poder ejecutarlos cuando el programador lo desee. Dichos bloques se
guardan en forma de subrutinas, a saber, procedimientos almacenados y funciones almacenadas. Los proce-
dimientos, cuyo nombre prefijaremos con una “P” (mayúscula), tan solo ejecutan bloques de códi-
go, mientras las funciones devuelven un valor como resultado de sus cálculos. Por ese motivo
prefijaremos su nombre con una “F” (mayúscula) y la inicial del tipo de datos del valor que devuel-
ven. Ambos pueden recibir valores a partir de los cuales llevar a cabo sus funcionalidades. Dichos
valores se llaman parámetros, y los identificaremos precediendo su nombre de una “p” (minúscula).
Al almacenar una subrutina, esta puede ser invocada desde otra subrutina, desde el código fuente
de un lenguaje de programación externo o desde la interfaz de línea de comandos del SGBD.
...
CALL PActualizarDireccion("50687452Y", "C/ Arroyofresno, 45");
...
UPDATE TSocio
SET cDireccion = pcDireccion
WHERE cNIF = pcNIF;
END IF;
END;
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 149
Figura 6.17
Procedimiento almacenado con parámetros de entrada y de salida, y llamada al mismo.
Una vez acabada la llamada en la parte invocante, las variables vcPaisEditorial y
vnPublicaciones contendrán los valores que se les asignaron dentro del procedimiento
...PROCEDURE PProcedimiento
DECLARE vnValor INT; (IN pnValor INT);
DECLARE vlCambio BOOLEAN; ...
SET pnValor = 7;
... ...
SET vnValor = 3;
CALL PProcedimiento(vnValor);
...PROCEDURE PProcedimiento
(OUT pnValor INT);
SET vlCambio = (vnValor <> 3);
...
...
SET pnValor = 7;
...
Figura 6.18
Llamada a procedimiento con paso de parámetro. Si se ha declarado el procedimiento
como en el código de arriba a la derecha (con el parámetro como IN), el valor de vlCambio
será FALSE, ya que la asignación de valor dentro del procedimiento no tendrá incidencia
sobre el valor del parámetro fuera de dicho procedimiento (vnValor seguirá valiendo 3). Si,
en cambio, se ha declarado el procedimiento como abajo a la derecha (con el parámetro
como OUT), vnValor valdrá 7 tras la invocación al procedimiento, por lo que vlCambio será
TRUE. En este caso el comportamiento sería idéntico declarando el parámetro como OUT o
como INOUT, ya que el procedimiento escribe sobre el parámetro, pero no lee su valor
CAPÍTULO 6
150 BASES DE DATOS . DISEÑO Y GESTIÓ N
Como el propósito de una función es devolver un valor, sus parámetros solo pueden
ser de entrada (IN). La declaración de parámetros solo exige indicar su tipo de datos.
La cláusula RETURNS indica el tipo de datos del valor que devolverá la función, y la
sentencia RETURN devolverá dicho valor o expresión. No es obligatorio que RETURN sea
la última sentencia del bloque. Puede ir en medio del código o incluso aparecer varias
veces. A diferencia de otras implementaciones de funciones, las líneas de código que sigan
a RETURN seguirán ejecutándose hasta el final de la función.
Las funciones son invocadas como expresiones, al igual que ocurría con las funciones
integradas descritas en el apartado 5.1.8 del tema anterior.
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 151
IF NOT FlEsEspanya(vnPaisID)
SET vcListaPaises = vcListaPaises
|| " " || FcPais(vnPaisID);
END IF;
END FOR;
...
Figura 6.19
Llamada a dos funciones. El bloque de código superior recorre en un cursor la tabla
de países. Por cada uno de ellos invoca a la función de la izquierda para saber si se
trata de España. En caso contrario, invoca a la función de la derecha, que le devuelve
el nombre del país, y concatena este último con su lista de países. Aunque algo forzado,
este ejemplo es muy útil para entender el funcionamiento de las funciones en SQL/PSM
CAPÍTULO 6
152 BASES DE DATOS . DISEÑO Y GESTIÓ N
A partir de la base de datos de la figura 3.28, crear una función que devuelva TRUE
si el NIF de socio que recibe como parámetro pertenece a un socio que ha sido dado
de alta después del año 2009 y que nunca se ha llevado prestado un libro.
Reescribir el código de la actividad propuesta 6.9 utilizando una función que de-
vuelva el valor lógico en vez de un procedimiento.
Para interceptar un estado concreto habrá que declararlo como condición. Posteriormente
podremos referirnos a dicho estado a través del nombre asignado a dicha condición:
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 153
OPEN curFacturas;
REPEAT
SET vnImporteAcumulado = vnImporteAcumulado + vnImporte;
CLOSE curFacturas;
END;
Figura 6.20. Código de la figura 6.13, con dos comprobaciones: que el cursor aún
tenga registros que devolver en cada iteración y que la lectura esté permitida
Los códigos de excepción definen estados inusuales de los datos que, como se ha visto en el
ejemplo, pueden implicar un error de programación (división por cero, consulta de un solo re-
gistro que devuelve varios, inserción de valor NULL en un campo NOT NULL…). Si estamos
tratando con excepciones, podemos llevar a cabo una tarea extra: establecer un gestor de la ex-
cepción (handler) para que defina qué tarea ejecutar cuando esta se detecte (EXIT, CONTINUE o
UNDO) y qué sentencias llevar a cabo:
CAPÍTULO 6
154 BASES DE DATOS . DISEÑO Y GESTIÓ N
(de forma análoga al ROLLBACK de una transacción). Si se define un handler con UNDO, el bloque
de código debe empezar con una instrucción BEGIN ATOMIC en vez de BEGIN.
OPEN curFacturas;
REPEAT
SET vnImporteAcumulado = vnImporteAcumulado + vnImporte;
CLOSE curFacturas;
END;
Figura 6.21
Código de la figura 6.20, en el que se incluye un handler para la excepción de lectura de
datos SQL no permitida. Si salta dicha excepción, se ejecutarán las dos líneas definidas en
la declaración del handler y se devolverá el flujo de código al bloque de código invocador
Las excepciones también se pueden forzar. En un momento dado puede que al programador
le interese que ciertas situaciones se traten como excepciones, aunque técnicamente no lo sean,
o bien anticiparse a la generación de la excepción. Para ello se utiliza la sentencia SIGNAL:
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 155
BEGIN
FOR forFacturas AS curFacturas CURSOR
FOR SELECT nFacturaID, nImporte
FROM TFactura
WHERE dFactura BETWEEN "2013-01-01" AND "2013-12-31"
DO
FETCH FROM curFacturas
INTO vnFacturaID, vnImporte;
IF vnImporte = 0 THEN
SIGNAL DIVISION_BY_ZERO;
END IF;
...
END FOR;
END;
Figura 6.22. Se recorren las facturas del año 2013 para su tratamiento posterior.
Si alguna factura tiene importe cero, se fuerza la excepción 22012 (división por cero),
aunque aún no esté ocurriendo
6.2.5. Triggers
En el capítulo 3 se abordó el concepto de integridad referencial y se vieron varios mecanismos
para gestionarla. Un paso más allá consiste en la posibilidad de crear triggers, es decir, bloques de
código que se ejecutan en el momento exacto en que cambia el contenido de la base de datos.
Los triggers (traducidos a veces como “disparadores”) se definen por cada tabla, y se puede declarar
uno distinto por cada uno de los siguientes instantes en el tiempo:
CAPÍTULO 6
156 BASES DE DATOS . DISEÑO Y GESTIÓ N
Si se indica BEFORE, el código del trigger se ejecutará justo antes de que se lleve a cabo la in-
serción, actualización o borrado; si se indica AFTER, se ejecutará después.
Las acciones posibles son INSERT, UPDATE o DELETE. En el caso de UPDATE, se puede es-
pecificar el nombre de uno o varios campos, de modo que el trigger solo se ejecute si se ha mo-
dificado alguno de esos campos, pero no los demás. Si no se indican nombres de campo, el trigger
se ejecutará ante cualquier sentencia UPDATE sobre la tabla.
Un trigger se puede definir por registro (FOR EACH ROW) o por sentencia de actualización
(FOR EACH STATEMENT). Si se define por sentencia (la opción por defecto), se ejecutará una sola
vez por cada INSERT, UPDATE o DELETE. Si se define por registro, se ejecutará una vez por cada
registro afectado (en un UPDATE masivo, por ejemplo).
En un trigger por sentencia se pueden asignar dos alias a la tabla en cuestión: uno para la
tabla tal cual estaba antes de la inserción, actualización o borrado (OLD TABLE AS
<alias_tabla_antigua>) y otro para la tabla tal cual quedará después de la ejecución de la
sentencia (NEW TABLE AS <alias_tabla_nueva>). Si el trigger es por registro, se pueden asig-
nar alias al registro en sus dos estados: antes de la ejecución de la sentencia (OLD ROW AS
<alias_registro_antiguo>) y después (NEW ROW AS <alias_registro_nuevo>). De
esta forma, dentro del código del trigger se puede acceder, por ejemplo, a los valores que tenían
los campos de un registro antes de ejecutar un UPDATE sobre él y después de ejecutar dicho
UPDATE.
En los próximos ejemplos, y siguiendo la adaptación a la notación húngara presente a lo
largo de este libro, prefijaremos el nombre de cada trigger con las letras “trg” (minúscula).
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 157
Los triggers BEFORE y AFTER tanto del tipo FOR EACH ROW como FOR EACH STATEMENT
pueden convivir, de modo que un simple UPDATE puede desencadenar dos triggers (los FOR EACH
STATEMENT) y otros dos por cada registro afectado (los FOR EACH ROW). En caso de que ocurra
esta situación, el orden de ejecución de triggers es:
CAPÍTULO 6
158 BASES DE DATOS . DISEÑO Y GESTIÓ N
Una aplicación habitual de los triggers son las funciones de auditoría. En muchas
bases de datos de empresas e instituciones que albergan información sensible es
muy habitual añadir a todas las tablas campos en los que almacenar la fecha y
hora de la última actualización (gracias al tipo de datos TIMESTAMP y a la variable
CURRENT_TIMESTAMP comentada anteriormente) y el usuario que la realizó (gra-
cias a la variable CURRENT_USER), entre otros datos. A veces se crea una estructura
paralela donde cada tabla cuenta con otra tabla hermana dedicada exclusivamente
a labores de auditoría, de modo que se guardará la traza de cualquier cambio
sobre los datos, por pequeño que sea. Del mismo modo, los borrados pueden ser
lógicos en vez de físicos. En ese caso, se añade un campo lógico a cada tabla que
indique si el registro está borrado o no; obviamente, para filtrar los registros mar-
cados como borrados, en todas las SELECT habrá que incluir la cláusula “WHERE
NOT lBorrado”.
Esta actividad tiene dos partes:
1. Ampliar la tabla TSocio de la base de datos de la figura 3.28 con los siguien-
tes campos:
CAPÍTULO 6
LENGUAJE DE PROGRAMACIÓN . CONSTRUCCIÓN DE GUIONES 159
Resumen
La existencia de un lenguaje de programación integrado en los SGBD permite disminuir
el tráfico de red entre la base de datos y el software que conecta con ella. También per-
mite agrupar las funcionalidades relacionadas con los datos e independizarlas del resto
de procesos. Poder ejecutar bloques de código en el servidor facilita las tareas de admi-
nistración, ya que permite programar y temporizar backups, generación de estadísticas,
gestión de usuarios, etc.
Aunque cada SGBD define su propio lenguaje de programación, desde 1999 existe
un estándar llamado SQL/PSM. Su gestión de variables, funciones, procedimientos y es-
tructuras de control es similar a la de otros lenguajes de programación. Cabe destacar el
uso de cursores (estructuras de almacenamiento en memoria que contienen el resultado
de una consulta).
Un elemento muy importante en todo SGBD son los triggers, bloques de código que
se ejecutan a partir de una acción sobre los datos (inserción, actualización o borrado).
EJERCICIOS PROPUESTOS
1. Buscar información sobre los lenguajes procedimentales de base de datos más uti-
lizados y comparar su sintaxis con la de SQL/PSM.
2. Utilizando la variable de sistema CURRENT_DATE, crear una función SQL/PSM
que compruebe si una persona es mayor de edad (18 años). La función tendrá la
siguiente declaración:
3. Sobre la base de datos de la figura 3.28, crear una función que reciba un NIF de
socio y devuelva una cadena de caracteres con sus datos respetando el formato si-
guiente:
CAPÍTULO 6
160 BASES DE DATOS . DISEÑO Y GESTIÓ N
ACTIVIDADES DE AUTOEVALUACIÓN
SOLUCIONES:
a ■
1. ■ c
b ■ a ■
3. ■ c
b ■
5. ■ b ■
a ■ c
a ■
2. ■ c
b ■ a ■
4. ■ b ■
c
CAPÍTULO 6
7
Gestión de seguridad
Objetivos
INTRODUCCIÓN
Fallos físicos
TIPOS DE FALLOS
Fallos lógicos
Fallos físicos
RECUPERACIÓN DE FALLOS
Fallos lógicos
COPIAS DE SEGURIDAD
TRANSFERENCIA DE DATOS
ENTRE SGBD
CAPÍTULO 7
GESTIÓN DE SEGURIDAD 163
Glosario
Cifrar. Codificar un dato para que resulte ilegible. Para recuperar el dato original habrá
que ejecutar un proceso de descifrado.
Entorno de producción. Equipos, líneas de comunicaciones, software y bases de datos
donde se explotan sistemas de información. Se incide en el término “producción” para
establecer diferencias con el “entorno de desarrollo“ y el “entorno de pruebas“, implan-
taciones del sistema de información destinadas a su construcción y pruebas, respecti-
vamente, y donde la incidencia de posibles errores es menor.
Fichero de log (traducido a veces como “cuaderno de bitácora”). Registro de eventos
acaecidos en un sistema informático.
Migración. Proceso de transferir información entre distintos tipos o formatos de alma-
cenamiento físico o lógico.
Parche (patch). Paquete de actualización de un software.
N/A (not applicable). No aplicable. Que no tiene vigencia en el contexto actual.
7.1. Introducción
Las bases de datos almacenan el elemento más valioso de toda organización empresarial: la in-
formación. Gran parte del éxito en la consecución de los objetivos de una empresa radica en
una adecuada gestión de la seguridad de dichos datos.
Como norma básica se deben cumplir las cinco características de seguridad agrupadas bajo
las siglas CIDAN:
CAPÍTULO 7
164 BASES DE DATOS . DISEÑO Y GESTIÓ N
Figura 7.1
La gestión de la seguridad
es un elemento central en
las bases de datos
Antes de leer los dos apartados siguientes, elaborar una lista de fallos potenciales
que pueden afectar a la información almacenada en una base de datos.
CAPÍTULO 7
GESTIÓN DE SEGURIDAD 165
En algunas ocasiones estos errores tienen que ver con el acceso físico indebido a la sala
donde se encuentran los servidores de bases de datos, por lo que la competencia sobre este tipo
de problemas se comparte con los responsables de seguridad del edificio y con el departamento
de seguridad, si existe.
Figura 7.2
Centro de proceso
de datos (CPD)
CAPÍTULO 7
166 BASES DE DATOS . DISEÑO Y GESTIÓ N
Un problema habitual tiene que ver con las contraseñas de aplicaciones almacenadas en
tablas de bases de datos. Dichas contraseñas deben ir siempre cifradas, de modo que ningún in-
formático no autorizado pueda recuperarlas mediante una simple consulta SELECT. Varios
SGBD ofrecen un tipo de datos especial para almacenar contraseñas cifradas. De no ser así, el
personal de desarrollo tendrá que codificarlas antes de almacenarlas en la base de datos.
Cifrado
... cUsuario cPassword ...
-------- ------------
FuertesG GatoMaulla17
... cUsuario cPassword ...
-------- ------------
FuertesG X0Ime32!o$¿2
Figura 7.3
Alta de una contraseña en una base de datos sin cifrar (izquierda) y cifrada (derecha)
Antes de leer los dos apartados siguientes, elaborar una lista con las potenciales so-
luciones para los fallos vistos en los apartados 7.2.1 y 7.2.2.
CAPÍTULO 7
GESTIÓN DE SEGURIDAD 167
• Sistemas redundantes de discos. Todo servidor de base de datos que se precie debe contar
con una matriz redundante de discos independientes (RAID, redundant array of independent
disks). Esta técnica permite que varios discos duros trabajen como un solo disco lógico,
almacenando los datos de forma redundante. Ante un error en un disco, los demás segui-
rán funcionando y no se perderá información.
C
Figura 7.4. Sistema de discos redundante (RAID) m
• Elección acertada de servidores y contratos de mantenimiento. Los servidores suelen ser los equi-
pos más importantes en una empresa. Las limitaciones en inversión económica y la falta
de precisión en la determinación de las necesidades pueden ocasionar serios problemas
a largo plazo. Es importante elegir el número de servidores necesarios y sus características.
Del mismo modo, la cobertura de los contratos de mantenimiento firmados con el pro-
veedor del hardware deben definir responsabilidades y tomas de acción en caso de pro-
blemas.
• Gestión de información redundante. Es recomendable la existencia de un centro de contin-
gencia de datos (CDC, contingency data center) situado a varios kilómetros del centro de
proceso de datos (CPD) en el que se encuentran los servidores de bases de datos. En
dicho CDC se replicarán el hardware y el software más importantes de la oficina principal.
Tanto los datos como las versiones de software deben estar siempre actualizados en el
CDC para poder seguir trabajando desde allí en caso de que el CPD quede inoperativo.
• Gestión de backups. Se deben programar con frecuencia copias de seguridad de las bases
de datos de la organización. Dichos backups deben estar fácilmente disponibles para su
restauración en los servidores de bases de datos en caso de necesidad, pero también deben
extraerse a soportes de almacenamiento secundario (cinta magnética, DVD) guardados
en armarios ignífugos y trasladados al CDC.
• Mirroring. La técnica de mirroring consiste en replicar la información en tiempo real a un
servidor redundante, es decir, escribir los datos en dos servidores a la vez. Si el servidor
principal presentase errores físicos, el secundario (típicamente situado en el CDC) dis-
pondría de la información totalmente actualizada. Obviamente, implantar mirroring im-
plica mayores tiempos de retardo en la escritura de la información, así como una gestión
más cara y compleja de las líneas de comunicaciones.
CAPÍTULO 7
168 BASES DE DATOS . DISEÑO Y GESTIÓ N
Figura 7.6
Acceso a un centro de proceso
de datos (CPD)
CAPÍTULO 7
GESTIÓN DE SEGURIDAD 169
con las compañías más fiables y suscribir contratos que incluyan cláusulas de calidad de
servicio (QoS, quality of service) en las que se establezcan con detalle la responsabilidad
del proveedor y las consecuencias legales derivadas de infracciones en la prestación del
servicio.
• Pólizas de seguros. Como todo elemento valioso, la información también está sujeta a la
contratación de pólizas de seguros que puedan indemnizar a la organización en casos
concretos (robos, incendios).
• Acceso al servicio. Se debe impedir el acceso al servicio de base de datos a los equipos de
la oficina y/o del exterior que no necesiten acceder a la información. Esta gestión suele
corresponder al departamento de redes e infraestructuras.
• Acceso al servidor. Tanto el servidor como el SGBD deben estar protegidos por usuario y
contraseña.
• Autenticación en el SGBD. No se debe permitir el acceso al SGBD a ningún usuario que
no esté dado de alta en el catálogo de usuarios.
• Autenticación en el sistema operativo. En muchas ocasiones, en vez de crear usuarios en el
SGBD se utiliza una gestión de permisos basada en los usuarios y perfiles del sistema
operativo.
• Gestión de perfiles y usuarios. Se debe afinar mucho en la definición de permisos por usuario.
Algunos tendrán acceso a todas las bases de datos y tablas, otros solo a alguna. Unos
usuarios podrán modificar información y otros solo verla. Aunque haya quien tenga
acceso total a la información contenida en las tablas, solo determinados usuarios podrán
administrar el SGBD (mantenimiento de bases de datos y usuarios, gestión de backups,
temporización de eventos).
CAPÍTULO 7
170 BASES DE DATOS . DISEÑO Y GESTIÓ N
Figura 7.7
Sistema de backup
CAPÍTULO 7
GESTIÓN DE SEGURIDAD 171
• Incrementales. Solamente se almacenan los datos que han variado desde el último backup
completo. Es más rápido y afecta menos al rendimiento del servidor que el backup com-
pleto en caliente, pero ralentiza el proceso de restauración, ya que primero hay que res-
taurar el último backup completo que se hizo y después ir restaurando uno a uno todos
los backups incrementales que se llevaron a cabo desde entonces.
• Lógicas. No son backups como tales. Se basan en repetir las operaciones que llevaron a la
base de datos a un estado concreto, bien mediante importación de datos o mediante eje-
cución de ficheros de log donde queda almacenada cada inserción, actualización o borrado
en tablas de la base de datos. Generalmente se centran en la información de la base de
datos, y no incluyen información de control.
Comprobar en Internet qué herramientas de backup ofrecen los SGBD más populares.
Crear y restaurar backups con alguno de ellos.
CAPÍTULO 7
172 BASES DE DATOS . DISEÑO Y GESTIÓ N
Números BINARY_FLOAT, FLOAT (32 bits), FLOAT, REAL REAL (32 bits),
aproximados BINARY_DOUBLE DOUBLE (también DOUBLE
llamado REAL) (64 bits) PRECISION (64 bits)
Otros SPATIAL, IMAGE, ENUM, SET, tipos de CURSOR, ENUM, POINT, LINE,
AUDIO, VIDEO, datos GIS HIERARCHYID, LSEG, BOX, PATH,
DICOM, XMLType UNIQUEIDENTIFIER, POLYGON, CIRCLE,
SQL_VARIANT, CIDR, INET,
XML, TABLE MACADDR, BIT,
UUID, XML, JSON,
arrays, composites,
rangos, tipos definidos
por el usuario
CAPÍTULO 7
GESTIÓN DE SEGURIDAD 173
Según lo especificado en el cuadro anterior, los cuatro gestores cuentan con tipos DATE,
pero Oracle y MySQL carecen de tipo TIME, como exige el estándar. SQL Server y PostgreSQL
incluyen un tipo TEXT que no existe en los otros dos gestores. En Oracle no existe el tipo
BOOLEAN y en SQL Server se llama BIT. Aunque los gestores suelen ofrecer herramientas de
importación, exportación y transferencia de datos desde otros SGBD, obviamente tomar una
base de datos creada en un sistema y transferirla a otro es un proceso arduo y complejo. En la
mayoría de los casos requiere de un proceso de migración, que implica crear un software específico
para llevar a cabo la transferencia siguiendo los pasos dictaminados por la ingeniería del software
(educción de requisitos, elección de ciclo de vida, análisis, diseño, programación, pruebas y eje-
cución, entre otros).
Explorar las herramientas de transferencia de datos entre sistemas que ofrecen los
SGBD más populares. Intentar transferir pequeñas bases de datos entre gestores.
Resumen
Como objeto más valioso de toda organización, la información está sujeta a diversos
tipos de amenazas, por lo que es necesario contar con una gestión de seguridad que
afecte a las bases de datos y su entorno (el SGBD, el sistema operativo, los servidores,
accesos de red, etc).
La clasificación de fallos más habitual es la que diferencia entre fallos físicos (efec-
tuados sobre el hardware o las líneas de comunicaciones) y lógicos (ataques cibernéticos,
virus, etc.). Para luchar contra este tipo de amenazas es obligatorio contar con una in-
fraestructura bien diseñada, así como con una buena política de duplicación de datos
(mirroring, backups) y acuerdos legales con terceros.
En lo referente a las copias de seguridad, hay que diseñar un procedimiento preciso
que permita efectuarlas sin afectar al servicio y restaurarlas de forma eficiente cuando
sea necesario. Se deben conocer perfectamente los distintos tipos de backup existentes
y las herramientas que ofrece cada SGBD para su gestión.
Otro aspecto importante es el referente a la transferencia de información entre SGBD,
una tarea especialmente compleja debido a las diferencias de diseño entre los sistemas
de las distintas compañías.
CAPÍTULO 7
174 BASES DE DATOS . DISEÑO Y GESTIÓ N
ACTIVIDADES DE AUTOEVALUACIÓN
SOLUCIONES:
a ■
1. ■ b ■
c a ■
3. ■ c
b ■
a ■
5. ■ c
b ■
2. ■ b ■
a ■ c a ■
4. ■ b ■
c
CAPÍTULO 7
8
Las bases de datos
objeto-relacionales
Objetivos
INTRODUCCIÓN
Colecciones (arrays)
Tipos complejos
REFERENCIAS E
IDENTIFICADORES
De tipos
HERENCIA
De tablas
MÉTODOS
CAPÍTULO 8
LAS BASES DE DATOS OBJETO - RELACIONALES 177
Glosario
Camino más corto. Algoritmo ideado por E. Dijkstra para encontrar la ruta óptima dentro
de un grafo. Es la base del protocolo OSPF utilizado en encaminamiento entre routers.
Crisis del software. Término utilizado para describir el estado del mundo del desarrollo
de aplicaciones en la época previa al advenimiento de la ingeniería del software.
Desarrollo estructurado. Metodología de desarrollo de software imperante desde fina-
les de los años sesenta. Favorece el uso controlado del flujo de instrucciones de progra-
mación, así como la creación de subrutinas para modularizar el código fuente.
LISP (LISt Processing, procesamiento de listas). Lenguaje de programación de listas
utilizado en inteligencia artificial.
8.1. Introducción
En los años noventa el paradigma de la orientación a objetos apareció como alternativa a la me-
todología de desarrollo estructurado imperante hasta entonces. Empresas y organismos guber-
namentales empezaron a acometer proyectos de desarrollo de software aplicando técnicas de
análisis, diseño y programación orientada a objetos. El mundo de las bases de datos no quedó al
margen, y en esa época surgieron varios sistemas gestores de bases de datos orientados a objetos
(SGBDOO) que estructuraban la información almacenada en la base de datos en un formato
idóneo para su gestión posterior por parte de un lenguaje de programación orientado a objetos.
Además, dichas bases de datos permitían almacenar información compleja con menos restric-
ciones de las exigidas por el modelo relacional.
Actualmente la cuota de mercado de los SGBDOO es más discreta de lo esperado, pero los
fabricantes de soluciones relacionales vieron con buenos ojos la incorporación de ciertos con-
ceptos de orientación a objetos en sus SGBDR. Hoy en día algunos de los gestores más impor-
tantes (Oracle, Microsoft SQL Server, IBM DB2, PostgreSQL, SAP ASE, IBM Informix)
pertenecen a la clasificación de sistema gestor de base de datos objeto-relacionales (SGBDOR).
Dado que el uso de elementos de orientación a objetos no es obligatorio, se pueden seguir uti-
lizando como SGBDR tradicionales.
CAPÍTULO 8
178 BASES DE DATOS . DISEÑO Y GESTIÓ N
Clase clsCliente
objeto Juan Pérez
atributos
cNombre
cDireccion
objeto Ana García
dAlta
métodos
MCambiarDireccion() objeto Luisa Sanz
MBorrar()
En el ejemplo de la figura 8.1 observamos la definición de una clase clsCliente, cuyos objetos
cuentan con los atributos cNombre, cDireccion y dAlta, y los métodos MCambiarDireccion()
y MBorrar(). Si quisiéramos eliminar al cliente Juan Pérez no ejecutaríamos una sentencia de
borrado, ni llamaríamos a un procedimiento almacenado, sino al método MBorrar(), que se eje-
cuta exclusivamente sobre objetos de la clase clsCliente.
La orientación a objetos favorece la modularidad del código fuente. Algunas de sus caracte-
rísticas principales son las siguientes:
CAPÍTULO 8
LAS BASES DE DATOS OBJETO - RELACIONALES 179
• Encapsulación. Los objetos solo pueden ser manejados a través de la interfaz que definen
sus atributos y métodos, sin necesidad de conocer cómo están implementados interna-
mente estos últimos.
• Reutilización. Gracias a la encapsulación, las clases son fácilmente exportables a otros sis-
temas, ya que para utilizarlas no es necesario conocer cómo están implementadas por
dentro.
• Herencia. Mecanismo mediante el que una clase (subclase o clase hija) adquiere automáti-
camente los atributos y métodos de otra clase (superclase o clase padre), especializándose a
partir de esta.
Clase clsForma
métodos
MCrear()
MBorrar()
MCalcularSuperficie()
Clase clsTriangulo
Clase clsCuadrado Clase clsCirculo
atributos
atributos nBase atributos
nLado nAltura nRadio
Clase clsRectangulo
atributos
nLado2
Figura 8.2
Diagrama de objetos en el que se muestra un ejemplo de herencia.
La clase clsRectangulo hereda el atributo nLado de su superclase clsCuadrado,
y las cuatro subclases heredan los tres métodos de la superclase clsForma
CAPÍTULO 8
180 BASES DE DATOS . DISEÑO Y GESTIÓ N
• Se puede incluir varios valores en un mismo campo, con lo que se contradice frontal-
mente la primera forma normal, al no garantizar la atomicidad de los atributos.
CAPÍTULO 8
LAS BASES DE DATOS OBJETO - RELACIONALES 181
• Como los tipos de datos pueden representar una estructura, las tablas dejan de ser elementos
bidimensionales, y pueden incluir nuevas dimensiones de profundidad de la información.
Dado que el modelo objeto-relacional permite que los valores de un campo sean re-
gistros de otra tabla (que, a su vez, podría contar con registros de una tercera tabla como
valores de sus propios campos), esta forma de almacenar la información se conoce como
modelo relacional anidado. Gracias a esta característica se pueden eliminar tablas de relación
y simplificar las sentencias SELECT de consulta.
C
m
TLibro
---------- TEditorial
nLibroID ---------- TPais
cTitulo cNombre -------
oEditorial oPais cNombre
Como se verá más adelante, las bases de datos objeto-relacionales también contemplan la
herencia y los métodos.
CAPÍTULO 8
182 BASES DE DATOS . DISEÑO Y GESTIÓ N
La creación de campos array implica una ligera alteración sobre la sintaxis SQL relacional:
Figura 8.6
Sentencia de creación de una tabla con un campo tipo array. El campo acTemas
(nótese que se ha prefijado la “c” de character con una “a” de array) puede
albergar hasta diez valores VARCHAR(30)
Figura 8.7
Sentencia de inserción en una tabla con un campo tipo array. No es necesario rellenar
los diez valores posibles del campo acTemas
Figura 8.8
Consulta sobre una tabla con un campo tipo array y salida de la consulta.
Se puede acceder a cada valor del array mediante su número de posición
CAPÍTULO 8
LAS BASES DE DATOS OBJETO - RELACIONALES 183
Figura 8.9
Sentencia de creación de la tabla TLibro a partir
del tipo complejo typLibro que, a su vez, cuenta
con un campo oEditorial del tipo complejo
typEditorial; y sentencia de inserción
en dicha tabla
CAPÍTULO 8
184 BASES DE DATOS . DISEÑO Y GESTIÓ N
cTitulo oEditorial.cNombre
----------- ------------------
The Tempest Oxford
Figura 8.10
Consulta sobre una tabla con un campo de tipo complejo y salida de la consulta.
Se puede acceder a cada valor del tipo complejo calificándolo con el nombre
del campo al que pertenece
Figura 8.11
Sentencia de creación del tipo typTemas basado en
un array e inclusión de dicho tipo en el tipo typLibro,
del que posteriormente derivará la tabla TLibro
También es posible definir un tipo ROW, específico para definir los campos de un registro.
Un objeto de tipo ROW puede ser un valor válido para un campo, se puede almacenar en una
variable de un bloque de código SQL/PSM, o bien puede funcionar como parámetro o valor
devuelto por una subrutina:
CAPÍTULO 8
LAS BASES DE DATOS OBJETO - RELACIONALES 185
Figura 8.12
Creación de un campo de tipo ROW e inserción en dicho campo.
La consulta SELECT sobre este tipo de campos es análoga a la que
se realizaría sobre un tipo complejo
CAPÍTULO 8
186 BASES DE DATOS . DISEÑO Y GESTIÓ N
Esta forma de gestionar el almacenamiento permite que una tabla guarde una referencia a la
información de un campo. Dicha información se almacena físicamente en otra tabla distinta:
TOrganismoOficial
Figura 8.13
Ejemplo de referencia. Las direcciones de organismos oficiales y las direcciones de
trabajo de funcionarios no se almacenan en sus respectivas tablas, sino en la tabla
TDireccion. Dos direcciones son referenciadas por TOrganismoOficial y TFuncionario
(una de ellas por dos registros distintos de TFuncionario). Otra solo es referenciada
desde TOrganismoOficial. Otra no cuenta con referencias externas
CAPÍTULO 8
LAS BASES DE DATOS OBJETO - RELACIONALES 187
Como se puede observar, el campo oDireccion funciona como una especie de clave ajena.
Las siguientes sentencias especifican cómo crear esta estructura:
Figura 8.14
Creación de la tabla TDireccion basada en el tipo typDireccion y de la tabla
TFuncionario de tipo typFuncionario, que referencia registros de TDireccion.
REF indica el tipo de datos del campo y SCOPE su ámbito, es decir, la
estructura física que se va referenciar (en este caso la tabla TDireccion)
Figura 8.15
Consulta de información con referencia a otra tabla, y salida de la consulta
CAPÍTULO 8
188 BASES DE DATOS . DISEÑO Y GESTIÓ N
Figura 8.16
Consulta errónea de información con referencia a otra tabla
8.4. Herencia
Los mecanismos de herencia de las bases de datos objeto-relacionales permiten aplicar dicha
característica a distintos objetos. Es por eso que hablamos de dos tipos de herencia:
8.4.1. De tipos
Un tipo (subtipo) puede heredar todos los atributos y métodos de otro tipo (supertipo) mediante
la cláusula UNDER. Especificar NOT FINAL al final de la declaración permite que haya otros sub-
tipos derivados (de modo que el tipo creado sería subtipo de un supertipo pero, a la vez, podría
ser supertipo de otros subtipos). FINAL prohíbe crear más subtipos.
CAPÍTULO 8
LAS BASES DE DATOS OBJETO - RELACIONALES 189
Figura 8.17
Creación de un supertipo typPersona con dos subtipos, uno de ellos
supertipo, a su vez, de otro; y sentencias de creación de una tabla
bajo el último subtipo e inserción de un registro. Nótese que el
subtipo typProfesor hereda los atributos tanto de su supertipo
typPersonal como del supertipo de este typPersona
CAPÍTULO 8
190 BASES DE DATOS . DISEÑO Y GESTIÓ N
Asignar atributos a cada tipo y escribir las sentencias de creación de todos ellos.
8.4.2. De tablas
La herencia de tablas permite implantar de forma efectiva los conceptos de especialización y
generalización vistos en el diagrama entidad/relación extendido bajo el epígrafe de jerarquías.
No solo se heredan los atributos, sino también los registros, de modo que una tabla (tabla padre)
de la que heredan otras (tablas hijas) puede contener registros propios y registros correspondientes
a tablas hijas, como se ve en las siguientes figuras:
Figura 8.18. Sentencias de creación de la tabla TDireccion a partir del tipo typDireccion
de la figura 8.14, creación del tipo typEmpresa y de dos tablas de tipo typEmpresa hijas
de TDireccion
CAPÍTULO 8
LAS BASES DE DATOS OBJETO - RELACIONALES 191
TCliente
Figura 8.19
Datos de las tres tablas. TDireccion (tabla padre) tiene un registro correspondiente a
TCliente (tabla hija), otro correspondiente a TProveedor (tabla hija) y otro independiente
Partiendo del resultado de la actividad propuesta 8.1, diseñar tablas que representen
la estructura jerárquica de la figura 2.23 y escribir las sentencias de creación de dichas
tablas.
8.5. Métodos
Como se ha explicado en el apartado 8.1.1, en el mundo de la orientación a objetos los bloques
de código se ejecutan en forma de métodos asociados a los objetos de cada clase, en vez de in-
vocar a funciones y procedimientos independientes. Todo método, al igual que los atributos,
forma parte de la definición de clase. En un contexto objeto-relacional, los métodos van aso-
ciados a la definición de los tipos de datos, como se ve en el siguiente ejemplo:
CAPÍTULO 8
192 BASES DE DATOS . DISEÑO Y GESTIÓ N
Los métodos operan sobre los atributos de cada registro. Como ocurre en programación
orientada a objetos con los objetos de toda clase, para referirse a dicho registro se utiliza la
palabra SELF.
Todo tipo estructurado, array o ROW cuenta con una función especial llamada constructora.
La función constructora sirve para inicializar los atributos de un registro y devolverlo ya creado.
Debe tener el mismo nombre que el tipo. Dado que se trata de una función implícita, no es ne-
cesario codificarla, excepto si se quiere añadir algún tipo de restricción o comprobación especial.
Cada vez que se cree un nuevo registro de un tipo la función constructora se ejecutará auto-
máticamente.
Figura 8.22
Inserción de un registro en una tabla (tomado de la figura 8.9).
La creación del valor del campo de tipo typEditorial está
invocando implícitamente a la función constructora del tipo
De acuerdo con la idea de encapsulación vista en el apartado 8.1.1, la interfaz de todo re-
gistro debería gestionarse exclusivamente a través de métodos, cuyo código albergaría las ins-
trucciones SQL/PSM correspondientes.
Como las bases de datos objeto-relacionales permiten el polimorfismo, el mismo método
puede reescribirse para distintos tipos:
CAPÍTULO 8
LAS BASES DE DATOS OBJETO - RELACIONALES 193
Escribir un método MDuplicar() para el tipo typFactura de la figura 8.20 que duplique
el importe de la factura que se esté tratando si se emitió en agosto de 2014.
Resumen
Una de las consecuencias de la irrupción del paradigma de la orientación a objetos en
los años noventa fue la creación de bases de datos orientadas a objetos. Posteriormente
diversos fabricantes de SGBDR incorporaron características de la orientación a objetos
a sus productos relaciones, dando salida a las nuevas bases de datos objeto-relacionales.
En los SGBDOR los registros de las tablas se tratan como objetos, los campos como
sus atributos y las funciones y procedimientos asociadas como métodos. El elemento
más importante del nuevo modelo es la existencia de colecciones (arrays) y tipos es-
tructurados cuya definición corresponde al usuario. Aunque trastocan considerablemente
la base teórica del modelo relacional e incumplen, en el primer caso, la primera forma
normal, ofrecen una flexibilidad de la que el modelo relacional carecía.
Las bases de datos objeto-relacionales permiten la implantación de métodos con po-
limorfismo, la herencia de tipos y de tablas y las referencias a registros de otras tablas,
mediante las que reducen redundancias y complejidad de diseño.
CAPÍTULO 8
194 BASES DE DATOS . DISEÑO Y GESTIÓ N
EJERCICIOS PROPUESTOS
1. Considérese el siguiente modelo físico de datos correspondiente a un taller
mecánico:
TPieza TProveedor
TCliente
nPiezaID nProveedorID
cDescripcion cNombre nCliente ID
nProveedorID cDireccion cNombre
cCodPostal cDireccion
cLocalidad cCodPostal
cTelefonos cLocalidad
cTelefonos
CAPÍTULO 8
LAS BASES DE DATOS OBJETO - RELACIONALES 195
ACTIVIDADES DE AUTOEVALUACIÓN
3. El uso de referencias:
■ a) Crea duplicidades.
■ b) Permite que valores de campos residan físicamente en otra tabla.
■ c) Copia valores de campos entre varias tablas.
4. Un supertipo:
■ a) Solo puede serlo de un subtipo.
■ b) Puede ser, a su vez, subtipo de otro tipo.
■ c) Debe ser subtipo de otro tipo.
5. Los métodos:
■ a) Forman parte de la definición de los tipos.
■ b) Llevan a cabo las mismas tareas que las funciones.
■ c) Están obsoletos.
SOLUCIONES:
a ■
1. ■ c
b ■ b ■
a ■
3. ■ c
a ■
5. ■ b ■
c
a ■
2. ■ b ■
c b ■
a ■
4. ■ c
CAPÍTULO 8
S
B ibliografía
Publicaciones
Abad, A. (2013): Seguridad y alta disponibilidad. Garceta. Madrid.
ANSI/ISO/IEC (1999): Database Language SQL – Part 2: Foundation (SQL/Foundation) “Part 2”.
ANSI/ISO/IEC.
Cabrera, G. (2001): Sistemas gestores de bases de datos. Paraninfo. Madrid.
Celko, J. (2005): SQL for Smarties. Advanced SQL Programming, 3ª ed. Elsevier Inc. San Francisco
(California).
Centro de Estudios Financieros (2004): Gestión de sistemas e informática de la Administración del
Estado. Centro de Estudios Financieros. Madrid.
Chamberlin, D., y Boyce, R. (1974): SEQUEL: A Structured English Query Language. IBM Re-
search Laboratory. San José (California).
Codd, E. F. (1970): “A Relational Model of Data for Large Shared Data Banks”, en Communica-
tions of the ACM, vol. 13, nº 6, P. Baxendale.
– (1990): The Relational Model for Database Management.Version 2. Addison-Wesley.
Cuadra, D., y otros (2007): Desarrollo de bases de datos: casos prácticos desde el análisis a la implemen-
tación. Ra-Ma. Madrid.
Date, C. J. (2006): Date on Database.Writings 2000-2006. Apress. Berkeley (California).
– (2012): SQL and Relational Theory. How to Write Accurate SQL Code. O’Reilly. Sebastopol (Ca-
lifornia).
Garcia-Molina, H.; Ullman, J. y Widom, J. (2002): Database Systems:The Complete Book. Prentice
Hall. New Jersey.
González, A. (2010): Gestión de bases de datos. Ra-Ma. Madrid.
198 BASES DE DATOS. DISEÑO Y GESTIÓN
Gregorio, S., y otros (2002): Análisis y diseño detallado de aplicaciones informáticas de gestión. Guía
práctica de técnicas. Mira Editores. Zaragoza.
Harrington, J. (2010): SQL Clearly Explained, 3ª ed. Elsevier Inc. Burlington (Massachussets).
Haztefuncionario.com (2004): Cuerpo de Gestión de Informática. haztefuncionario.com. Madrid
Kline, K., y Kline, D. (2001): SQL in a Nutshell. O’Reilly.
Kriegel, A., y Trukhnov, B. (2008): SQL Bible. Wiley Publishing, Inc. Indianapolis (Indiana).
Laiho, M., y Laux, F. (2014): «Introduction to Procedural Extensions of SQL» (borrador).
DBTechNet.org.
López, I.; Castellano, M. J. y Ospino, J. (2011): Bases de datos. Garceta. Madrid.
Melton, J. (ed.) (2001): WG3:SXF-002. DM32.2-2012-00005. Information Technology – Database
languages – SQL – Part 1: Framework (SQL/Framework). ANSI.
Miguel, A. de, y Piattini, M. (1993): Concepción y diseño de bases de datos relacionales. Del modelo
E/R al modelo relacional. Ra-Ma. Madrid.
Miguel, A. de,; Piattini, M., y Marcos, E. (2000): Diseño de bases de datos relacionales. Ra-Ma. Ma-
drid.
Ministerio de Administraciones Públicas (2001): MÉTRICA Versión 3. Ministerio de Adminis-
traciones Públicas. Madrid.
Oppel, A. (2009): Databases: A Beginner’s Guide. McGraw-Hill.
Piattini, M., y otros (2004): Análisis y diseño de aplicaciones informáticas de gestión. Una perspectiva de
ingeniería del software. Ra-Ma. Madrid.
Pressman, R. (2002): Software Engineering. A Practitioner’s Approach. European Adaptation, 5ª ed.
McGraw-Hill. Nueva York.Traducción española de Ojeda, R., y otros: Ingeniería del software.
Un enfoque práctico, 5ª ed. McGraw-Hill/Interamericana de España. Madrid.
Silberschatz, A; Korth, H., y Sudarshan, S. (2002): Database Systems Concepts, 4ª ed. McGraw-
Hill. Nueva York. Traducción española de Sáenz, F., y otros: Fundamentos de bases de datos,
4ª ed. McGraw-Hill/Interamericana de España. Madrid.
Song, I.; Evans, M., y Park, E. K. (1995): «A Comparative Analysis of Entity-Relationship Dia-
grams», en Journal of Computer and Software Engineering, vol. 3, nº 4, pp. 427-459. Ablex Pub-
lishing. Norwood (Nueva Jersey).
Taylor, A. (2011): SQL All-in-One For Dummies, 2ª ed. Wiley Publishing Inc. Hoboken (Nueva
Jersey).
Urman, S. (1998): Oracle8, PL/SQL Programming. Oracle Press. Traducción española: Oracle8.
Programación PL/SQL. McGraw-Hill. Madrid.
Páginas web
developer.mimer.se
dictionary.cambridge.org
en.wikipedia.org
hsqldb.org
ibm.com
microsoft.com
mysql.com
odbms.org
onlamp.com
BIBLIOGRAFÍA
BASES DE DATOS. DISEÑO Y GESTIÓN 199
oracle.com
postgresql.org
rae.es
sap.com
sybase.com
techrepublic.com
teradata.com
Gráficos e imágenes
Figuras 6.1, 6.2, 7.1 y 7.2 generadas con CISCO Stencils.
Imágenes tomadas de www.flickr.com:
BIBLIOGRAFÍA