SQL-92 - Departamento de Informática y Sistemas

Anuncio
Modelo Relacional de Datos
Competencias específicas a adquirir (I)
•
•
•
Describir la terminología y principios fundamentales del modelo de datos
relacional formal.
Describir los conceptos de integridad de entidad, integridad referencial y nulos
en el modelo relacional.
Construir consultas de bases de datos empleando las sentencias del álgebra
relacional y del cálculo relacional de tuplas, así como del lenguaje estándar
SQL-92
SQL
92.
Tema 2. Modelo relacional de datos
1
Modelo Relacional de Datos
Competencias específicas a adquirir (I)
•
•
•
•
Construir, depurar y ejecutar sentencias SQL de obtención y modificación de
información almacenada en una base de datos relacional.
Construir y ejecutar sentencias SQL de definición de datos, es decir, de
creación, alteración y eliminación de los elementos que componen un
esquema de bases de datos relacional: esquema, tablas, vistas, restricciones,
etc.
Construir depurar y ejecutar programas para el acceso y gestión de la
Construir,
información almacenada en una base de datos (procedimientos, funciones,
disparadores, SQL embebido, entornos de cuarta generación, etc
Acceder a las bases de datos relacionales desde un lenguaje de programación
Tema 2. Modelo relacional de datos
2
1
Modelo relacional de datos
Contenidos
Presentación y orígenes del modelo relacional
Estructura de datos relacional
Características generales de integridad de datos
Manipulación de datos: lenguajes relacionales
Á
Álgebra
relacional
Cálculo relacional de tuplas
SQL-92
Programación con SQL
Tema 2. Modelo relacional de datos
3
Modelo relacional de datos
Bibliografía
• [D 2001] capítulos 2 y 9;
• [EN 2007] capítulos 5 a 9;
• [CB 2005] capítulos 3 a 7;
• [SKS 2002] capítulos 3 y 4;
• [ACPT 1999] capítulos 2 y 4;
• [DD 1996] capítulos 7 a 13.
Tema 2. Modelo relacional de datos
4
2
1 Presentación y orígenes del MR
• Introducido por Codd, 1970
• Es un Modelo de Datos Lógico - de Representación (basado en registros)
• El modelo más usado en las aplicaciones comerciales de
procesamiento de datos convencional
• Dividido en 3 partes:
1. Estructura de Datos
2. Integridad de Datos (características generales)
3. Manipulación de Datos
Tema 2. Modelo relacional de datos
5
2 Estructura de datos relacional
Base de Datos = Conjunto de Relaciones
• Relación
– Estructura de datos fundamental del modelo
– Tiene un nombre y representa una entidad genérica
– Conjunto de tuplas
• Cada tupla representa una entidad concreta
– Compuesta de atributos con nombre (y dominio)
• Cada atributo representa un atributo de la entidad
– Representada mediante una tabla con filas y columnas
• Modelo basado en Teoría matemática
– Analogía entre “Relación” (concepto matemático) y “Tabla”
– Teoría de Conjuntos y Lógica de Predicados de 1er orden
» Sólida Base Formal
Tema 2. Modelo relacional de datos
6
3
2 Estructura de datos relacional
La relación PELICULA
cardiinalidad
do
ominios
Títulos
--- ---- --
Nombres
--- ---- --
Géneros
Años
Ciencia-ficción,
Drama,Thriller,
Comedia...
2002, 1997,
1999, 2001,
1994,, 1972...
Países
Italia,Argentina,
España, EEUU,
, p
Francia,Japón..
título
director
género
rodaje nacionalidad duración
Amores Perros
A. González
Drama
2000
México
145
A. Wachowsky Ciencia-ficción 1999
EEUU
138
The Matrix
Torrente
S. Segura
Comedia
1997
España
110
N miran
Nos
i
N López
N.
Ló
P li i
Policiaco
2001
E ñ
España
118
Amelie
J. P. Jeunet
Comedia
2001
Francia
122
Los lunes al sol
F. León
Drama
2002
España
117
atributos
Tiempo
--- ---- --
tuplas
grado
7
Tema 2. Modelo relacional de datos
2 Estructura de datos relacional
Términos básicos
Procesamiento
de Ficheros
Modelo Relacional
Formal
SQL-92
Relación
Tabla
Fichero
Fila
Registro concreto
cabecera de
Nombre de
Tupla
Si la tupla t está en la relación
R, entonces t∈R
Atributo
Debe tener un nombre único
dentro de cada relación
Cardinalidad
di lid d
nº de tuplas en una relación
ó
=
Grado
nº atributos en una relación
=
Dominio
colección de valores permitidos
para ciertos atributos
=
Tema 2. Modelo relacional de datos
Columna
Campo de registro
8
4
2 Estructura de datos relacional
Definiciones formales: DOMINIO
• Conjunto de valores atómicos del mismo tipo, donde
toman su valor los atributos
–
–
–
–
La definición de dominios forma parte de la definición de la BD
Cada atributo definido sobre un ÚNICO dominio OBLIGATORIO
Si A, B representan un mismo concepto, A y B con mismo dominio
Dominio D puede contener valores no tomados por ningún atributo
{valores de A} ⊆ Dominio(A)
• Comparaciones Restringidas a Dominio
– La comparación de dos atributos sólo tiene sentido si ambos toman
valores del mismo dominio
– Si el SGBD soporta dominios, podrá detectar este tipo de errores
9
Tema 2. Modelo relacional de datos
2 Estructura de datos relacional
Definiciones formales: RELACIÓN (1)
Una relación R, sobre conjunto de dominios D1, D2 ... Dn
se compone
p
de dos partes:
p
• Esquema o Cabecera
Conjunto de pares Atributo:Dominio
{ (A1:D1), (A2:D2) ... (An:Dn) }
– Cada Aj tiene asociado sólo un Dj
– Los Di no tienen por qué ser distintos entre sí
• Estado, Cuerpo o Instancia
– Conjunto de tuplas que contiene en un instante concreto
– tupla = conjunto de pares Atributo:Valor
{ { (A1:vi1), (A2:vi2) ... (An:vin) } }, donde
Tema 2. Modelo relacional de datos
i=1..m
10
5
2 Estructura de datos relacional
Definiciones formales: RELACIÓN (2)
Un esquema de relación:
PELICULA (titulo:Titulos, duracion:Tiempo, director:Nombres, estreno:Fechas)
Un estado de la relación:
{ { (titulo:Torrente), (duracion:110), (director:S.Segura), (estreno:1997) }
{ (titulo:The Matrix), (duracion:138), (director:A.Wachowski), (estreno:1999) }
... }
• El estado de una relación es variable en el tiempo
– nuevas tuplas, modificación o borrado de existentes
• El esquema no suele variar
costoso:
· reescritura de “miles” de tuplas
· ¿valores de nuevos atributos para tuplas ya existentes?
– Suele incluir un conjunto de Reglas de Integridad (se verá)
11
Tema 2. Modelo relacional de datos
2 Estructura de datos relacional
Definiciones formales: RELACIÓN (3)
• Propiedades de una Relación
1 No existen
1.
e i ten tuplas
t plas repetidas
epetidas
2. Las tuplas no están ordenadas
estado = conjunto
matemático de tuplas
3. Los atributos no están ordenados
esquema = conjunto de pares Atributo:Dominio
4 Los valores de atributos son Atómicos
4.
dominio = conjunto de valores atómicos
Intersección fila/columna = un solo valor (no lista de valores)
Si R cumple esta propiedad, R está en 1FN
Tema 2. Modelo relacional de datos
12
6
2 Estructura de datos relacional
Definiciones formales: RELACIÓN (4)
• FORMAS NORMALES
R está en <determinada>
determinada FN si
cumple <cierto> conjunto de condiciones o restricciones
necesarias para estar bien diseñada
de acuerdo con el modelo relacional de datos.
• Toda relación ha de estar en 1FN (estructura de datos simple)
Tema 2. Modelo relacional de datos
13
2 Estructura de datos relacional
Definiciones formales: RELACIÓN (5)
• Relación vs. Tabla
– Relación: Representación abstracta de un elemento de datos
– Tabla: Representación concreta de tal elemento abstracto
– Ventajas
Representación muy sencilla (tabla) del elemento abstracto
básico (relación) del Modelo Relacional
Fácil
á l de
d utilizar,
l
entender,
d razonar...
– Inconveniente
Aparente orden entre filas y entre columnas de la tabla
Tema 2. Modelo relacional de datos
14
7
2 Estructura de datos relacional
Definiciones formales: BD RELACIONAL (1)
• Percibida por usuarios como una colección de relaciones
– de diversos g
grados (nº
( de atributos))
– que varían con el tiempo (nº de tuplas, estado)
• Las relaciones (tablas) son la estructura lógica de la BD
– Niveles externo y conceptual ANSI/X3/SPARC
• Toda BDR cumple el Principio de Información:
Todo contenido de información de la BD está representado
d una y sólo
de
ól una forma:
f
como valores
l
explícitos
lí it
dentro de posiciones de columnas dentro de filas dentro de tablas
• Conexión lógica entre Relaciones (vínculo o interrelación)
– Representada mediante valores
– No existen punteros (visibles al usuario)
Tema 2. Modelo relacional de datos
15
2 Estructura de datos relacional
Definiciones formales: BD RELACIONAL (2)
• En una BDR distinguimos...
– Esquema de base de datos
Descripción de la base de datos
Conjunto de esquemas de relación
PELICULA ( titulo:Títulos, director:Nombres, género:Géneros,
rodaje:Años, nacionalidad:Países, duración:Tiempo )
ACTOR
( nombre:Nombres, nombreArtistico: Nombres,
agente:Nombres, cache:Dinero )
DIRECTOR ( nombre:Nombres,
b N b
nacionalidad:Países,
i lid d P í
operaPrima:Títulos
P i Tít l )
...
– Estado o instancia de base de datos
Visión del contenido de la base de datos en cierto instante
Conjunto de estados de relación
Tema 2. Modelo relacional de datos
16
8
Recopilando…
• Qué es una Relación
• Qué es un Dominio
• Cuáles son las propiedades de una Relación
• Diferencias entre Relación y Tabla
• Rol de las relaciones en la arquitectura ANSI/SPARC
Tema 2. Modelo relacional de datos
17
3 Características generales de integridad de datos
• Todo estado de BD refleja la realidad
– es un modelo de una porción del mundo real (minimundo)
• Algunas configuraciones de valores NO tienen SENTIDO
– pues no representan ningún estado posible del minimundo
2 personas distintas con el mismo DNI
Un empleado sin NSS
Un alumno con -29 años
Una película sin director
Definición de la BD (esquema) necesita incluir
REGLAS DE INTEGRIDAD
Tema 2. Modelo relacional de datos
18
9
3 Características generales de integridad
de datos
Reglas de integridad
•
•
•
•
Informan al SGBD de restricciones del mundo real
Así,
A
í ell SGBD evita
it configuraciones
fi
i
de
d datos
d t imposibles
i
ibl
Aumentan la capacidad expresiva del modelo relacional
Cumplen que:
• Forman parte de la base de datos
• Se cumplen para cualquier estado de la BD
• No varían con el tiempo
• Son específicas de cada BD particular,
particular pero el
Modelo Relacional incluye...
características generales de integridad
importantes y necesarias en toda BD
Tema 2. Modelo relacional de datos
Claves Candidatas y Primarias
Claves Ajenas (o foráneas o externas)
19
3 Características generales de integridad
de datos
Superclave y Clave de una relación
Sea R una relación
R(A1:D1 , A2:D2 ,... An:Dn )
• Una superclave de R es un subconjunto SK de atributos
tal que cumple la restricción de Unicidad:
No existen dos tuplas distintas con la misma
combinación de valores para SK
• Una clave de R es una superclave tal que cumple la
restricción de Irreductibilidad:
Ningún subconjunto de CK cumple la r. Unicidad
• Clave Simple (1 atributo) o Compuesta (varios atributos)
• Cada clave es una restricción de integridad
Tema 2. Modelo relacional de datos
20
10
3 Características generales de
integridad de datos
Superclave y Clave: Ejemplos
• Claves como restricción de integridad
CLIENTE (codCliente,
(codCliente nombre
nombre, ciudad
ciudad, telefono
telefono,...))
¿Qué implicaciones tiene establecer como clave...
a) CK = {codCliente, ciudad}
b) CK = {codCliente}
…?
• Varias claves en una relación
«Relación para registrar las visitas de pacientes a sus médicos de familia. Un mismo
paciente
i t puede
d visitar
i it a su médico
édi varias
i veces en un mismo
i
dí
día»
VISITAMEDICA (nssPaciente, historial, fecha, hora, numVisita, medico, observ)
Claves (VISITAMEDICA)={ {nssPaciente, numVisita}, {nssPaciente, fecha, hora},
{historial, numVisita}, {historial, fecha, hora} }
21
Tema 2. Modelo relacional de datos
3 Características generales de integridad
de datos
Clave Candidata, Primaria y Alternativa
• Si R tiene varias claves
Claves Candidatas
Claves (ACTOR) = { {nombre}
{nombre}, {nombreArtistico} }
Claves (EMPLEADO) = { {dni}, {nombre, fechaNac}, {nss} }
• La Clave Primaria (Primary Key, PK ) es la clave candidata
elegida para identificar las tuplas de R
Clave Primaria (ACTOR) = {nombreArtistico}
Clave Primaria (EMPLEADO) = {nss}
• Las Claves Alternativas (Alternative Keys, AK) son el resto
de claves candidatas
Claves Alternativas (ACTOR) = {nombre}
Claves Alternativas (EMPLEADO) = { {dni}, {nombre, fechaNac} }
Tema 2. Modelo relacional de datos
22
11
3 Características generales de
integridad de datos
Clave Ajena (Externa o Foránea)
• Conjunto de atributos FK de una relación R2, tal que:
1. Existe otra relación R1 con clave primaria PK , y
2. Cada valor de FK en R2 es idéntico al de PK en alguna tupla de R1
Conjunto de atributos de una relación que hace referencia a
la clave primaria de otra relación (o la misma)
• PELICULA (título, género, duración, director, ...)
DIRECTOR ((nombre, nacionalidad, ...))
• EMPLEADO (codEmp, nombre, jefe, nss, ...)
• LIBRO (título, isbn, autor, editorial, edición, año, ...)
ESCRITOR (dni, nombre, ...)
ARTICULO (título, tema, autor, revista, página, ...)
23
Tema 2. Modelo relacional de datos
3 Características generales de
integridad de datos
Clave Ajena (Externa o Foránea)
(2)
• Cada componente de una FK debe estar definido
sobre el mismo dominio que el correspondiente
atributo de la PK a la que referencia
PACIENTE (nss, nombre, dirección, ...)
HISTORIAL (nss, especialidad, fechaApert, ...)
VISITA (nss, especialidad, numVisita, fecha, ...)
• Clave Ajena Simple o Compuesta
• El uso de Claves Ajenas facilita...
– Eliminación de la Redundancia: Integridad entre ficheros
– Mecanismo del Modelo Relacional de datos para establecer
VÍNCULOS ENTRE RELACIONES
Tema 2. Modelo relacional de datos
24
12
3 Características generales de
integridad de datos
Clave Ajena (Externa o Foránea)
CUENTA número saldo ...
Cada cliente sólo puede tener
una cuenta a su nombre.
Una cuenta puede tener más de
un cliente como titular.
CLIENTE nombre
(3)
200
35000
505
40000
821
50000
...
dirección
ciudad
cuenta
G í A
García,
G Ví
Gran
Vía, 6
M i
Murcia
200
López, B
Ronda Norte, 3
Murcia
821
Azorín, C
Paseo Nuevo, 9 Valencia
505
Pérez, C
Plaza Mayor, 2
505
Valencia
Vínculo ClienteCuenta
...
25
Tema 2. Modelo relacional de datos
3 Características generales de
integridad de datos
Clave Ajena (Externa o Foránea)
(4)
• Restricción de Integridad Referencial
Todo valor de una FK debe coincidir
con un valor en la correspondiente PK
– La BD no debe contener claves ajenas sin correspondencia:
Si una tupla en una relación hace referencia a otra relación, debe
referirse a una tupla existente en esa relación
ARTICULO
FK
ESCRITOR
• 1 Puede existir algún valor de PK al que NO haga referencia
ningún valor de la FK
– ESCRITOR que no haya escrito artículos: ninguna tupla de ARTICULO
hará referencia a la tupla correspondiente a dicho escritor
Tema 2. Modelo relacional de datos
26
13
3 Características generales de
integridad de datos
Clave Ajena (Externa o Foránea)
(y 5)
• Diagrama Referencial
– Expresión
E
ió de
d la
l existencia
i t
i de
d Claves
Cl
Ajenas
Aj
• Camino Referencial
LIBRO
título isbn autor editorial ...
ESCRITOR
dni nombre ... editorial
ARTICULO
título tema autor revista pág ...
EDITORIAL nombre dirección ...
EMPL codEmp ... dep
• Ciclo Referencial
DEPTO codDep ... dire
– Camino que empieza y acaba en la misma relación
– Caso especial: Autorreferencia
EMPLEADO codEmp ... jefe
27
Tema 2. Modelo relacional de datos
3 Características generales de
integridad de datos
Mantenimiento de la Integridad Referencial
• Las operaciones que no satisfacen –violan– la Integridad
R f
Referencial,
i l dejan
d j la
l BD en un estado
t d incorrecto
i
t
Ejemplo de un Hotel:
– ¿Qué pasaría si se eliminara la tupla (501, D, ...) en HABITACIÓN?
– ¿Y si se eliminara la tupla (100, D, ...)?
– ¿Y si se anotara la ocupación de la habitación 900?
OCUPACIÓN codClie habit ...
HABITACIÓN numHabit tipo ...
100
115
I
CLI02
420
420
I
CLI05
115
100
D
CLI10
100
304
D
CLI04
Tema 2. Modelo relacional de datos
405
I
501
D
28
14
3 Características generales de
integridad de datos
Mantenimiento de la Integridad Referencial
(2)
• ¿Cómo evita el SGBD esos estados incorrectos?
El SGBD puede...
Rechazar toda operación que pueda provocar un estado ilegal,
o
Aceptar (y ejecutar) tales operaciones, pero
realizar acciones que restauren la integridad de los datos
Diseñador
Di
ñ d de
d la
l BD puede
d especificar
ifi
all SGBD
Acciones de Mantenimiento
de la Integridad Referencial
para que la BD SIEMPRE alcance un estado final legal
29
Tema 2. Modelo relacional de datos
3 Características generales de
integridad de datos
Mantenimiento de la Integridad Referencial
(3)
R2 ⎯→ R1
Operación: Eliminar una tupla t de R1 que es referenciada
por otras de R2
Ejemplo: Eliminar la tupla (100, D, ...) de HABITACIÓN
Acciones posibles:
1. Rechazar la operación (acción por defecto)
Sólo permite borrar t si ninguna otra tupla hace referencia a t
2. Cascada. Propagar la eliminación
1º Borrar todas las tuplas de R2 que referencian a t
2º Eliminar t
3. Establecer nulos – (* se verá después *)
Tema 2. Modelo relacional de datos
30
15
3 Características generales de
integridad de datos
Mantenimiento de la Integridad Referencial
(4)
R2 ⎯→ R1
Operación: Modificar el valor de una FK a un valor no
existente en la PK de R1
Ejemplo: Modificar (CLI02, 420,...) a (CLI02, 900,...) en OCUPACIÓN
Acción:
1. Rechazar la operación (SIEMPRE)
Intento de violación de la restricción de Integridad
Referencial
31
Tema 2. Modelo relacional de datos
3 Características generales de
integridad de datos
Mantenimiento de la Integridad Referencial
(5)
Operación: Modificar el valor de la PK de una tupla t de R1
que es referenciada
f
i d por otras
t
tuplas
t l d
de R2
Ejemplo: Modificar la tupla (100, D,...) a (130, D,...) en HABITACIÓN
Acciones posibles:
1. Rechazar la operación (acción por defecto)
Sólo permite modificar la PK de t si ninguna tupla referencia a t
2. Cascada. Propagar
p g la modificación
- Toda tupla de R2 que referencia a t seguirá haciendolo:
modificar su valor de FK al nuevo valor de la PK de t
- Modificar el valor de la clave primaria de t
3. Establecer nulos – (* se verá después *)
Tema 2. Modelo relacional de datos
32
16
3 Características generales de
integridad de datos
Mantenimiento de la Integridad Referencial
(6)
R2 ⎯→ R1
Operación: Inserción de una tupla t en R2 cuyo valor de FK
no se corresponde con ningún valor de la PK en
ninguna tupla de R1
Ejemplo: Insertar una tupla (CLI03, 555, ...) en OCUPACIÓN
Acciones posibles:
- Rechazar
ec a a la
a operación
ope ac ó (S
(SIEMPRE))
Intento de violación de la restricción de Integridad
Referencial
33
Tema 2. Modelo relacional de datos
3 Características generales de
integridad de datos
Mantenimiento de la Integridad Referencial
(y 7)
• Encadenamiento de eliminaciones (análogo para Modificación)
R3 → R2 → R1
R2 → R1, Acción de Eliminación en Cascada
R3 → R2, Acción de Eliminación X
- Eliminar una tupla de R1
eliminar tuplas de R2 que la referencian
- Pero existen tuplas en R3 que referencian esas tuplas de R2...
¿cómo afecta la Acción de Eliminación X en esta operación?
Si X = en CASCADA, no-problemo! eliminar esas tuplas de R3
Si X = RECHAZAR
La operación completa fallará
• Las operaciones de actualización en una BD son siempre
atómicas: se realiza “TODO o NADA”
PROFESOR → ÁREA → DEPARTAMENTO
ASIGNATURA → TITULACIÓN → UNIVERSIDAD
Tema 2. Modelo relacional de datos
34
17
3 Características generales de
integridad de datos
Nulos
• En el mundo real existe...
– información perdida
fechaNacimiento desconocida
– ausencia de información
¿tiene teléfono?
– valores no aplicables a ciertos atributos fechJubilac a empleado activo
• Para representar estas situaciones en los sistemas de BD
se utiliza el NULO (null)
– Si una tupla tiene un atributo que contiene un nulo,
significa que el valor real de tal atributo es desconocido
– Es posible especificar si un atributo puede o no contener nulo
nulo no es un valor en sí mismo,
sino un indicador de ausencia de información
No hay dos nulos iguales (num_telefono NULL ≠ edad NULL)
Tema 2. Modelo relacional de datos
35
3 Características generales de
integridad de datos
Implicaciones de los nulos en la integridad
• Nulo y Claves Primarias
Restricción de Integridad de Entidad:
Ningún atributo componente de una
clave primaria puede contener nulo
EMPLEADO (codEmp, nss, nombre, telefono, depto, jefe...)
¿Qué pasaría si codEmp pudiera contener NULO?
• Nulo y Claves Ajenas
El Modelo Relacional permite nulo
como valor de clave ajena
depto = null empleados no asignados a ningún departamento
jefe = null empleados sin jefe
Tema 2. Modelo relacional de datos
36
18
3 Características generales de
integridad de datos
Implicaciones de los nulos en la integridad (2)
• Hemos de extender la definición de clave ajena
Sea R2 una relación. FK es una clave ajena en R2 si es un
subconjunto de sus atributos tal que:
1. Existe otra relación R1 con clave primaria PK y
2. En todo momento, cada valor de FK en R2
a) es NULO, o
b) es idéntico a un valor de PK en alguna tupla de R1
• Restricción de Integridad Referencial
La Base de Datos no debe contener valores no nulos
de clave ajena sin correspondencia
Tema 2. Modelo relacional de datos
37
3 Características generales de
integridad de datos
Implicaciones de los nulos en la integridad (3)
• Hay que extender algunas acciones de mantenimiento de
l Integridad
la
I t id d Referencial:
R f
i l
R2 ⎯→ R1
Operación: Eliminar una tupla t de R1 que es referenciada
por otras de R2
Acciones posibles:
1. Rechazar la operación (acción por defecto)
2. Cascada. Propagar la eliminación
3. Establecer nulos
1 Sólo si la FK de R2 permite NULO
- Toda tupla de R2 que referencia a t pasa a contener NULL en FK
- Eliminar la tupla t
Tema 2. Modelo relacional de datos
38
19
3 Características generales de
integridad de datos
Implicaciones de los nulos en la integridad (y 4)
R2 ⎯→ R1
Operación: Modificar el valor de la PK de una tupla t de R1
que es referenciada por otras tuplas de R2
Acciones posibles:
1. Rechazar la operación (acción por defecto)
2. Cascada. Propagar la modificación
3. Establecer nulos
1 Sólo si la FK de R2 permite NULO
- Toda tupla de R2 que referencia a t pasa a contener NULL en FK
- Modificar el valor de la PK de t
Tema 2. Modelo relacional de datos
39
3 Características generales de
integridad de datos
Resumiendo, el SGBD se encarga de...
• Comprobar las claves candidatas (primaria y alternativas):
No existen dos tuplas distintas con igual valor para una clave
Definición de BD : indicar los Atributos Componentes de las Claves Candidatas
• Comprobar la restricción de Integridad de entidad
Ningún atributo componente de una clave primaria contiene nulo
Definición de BD : indicar los Atributos Componentes de la Clave Primaria
• Comprobar la restricción de Integridad Referencial...
El valor de la clave ajena en cualquier tupla,
tupla o es nulo,
nulo o coincide con
un valor de clave primaria de alguna tupla en la relación referenciada
Definición de BD : indicar los Atributos Componentes de las Claves Ajenas
• ... y mantenerla frente operaciones que puedan violar la integridad
Definición de BD : indicar Acciones de Mantenimiento de la Integridad Referencial
Tema 2. Modelo relacional de datos
40
20
Recopilando…
• Definir la restricción de integridad de entidad
• Definir la restricción de integridad referencial
• Explicar el papel desempeñado por los valores nulos y sus
implicaciones en la integridad
Tema 2. Modelo relacional de datos
Dominio
Definición del Dominio
CODPEL
CODGUI
CODDIR
CODDIS
CODACT
CODAGE
SEXOS
TEXTO
PORCENT
DINERO
NIF
TITULOS
GENEROS
PAISES
AÑOS
FECHAS
NOMBRES
APELLIDOS
DOMICILIOS
TELEFONOS
TIPO_PAPEL
enteros(3)
enteros(3)
enteros(3)
enteros(2)
enteros(4)
enteros(2)
{ M, F }
cadena caracteres variable (500)
enteros (2)
enteros(9)
cadena caracteres fija (12)
cadena caracteres variable (120)
{comedia,drama,terror,suspense,accion,romantica,gore,pulp,roadmovie}
{españa,francia,gran_bretaña,eeuu,australia,alemania,la_india,argentina}
AÑO
FECHA
cadena caracteres variable (35)
cadena caracteres variable (80)
cadena caracteres variable (50)
cadena caracteres variable (15)
{protagonista, secundario, reparto, figuracion}
Tema 2. Modelo relacional de datos
41
42
21
Esquema “PRODUCTORA”
PELICULA
(codP:CODPEL, titulo:TITULOS, año:AÑO, genero:GENEROS, guion:CODGUI,
director:CODDIR, directorFotog:CODDIR, distrib:CODDIS, nacio:PAISES,
estreno:FECHA, numOscar:enteros(2), taquilla:DINERO)
DIRECTOR
(codDir:CODDIR, nombre:NOMBRES, apellidos:APELLIDOS, nacio:PAISES,
fechaNacim:FECHA operaPrima:CODPEL)
fechaNacim:FECHA,
DIREC_FOTOG (codDF:CODDIR, nombre:NOMBRES, apellidos:APELLIDOS, nacionalidad:PAISES,
fechaNacim:FECHA, ultTrabajo:CODPEL)
GUION
(codG:CODGUI, titulo: TITULOS, resumen: TEXTO,
nomAutorPpal:NOMBRES, fechaFin:FECHA, fechaEntrega:FECHA)
DISTRIBUIDORA (codDis:CODDIS, nombre:NOMBRES, cif:NIF, direccion:DOMICILIO,
telefono:TELEFONOS, porcentaje:PORCENT)
ACTOR
(codA:CODACT, nombre:NOMBRES, nomReal:NOMBRES, nacionalidad:PAISES,
fechaNacim:FECHA, sexo:SEXOS, agencia:CODAGE, cache:DINERO)
AGENCIA
(codAg:CODAGE, nombre:NOMBRES, direccion:DOMICILIO, telefono:TELEFONOS)
ACTUA_EN
(actor:CODACT, film:CODPEL, papel:TIPO_PAPEL, paga:DINERO)
Tema 2. Modelo relacional de datos
43
4 Manipulación de datos
4.1. Álgebra Relacional
• Definida por Codd, 1972
• Colección de operadores que toman relaciones como
operandos y devuelven relaciones como resultado
– Operadores tradicionales sobre conjuntos
unión
intersección
diferencia
producto cartesiano
Los operandos son relaciones, y NO conjuntos arbitrarios
operaciones adaptadas a relaciones (tipo especial de conjuntos)
– Operadores relacionales especiales
restricción
proyección
reunión ( join )
división
Tema 2. Modelo relacional de datos
44
22
Álgebra Relacional
Clausura relacional
El resultado de cualquier operación del álgebra
relacional es otra relación
☺ la salida de una operación puede ser entrada
(operando) de otra
Expresiones Anidadas
Sus operandos son otras expresiones del álgebra
(en lugar de nombres de relación)
Tema 2. Modelo relacional de datos
45
Álgebra Relacional
Compatibilidad de tipos (o con la unión)
• En matemáticas, A∪B = { e / e∈A y-o e∈B }
• Relación = conjunto de tuplas
es posible
ibl hacer
h
la
l unión
ió de
d dos
d relaciones
l i
RyS
• R∪S = { t / t∈R y-o t∈S }
– Conjunto de todas las tuplas que están en R y/o en S
– Sin embargo...
PELICULA ∪ DIRECTOR es un conjunto, pero no es una relación
Las relaciones deben ser homogéneas: no pueden
contener mezcla de tuplas de distintos tipos
– Ha de mantenerse la Propiedad de Clausura:
el resultado de la operación DEBE ser una relación
» Las relaciones de entrada deben ser de tipos compatibles
Tema 2. Modelo relacional de datos
46
23
Álgebra Relacional
Compatibilidad de tipos (y 2)
Sean R ( r1, r2,..., rn ), S ( s1, s2, ..., sn )
• Relaciones R y S compatibles en tipo si tienen el
“ i
“mismo”
” esquema, es d
decir:
i
1. Igual número de atributos:
grado(R) = grado(S) = n
2. Atributos correspondientes definidos sobre el mismo dominio:
dom(ri) = dom(si) ,, i = 1, 2, ..., n
Ejemplo DIRECTOR y DIR_FOTOG
Ejemplo:
DIR FOTOG son de tipos compatibles
UNIÓN, INTERSECCIÓN, DIFERENCIA necesitan operandos
compatibles en tipo
PRODUCTO CARTESIANO no necesita compatibilidad de tipo
en sus operandos
Tema 2. Modelo relacional de datos
47
Álgebra Relacional
Unión de relaciones
R∪S, con R y S compatibles en tipo, es una relación tal que:
Esquema: el de R (o S)
Estado: conjunto de tuplas que están en R, en S o en ambas
Las tuplas repetidas se eliminan (por definición)
Ejemplo: DIRECTOR ∪ DIR_FOTOG
Intersección de relaciones
R∩S,, con R y S compatibles
p
en tipo,
p , es una relación tal q
que:
Esquema: el de R (o S)
Estado: conjunto de tuplas que están a la vez en R y en S
Ejemplo: DIRECTOR ∩ DIR_FOTOG
Tema 2. Modelo relacional de datos
48
24
Álgebra Relacional
Diferencia entre relaciones
R―S, con R y S compatibles en tipo, es una relación tal que:
Esquema: el de R (o S)
Estado: conjunto de tuplas que están
á en R, pero NO en S
operación con «cierta direccionalidad», como la resta aritmética
Ejemplo: DIRECTOR ― DIR_FOTOG
Secuencias de operaciones
• La propiedad de clausura relacional permite aplicar una
operación tras otra
Sean R, S, T relaciones de tipos compatibles,
– Única expresión: expresiones anidadas
R∩(S∪T)
– Varias expresiones: relaciones intermedias con nombre
A←S∪T
B←R∩A
Tema 2. Modelo relacional de datos
49
Álgebra Relacional
Renombramiento de atributos
• Por defecto, los atributos de la relación resultado de una
operación heredan los nombres de los del operando más
a la izquierda
DIR ← DIRECTOR ∪ DIR_FOTOG
Los atributos de DIR tienen los mismos nombres que los de DIRECTOR
• Se puede indicar una lista con nuevos nombres para los
atributos de la relación resultado:
DIR(codDir nomDir apeDir nacDir fechaNac pelic) ← DIRECTOR ∪ DIR_FOTOG
DIR(codDir,nomDir,apeDir,nacDir,fechaNac,pelic)
DIR FOTOG
Tema 2. Modelo relacional de datos
50
25
Álgebra Relacional
Producto Cartesiano entre relaciones
• En matemáticas, A Χ B = { (a,b) / a∈A y b∈B }
• Relación = conjunto de tuplas,
es posible
ibl ell producto
d t cartesiano
t i
entre
t relaciones
l i
RyS
• R Χ S = { (tR,tS) / tR∈R y tS∈S }
– Conjunto de pares ordenados de tuplas de R y S
– Pero ha de conservarse la Propiedad de Clausura:
» El resultado debe ser un conjunto de tuplas (no de pares de)
Producto Cartesiano Ampliado, pues cada par
ordenado es sustituido por la tupla resultante
de la combinación de las dos tuplas origen
Tema 2. Modelo relacional de datos
51
Álgebra Relacional
Producto Cartesiano entre relaciones (2)
• R Χ S, con R y S cualesquiera, es una relación tal que:
Esquema: combinación (unión) de los esquemas de R y S
Estado: conjunto de todas las tuplas formadas por las posibles
combinaciones de cada tupla de R con cada tupla de S
Ejemplo: PELICULA Χ DIRECTOR
Obtiene un conjunto de tuplas tales que cada una es la combinación de una tupla de
PELICULA y otra de DIRECTOR
• Operación sin demasiada importancia práctica
– No se tiene más información a la salida que a la entrada
– pero es necesaria para definir la operación REUNIÓN (JOIN)
Tema 2. Modelo relacional de datos
52
26
Álgebra Relacional
Producto Cartesiano entre relaciones (y 3)
• El esquema de la relación resultante de R Χ S
debe estar bien formado (nombres de atributos únicos)
• Si R y S tienen atributos con igual nombre, R Χ S tendría
¡dos atributos nombrados igual! ko!
ACTOR Χ AGENCIA
“colisión” de nombres en atributo “nombre”
• Soluciones posibles:
1. Renombrar atributos de una relación, antes del producto
AGENCIA_2(codAge, nomAge, direccion, telefono) ← AGENCIA
RESULTADO ← ACTOR Χ AGENCIA_2
2. Prefijar atributos con el nombre de su tabla, en la tabla resultado
RESULTADO(codA, ACTOR.nombre, nomreal,..., codAg, AGENCIA.nombre, ...)
← ACTOR Χ AGENCIA
Tema 2. Modelo relacional de datos
53
Álgebra Relacional
Propiedades de los operadores relacionales
R, S, T relaciones de tipos compatibles
• Asociativa
(R∪S)∪T≡R∪(S∪T)≡R∪S∪T
(R∩S)∩T≡R∩(S∩T)≡R∩S∩T
( R Χ S ) Χ T ≡ R Χ ( S Χ T) ≡ R Χ S Χ T L
• Conmutativa
R∪S ≡S∪R
R∩S ≡S∩R
RΧS ≡SΧR L
• La diferencia no cumple ninguna de estas propiedades
L El producto cartesiano “normal” no las cumple, pero sí el “ampliado”
Tema 2. Modelo relacional de datos
54
27
Álgebra Relacional
Restricción de una relación
σ
• Obtener un subconjunto de las tuplas de una relación
para las cuales se satisface una condición de selección
σ
<condición>
(<relación>)
• Resultado: Relación (conjunto de tuplas) con atributos de <relación>
• <condición> es una expresión booleana…
– Especificada en términos de atributos de <relación>
– Compuesta
p
por
p una o más cláusulas,, del tipo:
p
<nomAtrib> <opComp> <cte> o bien <nomAtrib> <opComp> <nomAtrib>
• <opComp> operador de comparación ∈ {=, <, ≤, >, ≥, ≠}
• <cte> valor constante ∈ dominio del atributo <nomAtrib>
• Cláusulas conectadas por operadores booleanos AND, OR, NOT
Tema 2. Modelo relacional de datos
55
Álgebra Relacional
Restricción de una relación (2)
• Ejemplos:
* Tuplas de actores representados por la agencia número 2
σ
σ
agencia=2 (ACTOR)
* Actores cuyo caché rebasa los 30.000€
cache>30000 (ACTOR)
* Actores representados por la agencia número 2,
2 cuyo cache no llega
a los 22.000€, o bien por la agencia 4 y con caché superior a 32.000€
σ
(agencia=2 AND cache<25000) OR (agencia=4 AND cache>35000) (ACTOR)
Tema 2. Modelo relacional de datos
56
28
Álgebra Relacional
Restricción de una relación (3)
• Mecanismo de selección del sistema
– Aplica <condición> a cada tupla individual de <relación>, sustituyendo
cada
d atributo
t ib t por su valor
l en la
l tupla
t l
– Si <condición> es TRUE, la tupla se selecciona para el resultado
• Operador Restricción: Unario
– Sólo se aplica a UNA relación
Nunca puede seleccionar tuplas de más de una relación
– Se aplica a UNA sola tupla a la vez
<condición> nunca se refiere a más de una tupla
• Grado(Relación Resultado) = Grado(Relación Origen)
– Tienen los mismos atributos
• Nº Tuplas(Relación Resultado) ≤ Nº Tuplas(Relación Origen)
57
Tema 2. Modelo relacional de datos
Álgebra Relacional
Restricción de una relación (y 4)
• La operación restricción es conmutativa
σ (σ
cond1
cond2
(R)
)≡ σ (σ
cond2
cond1
(R)
)
Esto permite …
̶ Secuencia de restricciones (selecciones) en cualquier orden
̶ Combinación de una secuencia de restricciones en una
única restricción con una condición conjuntiva:
σ (σ (...(σ
cond1
cond2
Tema 2. Modelo relacional de datos
condn
(R))...)) ≡σcond1 AND cond2 AND...AND condn(R)
58
29
Álgebra Relacional
∏
Proyección de una relación
• Sólo interesan algunos atributos de una relación
• Se proyecta la relación sobre esos atributos
• Restricción
R t i ió vs. Proyección
P
ió :
–
–
σ selecciona algunas tuplas de la relación y desecha otras
∏ selecciona ciertos atributos y desecha los demás
∏<listAtrib>(<relación>)
• Resultado: Relación (conjunto de tuplas) cuyos atributos son
sólo
ó los de <listAtrib> y en ese orden
• <listAtrib> lista de nombres de atributos de <relación>
* Obtener el código, nombre y el caché de todos los actores
∏codA, nombre, cache(ACTOR)
59
Tema 2. Modelo relacional de datos
Álgebra Relacional
Proyección de una relación (2)
• Si <listAtrib> no contiene atributos clave
¡tuplas repetidas!
* Obtener
Obt
lla agencia
i y la
l nacionalidad
i lid d de
d todos
t d llos actores
t
∏agencia, nacionalidad(ACTOR)
» Eliminación implícita de duplicados
– Resultado ≡ relación válida
• Grado(Relación Resultado) = Nº atributos(<listAtrib>)
• Nº Tuplas(Relación Resultado) ≤ Nº Tuplas(Relación Origen)
y es igual (=) si <listAtrib> contiene una clave candidata
Tema 2. Modelo relacional de datos
60
30
Álgebra Relacional
Proyección de una relación (y 3)
• La operación proyección no es conmutativa
∏lista1 (∏ lista2 (R) ) ≠ ∏lista2 (∏lista1 (R) )
• Además, siempre que lista1 ⊆ lista2, entonces...
∏lista1 (∏ lista2 (R) ) = ∏lista1 (R)
Tema 2. Modelo relacional de datos
61
Álgebra Relacional
Ejercicios
Tema 2. Modelo relacional de datos
62
31
Álgebra Relacional
Reunión o Join entre dos relaciones
• Combina las tuplas relacionadas de dos relaciones
en una sola tupla
• Permite procesar vínculos entre relaciones
* Datos de películas junto con los de su director correspondiente
– Es necesario combinar cada tupla de PELÍCULA, p, con la tupla
DIRECTOR, d, tal que el valor de codDir en d coincida con el de
director en p
– Se consigue aplicando la operación REUNIÓN a las dos relaciones
R1 ← PELICULA
director=codDir DIRECTOR
63
Tema 2. Modelo relacional de datos
Álgebra Relacional
Reunión o Join entre dos relaciones (2)
PELICULA ( codP, título, año, genero, guión, director, directorFotog, distrib,
nacio, estreno, numOscar, taquilla )
DIRECTOR ( codDir, nombre, apellido, nacio, fechaNacim, óperaPrima )
* Títulos de películas junto con nombre y apellido de su director
– Se consigue aplicando la operación REUNIÓN a las dos relaciones
– Y proyectando el resultado sobre los atributos requeridos
R2←∏titulo,nombre,apellido (PELICULA
R2
titulo
La caja 507
nombre
Enrique
)
director=codDir DIRECTOR
apellido
Urbizu
Mensaka
Salvador
Gª Ruiz
El viaje de Carol
Imanol
Uribe
Airbag
Juanma
Bajo Ulloa
Tema 2. Modelo relacional de datos
64
32
Álgebra Relacional
Reunión o Join entre dos relaciones (3)
• Forma General para relaciones A(a1, a2, ... an) y B(b1, b2, ... bm):
A
< di ió d
<condición
de reunión>
ió >B
• Resultado: Relación con n+m atributos (a1, a2, ... an, b1, b2, ... bm)
Esquema: unión de las cabeceras de A y B
Estado: conjunto de tuplas, una por cada combinación de tuplas
(una de A y otra de B) que satisface <condición de reunión>
• Reunión vs. Producto Cartesiano
– En el Producto Cartesiano aparecen todas las combinaciones
posibles de tuplas de A y de B
Tema 2. Modelo relacional de datos
65
Álgebra Relacional
Reunión o Join entre dos relaciones (4)
• <condición de reunión>
– Expresión booleana especificada en términos de atributos de A y B
– Evaluada para cada combinación (par) de tuplas:
Si la cumplen, forman una nueva tupla de la relación resultado
– Es de la forma:
<condición> AND <condición> AND... AND <condición>
donde:
<condición> tiene la forma ai θ bj (condición de reunión general), y
· ai es un atributo de A; bj es un atributo de B,
· Dominio(ai) = Dominio(bj),
· θ (theta) cumple que θ ∈ {=, <, ≤, >, ≥, ≠}
• Reunión con condición de reunión general ≡ REUNIÓN THETA
Tema 2. Modelo relacional de datos
66
33
Álgebra Relacional
Reunión o Join entre dos relaciones (5)
• La reunión más común es la que implica comparación
de igualdad ( θ ≡ = ) EQUI-REUNIÓN (o REUNIÓN, a secas)
* Actores
A t
y agencias
i que los
l representan
t
ACTOR
agencia=codAg AGENCIA
• Problema: colisión de nombres de atributos
– Existen atributos nombrados igual en ACTOR y AGENCIA
ko!
– Resultado con varios atributos de igual nombre
– Dos soluciones alternativas posibles:
1. Previo renombramiento de atributos de una relación
AGENC(codAg, nomAg, dirAg, tel) ← AGENCIA
R← ∏nombre, nomAg (ACTOR
agencia=codAg AGENC)
2. Prefijar atributos con el nombre de su tabla
R← ∏ACTOR.nombre,AGENCIA.nombre(ACTOR agencia=codAg AGENCIA)
67
Tema 2. Modelo relacional de datos
Álgebra Relacional
Reunión o Join entre dos relaciones (6)
• Las tuplas cuyos atributos de reunión son nulos,
NO aparecen en la relación resultado
– Los actores que se auto-representan tienen NULL en atributo agencia
– Sus tuplas no aparecen en ACTOR
agencia=codAg AGENC
• Las tuplas de una relación que no encuentran
correspondencia en la otra, tampoco aparecen en la
relación resultado
– Los actores que no han actuado en ninguna película, no aparecen
en ninguna tupla de la tabla ACTUA_EN
– Sus tuplas no aparecen en ACTOR
Tema 2. Modelo relacional de datos
codA=actor ACTUA_EN
68
34
Álgebra Relacional
Reunión o Join entre dos relaciones (y 7)
• En general, sea A con nA tuplas y B con nB tuplas, entonces
R← A
<condición de reunión> B
cumple
p que
q
0 ≤ nR ≤ nA *nB
• Si ninguna combinación de tuplas de A y B cumple la
<condición de reunión>, entonces
– Relación Resultado = Relación vacía (cero tuplas)
• Si NO se especifica <condición de reunión>,
reunión> entonces
– la <condición de reunión> es TRUE para todas las tuplas, y
–
≡Χ
(REUNIÓN ≡ PROD. CARTESIANO ≡ REUNIÓN CRUZADA)
69
Tema 2. Modelo relacional de datos
Álgebra Relacional
Reunión natural entre relaciones
Ä
AÄB
• Caso particular de reunión, quizá el más importante
• No «necesita» especificar condición de reunión, pues...
• ... iguala todos los pares de atributos con igual
nombre en A y B
– Es una EQUI-REUNIÓN + eliminación de atributos superfluos
Sólo conserva un atributo de reunión
– La definición estándar de reunión natural exige que los
atributos de reunión deben tener nombre idéntico en ambas
relaciones operando
– Si no es así, aplicar antes un renombramiento de atributos
– 1 deben tener el mismo dominio
Tema 2. Modelo relacional de datos
70
35
Álgebra Relacional
Reunión natural entre relaciones (2)
R
a
b
c
R(a, b, c)
S(b, d)
S b d
10 1 100
3 -4
20 3 100
1 -5
30 5 300
T1 ← R
T1
R.b=S.b S, tiene
a
R.b
c
S.b
d
10
1
100
1
-5
20
3
100
3
-44
el esquema T1 ( a, R.b, c, S.b, d )
T2 ← R Ä S, tiene el esquema T2 ( a, b, c, d )
T2
a
b
c
d
10
1
100
-5
20
3
100
-4
Tema 2. Modelo relacional de datos
71
Álgebra Relacional
Reunión natural entre relaciones (y 3)
• Ejemplos:
1. Título de todas las películas junto con el título y resumen de su guión
GUIO(guion,
(g
, titGuion,, resumen,, nomAutorPpal,
p , fechaFin,, fechaEntrega)
g ) ← GUION
RESUMEN ←
∏titulo, titGuion, resumen (PELICULA Ä GUIO)
2. Títulos de películas junto con el nombre y apellidos de su director
DIREC(director, nombre, apellidos, nacio, fechaNacim, operaPrima) ← DIRECTOR
PELI_DIRE ←
∏titulo, nombre, apellidos (PELICULA Ä DIREC)
3. Nombre de actores y de las agencias que los representan
AGENC(agencia, nomAg, direccion, telefono) ← AGENCIA
ACT_AGEN ←
∏nombre, nomAg (ACTOR Ä AGENC)
¿A qué se debe el renombramiento en cada caso?
Tema 2. Modelo relacional de datos
72
36
Álgebra Relacional
÷
División entre relaciones
Sean las relaciones A(a1, a2, ... an, b1, b2, ... bm) y B(b1, b2, ...bm)
• A÷B es una relación tal qque:
Esquema: Relación con los atributos no comunes R( a1, a2, ... an )
Estado: Conjunto de tuplas { (ai1, ai2, ... ain) } tal que existe
en A una tupla (ai1, ai2, ... ain, bj1, bj2, ... bjm) para
TODAS las tuplas (bj1, bj2, ... bjm ) de B
• Poco común.
común Útil para consultas especiales ocasionales
Nombres de los actores que trabajan en todas las películas dirigidas por los
hermanos Cohen
• Para que una tupla t aparezca en el resultado, los valores
de t deben aparecer en A en combinación con todas las
tuplas de B
73
Tema 2. Modelo relacional de datos
Álgebra Relacional
División entre relaciones
A
a
y1
y1
y1
y1
y2
y2
y3
y3
3
y3
y4
y4
y4
b
x1
x2
x3
x4
x1
x3
x2
x3
3
x4
x1
x2
x3
B
Tema 2. Modelo relacional de datos
b
x1
x2
x3
(y 2)
R
a
y1
y4
y1, y4 aparecen en A en combinación con
p
de B,, por
p eso están en el
las 3 tuplas
resultado
R=A÷B
El resto de valores de y en A, no aparecen
con todas las tuplas de B y no son
seleccionadas: y2 no aparece con x2,
e y3 no aparece con x1
74
37
Álgebra Relacional
Otras operaciones del Álgebra Relacional
• Algunas consultas comunes no pueden expresarse con las
operaciones estándar del Álgebra Relacional
– A
Ampliación
li ió de
d su poder
d expresivo
i con operaciones
i
adicionales
di i
l
– Incluidas en la mayoría de los lenguajes de consulta relacionales
comerciales
• Funciones de agregados
– Funciones matemáticas de agregados sobre colecciones de valores de
la base de datos
Valor medio del caché de todos los actores
Número de películas (almacenadas en la BD)
Máximo porcentaje de comisión de las distribuidoras de películas
Mínima recaudación en taquilla
Cantidad total pagada a los actores de cierta película
75
Tema 2. Modelo relacional de datos
Álgebra Relacional
Funciones de agregados
• Funciones aplicadas a un conjunto de tuplas
–
–
–
–
–
SUMA
PROMEDIO
MÁXIMO
MÍNIMO
CUENTA (número de tuplas en una relación)
• Agrupación de tuplas según valor de ciertos atributos
– Puede aplicarse una función agregada a cada grupo por separado
* Media del caché de los actores agrupados
g p
ppor agencias
g
¿Solución?
Agrupar actores según su agencia representante (valor de atributo agencia)
» Cada grupo incluye tuplas de actores representados por la misma agencia
Cálculo del caché medio de cada grupo (función PROMEDIO)
• El resultado es una relación
Tema 2. Modelo relacional de datos
R(agencia, PROMEDIO_caché)
76
38
Álgebra Relacional
Funciones de agregados (2)
AG1
a1 a4
ACTOR
AG8
a9
a2
a7
AG2
a10 a8
R
R
PROMEDIO_cache
Media del cache de a1... a10
a5 a6
a3
AG3
agencia
PROMEDIO cache
PROMEDIO_cache
AG8
Media del cache de a9 y a2
AG3
Media del cache de a5, a6 y a3
AG1
Media del cache de a7, a1 y a4
AG2
Media del cache de a8 y a10
77
Tema 2. Modelo relacional de datos
Álgebra Relacional
Funciones de agregados (3)
<atributos de agrupación>
•
•
F <lista funciones>(<relación>)
<atributos de agrupación>
– Lista de nombres de atributos de <relación>
– Indican atributos con los que construir los grupos
– Puede estar vacía
la relación es un (único) grupo
<lista funciones>
– Lista de pares <función> <atributo>
donde <función> ∈ {SUMA, PROMEDIO, MÁXIMO, MÍNIMO, CUENTA}
y <atributo> es uno de los atributos de <relación>
• Resultado: una relación R, tal que
Esquema: atributos de <atributos de agrupación> +
un atributo por cada elemento de <lista funciones>
Cuerpo: conjunto de tuplas tal que existe una por cada grupo
Tema 2. Modelo relacional de datos
78
39
Álgebra Relacional
Funciones de agregados (4)
• Ejemplos:
1. Códigos de Películas, número de actores en cada película y su paga media
R(codpeli numActores
R(codpeli,
numActores, pagaMedia)← film F CUENTA actor,PROMEDIO paga(ACTUA_EN)
(ACTUA EN)
2. Códigos de agencias, número de actores en cada agencia y caché medio
R(codAg, numActores, cacheMedio)←agencia F CUENTA codA,PROMEDIO cache(ACTOR)
• Si no se indican nombres para los atributos de la relación
resultado R, dicha relación incluirá...
– un atributo por cada atributo incluido en <atributos de agrupación>,
con el mismo nombre
nombre, y
– un atributo por cada función incluida en <lista funciones>,
denominado FUNCIÓN_atributo
Los esquemas de las relaciones resultado de los ejemplos anteriores serían:
1. R(film,CUENTA_actor, PROMEDIO_paga)
2. R(agencia, CUENTA_codA, PROMEDIO_cache)
79
Tema 2. Modelo relacional de datos
Álgebra Relacional
Funciones de agregados (y 5)
• Si no se especifican atributos de agrupación
– Toda la relación es un único grupo
– Las
L funciones
f
i
se aplican
li
a todas
t d las
l tuplas
t l
– La relación resultado tendrá una sola tupla
* Número de películas y recaudación media
F CUENTA codP,PROMEDIO taquilla(PELICULA)
• El resultado de aplicar una función agregada siempre es
una relación, no un nº escalar, aunque tenga un único
valor
R
MAXIMO_taquilla
* Recaudación máxima obtenida
F MÁXIMO taquilla(PELICULA)
Tema 2. Modelo relacional de datos
232.850
80
40
Álgebra Relacional
Operaciones de cierre recursivo
• No pueden expresarse en el Álgebra Relacional
• Se aplican a una referencia recursiva entre tuplas del mismo
ti (empleado
tipo
(
l d y jefe
j f en la
l relación
l ió EMPLEADO)
* Códigos de los empleados que tienen como superior a “e”, en todos los
niveles
e
e11 e12 ... e1n
_________________Nivel 1
e21... e2 m ... ... ... e2p
_________________Nivel 2
e31... e3q ... e3r ... ... ... e3t _________________Nivel 3
etc.
...
81
Tema 2. Modelo relacional de datos
Álgebra Relacional
Operaciones de cierre recursivo (y 2)
• En Álgebra Relacional es sencillo especificar empleados
cuyo jefe es “e” en cierto nivel conocido, pero no en todos
los niveles
Ejemplo para el nivel 2: código de los empleados cuyo jefe directo es “e” o bien su jefe es
un empleado cuyo jefe es “e”
EMP_JEF(codE, codJ) ← ∏codemp, codjefe (EMPLEADO)
EMP 1(cod) ← ∏codE
EMP_1(cod)
(EMP JEF))
dE (σcodJ=“e”
dJ “ ” (EMP_JEF))
Empleados de nivel 1
EMP_2(cod) ← ∏codE (EMP_JEF
Empleados de nivel 2
codJ=cod (EMP_1))
RESULTADO ← EMP_1 ∪ EMP_2
Tema 2. Modelo relacional de datos
82
41
Álgebra Relacional
Reunión externa (Outer-join) entre relaciones
• Extensión de la operación REUNIÓN
• Permiten conservar todas las tuplas en A o B o ambas,
aunque...
– No tengan tuplas coincidentes
– Contengan nulos en los atributos de reunión
* Nombres de actores y de sus agencias representantes, si tienen
AGEN(codAg, nomAg, direccion,telefono) ← AGENCIA
TEMP ← (ACTOR
RESULTADO ←
agencia=codAg AGEN)
∏nombre, nomAg (TEMP)
83
Tema 2. Modelo relacional de datos
Álgebra Relacional
Reunión externa entre relaciones (2)
• REUNIÓN EXTERNA IZQUIERDA
R=A
B
– Conserva en R todas las tuplas de A
– Si no encuentra una tupla coincidente en B,
B cada atributo de R
(correspondiente a B) es NULO
• REUNIÓN EXTERNA DERECHA
R=A
B
– Conserva en R todas las tuplas de B
– Si no encuentra una tupla coincidente en A, cada atributo de R
(correspondiente a A) es NULO
• REUNIÓN EXTERNA COMPLETA
R=A
B
– Conserva en R todas las tuplas de A y de B
– Cuando no encuentra tuplas coincidentes, rellena con NULO
Tema 2. Modelo relacional de datos
84
42
Álgebra Relacional
Reunión externa entre relaciones (3)
ACTOR
nomAc
... agencia ...
AGENCIA codAg
nomAg
Carmelo Gómez
A23
A10
AgeRep
M í P
María
Pujalte
j lt
A03
A30
R A t
ReprActors
Pere Ponce
A10
A03
ActorsMngr
Javier Bardem
NULL
A23
ARA
...
* Nombres de agencias y de los actores a los que representan, incluyendo...
1.- las agencias que no representan a ningún actor
R1= πnomAc, nomAg (ACTOR
agencia=codAg AGENCIA)
2.- los actores que no tienen agencia de representación
R2 = πnomAc, nomAg ( ACTOR
agencia=codAg AGENCIA
3.- tanto las agencias que no representan a ningún actor, como los actores que no
tienen agencia
R3 = πnomAc, nomAg ( ACTOR
agencia=codAg AGENCIA
85
Tema 2. Modelo relacional de datos
Álgebra Relacional
Reunión externa entre relaciones (y 4)
ACTOR
AGENCIA
nomAc
nomAg
C
Carmelo
l Gómez
Gó
ARA
ACTOR
María Pujalte
ActorsMngr
Pere Ponce
AgeRep
NULL
ReprActors
AGENCIA
nomAc
nomAg
Carmelo Gómez ARA
ACTOR
nomAc
AGENCIA
nomAg
Carmelo Gómez ARA
María Pujalte
ActorsMngr
ActorsMngr
Pere Ponce
AgeRep
Pere Ponce
AgeRep
Javier Bardem
NULL
Javier Bardem
NULL
NULL
ReprActors
María Pujalte
Tema 2. Modelo relacional de datos
86
43
Álgebra Relacional
Ejercicios II
87
Tema 2. Modelo relacional de datos
Manipulación de datos
Cálculo Relacional
• Lenguaje formal para BD Relacionales
• Basado en Cálculo de Predicados de Primer Orden (rama
de Lógica Matemática)
Cálculo Relacional
- Expresiones Declarativas
(lenguaje no procedimental)
vs.
Álgebra Relacional
- Secuencias de Operaciones
» Aunque se anidan para formar
» No se indica CÓMO evaluar la
una sola expresión, siempre se
consulta sino QUÉ se desea
consulta,
d
explícitamente
lí
cierto orden
d
indica
obtener
de las operaciones
» Describe la información deseada
» Estrategia parcial de
sin dar un procedimiento
evaluación de la consulta
específico para obtenerla
(≈ lenguaje procedimental de
alto nivel )
Tema 2. Modelo relacional de datos
88
44
Cálculo Relacional
• Poder expresivo idéntico de álgebra y cálculo relacionales
Cualquier obtención de datos especificada en el Álgebra
Relacional puede expresarse en el Cálculo Relacional (restringido a
expresiones
e
p es o es segu
seguras)
as) y viceversa
ce e sa
• Definición: Lenguaje Relacionalmente Completo
Lenguaje en el que es posible expresar cualquier consulta
que pueda especificarse en el Cálculo Relacional
– Cálculo Relacional como medida del poder selectivo de lenguajes
relacionales
• Formas de adaptar el Cálculo de Predicados de 1er Orden
para crear un Lenguaje de Consultas para BDR:
̶ Cálculo Relacional de Tuplas (CRT) –– Codd, 1972
̶ Cálculo Relacional de Dominios
–– Lacroix y Pirotte, 1977
Tema 2. Modelo relacional de datos
89
Cálculo Relacional
Expresiones de consulta
• CRT basado en la especificación de variables de tupla
• Toda variable de tupla «abarca» o recorre una relación
puede tomar como valor cualquier tupla de esa relación
{ t | COND(t) }
• Resultado: conjunto de tuplas t que satisfacen la condición COND(t)
• COND(t): expresión condicional en la que interviene la var. de tupla t
* Actores
A t
cuyo caché
hé rebasa
b
los
l 22.000€
000€
{ t | ACTOR(t) and t.cache>2000 }
– ACTOR(t) indica que ACTOR es la Relación de Intervalo que t recorre
– t.cache
hace referencia al atributo caché de la variable de tupla t
Tema 2. Modelo relacional de datos
90
45
Cálculo Relacional
Expresiones de consulta (y 2)
• Obtención de algunos atributos de las tuplas seleccionadas
{ <lista atributos> | COND(t) }
• Ejemplos:
* Nombre y nacionalidad de los actores cuyo caché rebasa los 2.000€
{ t.nombre, t.nacionalidad | ACTOR(t) and t.cache>5000 }
* Fecha de nacimiento y nombre real del actor “Javier Bardem”
{ t.fechaNacim, t.nombreReal | ACTOR(t) and t.nombre = “Javier Bardem” }
91
Tema 2. Modelo relacional de datos
Cálculo Relacional
Expresión del CRT: punto de vista formal
• Expresión General
{ t1.a1, t2.a2, ... , tn.ap | COND(t1, t2, ..., tn, tn+1,tn+2,...tn+m) }
donde:
– t1, t2, ..., tn, tn+1, tn+2, ... tn+m
son variables de tupla
– ai es un atributo de la relación que tj recorre
– COND(..)
( ): fórmula ((bien formada)) del Cálculo Relacional de Tuplas
p
constituida por átomos del Cálculo de Predicados
Tema 2. Modelo relacional de datos
92
46
Cálculo Relacional
Expresión del CRT: punto de vista formal (2)
• Átomos
– R(ti) el intervalo de la variable de tupla ti es la relación R
– ti.a op tj.b
b ,, op ∈ { =, ≠, <, ≤, >, ≥ }
ti y tj variables de tupla
a atributo de la relación que ti abarca
b atributo de la relación que tj abarca
– ti.a op c ,, c op tj.b ,, op ∈ { =, ≠, <, ≤, >, ≥ }
ti y tj variables de tupla
a atributo
t ib t d
de la
l relación
l ió que ti abarca
b
b atributo de la relación que tj abarca
c valor constante
Los átomos están ligados mediante operadores and, or, not y →
Tema 2. Modelo relacional de datos
93
Cálculo Relacional
Expresión del CRT: punto de vista formal (3)
• Valor lógico de un átomo
Evaluación del átomo para una combinación específica de tuplas
valor TRUE o FALSE
– R(ti)
TRUE si se asigna una tupla de R a ti
Si no, es FALSE
– ti.a op tj.b ,, ti.a op c ,, c op tj.b
TRUE si ti y tj se asignan a tuplas tales que los atributos
especificados (a y b) satisfacen la condición
Si no es así, será FALSE
Tema 2. Modelo relacional de datos
94
47
Cálculo Relacional
Expresión del CRT: punto de vista formal (4)
• Fórmula bien formada (fbf)
– Definición recursiva
D1. Todo átomo es una fórmula bien formada
R(ti) ,, ti.a op tj.b ,, ti.a op c ,, c op tj.b
D2. Si F1 y F2 son fbf, también lo son...
(F1 and F2), (F1 or F2), not(F1), not(F2) y (F1 → F2)
y los valores lógicos de estas fórmulas
se derivan de F1 y F2, según la Lógica Booleana
Nota: (F1 → F2) ≡ (not(F1) or F2)
continuará...
95
Tema 2. Modelo relacional de datos
Cálculo Relacional
Expresión del CRT: punto de vista formal (5)
• Cuantificadores
– Universal ∀
– Existencial ∃
(∀t) (BANCO(t) and not(t.ciudad = ‘Londres’))
(∃t) (BANCO(t) and t.ciudad = ‘Amsterdam’)
• Variable de tupla libre y ligada en una fbf
1 informal
t está ligada si está cuantificada ( aparece en cláusulas (∀t) o (∃t) )
si no,
no está libre
Tema 2. Modelo relacional de datos
96
48
Cálculo Relacional
Expresión del CRT: punto de vista formal (6)
• Variable de tupla libre y ligada en una fbf
1 formal
– Si F ≡ átomo,
átomo cualquier ocurrencia de una variable de tupla t,
t
está libre
– En (F1 and F2), (F1 or F2), not(F1), not(F2) y (F1 → F2),
una ocurrencia de t está libre o ligada según lo esté en F1 o F2
– Toda ocurrencia libre de t en F está ligada en F’, si
F’=(∃t)F o bien F’=(∀t)F
y t estará ligada al cuantificador especificado en F’
F1 : d.nombre = “Carmelo Gómez”
F2 : (∃t) (d.agencia = t.codAg)
La variable de tupla d está libre en F1 y en F2
t está ligada al cuantificador ∃ en F2
Tema 2. Modelo relacional de datos
97
Cálculo Relacional
Expresión del CRT: punto de vista formal (7)
• Fórmula bien formada (continuación)
D3. Si F es una fbf, también lo es (∃t)F
( )F, donde t es una variable de
tupla
(∃t)F es TRUE si F es TRUE para al menos una tupla asignada
a ocurrencias libres de t en F
de lo contrario es FALSE
D4. Si F es una fbf, también lo es (∀t)F, donde t es una variable de
tupla
(∀t)F es TRUE si F es TRUE para toda tupla (en el universo)
asignada a ocurrencias libres de t en F
de lo contrario es FALSE
Tema 2. Modelo relacional de datos
98
49
Cálculo Relacional
Expresión del CRT: punto de vista formal (8)
• Fórmula bien formada (continuación)
– Si la
l fórmula
fó
l es cerrada
d (toda
(t d variable
i bl ligada
li d a cuantificadores),
tifi d
)
entonces representa una expresión que será TRUE o FALSE
F3 : (∃a) (ACTOR(a) and a.nombre = “Javier Cámara”)
F4 : (∀p) (PELICULA(p) (∃d) (DIRECTOR(d) and d.coddir=p.director)
– Si la fórmula es abierta (tiene variables libres), entonces
representa
p
una consulta cuya
y evaluación devolverá los valores
de sus variables libres que hacen TRUE la fórmula
F5 : ACTOR(a) and a.fechaNacim > 31/12/1971
sirve para preguntar por los actores/actrices que nacieron en 1972 o después
99
Tema 2. Modelo relacional de datos
Cálculo Relacional
Expresión del CRT: punto de vista formal (y 9)
• Expresión segura
– Su resultado es un número finito de tuplas
– Al usar cuantificadores (∃,∀)
(∃ ∀) o negación (not),
(not) la expresión ha de tener
sentido: ser segura y no generar una relación infinita
E= {t | not(ACTOR(t))}
tuplas del universo que NO son de ACTOR
¡¡∞!!
• Dominio de una expresión del CRT
– Valores constantes en la expresión o que existen en cualquier
tupla de las relaciones a las que se referencia en la expresión
Dominio ( E={t | not(ACTOR(t))} )= todos los valores de atributos de tuplas ACTOR
Una expresión es segura si todo valor del resultado ∈ dominio
de la expresión
E es insegura, ya que el resultado incluye tuplas (y, por tanto, valores) que no están en
la relación ACTOR (es decir, que ∉ su dominio)
Tema 2. Modelo relacional de datos
100
50
Cálculo Relacional
Ejercicios
101
Tema 2. Modelo relacional de datos
Manipulación de datos
El lenguaje relacional SQL-92
Structured Query Language
(lenguaje estructurado de consulta)
• Primer lenguaje de BD de alto nivel.
Años 70.
– Diseñado e implementado en el IBM’s Research Laboratory (San José California), para el SGBD Relacional experimental System R
• Definición de un lenguaje estándar
para SGBDR
ANSI (American National Standards Institute)
+ ISO (International Standardization Organization)
– SQL1 (ANSI 1986), extendido en 1989 (SQL-89)
– SQL-92 (SQL2),
(SQL2) y
– SQL:1999 (extensiones de Orientación a Objetos, disparadores, …)
– SQL:2003 (incluye XML y otros conceptos recientes)
• Primeras implementaciones:
– ORACLE (finales 70) y poco después INGRES
Tema 2. Modelo relacional de datos
102
51
SQL-92
• Lenguaje de bases de datos completo
(no sólo «de consulta»)
– Definición y Manipulación de Datos (LDD + LMD)
– Definición y destrucción de Vistas (LDV)
– Creación y destrucción de índices (aunque en SQL-92 «ya no existen»)
– Incorporación de SQL dentro de código escrito con un Lenguaje de
Programación de propósito general (Pascal, C, etc.)
• Los proveedores de SGBDR comerciales (Oracle) implementan variaciones de
SQL
– Algunas incluyen características que no están estandarizadas
(triggers /reglas activas incluidos en la versión SQL:1999)
• Niveles de compatibilidad con el estándar de SQL
– Entry SQL
– Intermediate SQL
– Full SQL
Tema 2. Modelo relacional de datos
103
SQL-92
Lo que vamos a estudiar...
• Consultas o Selección de datos
• Modificación de datos
• Vistas
• Definición y Alteración de datos
–Esquemas, Dominios, Tablas
• Restricciones de Integridad Generales (Asertos)
• Seguridad y Control de Acceso
Tema 2. Modelo relacional de datos
104
52
SQL-92
Consultas básicas
•
(4)
SQL-92 vs. Modelo Relacional Formal
– No utiliza los términos formales relación, atributo, tupla…,
sino tabla, columna, fila…
– Permite que las tablas tengan 2 o más filas idénticas en todos los
valores de sus columnas
En general, tabla SQL ≠ conjunto de filas, sino que
Tabla SQL = Multiconjunto de filas (saco,
bag)
• Es posible forzar que las tablas SQL sean conjuntos de filas:
- con restricciones de clave o
- mediante opción DISTINCT en una SELECT ((*se
se verá
verá*))
– Las columnas de una tabla están ordenadas, y es posible indicar
un orden de visualización de las filas
– Una clave ajena puede referenciar a una clave candidata
105
Tema 2. Modelo relacional de datos
SQL-92
Esquema de base de datos COMPAÑÍA
EMPLEADO
NOMBRE
APELLIDO
NSS NIF FECHAN DIRECCION SEXO SALARIO
NSSJEFE ND
DEPARTAMEN
TO
NOMBRED NUMEROD
NSSDIRE FECHAINICDIRE
OFICINA_DEPT
O
NUMEROD
OFICINA
PROYECTO
NOMBREP NUMEROP LUGARP
NUMEROD
TRABAJA_E
N HORAS
NUMP
NSSE
FAMILIAR
NSSE NOMBRE_FAMILIAR SEXO FECHAN PARENTESCO
Tema 2. Modelo relacional de datos
53
SQL-92
Consultas básicas
• Orden SELECT:
Instrucción básica de
obtención de
información
donde:
<lista columnas>
<lista tablas>
<condición>
SELECT <lista columnas>
FROM <lista tablas>
WHERE <condición>
columnas cuyos valores va a obtener la consulta
tablas necesarias para realizar la consulta
expresión booleana para identificar filas que obtendrá la consulta
(expresión de reunión y/o de selección)
Fecha de nacimiento y dirección del empleado llamado José Silva
SELECT fechan, direccion
FROM Empleado
E l d
WHERE nombre = ‘José’ AND apellido = ‘Silva’;
• La consulta selecciona las filas de <lista tablas>
que satisfacen <condición> y
proyecta el resultado sobre las columnas de <lista columnas>
107
Tema 2. Modelo relacional de datos
SQL-92
Consultas básicas
•
(2)
La orden SELECT ... FROM ... WHERE...
– No es igual a la operación restricción σ del Álgebra Relacional
– SELECT de SQL
Q tiene muchas más opciones
p
y matices
– En caso de una única tabla T en <lista tablas>
SELECT <lista columnas>
FROM T
WHERE <condición>
es equivalente a...
Π <lista columnas>(σ<condición> ( T ))
* Nombre, apellido y dirección de los empleados del departamento de Investigación
SELECT nombre, apellido, direccion
FROM Empleado, Departamento → reunión o join de tablas
WHERE nombred=‘Investigación’ → condición de selección
AND numerod=nd;
→ condición de reunión entre tablas
Tema 2. Modelo relacional de datos
108
54
SQL-92
Consultas básicas
(3)
• Cualquier nº de condiciones selección/reunión en SELECT
* Para cada proyecto ubicado en Santiago, obtener el nº del proyecto, nº del departamento que lo controla y el
apellido,
llid dirección
di
ió y ffecha
h dde nacimiento
i i t ddell gerente
t dde ese ddepartamento
t
t
SELECT numerop, numd, apellido, direccion, fechan
FROM Proyecto, Departamento, Empleado
WHERE numd=numerod AND nssdire=nss AND lugarp=‘Santiago’;
• Una SELECT puede obtener filas repetidas
* Salario de los empleados de los departamentos de Administración y de Investigación
SELECT salario
FROM Empleado, Departamento
WHERE (nombred = ‘Administración’ OR nombred = ‘Investigación’)
AND numerod=nd;
109
Tema 2. Modelo relacional de datos
SQL-92
Consultas básicas
(5):
uso de *
• Obtención de los valores de todas las columnas de las filas seleccionadas
–No es necesario listar todos los nombres tras
cláusula SELECT
–Uso del símbolo * (todas las columnas)
SELECT *
FROM Empleado
WHERE nd=5;
SELECT *
FROM Departamento
WHERE nombred=‘Investigación’;
SELECT *
FROM Empleado, Departamento
WHERE nombred=‘Investigación’ AND nd=númerod;
Tema 2. Modelo relacional de datos
110
55
SQL-92
Consultas básicas
(6):
omisión de WHERE
• Selección incondicional
–Equivale a una condición TRUE para todas las filas
selección
l ió de
d todas
t d las
l filas
fil de...
d
• una tabla (si la cláusula FROM sólo contiene una tabla), o
• el producto cartesiano entre varias tablas (si FROM incluye más de
una)
* Seleccionar todos los nss de empleados
SELECT nss
FROM Empleado;
* Obtener todas las combinaciones de nss de empleados y nombres de departamentos
SELECT nss, nombred
FROM Empleado, Departamento;
111
Tema 2. Modelo relacional de datos
SQL-92
Consultas básicas
(7):
cadenas de caracteres
• Operador LIKE
– Comparación de cadenas de caracteres
– Caracteres reservados: ‘%’
% y ‘_’ (comodines)
*Nombres y apellidos de los empleados cuya dirección esté en Higueras, estado de México
SELECT nombre, apellido
FROM Empleado
WHERE direccion LIKE ‘%Higueras, MX%’ ;
• Operador ||
– Concatenación de cadenas de caracteres
* Nombres
N b
completos
l t en una sola
l columna
l
de
d empleados
l d con dirección
di
ió en Higueras
Hi
(México)
SELECT nombre || ‘ ’ || apellido
FROM Empleado
WHERE direccion LIKE ‘%Higueras, MX%’ ;
Tema 2. Modelo relacional de datos
112
56
SQL-92
Consultas básicas
(8):
aritmética y tiempo
• Operaciones aritméticas
– Aplicación de operadores aritméticos ( + - * / ) sobre valores numéricos
* Salarios de los empleados que trabajan en el proyecto ProductoX
ProductoX, tras un aumento del 10%
SELECT apellido, nombre, 1.1*salario
FROM Empleado, Trabaja_en, Proyecto
WHERE nss=nsse AND nump=numerop AND nombrep=‘ProductoX’ ;
1 el valor real de los salarios en la tabla EMPLEADO no cambia
• Operaciones con fechas, horas, marcas de tiempo e intervalos
– Especificación del valor de un INTERVAL
como diferencia de dos valores DATE, TIME o TIMESTAMP
– Incremento y Decremento de valores de columnas de tipo DATE, TIME,
TIMESTAMP en un intervalo compatible con el tipo
113
Tema 2. Modelo relacional de datos
SQL-92
Consultas básicas
(9):
calificación
• En SQL los nombres de las columnas deben ser únicos dentro de
cada tabla
• Consulta que referencia a varias columnas de igual nombre, pero de
tablas distintas...
AMBIGÜEDAD --------------Solución: CALIFICACIÓN
El esquema COMPAÑÍA incluye las siguientes tablas:
DEPARTAMENTO (nombred, numerod, nssdire, fechainicdire)
OFICINA_DEPTO (numerod, oficina)
* Código, nombre y lugares de los departamentos de Marketing y de Investigación
SELECT Departamento.numerod, nombred, oficina
FROM Departamento, Oficina_depto
WHERE Departamento.nombred IN (‘Marketing’, ‘Investigación’)
AND Departamento.numerod = Oficina_depto.numerod;
Tema 2. Modelo relacional de datos
114
57
SQL-92
Consultas básicas
(10):
seudónimos
• Puede utilizarse seudónimos para acortar nombres de tabla dentro de
las consultas con calificación:
SELECT nombred, D.numerod, oficina
FROM Departamento AS D, Oficina_depto L
← ‘AS’ es opcional
WHERE D.nombred IN (‘Marketing’, ‘Investigación’)
AND D.numerod = L.numerod;
• Consulta que se refiere dos veces a la misma tabla
AMBIGÜEDAD -------------------
Solución:
SEUDÓNIMOS
* Obtener nombre y apellido de cada empleado y de su supervisor inmediato
SELECT E.nombre, E.apellido, S.nombre, S.apellido
FROM Empleado E, Empleado S
WHERE E.nssjefe=S.nss;
115
Tema 2. Modelo relacional de datos
SQL-92
Consultas básicas
(11):
renombrar columnas
• En el resultado de evaluar la consulta
* Nombres de cada empleado y su supervisor, cambiando al mismo tiempo los nombres de las columnas
resultantes a ‘nom
nom_empleado
empleado’ y ‘nom
nom_supervisor
supervisor’
SELECT E.nombre AS nom_empleado,
S.nombre AS nom_supervisor
FROM Empleado E, Empleado S
WHERE E.nssjefe = S.nss;
Nueva cabecera para la tabla resultado
• Seudónimos de columnas (y/o tablas) en cláusula FROM
SELECT nom, num, oficina
FROM Departamento D(nom, num, dire, inidire), Oficina_depto
WHERE nom IN (‘Marketing’, ‘Investigación’) AND num = numerod;
Tema 2. Modelo relacional de datos
116
58
SQL-92
Consultas básicas
(y 12):
orden de presentación
• SQL permite presentar las filas resultado de una consulta
de forma ordenada: Cláusula ORDER BY
– Ordenación según valores de una o varias columnas
– Ascendente ASC (por defecto) o Descendente DESC
– Suele ser una operación muy costosa
las filas no se ordenan en disco: se ven ordenadas, pero no lo están
*Nombre y apellido de los empleados, y proyectos en los que trabajan, en orden
descendente por departamentos y, dentro de cada departamento, en orden
alfabético ascendente por apellido y nombre
SELECT nombred, apellido, nombre, nombre
FROM Departamento, Empleado, Trabaja_en, Proyecto
WHERE numerod=nd AND nss=nsse AND nump=numerop
ORDER BY nombred DESC, apellido ASC, nombre ASC;
Tema 2. Modelo relacional de datos
117
SQL-92
Tablas como conjuntos
•
SQL no elimina filas repetidas del resultado de una consulta, porque...
•
Operador DISTINCT:
– Eliminación de duplicados costosa (ordenar+recorrer+eliminar)
– El usuario puede desear ver las filas repetidas en el resultado
– Si se aplica una función agregada a filas, rara vez deben eliminarse las
duplicadas
– Para eliminar duplicados del resultado de una consulta SQL
» Resultado = Relación del Modelo Relacional Formal (conjunto de filas)
* Salarios de todos los empleados
SELECT salario FROM Empleado;
* Salarios distintos de empleados, sin importar cuántos perciban cada cantidad
SELECT DISTINCT salario
FROM Empleado;
Tema 2. Modelo relacional de datos
118
59
SQL-92
Tablas como conjuntos
•
(2)
Operaciones de conjuntos
– UNION( ∪ ), INTERSECT( ∩ ), EXCEPT ( — ) (minus en ORACLE)
– Resultado: conjunto de filas
las filas repetidas se eliminan
– Las
L tablas
bl operando
d han
h de
d ser compatibles
ibl en tipo:
i
– igual nº de columnas, y
– columnas “correspondientes” con el mismo dominio
* Nombres de los proyectos en que participa el empleado de apellido ‘Silva’, ya sea como trabajador o como gerente del
departamento que controla el proyecto
( SELECT nombrep FROM Proyecto, Trabaja_en, Empleado
WHERE numerop=nump AND nsse=nss AND apellido=‘Silva’ )
UNION
( SELECT nombrep FROM Proyecto, Departamento, Empleado
WHERE numd=numerod AND nssdire=nss AND apellido=‘Silva’ );
•
Para no eliminar duplicados...
– UNION ALL, INTERSECT ALL, EXCEPT ALL
119
Tema 2. Modelo relacional de datos
SQL-92
Tablas como conjuntos
(3):
conjuntos explícitos
• Un conjunto explícito de valores es una lista de valores encerrada
entre paréntesis
• Puede
uede aparecer
apa ece en
e la
a ccláusula
áusu a
WHERE
* nss de los empleados que trabajan en los proyectos 1, 2 ó 3
SELECT DISTINCT nsse FROM Trabaja_en
WHERE nump IN (1, 2, 3);
• Operador IN
v IN V
–Indica si el valor v pertenece al conjunto de valores V
–Devuelve TRUE si algún elemento e de V cumple que v = e
* nss de los empleados que trabajan en algún proyecto que no sea el 4 ni el 6
SELECT DISTINCT nsse FROM Trabaja_en
WHERE nump NOT IN (4, 6);
Tema 2. Modelo relacional de datos
120
60
SQL-92
Tablas como conjuntos
•
(4):
conjuntos explícitos
Operador ANY (o SOME)
v <op> ANY V o v <op> SOME V ,, <op> ∈ { >, ≥, <, ≤, <>, = }
– Compara un valor individual v con los elementos de un conjunto V
– Devuelve
D
l TRUE sii algún
l ú elemento
l
t e de
d V cumple
l que v <op> e
* nss de los empleados que trabajan en alguno de los proyectos 1, 2 ó 3
SELECT DISTINCT nsse FROM Trabaja_en
WHERE nump = ANY (1, 2, 3);
•
Operador ALL
v <op> ALL V,, <op> ∈ { >, ≥, <, ≤, <>, = }
– Compara un valor v con los elementos de un conjunto V
– Devuelve TRUE si para todo elemento e de V se cumple v <op> e
* nss de los empleados que no trabajan en ninguno de los proyectos 1, 2 y 3
SELECT DISTINCT nsse FROM Trabaja_en
WHERE nump <> ALL (1, 2, 3);
Tema 2. Modelo relacional de datos
121
SQL-92
Consultas anidadas
• Es una consulta SELECT completa, dentro de cláusula WHERE de
otra consulta (consulta exterior)
• Obtiene valores de la BD q
que se usan en la condición de otra consulta,,
para obtener otros datos
* Números de los proyectos en que participa el empleado de apellido ‘Silva’, sea como trabajador o como
gerente del departamento que controla el proyecto
SELECT DISTINCT numerop FROM PROYECTO
WHERE numerop IN ( SELECT nump
FROM Trabaja_en, Empleado
WHERE nsse=nss AND apellido=‘Silva’ )
OR numerop IN ( SELECT numerop
FROM Proyecto, Departamento, Empleado
WHERE numd=númerod
AND nssdire=nss AND apellido=‘Silva’ ) ;
• Es posible tener varios niveles de consultas anidadas
Tema 2. Modelo relacional de datos
122
61
SQL-92
Consultas anidadas (2): comparar conjuntos
•
Operador IN (otro
t IN S
uso del mismo operador)
– indica si la fila t pertenece al conjunto de filas S (subconsulta)
* Nombre y dirección de los empleados que trabajan en algún proyecto.
SELECT nombre, dirección FROM Empleado
WHERE nss IN ( SELECT nsse FROM TRABAJA_EN );
* Números de seguridad social de aquellos empleados que trabajan en algún proyecto en el que trabaje el empleado ‘José B.
Silva’, de forma que ambos tengan la misma combinación (proyecto, horas); es decir, todo empleado que trabaje las mismas
horas que ‘José B. Silva’, en cada proyecto en el que trabajen ambos. El nss de ‘José B. Silva’ es ‘123456789’.
SELECT DISTINCT nsse FROM Trabaja_en
WHERE (númp, horas) IN ( SELECT númp, horas
FROM Trabaja_en
WHERE nsse=‘123456789’);
123
Tema 2. Modelo relacional de datos
SQL-92
Consultas anidadas (3): comparar conjuntos
•
Operador ANY o SOME (otro uso del mismo operador)
t <op> ANY S o t <op> SOME S,, <op> ∈ { >, ≥, <, ≤, ≠, = }
– Compara una fila t con las filas resultado de una consulta anidada S
– Devuelve TRUE si alguna fila e de S cumple que t <op> e
•
Operador ALL (otro uso del mismo
t <op> ALL S,, <op> ∈ { >, ≥, <, ≤, ≠, = }
operador)
– Compara una fila t con filas resultado de una consulta anidada S
– Devuelve TRUE si para toda fila e de S se cumple que t <op> e
* Nombres y apellidos de los empleados cuyo salario es menor que el de todos los empleados del departamento 5
SELECT nombre, apellido FROM Empleado
WHERE salario < ALL ( SELECT salario
FROM Empleado
WHERE nd=5 );
Tema 2. Modelo relacional de datos
¿”Mejor” con DISTINCT
en la subconsulta?
124
62
SQL-92
Consultas anidadas (4): columnas ambiguas
• Coincidencia de nombres de columnas en las consultas
exterior y anidada Ambigüedad
* Nombre y apellidos de cada empleado con familiares de igual nombre y sexo que él
SELECT nombre, apellido FROM Empleado
WHERE nss IN ( SELECT nsse FROM Familiar
WHERE nsse=nss AND nombre_familiar=nombre
AND sexo=sexo ); ¿cómo evitar esta ambigüedad?
Regla: Una columna no calificada se refiere a la tabla
declarada en la consulta anidada más interior
Si en una consulta anidada es necesario usar columnas de
tablas declaradas en una consulta exterior calificar
* Nombre y apellidos de cada empleado con familiares de igual nombre y sexo que él
SELECT nombre, apellido FROM Empleado E
WHERE nss IN ( SELECT nsse FROM Familiar
WHERE nss=nsse AND nombre_familiar=nombre
AND sexo= E.sexo );
Tema 2. Modelo relacional de datos
125
SQL-92
Consultas anidadas (5): correlación
• Una consulta exterior y otra anidada están correlacionadas
si una condición de la anidada contiene columnas de
una tabla declarada en la consulta exterior
SELECT nombre, apellido FROM Empleado
WHERE nss IN ( SELECT nsse FROM Familiar
WHERE nss=nsse AND sexo=‘F’ );
• La consulta anidada se evalúa una vez para cada fila
(o combinación de filas) de la consulta exterior
– Evalúa la consulta anidada para cada fila de EMPLEADO,
– Si el valor de nss de la fila EMPLEADO está en el resultado de la consulta
anidada, selecciona la fila EMPLEADO para el resultado final
• Una consulta anidada que use el operador = o IN
siempre puede expresarse como una reunión (join)
SELECT E.nombre, E.apellido
FROM Empleado, Familiar D
WHERE nss=nsse AND D.sexo=‘F’;
Tema 2. Modelo relacional de datos
126
63
SQL-92
Consultas anidadas (6): EXISTS
• Operador EXISTS (S): comprobación de tablas vacías
–Devuelve TRUE si la tabla S contiene al menos una fila
–Devuelve FALSE si S es una tabla vacía (sin filas)
L S suele ser una consulta anidada correlacionada
* Nombre y apellido de cada empleado con familiares de igual nombre y sexo que él
SELECT E.nombre, E.apellido FROM Empleado E
WHERE EXISTS ( SELECT * FROM Familiar
WHERE nsse=nss AND nombre_familiar=nombre
AND sexo
sexo=E.sexo
E.sexo );
* Nombres de empleados sin familiares
SELECT nombre, apellido FROM Empleado E
WHERE NOT EXISTS (SELECT * FROM Familiar WHERE nsse=nss);
127
Tema 2. Modelo relacional de datos
SQL-92
Consultas anidadas (y 7): UNIQUE
•
Operador UNIQUE (S): Comprobación de filas duplicadas
– Devuelve TRUE si NO hay filas repetidas en S
L S suele ser una consulta anidada correlacionada
* Nombres y apellidos de los empleados que trabajan en un único proyecto
SELECT nombre, apellido FROM Empleado
WHERE UNIQUE ( SELECT nsse
FROM Trabaja_en
WHERE nsse = nss );
* Nombres
Nombres, apellidos y salario de los empleados con un solo familiar
SELECT nombre, apellido, salario FROM Empleado
WHERE UNIQUE ( SELECT *
FROM Familiar
WHERE nsse = nss );
Tema 2. Modelo relacional de datos
128
64
SQL-92
Nulos
•
Null
– Ausencia o desconocimiento de información
– Comparar NULL con cualquier cosa da FALSE
•
Operador IS NULL ,, IS NOT NULL
v IS NULL
– es TRUE si v es NULL
v IS NOT NULL
– es TRUE si v es un valor no NULL
* Nombres de empleados sin supervisores
SELECT nombre, apellido FROM Empleado
WHERE nssjefe IS NULL;
Tema 2. Modelo relacional de datos
129
SQL
Ejercicios I
Tema 2. Modelo relacional de datos
130
65
SQL-92
Funciones agregadas
•
Función COUNT( )
•
Funciones SUM( ), MAX( ), MIN( ), AVG( )
– Cuenta el número de filas o de valores especificados en una consulta
– Suma,
S
máximo,
á i
mínimo
í i
y media
di aritmética
it éti (promedio)
(
di )
– Aplicadas a un multiconjunto (saco, bag) de valores numéricos
L Pueden aparecer en cláusula
SELECT
* Suma de los salarios y salario máximo, mínimo y medio de los empleados
SELECT SUM(salario), MAX(salario), MIN(salario), AVG(salario)
FROM EMPLEADO;
* Suma de los salarios y salario máximo, mínimo y medio de empleados del depto. de Investigación
SELECT SUM(salario), MAX(salario), MIN(salario), AVG(salario)
FROM Empleado, Departamento
WHERE nd=númerod AND nombred=‘Investigación’;
L También pueden aparecer en cláusula
HAVING (*se verá*)
131
Tema 2. Modelo relacional de datos
SQL-92
FUNCIONES
AGREGADAS
Funciones agregadas (2): uso de * y de DISTINCT
•
Uso de *
* Número total de empleados de la compañía
SELECT COUNT(*)
( ) FROM Empleado
p
(
cuenta filas))
* Contar el número de empleados de la compañía que tienen un jefe
SELECT COUNT(nssjefe) FROM Empleado;
(
cuenta filas con nssjefe no NULL)
* Número de empleados en el departamento de Investigación
SELECT COUNT(*) FROM Empleado, Departamento
WHERE nd=númerod AND nombred=‘Investigación’;
•
Uso de DISTINCT
* Contar el nº de valores distintos de salario que pueden cobrar los empleados
SELECT COUNT(salario) FROM Empleado;
Error: NO se eliminan duplicados, así que COUNT(salario) ≡ COUNT(*)
SELECT COUNT(DISTINCT salario) FROM Empleado; OK !!
Tema 2. Modelo relacional de datos
132
66
SQL-92
Funciones agregadas (y 3) y correlación
• Es posible que una consulta anidada y correlacionada con
otra exterior, incluya una función agregada
* Nombres de los empleados con 2 o más familiares
SELECT apellido, nombre FROM Empleado
WHERE 2 ≤ ( SELECT COUNT(*)
FROM Familiar
WHERE nss=nsse );
Tema 2. Modelo relacional de datos
133
SQL-92
Agrupación
•
Cláusula GROUP BY
– Para formar subgrupos de filas dentro de una tabla
– Los grupos se forman según el valor de las columnas de agrupación
– Las filas de cada grupo tendrán el mismo valor en las columnas
de agrupación
•
Aplicación de funciones agregadas a grupos de filas
* Para cada departamento, obtener su número, cuántos empleados tiene dicho departamento y el salario medio de los
empleados del mismo
SELECT nd, COUNT(*), AVG(salario)
FROM Empleado
GROUP BY nd ; ← una columna de agrupación
Las columnas de agrupación deben aparecer en la cláusula
SELECT, antes de cualquier función agregada, para que su valor
(único para cada grupo) aparezca junto al resultado de aplicar la
función al grupo
Tema 2. Modelo relacional de datos
134
67
SQL-92
Agrupación (2)
•
Cláusula HAVING
– Siempre junto a GROUP BY
– Condición que deben cumplir los grupos de filas asociados a
cada valor de las columnas de agrupación
– Un grupo que no cumple la condición, no es seleccionado para el
resultado
* Para cada proyecto en el que trabajen más de dos empleados, obtener el número y nombre del proyecto, y el nº de
empleados que trabajan en él
SELECT numerop, nombrep, COUNT(*)
FROM Proyecto, Trabaja_en
WHERE numerop=nump
GROUP BY numerop, nombrep
HAVING COUNT(*) > 2 ;
135
Tema 2. Modelo relacional de datos
SQL-92
Agrupación (y 3)
• WHERE... se aplica a filas individuales
• HAVING... se aplica a grupos de filas
* Nº de empleados cuyos salarios superan los 1.800€ en cada departamento, pero sólo en el caso
de departamentos en los que trabajen más de 5 empleados
(* Consulta incorrecta ¿por qué? *)
(* Consulta correcta *)
SELECT nombred, COUNT(*)
FROM Departamento, Empleado
WHERE númerod
númerod=nd
nd
AND salario>1800
GROUP BY nombred
HAVING COUNT(*) > 5 ;
SELECT nombred, COUNT(*)
FROM Departamento, Empleado
WHERE númerod=nd
AND salario>1800
AND nd IN (SELECT nd
FROM Empleado
GROUP BY nd
HAVING COUNT(*) > 5)
GROUP BY nombred ;
(* pista: orden de ejecución *)
Tema 2. Modelo relacional de datos
136
68
SQL-92
Tablas reunidas
•
•
Reunión especificada en la cláusula FROM de una consulta
Hasta ahora la hemos especificado
p
en cláusulas FROM y WHERE
* Nombres y dirección de empleados del departamento de Investigación
SELECT nombre, apellido, direccion
FROM Empleado, Departamento
WHERE nombred=‘Investigacion’
AND nd=numerod;
•
← reunión de tablas
← condición de reunión
Consultas más comprensibles: separa condiciones de reunión y de selección
* Nombres y dirección de empleados del departamento de Investigación
SELECT nombre, apellido, direccion
FROM (Empleado JOIN Departamento ON nd=numerod)
WHERE nombred=‘Investigacion’;
← tabla reunida
Tema 2. Modelo relacional de datos
137
SQL-92
Tablas reunidas (2): anidamiento
• Es posible anidar varias especificaciones de reunión de
tablas
* Para cada proyecto ubicado en ‘Santiago’, obtener el nº de proyecto, el nº del departamento que
lo controla y el apellido, dirección y fecha de nacimiento del gerente de ese departamento
SELECT númerop, númd, apellido, dirección, fechan
FROM ( ( Proyecto JOIN Departamento ON númd=númerod
)
JOIN Empleado ON nssdire=nss )
WHERE lugarp=‘Santiago’;
Tema 2. Modelo relacional de datos
138
69
SQL-92
Reunión Interna de tablas (inner join)
• Es el tipo de reunión “por defecto”
SELECT ...
FROM ( R1 JOIN R2 ON <condición
<condición_reunión>
reunión> )
WHERE ...
• Si existe una fila t1 en R1 y otra fila t2 en R2, tales que cumplen la
condición de reunión, la tabla resultado (reunida) incluirá la fila obtenida
al combinar t1 y t2
SELECT E.nombre AS nom_empleado, S.nombre AS nom_supervisor
FROM (Empleado E JOIN Empleado S ON E.nssjefe
E nssjefe = S.nss);
S nss);
–Son excluidas las filas EMPLEADO con NULL en nssjefe
• También puede especificarse como
R1 INNER JOIN R2 ON <condición_reunión>
Tema 2. Modelo relacional de datos
139
SQL-92
Reunión Natural de tablas (natural join)
•
Sin condición de reunión explícita
SELECT ...
FROM ( R1 NATURAL JOIN R2 )
WHERE ...
•
Equi-reunión implícita para cada par de columnas con igual nombre en
una y otra tabla
̶ Sólo se incluye una de estas columnas en el resultado
̶ Si no coinciden los nombres de las columnas, es necesario
RENOMBRAR una de ellas mediante AS en la cláusula FROM
SELECT nombre,
b apellido,
llid direccion
di
i
FROM ( Empleado NATURAL JOIN (Departamento AS DEP(nombred, nd,
dire, fech)) )
WHERE nombred=‘Investigacion’;
Tema 2. Modelo relacional de datos
140
70
SQL-92
Reunión Externa de tablas (outer join)
•
Útil si en una reunión se necesita obtener las filas…
– con valor NULL en las columnas de reunión, o
– sin correspondencia en la otra tabla
•
Tipos de reunión externa:
– LEFT [OUTER] JOIN
– RIGHT [OUTER] JOIN
– FULL [OUTER] JOIN
Reunión externa izquierda
Reunión externa derecha
Reunión externa completa o total
SELECT E.nombre AS nom_empleado, S.nombre AS nom_supervisor
FROM (Empleado E LEFT OUTER JOIN Empleado S ON E.nssjefe=S.nss);
̶
Obtiene también los empleados sin supervisor (con NULL en nssjefe)
141
Tema 2. Modelo relacional de datos
SQL-92
Evaluación de consultas
• En una consulta SQL hay un máximo de 6 cláusulas
• Sólo son obligatorias SELECT y FROM
• Orden de especificación de las cláusulas:
SELECT <lista columnas>
columnas o funciones que se van a obtener
FROM <lista tablas>
tablas necesarias (incluso las reunidas)
WHERE <condición para filas>
condiciones para selección de filas
GROUP BY <lista columnas agrupación>
especificación del
agrupamiento de filas
HAVING <condición para grupos>
condición para selección de grupos de
filas
ORDER BY <lista columnas ordenación>
Tema
2. Modelo relacional de datos
resultado
orden de presentación del
142
71
SQL-92
Evaluación de consultas (2)
• Orden de evaluación de las cláusulas:
1) FROM (es decir, la reunión o join de tablas, si se especifica más de una)
2) WHERE
3) GROUP BY
4) HAVING
5) SELECT
6) ORDER BY
• Diversas formas de especificar una misma consulta
Ejemplo: es posible expresar una consulta utilizando...
a) condiciones de reunión en cláusula WHERE, o
b) tablas reunidas en la cláusula FROM, o
c) consultas anidadas y el operador de comparación IN ...
Flexibilidad
143
Tema 2. Modelo relacional de datos
SQL-92
Evaluación de consultas (y 3)
• Ventajas e inconvenientes de esta flexibilidad:
☺ – el usuario elige la técnica o enfoque más cómodo
– Confusión del usuario: ¿qué técnica uso?
– Algunas técnicas son más eficientes que otras
el usuario debe determinar cuál
• En condiciones ideales...
– Usuario: se preocupa sólo de especificar la consulta correctamente
– SGBD: se ocupa de ejecutar la consulta de manera eficiente
• Pero en la práctica
á
no suele ser así...
í
conviene saber qué tipos de consulta son más y menos costosos
Recomendación (optimización de consultas):
Consultas con mínimo anidamiento correlacionado
y mínimo ordenamiento implícito
Tema 2. Modelo relacional de datos
144
72
SQL-92
Inserción de datos
• Orden INSERT
– Añade una fila completa a una tabla
– Incluye nombre de la tabla y lista de valores para las columnas, escritos
en igual
i
l orden
d
all especificado
ifi d en la
l orden
d CREATE TABLE
INSERT INTO Empleado
VALUES ( 'Ricardo', ‘C’, 'Martínez', '653298653123', ‘987654321’, '30-DIC-52',
'Olmo 98, Cedros, MX', ‘M’, 37000, '987654321321', 4 ) ;
– Si se desea poner los valores de las columnas en cualquier orden, hay que
especificar los nombres de las columnas en dicho orden
INSERT INTO Empleado ( nombre, apellido, nss, nif, nd, salario,
nssjefe, direccion, fechan, sexo )
VALUES ( 'Ricardo', ‘C’, 'Martínez', '653298653123', ‘987654321’, 4, 37000,
'987654321321', 'Olmo 98, Cedros, MX', '30-DIC-52', ‘M’ ) ;
Tema 2. Modelo relacional de datos
145
SQL-92
Inserción (2)
• Inserción de varias filas en una sola orden INSERT
– Filas separadas por comas
– Cada
C d fila
fil se encierra
i
entre
t paréntesis
é t i
• Especificación explícita de algunas columnas (y no todas)
– Omisión de columnas cuyo valor se desconoce
– Cada columna no especificada tomará el...
· valor por omisión: valor tomado de su cláusula DEFAULT, o
· NULL: si la columna permite nulos y no se definió cláusula
DEFAULT para la misma
* Inserción de un empleado del que sólo se conoce su nombre, apellidos, nss y
nif
INSERT INTO Empleado (nombre, apellido, nss, nif)
VALUES ( 'Rubén', 'Ripoll', '553298653111‘, ‘11222333R’ ) ;
Tema 2. Modelo relacional de datos
146
73
SQL-92
Inserción (3): Restricciones de Integridad
• Si SGBD con implementación total de SQL-92
- El SGBD maneja e impone toda RI definida en esquema de BD (LDD)
• Si SGBD con implementación
p
de algunas
g
RI
- Menor complejidad, mayor eficiencia
- SGBD implementa comprobaciones para imponer RI que sí maneja
INSERT INTO Empleado (nombre, apellido, nd) VALUES ( 'Roberto', 'Huertas',
2);
Inserción rechazada: no se incluye valor para nss, que debe ser NOT NULL
- Programador debe asegurar la no violación de las RI no manejadas por
el SGBD
LSupongamos que no existe departamento con numerod=8
INSERT INTO Empleado (nombre, apellido, nss, nif, nd)
VALUES ( 'Roberto', 'Huertas', '980760540222', ‘22333444H’, 8 ) ;
Si el SGBD sí maneja la Integridad Referencial
Inserción rechazada
Si el SGBD NO soporta la Integridad Referencial
Inserción permitida
¡el programador debe asegurar que esto no pase!
Tema 2. Modelo relacional de datos
147
SQL-92
Inserción (y 4): filas resultado de una consulta
• Carga de una tabla con información sinóptica de la BD
Sea una tabla INFO_DEPTOS vacía. En ella queremos almacenar los nombres de cada
departamento, su nº de empleados y el salario conjunto de los empleados del mismo.
INFO_DEPTOS ( nombre_depto, num_emps, sal_total)
INSERT INTO Info_deptos ( nombre_depto, num_emps, sal_total )
SELECT nombred, COUNT(*), SUM(salario)
FROM Departamento, Empleado
WHERE númerod=nd
GROUP BY nombred ;
– Es posible hacer SELECT ... FROM Info_deptos ...
– 1 INFO_DEPTOS
INFO DEPTOS puede contener información no actualizada
Si se modifica información en EMPLEADO y/o DEPARTAMENTO, los
cambios no se reflejarán en la tabla INFO_DEPTOS
Una vista sí “contiene” siempre los datos más actuales (*se verá*)
Tema 2. Modelo relacional de datos
148
74
SQL-92
Eliminación de datos
• Orden DELETE
– Elimina filas completas de una tabla
– Sólo una tabla en cláusula FROM
– Cláusula WHERE para seleccionar las filas que eliminar
Si no hay WHERE, se eliminan todas las filas
La tabla permanece, pero queda vacía
DELETE FROM Empleado ;
todas las filas
DELETE FROM Empleado WHERE apellido=‘Bojórquez’;
0 filas
DELETE FROM Empleado WHERE nss=‘123456789012’ ;
1 fila
DELETE FROM Empleado
E l d
WHERE nd IN ( SELECT numerod FROM Departamento
WHERE nombre=‘Investigación’) ;
4 filas
• Propagación de eliminaciones
– Según acciones de mantenimiento de la Integridad Referencial
especificadas con LDD en los CREATE TABLE (esquema de BD)
Tema 2. Modelo relacional de datos
149
SQL-92
Actualización de datos
• Orden UPDATE
– Modifica valores de columnas en una o más filas de una tabla
– Se modifican filas de una sola tabla a la vez
– Cláusula SET especifica columnas que modificar y nuevos valores
– Cláusula WHERE para seleccionar filas que actualizar
Si no hay WHERE, se aplica la modificación a todas las filas
* Para el proyecto 10, cambiar el lugar a Belén y el nº de depto controlador al 5
UPDATE Proyecto SET lugarp = ‘Belen’, númd = 5
WHERE numerop=10 ;
• Propagación de modificaciones
– Si cambia un valor de clave candidata, este cambio se propaga a
valores de clave ajena de filas de otras tablas, si así se especificó en
las acciones de mantenimiento de la Integridad Referencial en la
definición de la tabla con CREATE TABLE
Tema 2. Modelo relacional de datos
150
75
SQL-92
Actualización (y 2)
• Modificación de varias filas a la vez con UPDATE
* Conceder a todo empleado del departamento de Investigación un aumento
salarial del 10%
UPDATE Empleado SET salario = salario*1.1
WHERE nd IN (SELECT númerod
FROM Departamento
WHERE nombred=‘Investigación’) ;
• NULL o DEFAULT como nuevo valor de una columna
UPDATE Empleado SET salario = DEFAULT;
UPDATE Empleado SET nssjefe = NULL
WHERE ... ;
151
Tema 2. Modelo relacional de datos
SQL-92
LDD: Definición de datos
• Esquema de Base de Datos Relacional
- Agrupa tablas y otros elementos, de una misma aplicación
- 1as versiones de SQL: todas las tablas dentro de un esquema
q
único y
global a todas las aplicaciones que accedían a la BD
• Orden CREATE SCHEMA: definición/creación
de esquemas
CREATE SCHEMA <nombre de esquema>
AUTHORIZATION <identificador de autorización>
• <nombre de esquema> identifica el esquema
• <identificador de autorización> usuario/cuenta propietaria del esquema
CREATE SCHEMA Compañía AUTHORIZATION JSILVA ;
– A continuación puede especificarse las definiciones de los elementos
contenidos en dicho esquema
• Elementos del esquema:
Tablas, Vistas, Dominios, Autorizaciones, Restricciones, etc.
Tema 2. Modelo relacional de datos
152
76
SQL-92
Catálogo de base de datos relacional
• Conjunto nombrado de esquemas de BD en un entorno SQL
Contiene un esquema especial, INFORMATION_SCHEMA, que
almacena datos sobre la definición de todos los elementos
de todos los esquemas existentes en el catálogo
El Diccionario de Datos (Data Dictionary) de ORACLE se corresponde
con el INFORMATION_SCHEMA del estándar SQL-92
- Es posible compartir elementos (dominios, etc.) entre diferentes
esquemas del mismo catálogo
- Sólo pueden definirse restricciones de integridad referencial
entre tablas que existan en esquemas dentro del mismo
catálogo
• Concepto incorporado en la versión SQL-92 del estándar
153
Tema 2. Modelo relacional de datos
SQL-92
LDD: definición de tablas
• Orden CREATE TABLE
– Define ((crea)) una tabla: nombre,, columnas y restricciones
– Nombre único dentro del esquema
– Para cada Columna...
• nombre,
• tipo de datos (dominio)
• restricciones de columna
– Restricciones
R ti i
d tabla...
de
t bl
•
•
•
•
de clave candidata,
de integridad de entidad,
de integridad referencial, o
restricciones de otro tipo
Tema 2. Modelo relacional de datos
CREATE TABLE Empleado (
nombre ...
apellido ...
nss ...
nif ...
fechan ...
direccion ...
sexo ...
salario ...
nssjefe ...
nd …
);
154
77
SQL-92
LDD: definición de tablas
•
Indicación del esquema al que pertenece una tabla
– Esquema Explícito
CREATE TABLE Compañia.Empleado
Compañia Empleado ...
– Esquema Implícito en el contexto
CREATE TABLE Empleado ...
•
Ordenamiento de columnas y filas
– Columnas ordenadas tal como aparecen en CREATE TABLE
– Las
L fil
filas no están
tá ordenadas
d
d
• Las tablas creadas con CREATE TABLE son
tablas BASE
– El SGBD las almacena físicamente en algún fichero de la BD
Tema 2. Modelo relacional de datos
155
SQL-92
LDD: definición de tablas
• Especificación del tipo de datos de una columna
1.Especificar directamente el tipo de datos tras nombre de la
columna
l
CREATE TABLE Empleado (
nombre VARCHAR(15) ...
... );
2.Definir un dominio y usar su nombre como tipo de datos
– Facilita cambio del tipo
p de datos usado por
p muchas columnas
– Esquema más comprensible
CREATE DOMAIN Nombres VARCHAR(15);
...
CREATE TABLE Empleado (
nombre NOMBRES ...
... );
Tema 2. Modelo relacional de datos
156
78
SQL-92
LDD: tipos de datos
• Numéricos
–Enteros y Reales
· INTEGER (también INT),
INT) SMALLINT,
SMALLINT
· FLOAT, REAL, DOUBLE PRECISION
–Con formato
· DECIMAL(p,e) ( también DEC(p,e) ó NUMERIC(p,e) )
p: precisión, e: escala. El valor por omisión de la escala es e = 0
• Cadena de caracteres
–Longitud fija
CHAR(n)
–Longitud variable VARCHAR(n)
( n: nº caracteres )
( n: máximo nº caracteres )
• Cadena de Bits
–Longitud fija
BIT(n) (n: nº bits)
–Longitud variable BIT VARYING(n)
n:máx nº bits. Por omisión n=1
157
Tema 2. Modelo relacional de datos
SQL-92
LDD: tipos de datos
• Temporales
· DATE (10 posiciones) = YEAR, MONTH, DAY
· TIME (8 posiciones) = HOUR, MINUTE, SECOND
(yyyy-mm-dd)
(hh:mm:ss)
– Sólo permitidas fechas y horas válidas
· TIMESTAMP (marca de tiempo)
– DATE, TIME, fracciones de segundo y desplazamiento respecto al huso
horario estándar (WITH TIME ZONE)
· INTERVAL
– Período de tiempo,
tiempo para incrementar/decrementar el valor actual de una
fecha, hora o marca de tiempo
– Se califica con YEAR/MONTH ó DAY/TIME para indicar su naturaleza
Tema 2. Modelo relacional de datos
158
79
SQL-92
LDD: definición de dominios de datos
CREATE DOMAIN <nombre dominio> <tipo de datos>
[ DEFAULT <valor defecto> ]
[ <lista de definición de restricciones de dominio> ] ;
- <tipo de datos>: uno de los proporcionados por el SGBD (built-in)
- <valor defecto>: (opcional)
- Especifica el valor por omisión para columnas definidas de este dominio
- Será asignado a cada columna con dicho dominio, si no tiene ya su propia
cláusula DEFAULT
- <lista de definición de restricciones de dominio>: (opcional)
- R
Restric.
t i Integridad
I t id d que se aplican
li
a toda
t d columna
l
definida
d fi id sobre
b ell dominio
d i i
- Cada RI puede tener un nombre: cláusula CONSTRAINT <nombre_RI>
* Ejemplo: enumeración de posibles valores componentes del dominio
CREATE DOMAIN Color VARCHAR(8) DEFAULT ‘sinColor’
CONSTRAINT color_valido
CHECK (VALUE IN ( ‘rojo’, ‘amarillo’, ‘azul’, ‘verde’, ‘sinColor’ ) ) ;
Tema 2. Modelo relacional de datos
159
SQL
Ejercicios II
Tema 2. Modelo relacional de datos
160
80
SQL-92
LDD: definición de tablas
• Especificación de restricciones de columna
–Cláusula NULL o NOT NULL
• Opción de nulo: indica si una columna puede contener o no NULL
CREATE TABLE Empleado (...
nombre VARCHAR(15) NOT NULL, ... );
• Por omisión, se asume NULL
• La restricción NOT NULL es obligatoria para columnas
componentes de una clave primaria
–Cláusula DEFAULT <valor>
• V
Valor
l por omisión
i ió (o
( por defecto)
d f t )
CREATE TABLE Empleado ( ...
salario DECIMAL(5,2) DEFAULT 1000 NULL,... );
• Si una columna no tiene DEFAULT, su valor por defecto es...
– El de su dominio, si su tipo es un dominio que incluye DEFAULT
– NULL en cualquier otro caso, siempre que la columna permita NULL
Tema 2. Modelo relacional de datos
161
SQL-92
LDD: definición de tablas
• Especificación de restricciones de tabla
–Cláusula PRIMARY KEY (<lista_columnas>)
• Columnas que componen la clave primaria
–Cláusula UNIQUE (<lista_columnas>)
• Columnas que forman una clave alternativa
–Cláusula FOREIGN KEY (<lista_columnas>)
REFERENCES <tabla>(<lista_columnas>)
• Columnas clave externa (Integridad Referencial)
• SQL-92 permite que una clave externa se refiera a una clave
primaria o una clave alternativa
–Cláusula CHECK (<expresión>)
• Condición sobre los valores de las columnas que debe cumplir
toda fila de la tabla
Tema 2. Modelo relacional de datos
162
81
SQL-92
LDD: definición de tablas
CREATE TABLE Empleado (
nombre VARCHAR(15) NOT NULL,
apellido VARCHAR(15) NOT NULL,
nss
CHAR(12)
NOT NULL,
nif
CHAR(9)
NOT NULL,
fechan DATE
NULL,
direccion VARCHAR(30) ,
sexo
CHAR(1)
,
salario DECIMAL(5,2) DEFAULT 1000 NULL,
nssjefe CHAR(12)
,
nd
NUMERIC(2)
( )
NOT NULL,,
PRIMARY KEY ( nss ),
UNIQUE ( nif ),
CHECK ( nssjefe <> nss ),
CHECK ( sexo IN (‘H’, ‘M’) ),
FOREIGN KEY (nssjefe) REFERENCES Empleado(nss),
FOREIGN KEY (nd) REFERENCES Departamento(numerod)
);
Tema 2. Modelo relacional de datos
163
SQL-92
LDD: definición de tablas
•
Especificación de restricciones de tabla (cont.)
- Dar nombre a una restricción es opcional, pero muy conveniente
CONSTRAINT <nombre_RI> <restricción>
- El nombre de restricción debe ser único dentro del mismo esquema
- Identifica una restricción, por si después debe ser eliminada o
sustituida por otra
p
(
CREATE TABLE Empleado
...,
CONSTRAINT pk_empleado PRIMARY KEY ( nss ),
CONSTRAINT nif_unico
UNIQUE ( nif ),
CONSTRAINT jefe_ok
CHECK ( nssjefe <> nss ),
... );
Tema 2. Modelo relacional de datos
164
82
SQL-92
LDD: definición de tablas
•
Especificación de restricciones de tabla
(cont.)
- Si la restricción afecta sólo a una columna, puede especificarse en
la definición de dicha columna (en la misma línea)
- Por ejemplo, si una clave externa no es compuesta, no se necesita la
cláusula FOREIGN KEY
CREATE TABLE Empleado (
nombre VARCHAR(15) NOT NULL,
nss
CHAR(12) PRIMARY KEY,
CHAR(9)
( ) NOT NULL UNIQUE,
Q ,
nif
nssjefe
CHAR(12) NULL REFERENCES Empleado(nss),
nd
NUMERIC(2) NOT NULL REFERENCES Departamento(numerod),
...,
CONSTRAINT jefe_ok CHECK ( nssjefe <> nss ),
... );
165
Tema 2. Modelo relacional de datos
SQL-92
LDD: definición de tablas
•
Acciones de mantenimiento de la integridad referencial
Cláusulas ON DELETE <acción>
y ON UPDATE <acción>
<acción> ∈ { NO ACTION, CASCADE, SET NULL, SET DEFAULT }
CREATE TABLE Empleado (
...,
CONSTRAINT jefe_emp FOREIGN KEY (nssjefe)
REFERENCES Empleado(nss)
ON DELETE SET NULL
ON UPDATE CASCADE,
CASCADE
);
CONSTRAINT dep_emp FOREIGN KEY (nd)
REFERENCES Departamento(numerod)
ON DELETE NO ACTION
ON UPDATE CASCADE
Tema 2. Modelo relacional de datos
166
83
SQL-92
LDD: definición de vistas
• Una vista es una tabla derivada de otras tablas
• Son tablas virtuales, pues no necesariamente existen en forma física
• Sentencia de definición o creación de una vista
CREATE VIEW <nombre_vista> [ (<lista_nombres_columnas>) ]
AS <consulta_de_definición>
• La consulta de definición…
– determina el contenido de la vista
– contiene las tablas base: tablas o vistas de las que se deriva la vista
(también llamadas tablas de definición)
CREATE VIEW Familiar
Familiar_de_Empleado
de Empleado (empleado
(empleado, familiar
familiar,
parentesco)
AS SELECT nombre, nombre_familiar, parentesco
FROM Empleado, Familiar
WHERE nss = nsse;
Tema 2. Modelo relacional de datos
167
SQL-92
LDD: definición de vistas
• Por defecto, la vista ‘hereda’ los nombres de las columnas...
- seleccionadas desde las tablas base
- siempre que ninguna columna sea el resultado de una operación aritmética o
función de agregados
CREATE VIEW Empleado_en_Proyecto
AS SELECT nombre, apellido, nombrep, horas
nombres que
FROM Empleado, Proyecto, Trabaja_en
hereda
la vista
WHERE nss = nsse AND nump = numerop ;
• Definición de nuevos nombres para columnas de la vista
CREATE VIEW Info_Depto (nombre_depto, num_de_emps, sal_total)
AS SELECT nombred, COUNT(*), SUM(salario)
FROM Departamento, Empleado
WHERE numerod = nd
GROUP BY nombred ;
Tema 2. Modelo relacional de datos
168
84
SQL-92
LDD: definición de vistas
• Un estado de la vista EMPLEADO_EN_PROYECTO
Empleado_en_Proyecto
nombre
apellido
nombrep
horas
José
Silva
ProductoX
32.5
Ramón
Nieto
ProductoZ
40.0
José
Silva
ProductoY
07.5
Josefa
Barceló
ProductoX
20.0
Federico
Vizcarra
ProductoY
10.0
Federico
Vizcarra
ProductoZ
10 0
10.0
Josefa
Barceló
ProductoY
20.0
...
...
...
...
Tema 2. Modelo relacional de datos
169
SQL-92
LDD: definición de vistas
• Las vistas pueden utilizarse como mecanismo de...
- Simplificación de consultas
- Seguridad (*se verá en el tema de seguridad*)
- Adaptación de la información a las necesidades de cada usuario o
grupo de usuarios
• Característica fundamental de las vistas
Actualización Permanente
- El responsable de esta característica es el SGBD
La vista
ista no se crea
c ea cuando
c ando se define,
define sino cuando
c ando se
consulta
Una vista no “contiene información”, sino que “deja ver
información” almacenada en sus tablas base
Tema 2. Modelo relacional de datos
170
85
SQL-92
LDD: definición de vistas
• El SGBD traduce cualquier sentencia SQL sobre la vista a una
expresión equivalente sobre sus tablas base: reemplaza el
nombre de la vista por su consulta de definición y ejecuta
CREATE VIEW Veterano AS
SELECT nombre, nif, nss, fechan, nd FROM Empleado WHERE
fechan<’01/01/1970’;
Sentencia de usuario
Traducción
SELECT * FROM VETERANO
WHERE nombre LIKE ‘G%’;
SELECT nombre, nif, nss, fechan, nd FROM EMPLEADO
WHERE fechan < ‘01/01/1970’ AND nombre LIKE ‘G%’;
INSERT INTO VETERANO
INSERT INTO EMPLEADO ((nombre,, nif,, nss,, fechan,, nd))
VALUES (‘Eva’, ‘12345678E’,
VALUES (‘Eva’ ‘12345678E’, ‘123456789012’, ‘14/11/1947’, 4);
‘123456789012’, ‘14/11/1947’, 4);
UPDATE VETERANO SET nd=1
WHERE nd=2;
UPDATE EMPLEADO SET nd=1
WHERE fechan < ‘01/01/1970’ AND nd=2;
DELETE FROM VETERANO
WHERE nif = ‘12345678E’;
DELETE FROM EMPLEADO
WHERE fechan < ‘01/01/1970’ AND nif = ‘12345678E’;
Tema 2. Modelo relacional de datos
171
SQL-92
LDD: consulta a través de vistas
• Las vistas no tienen ninguna limitación en operaciones de consulta
• El usuario no distingue si el elemento al que accede es una tabla base o
una vista
* Nombres de los empleados y de sus hijos/as
SELECT empleado, familiar
FROM Familiar_de_empleado WHERE parentesco LIKE ‘Hij_’ ;
* Datos del departamento ‘Investigación’
SELECT * FROM Info_Depto WHERE
nombre_depto=‘Investigación’ ;
* Nombres y apellidos de los empleados que trabajan en el proyecto 'ProductoX'
SELECT nombre, apellido, nombrep
FROM Empleado_en_Proyecto
WHERE nombrep=‘ProductoX’ ;
Tema 2. Modelo relacional de datos
172
86
SQL-92
LDD: modificación a través de vistas
• La actualización de datos a través de vistas tiene
algunas limitaciones
- Por un lado, actualizar a través de una vista definida sobre
varias tablas base suele dar problemas, pues puede haber
ambigüedad
UPDATE Empleado_en_Proyecto SET nombrep = ‘ProductoZ’
WHERE apellido=‘Silva’ AND nombre=‘José’
AND nombrep=‘ProductoX’;
Esta modificación puede traducirse a dos actualizaciones distintas
de las tablas base de la vista (EMPLEADO, PROYECTO y
TRABAJA_EN), como se muestra en la siguiente diapositiva…
Tema 2. Modelo relacional de datos
173
SQL-92
LDD: modificación a través de vistas
UPDATE Trabaja_en SET nump = (SELECT numerop FROM Proyecto
WHERE nombrep = ‘ProductoZ’)
WHERE nsse = (SELECT nss FROM Empleado
WHERE apellido = ‘Silva’ AND nombre = ‘José’)
AND númp = (SELECT numerop FROM Proyecto
WHERE nombrep = ‘ProductoX’) ;
☺ Modifica los vínculos en TRABAJA_EN: cada fila que relacionaba las
filas de ‘José Silva’ en EMPLEADO y de ‘ProductoX’ en PROYECTO, pasa
a relacionar tal empleado con la fila ‘ProductoZ’ de PROYECTO
UPDATE P
Proyecto
t SET nombrep
b
= ‘P
‘ProductoZ’
d t Z’
WHERE nombrep = ‘ProductoX’ ;
Produce igual efecto que pero modifica nombrep en PROYECTO:
al calcular la vista, mostrará ‘ProductoZ’ para todos los que antes
aparecían con ‘ProductoX’
Tema 2. Modelo relacional de datos
174
87
SQL-92
LDD: modificación a través de vistas
- Por otro lado, algunas actualizaciones a través de vistas
carecen de sentido
UPDATE Info_depto
SET sal_total = 100000
WHERE nombred=‘Investigación’ ;
sal_total se define como la suma de salarios individuales de los
empleados y muchas actualizaciones de las tablas base satisfarían esta
actualización
Así que no se garantiza que “toda vista sea
actualizable”
Tema 2. Modelo relacional de datos
175
SQL-92
LDD: modificación a través de vistas
• Una vista sería actualizable si...
- Implicara una única actualización posible de las tablas
base, o bien
- Hubiera varias actualizaciones posibles, pero
existiera un procedimiento específico de actualización de
tablas base, tal que...
· El usuario pudiera elegir el procedimiento,
especificándolo en la definición de la vista, o bien
· El SGBD pudiera elegir el procedimiento, según la
actualización más probable
Tema 2. Modelo relacional de datos
176
88
SQL-92
LDD: modificación a través de vistas
• En general...
- Una vista con una sola tabla base
SÍ es actualizable
t li bl sii sus columnas
l
contienen
ti
l clave
la
l
primaria u otra clave candidata de la tabla base
– Pues se establece una correspondencia entre cada fila de la vista y
una única fila de la tabla base
- Una vista definida sobre varias tablas mediante
reuniones
NO es actualizable
- Una vista definida mediante agrupación y funciones
agregadas
NO es actualizable
Tema 2. Modelo relacional de datos
177
SQL-92
LDD: modificación a través de vistas
• Opción de verificación de vistas
CREATE VIEW Emp_Precario AS SELECT nombre, apellido, nss, nif, salario, nd
FROM Empleado WHERE salario < 900 ;
*¿Qué pasaría al ejecutar estas sentencias?
INSERT INTO Emp_Precario VALUES (‘Dimas’, ‘Pi', ‘111222333444’, ‘12121212D’, 1025,
1);
UPDATE Emp_Precario SET salario = 950 WHERE nif=‘12345678E’;
• Cláusula WITH CHECK OPTION
- En la definición de toda vista actualizable que se vaya a utilizar para la
modificación de datos
- Indica al SGBD que debe comprobar cada INSERT y UPDATE sobre la vista
vista, y
rechazarlo si su realización implicara que la fila nueva o modificada no
cumpliera la condición de definición
CREATE VIEW Emp_Precario AS SELECT nombre, apellido, nss, salario, nd
FROM Empleado WHERE salario < 900
WITH CHECK OPTION ;
Tema 2. Modelo relacional de datos
178
89
SQL-92
LDD: implementación de vistas
1. Estrategia de actualización de consultas de definición
- Cada consulta sobre la vista se traduce a una consulta sobre las
t bl base
tablas
b
- La vista se rellena de filas a partir de la ejecución de la consulta
- Poco eficiente cuando la <consulta_de_definición> es
compleja, con tiempo de ejecución apreciable, y se aplican muchas
consultas sobre la vista en poco tiempo
2. Estrategia de materialización de vistas
- 1ª consulta sobre la vista
creación de tabla temporal
p
física
- Se conserva la tabla para posteriores consultas sobre la vista
- Necesaria estrategia para actualización incremental de la tabla temporal
tras cualquier modificación sobre las tablas base
actualización permanente
- Si no se hace referencia a la vista tras un tiempo, el sistema la
eliminará (y la recalculará en una consulta futura)
Tema 2. Modelo relacional de datos
179
SQL-92
LDD: Modificación de la estructura (alteración)
de los elementos del esquema de base de
datos
• Alteración de tablas:
ALTER TABLE <nombre_tabla> ... ;
– Adición y Eliminación de Columnas
– Modificación de la Definición de Columnas
– Adición y Eliminación de Restricciones de Tabla
• Alt
Alteración
ió de
d dominios:
d
i i
ALTER DOMAIN <nombre_dominio> ... ;
– Eliminación y Adición de valor por defecto
– Eliminación y Adición de Restricciones de Dominio
Tema 2. Modelo relacional de datos
180
90
SQL-92
LDD: alteración de tablas
•
Adición de una columna a una tabla ya existente
ALTER TABLE <nombre_tabla> ADD <definición_columna> ;
– N
No está
tá permitido
itid NOT NULL en la
l definición
d fi i ió de
d una nueva columna
l
(si es necesaria esta restricción, podrá establecerse después)
* Añadir una columna a EMPLEADO para contener el puesto de trabajo
ALTER TABLE Empleado ADD puesto VARCHAR(12);
• Todas las filas de EMPLEADO tendrán puesto a NULL
– Para introducir un valor para la columna, en cada fila existente:
• Especificar la cláusula DEFAULT al añadir la columna:
ALTER TABLE Empleado
ADD puesto VARCHAR(12) DEFAULT ‘aprendiz’;
• Utilizar después una orden UPDATE
Tema 2. Modelo relacional de datos
181
SQL-92
LDD: alteración de tablas
• Eliminación de una columna de una tabla
ALTER TABLE <nombre_tabla> DROP <nombre_columna> <opción>;
<opción> puede ser...
CASCADE: elimina la columna y toda restricción o vista que le hace referencia
RESTRICT: sólo elimina la columna si ninguna vista ni restricción le referencia
* Eliminación de la columna dirección de la tabla EMPLEADO
ALTER TABLE Empleado
p
DROP direccion CASCADE;;
ALTER TABLE Departamento DROP numerod <opción>;
– Si <opción> = RESTRICT: no elimina la columna ‘numerod’, pues existe una columna ‘EMPLEADO.nd’ que le
hace referencia
– Si <opción> = CASCADE: elimina la columna y la restricción de integridad referencial que vincula
‘EMPLEADO.nd’ con DEPARTAMENTO. La columna ‘EMPLEADO.nd’ no es eliminada, pero deja de ser
clave ajena
Tema 2. Modelo relacional de datos
182
91
SQL-92
LDD: alteración de tablas
•
Modificación de la definición de una columna
ALTER TABLE <nombre_tabla> ALTER <nombre_columna> <acción> ;
<acción> indica la modificación que se desea realizar...
– Eliminación de la cláusula DEFAULT existente
ALTER TABLE Departamento ALTER nssdire DROP DEFAULT;
– Definición de un nuevo valor por omisión
ALTER TABLE Departamento ALTER nssdire SET DEFAULT ‘123456789012’;
Tema 2. Modelo relacional de datos
183
SQL-92
LDD: alteración de tablas
•
Modificación de una restricción de tabla
– La restricción que se desea modificar debe tener un nombre
– Eliminación de una restricción de tabla
ALTER TABLE <nombre_tabla> DROP CONSTRAINT <nombre_RI> <opción>;
ALTER TABLE Empleado DROP CONSTRAINT jefe_emp CASCADE;
– Adición de una restricción de tabla
ALTER TABLE <nombre_tabla>
ADD CONSTRAINT <nombre_RI> <definición_RI>;
ALTER TABLE Empleado
ADD CONSTRAINT salario_ok CHECK (salario > 0);
ALTER TABLE Empleado
ADD CONSTRAINT puesto_ok CHECK (puesto IS NOT NULL);
Tema 2. Modelo relacional de datos
184
92
SQL-92
LDD: alteración de dominios
•
Orden ALTER
DOMAIN <nombre_dominio> <acción>;
<acción> indica la modificación que se desea realizar...
realizar
– Eliminación y Reemplazo del valor por omisión
ALTER DOMAIN <nombre_dominio> DROP DEFAULT;
ALTER DOMAIN <nombre_dominio> SET DEFAULT <valor>;
– Eliminación y Definición de nuevas restricciones de dominio
ALTER DOMAIN <nombre_dominio>
DROP CONSTRAINT <nombre_RI_dominio>;
ALTER DOMAIN <nombre_dominio>
ADD [ CONSTRAINT <nombre_RI_dominio> ] <restricción>;
Tema 2. Modelo relacional de datos
185
SQL-92
LDD: eliminación de elementos del esquema
•
Eliminación de una vista. Orden DROP VIEW
– Destruye una tabla derivada, junto con su definición en el
INFORMATION_SCHEMA del catálogo
g
DROP VIEW <nombre_vista> ;
•
Eliminación de un dominio. Orden DROP DOMAIN
– Destruye un dominio de datos, junto con su definición en el
INFORMATION_SCHEMA del catálogo
DROP DOMAIN <nombre_dominio> <opción> ;
<opción> puede ser...
RESTRICT: destruye
RESTRICT
d t
ell dominio
d i i sii no hay
h ninguna
i
columna
l
definida
d fi id sobre
b él
CASCADE: se elimina el dominio y toda columna definida sobre él pasa a
tener el tipo de datos sobre el que se había definido el dominio
(este aspecto es ampliado en el tema “Integridad en sistemas de bases de
datos relacionales”)
Tema 2. Modelo relacional de datos
186
93
SQL-92
LDD: eliminación de elementos del esquema
•
Eliminación de una tabla. Orden DROP TABLE
– Destruye una tabla base, junto con su definición en el
INFORMATION_SCHEMA del catálogo
g
DROP TABLE <nombre_tabla> <opción>;
<opción> puede ser...
RESTRICT: Destruye la tabla sólo si no se le hace referencia desde ninguna
otra tabla (clave ajena), ni es tabla base de una vista
CASCADE: Elimina la tabla junto con restricciones y vistas que la referencian
•
Eliminación de un esquema. Orden DROP SCHEMA
– Destruye un esquema de BD, junto con su definición en el
INFORMATION
O
O _SC
SCHEMA de
del catálogo
catá ogo
DROP SCHEMA <nombre_esquema> <opción>;
<opción> puede ser...
RESTRICT: Destruye el esquema sólo si no contiene ningún elemento
CASCADE: Elimina el esquema y las tablas, dominios y demás elementos
contenidos en el esquema
187
Tema 2. Modelo relacional de datos
JDBC
• Java DataBase Connectivity
y
• API Java para ejecutar consultas SQL en Bases de Datos
Relacionales.
• Independiente del Sistema Gestor Relacional.
– Similar en concepto a ODBC de Windows.
• Distribuida en dos paquetes:
– java.sql, dentro de J2SE
– javax.sql extensión
ió dentro
d
de
d J2EE
• Para acceder a una base de datos es necesario un driver.
– Implementación de todas las interfaces del API.
Tema 2. Modelo relacional de datos
188
94
JDBC
•
El API ofrece las clases e interfaces para:
p
– Establecer una conexión a una base de datos.
– Ejecutar una consulta.
– Procesar los resultados.
// Establece la conexión
Connection con = DriverManager.getConnection (
"jdbc:odbc:miBD", ”miLogin", ”miPassword");
// Ejecuta la consulta
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT nombre, edad FROM Empleados");
// Procesa los resultados
while (rs.next()) {
String nombre = rs.getString(”nombre");
int edad = rs.getInt(”edad");
}
189
Tema 2. Modelo relacional de datos
Arquitectura
ResultSet
Statement Statement
Statement
Connection
Connection
Aplicación
DriverManager
Driver
Driver
JVM
Access
Tema 2. Modelo relacional de datos
Oracle
190
95
Driver
•
•
Conjunto de clases encargadas de implementar las interfaces del API y acceder
a la base de datos
datos.
Tipos:
– Driver Tipo 1:
• Utilizan un API nativa estándar
• Ejemplo: puente JDBC:ODBC
– Driver Tipo 2:
• Utilizan un API nativa de la base de datos
• Ejemplo: Oracle OCI
– Driver Tipo 3:
• Se
Servidor
do remoto
e oto co
con u
un API ge
genérica.
é ca
• Útil para aplicaciones en internet.
– Driver Tipo 4:
• Totalmente desarrollado en Java
• Ejemplo: Oracle Thin.
191
Tema 2. Modelo relacional de datos
Driver
•
•
•
•
Los drivers Tipo 1 y 2 utilizan código nativo vía JNI.
– Son más eficientes.
Diseño Driver Tipo 3:
– En aplicaciones enterprise favorecen la gestión de las bases de datos,
que se realiza en el servidor.
Carga de un driver: Class.forName(“acme.db.Driver”);
Repositorio de drivers:
– http://industry.java.sun.com/products/jdbc/drivers
Tema 2. Modelo relacional de datos
192
96
Conexión
• Representa
p
una conexión con una base de datos.
• Se obtienen a partir de la clase DriverManager:
– DriverManager.getConnection(“URL”, “login”,
“password”)
– Mantiene un registro de todos los drivers cargados en la
JVM.
• URL identifica el driver y su tipo, la localización de la base de
datos y su nombre:
– jdbc:oracle:oci:dis.um.es/MiBD
• Alternativa a DriverManager: DataSource
193
Tema 2. Modelo relacional de datos
DataSource
•
•
•
•
Actúa como factoría de conexiones.
– Método getConnection()
Abstrae los detalles de acceso:
– Cargar los drivers, URL, login, etc.
– Aplicaciones más portables.
Suelen mantener un pool de conexiones.
Proporcionado por el contenedor utilizando el API JNDI (Java
Naming and Directory Interface).
– Los detalles de acceso se indican en ficheros de configuración.
– Acceso a los servicios de nombres y directorios.
– Ejemplo: acceso a recursos, LDAP.
Tema 2. Modelo relacional de datos
194
97
Consultas SQL
•
•
•
•
El API JDBC no restringe las sentencias que se envían a la BD.
En principio, todos los drivers deben ser compatibles con ANSI SQL-2
Entry Level.
Tipos de sentencias:
– Statement: para sentencias sencillas en SQL.
– PreparedStatement: para consultas preparadas,
• Ejemplo: las que tienen parámetros.
– CallableStatement: para ejecutar procedimientos almacenados en
la BD.
El API distingue dos tipos de consultas:
– Consultas: SELECT
– Actualizaciones: INSERT, UPDATE, DELETE, sentencias DDL.
195
Tema 2. Modelo relacional de datos
Statement
• Son creadas a p
partir de la conexión:
– Statement stmt = conexion.createStatement();
• Ejecución de una consulta:
– stmt.executeQuery(“SELECT * FROM Pedidos”);
– Devuelve un objeto ResultSet.
• Ejecución de una actualización:
– stmt.executeUpdate(“DELETE FROM Pedidos WHERE
codigo = 15”)
– Devuelven un entero indicando los registros actualizados ó 0
si es una consulta DDL.
Tema 2. Modelo relacional de datos
196
98
ResultSet
• Es un p
proxy
y sobre los registros
g
del resultado de la búsqueda.
q
– Controla la recuperación de los registros.
• Representa un cursor (iterador) sobre los resultados.
– Movimiento: métodos next() y previous()
– Inicialmente el cursor está posicionado antes del primer
registro.
• Depende del objeto consulta:
– Cada vez que se realice una consulta se pierden los
resultados.
197
Tema 2. Modelo relacional de datos
ResultSet
• Tenemos dos alternativas p
para acceder a las columnas del
resultado:
– rs.getString(“nombre”); ⇒ Nombre de la columna
– rs.getString(1); ⇒ Posición en la consulta
• El acceso por posición es útil cuando:
– Acceso a una columna derivada, ej. calcular la media
– Cuando hay columnas con los mismos nombres (join)
• Recuperación
ó de los valores de las columnas:
– Métodos de acceso (getXXX).
– Es conveniente leer los datos de izquierda a derecha.
– Para averiguar si se ha leído un nulo: wasNull()
Tema 2. Modelo relacional de datos
198
99
ResultSet – Métodos de
Acceso
Tipo de dato SQL
CHAR
VARCHAR
LONGVARCHAR
NUMERIC
DECIMAL
BIT
TINYINT
SMALLINT
INTEGER
BIGINT
REAL
FLOAT
DOUBLE
BINARY
VARBINARY
DATE
TIME
TIMESTAMP
Método de Acceso
String getString()
String getString()
InputStream
getAsciiStream() ó
getUnicodeString()
java.math.BigDecimal
getBigDecimal()
java.math.BigDecimal
getBigDecimal()
boolean getBoolean()
byte getByte()
short getShort()
int getInt()
l
long
getLong()
tL
()
float getFloat()
double getDouble()
double getDouble()
byte[] getBytes()
InputStream
getBinayStream()
java.sql.Date getDate()
java.sql.Time getTime()
java.sql.TimeStamp
getTimeStamp()
Tema 2. Modelo relacional de datos
199
PreparedStatement
• Problema con Statement:
– Cuando la consulta se realiza dentro de un bucle y varía sólo
en unos valores:
• stmt.executeQuery(“SELECT * FROM Cliente
WHERE codigo = “ + i);
• La base de datos planifica cada consulta.
–
Conviene disponer de una consulta con parámetros.
• PreparedStatement:
– Especialización de Statement que permite definir consultas
parametrizadas.
– La BD sólo planifica la consulta cuando se crea.
– Evitan tener que formatear los datos al construir la
cadena de consulta: ‘ ’ para cadenas, fechas y horas.
Tema 2. Modelo relacional de datos
200
100
PreparedStatement
•
•
•
También se crean a p
partir de la conexión:
– PreparedStatement pstmt =
conexion.prepareStatement(“SELECT * FROM Cliente WHERE
codigo = ?”)
Los parámetros de entrada se especifican por posición utilizando
métodos setXXX:
– psmt.setInt(1, 20);
– Misma equivalencia que los getXXX de ResultSet.
– Los
L valores
l
se conservan entre
t ejecuciones.
j
i
• Borrar parámetros: clearParameters()
Ejecución:
– Consulta: executeQuery().
– Actualización: executeUpdate().
Tema 2. Modelo relacional de datos
201
Transacciones
• Ejecución
j
de bloques
q
de consultas SQL
Q manteniendo las
propiedades ACID (Atomicy-Consistency-Isolation-Durability)
• Una conexión funciona por defecto en modo autocommit:
– Cada consulta representa una sola transacción.
– Método: conexion.setAutocommit(false);
• Definimos bloques de consultas:
– Deshabilitando el modo autocommit.
– Finalizamos la transacción
ó ejecutando commit() o
rollback() sobre la conexión.
Tema 2. Modelo relacional de datos
202
101
Nivel de Aislamiento
Transaccional
•
•
Niveles de aislamiento:
– TRANSACTION_NONE:
• Sin soporte transaccional.
– TRANSACTION_READ_UNCOMMITED:
• Permite lecturas sobre datos no consolidados.
– TRANSACTION_READ_COMMITED:
• Permite lecturas sólo sobre datos consolidados.
• Nivel por defecto.
– TRANSACTION_REPEATABLE_READ.
• Bloquea los datos leídos.
– TRANSACTION_SERIALIZABLE.
• Sólo una transacción al mismo tiempo.
Suelen estar disponibles read commited y serializable.
203
Tema 2. Modelo relacional de datos
Concurrencia
•
•
Establecer el modo de aislamiento:
– conexion.setTransactionIsolation(
Connection.TRANSACTION_SERIALIZABLE);
Consejos de uso:
– Bloque con sólo actualizaciones:
• TRANSACTION_READ_COMMITED
– Bloque donde leamos varias veces el mismo registro:
• TRANSACTION_REPEATABLE_READ
– Bloque en el que leamos un valor para actualizarlo:
• TRANSACTION_SERIALIZABLE
– Bloque donde realicemos varias veces la misma consulta (varios
registros):
• TRANSACTION_SERIALIZABLE
Tema 2. Modelo relacional de datos
204
102
Resumen
• ¿Qué es ODBC?
• Rol del ResultSet
• ¿Cómo se parametrizan consultas?
• ¿Cómo se controla la concurrencia de transacciones?
Tema 2. Modelo relacional de datos
205
103
Descargar