Bases de Datos
18 de nov de 2024 Base de datos | Mauricio H.
Conceptos generales
Elementos básicos:
- Relación (conjunto de entidades de un mismo tipo).
- Entidades (representan objetos del mundo real).
- Atributos de entidad, se clasifican en:
Simples o compuestos.
Monovalor o multivalor.
Almacenado o derivado.
Es importante distinguir entre la definición de la base de datos y la propia base de
datos. La definición es almacenada de forma separada y no se suele modificar con
frecuencia. La base de datos suele cambiar según la situación del mundo real
representado. La definición especifica la estructura y elementos de la base de
datos, y las reglas de actualización de los datos almacenados.
18 de nov de 2024 Base de datos | Mauricio H. 2
Tipos de entidad y entidades
1. En una base de datos se definen tipos de entidad, digamos por
ejemplo los tipos EMPLEADO y EMPRESA, luego se crean
entidades de cada tipo.
2. Una entidad EMPLEADO e1 y EMPRESA c1 se muestran a
continuación. Cada entidad tiene sus propios valores de atributo.
Nombre = José
Nombre = Sunco Oil
Dirección = Rivera
e1 c1 Sede central = Madrid
Edad = 55
Presidente = Jose Perez
Tlfcasa = 91-1234567
18 de nov de 2024 Base de datos | Mauricio H. 3
Atributos
1. Ejemplos de definiciones de atributos de un tipo de entidad:
❏ Compuesto:
a. Dirección(Calle,Numero,Apto)
❏ Multivalor:
a. {Color}
❏ Multivalor y compuesto:
a. { Color(color1,color2) }
❏ Un atributo más complejo:
a. { Tlfdir( { Tlf(codArea,Numtlf) } , Dir(Calle(Num,Calle,numApto) , Ciudad, Provincia) ) }
Este atributo representa una dirección junto con sus teléfonos. La entidad puede tener múltiples valores para
el atributo Tlfdir, es decir múltiples direcciones y cada una con múltiples teléfonos.
18 de nov de 2024 Base de datos | Mauricio H. 4
Diagrama y modelo ER
1. Ejemplo: Tipos de entidad EMPLEADO y COCHE:
❏ Nota: El tipo de entidad COCHE tiene el atributo multivalor Color, y el atributo (clave) compuesto
Matrícula. El atributo clave se muestra subrrayado en los diagramas.
EMPLEADO
Nombre Edad Cargo Sueldo Num Letras
Entidades de EMPLEADO
Matrícul
e1 a Modelo
(Jose Perez, 50, Técnico, 50K)
e2 COCHE
(Juan Vidal, 40, Asesor Ventas, 30K) Color Marca
...
18 de nov de 2024 Base de datos | Mauricio H. 5
Detalles sobre atributos
Atributo de un tipo de entidad:
- Cada atributo tiene un dominio (conjunto de valores).
- Un atributo A de un tipo de entidad E es una función desde E hacia P(V), siendo P(V) el conjunto potencia de V:
A: E → P(V)
- V es el conjunto de valores de A.
- A(e): representa el valor de A para una entidad e, del tipo E.
- Un producto cartesiano de dos o más conjuntos es el conjunto de combinaciones posibles de los elementos de los conjuntos. Cada combinación tiene
un elemento de cada conjunto.
V: Conjunto de valores de A
P(V): Conjunto potencia de V (conjunto de todos los
subconjuntos de V)
Si A es compuesto, V = P(V1)xP(V2)x...xP(Vn)
V1,V2, … son valores de los atributos simples y V es el
producto cartesiano mostrado.
18 de nov de 2024 Base de datos | Mauricio H. 6
Diagramas ER
Nomenclatura de diagramas ER:
- R: Tipo de relación R
- E1, E2, … : Tipos de entidades
- e1,e2, … : Entidades de los tipos de entidad
- r1,r2,...rm: Instancias de la relación R
- ri(e1,e2,…,en) Instancia de relación ri y sus entidades participantes e1, e2,
…
En un momento dado, la base de datos tendrá un estado determinado,
el cuál debe ser válido. Un estado de la base de datos tiene un cierto
número de entidades y relaciones entre entidades.
18 de nov de 2024 Base de datos | Mauricio H. 7
Relaciones entre entidades
Relación de grado 2: Relación de grado 3:
R R
E E
E2 E2
1 e1 r1 e2 1 e1 r1 e2
E2 e3
Roles: Se usan cuando dos o más entidades de una relación son del mismo tipo. Cada entidad tiene un rol en la relación.
Por ejemplo un empleado e2 y su jefe e1 (ambos son empleados) tienen una relación pero uno de ellos tiene el rol de jefe.
E e1 R
r1
e2
18 de nov de 2024 Base de datos | Mauricio H. 8
Restricciones en los tipos de
relaciones
1. Razón de cardinalidad de relaciones binarias:
❏ Define el máximo número de instancias de relación en las que puede participar una
entidad de cada tipo de entidad participante.
❏ Las razones posibles son: 1:1, 1:N, N:1 y N:M.
❏ Por ejemplo, una relación binaria 1:N o N:1 especifica que una entidad del lado 1 de la
relación puede participar en varias instancias de relación, y una entidad del lado N
puede participar a lo sumo en una instancia de relación.
2. Participación en la relación:
❏ Define el mínimo de instancias de relación en las que participa cada entidad de un tipo
de entidad.
❏ Puede ser total o parcial (para un tipo de entidad).
18 de nov de 2024 Base de datos | Mauricio H. 9
Tipos de entidad débil
En general, los tipos de entidad débil no tienen clave.
Las entidades débiles tienen al menos un propietario (otra entidad).
Las entidades débiles ed1, ed2,... de un mismo propietario ep, tienen
una clave parcial única Cp, para distinguir dichas entidades débiles
entre sí.
Simbología... ep
Entidad débil Propietario
ed1 ed2
hy
Cp Cp
Relación
identificativa
(varios
propietarios)
18 de nov de 2024 Base de datos | Mauricio H. 10
Modelo Entidad Relación Mejorado
EER
Estos modelos reflejan de un modo más preciso las propiedades y las
restricciones de los datos. Sirven para aplicaciones con requisitos más
complejos de bases de datos, como aquellas orientadas a la ingeniería.
Los conceptos principales para el modelado mejorado de datos son:
superclase, subclase, especialización, generalización, categoría (o unión) y
relación de herencia.
Definición: Una subclase es un conjunto de entidades que se deriva de una superclase, las
subclases permiten agrupar entidades por alguna característica relevante común. Por ejemplo
un tipo de entidad EMPLEADO puede ser una superclase, y las subclases de ella pueden ser
las siguientes: SECRETARIO, TÉCNICO, ADMINISTRADOR, EMPLEADO_FIJO.
Todo miembro de una subclase pertenecerá también a la superclase correspondiente, ahora
no siempre una entidad de una superclase pertenece a su vez a alguna subclase (a menos
que haya una restricción impuesta a la superclase).
18 de nov de 2024 Base de datos | Mauricio H. 11
Modelo Entidad Relación Mejorado
EER
Una superclase puede tener una o más especializaciones.
Una especialización es un conjunto de subclases
derivadas de una superclase. Cada especialización agrupa
una o más subclases según alguna característica. Por
ejemplo, una especialización de un tipo de entidad
EMPLEADO puede agrupar empleados según el tipo de
trabajo, o según el tipo de contrato. Cada subclase puede
ser por sí misma un tipo de entidad con atributos y
relaciones propios. Se debe tener presente que una
entidad en una subclase representa a una entidad que
existe en la superclase, ya que se trata del mismo objeto o
elemento del mundo real, solo que en la subclase se
describe a la entidad con atributos más específicos.
18 de nov de 2024 Base de datos | Mauricio H. 12
Modelo Entidad Relación Mejorado
EER
CRITERIO DE
SUPERCLASE SUBCLASES DE LA ESPECIALIZACIÓN
ESPECIALIZACIÓN
ADMINISTRADOR
TIPO DE TRABAJO INGENIERO
EMPLEADO
TÉCNICO
PERSONAL_FIJO
TIPO DE CONTRATO
PERSONAL_TEMPORAL
18 de nov de 2024 Base de datos | Mauricio H. 13
Modelo Entidad Relación Mejorado
EER
Como se pudo observar, para el tipo de
entidad EMPLEADO se han definido dos
especializaciones en la tabla (se pudieran
definir más):
- {Administrador, Ingeniero, Técnico}.
- {Personal_Fijo, Personal_Temporal}.
18 de nov de 2024 Base de datos | Mauricio H. 14
...
Acá se debe continuar con los conceptos de
modelado mejorado de datos que fueron
mencionados al introducir el tema de EER...
18 de nov de 2024 Base de datos | Mauricio H. 15
Introducción a SQL
1. SQL permite definir esquemas, catálogos y
relaciones.
2. Un esquema o base de datos en SQL es un conjunto
de tablas (relaciones).
3. Un catálogo en SQL es un conjunto de bases de
datos.
4. En general, los elementos de definición existentes
(bases de datos, tablas, atributos, etc.) tienen un
nombre que los identifica dentro de la base de datos.
18 de nov de 2024 Base de datos | Mauricio H. 16
Introducción a comandos SQL
Creación de base de datos - comando CREATE DATABASE:
- CREATE DATABASE EMPRESA AUTHORIZATION Perez;
Se crea una base de datos EMPRESA y se especifica la cuenta de usuario propietaria del esquema usando un
identificador de autorización.
En general, no todos los usuarios están autorizados para crear esquemas y elementos de esquema. Estos
permisos deben ser otorgados por un administrador.
Algunos comandos para definir la base de datos (se verán los detalles más adelante):
- CREATE TABLE <NuevaTabla> ( ... );: permite crear una tabla y a la vez los atributos y
restricciones iniciales de la tabla. En los paréntesis se definen los atributos y restricciones, que
forman parte de la definición de la tabla, se verán detalles posteriormente.
Ejemplo: CREATE TABLE EMPRESA.EMPLEADO (…) ;
- ALTER TABLE <T> ...: permite modificar una tabla T existente.
- MODIFY COLUMN <A> ...: Entra en el modo de modificación de un atributo A, se coloca después
de ALTER TABLE <T>.
- ADD COLUMN <NuevoAtributo> ...: Procede a crear un atributo nuevo, se coloca después de
ALTER TABLE <T>.
18 de nov de 2024 Base de datos | Mauricio H. 17
Algunos tipos de dato básicos
Alfanuméricos: Ejemplos de expresiones:
- INT, SMALLINT. - ‘abc’ (cadena).
- CHAR, CHAR(N), VARCHAR(N). - ‘abc’ || ‘XYZ’ (concatenación de cadenas).
- DECIMAL(i,j) o NUMERIC(i,j). - B ‘10101’ (cadena de bits).
- DATE ‘2002-09-27’.
Otros:
- TIME ‘09:12:47’.
- DATE.
- BIT(N), BIT VARYING(N). Palabras como B, DATE y TIME son obligatorias
para hacer la distinción respecto a las cadenas.
- BLOB.
Las expresiones literales se usan para asignar
- TIME, TIME(i). valores a los atributos de una tupla o en
- TIME WITH TIME ZONE. operaciones. Ej: FechaIngreso < DATE ‘2005-09-
22’. El ejemplo previo es una expresión booleana
- TIMESTAMP. que devuelve TRUE si la fecha FechaIngreso es
anterior a la fecha 2005-09-22, en caso contrario
- INTERVAL. devuelve FALSE.
18 de nov de 2024 Base de datos | Mauricio H. 18
Ejemplo de esquema de base de
datos
Para explicar los siguientes temas se trabajará con el esquema de base de datos de una
empresa. La empresa tiene varios departamentos, cada departamento tiene una o más
ubicaciones y puede supervisar varios proyectos. Cada empleado pertenece a un solo
departamento y puede trabajar en uno o varios proyectos a la vez. En un proyecto pueden
trabajar varios empleados, de cualquier departamento. Los empleados pueden tener o no
subordinados a su cargo. Cada departamento tiene además un jefe, que es uno de los
empleados. La relación TRABAJA_EN relaciona a un empleado con cada uno de los
proyectos en los que trabaja, y muestra las horas que dedica el empleado a cada
proyecto. La información de cada proyecto está en la tabla PROYECTO. Igualmente hay
una tabla DEPARTAMENTO para la información de cada departamento. Tanto los
departamentos como los proyectos tienen asignado un nombre y un número de
identificación.
En la siguiente página se muestra el esquema relacional propuesto.
18 de nov de 2024 Base de datos | Mauricio H. 19
Ejemplo de esquema de base de
datos
18 de nov de 2024 Base de datos | Mauricio H. 20
Ejemplo de definición de tablas
CREATE TABLE EMPLEADO
CREATE TABLE DEPARTAMENTO
( Nombre VARCHAR(15) NOT NULL,
Apellido CHAR,
( NombreDpto VARCHAR(15) NOT
Apellido2 VARCHAR(15) NOT NULL,
NULL,
Dni CHAR(9) NOT NULL,
NúmeroDpto INT NOT NULL,
FechaNac DATE,
Dirección VARCHAR(30), DniDirector CHAR(9) NOT NULL,
Sexo CHAR,
Sueldo DECIMAL(10,2),
FechaIngresoDirecto DATE,
SuperDni CHAR(9),
PRIMARY KEY(NúmeroDpto),
Dno INT NOT NULL DEFAULT 1,
PRIMARY KEY (Dni), UNIQUE(NombreDpto),
FOREIGN KEY(SuperDni) REFERENCES EMPLEADO(Dni),
FOREIGN KEY(Dno) REFERENCES DEPARTAMENTO(NúmeroDpto) );
FOREIGN KEY(DniDirector)
REFERENCES EMPLEADO(Dni) );
18 de nov de 2024 Base de datos | Mauricio H. 21
Ejemplo de definición de tablas
Los ejemplos anteriores crean las definiciones de dos
tablas de datos: EMPLEADO y DEPARTAMENTO.
Observe que no se han creado los datos en sí que se
colocan en las tablas, solo las definiciones de las mismas.
Existen instrucciones concretas para insertar, modificar o
borrar tuplas de las tablas. Las sentencias PRIMARY KEY,
UNIQUE y FOREING KEY son restricciones de tabla (se
explican más adelante), lo demás son definiciones de
datos y sus tipos. Las sentencias NOT NULL y DEFAULT
son restricciones de atributo o dominio. Las sentencias
mencionadas se irán explicando progresivamente.
18 de nov de 2024 Base de datos | Mauricio H. 22
Definir dominios
Un dominio es un tipo de dato
creado por el usuario, el cual puede
tener restricciones específicas.
Creación de un dominio con nombre:
- CREATE DOMAIN NombreDominio AS
CHAR(9);
CREATE DOMAIN permite crear dominios
basados en los tipo de dato básicos.
Estos dominios se pueden usar en la
definición de atributos, en lugar de los tipos
básicos (INT, CHAR, etc.).
CREATE DOMAIN se puede combinar con
CHECK, CONSTRAINT Y DEFAULT para
crear un dominio más restringido.
18 de nov de 2024 Base de datos | Mauricio H. 23
Uso de DEFAULT, NOT NULL, y
CHECK
Restricción NOT NULL: impide que un atributo tenga el valor NULL. Esta cláusula se puede añadir
en la línea de definición del atributo.
Cláusula DEFAULT <valor>: Permite definir un valor predeterminado para un atributo, que se incluye
en tuplas nuevas si no proporciona un valor al atributo. Esta clausula se añade en la definición del
atributo.
Clausula CHECK: restringe los valores de un atributo o dominio. Se coloca en la definición del
atributo o dominio. CHECK se puede usar también en la definición de una tabla, para crear
restricciones sobre tuplas nuevas. Forma general: CHECK (<Expresión>), donde Expresión es un
valor boolenano, puede resultar TRUE o FALSE.
Ejemplo 1: NumeroDpto INT NOT NULL CHECK (NumeroDpto>0 AND NumeroDpto<21) DEFAULT
1.
Ejemplo 2: CREATE DOMAIN NUM_D AS INT CHECK (NUM_D>0 AND NUM_D<21).
La clausula CHECK en un atributo impide que una tupla tenga un valor que no pertenezca al rango
especificado en CHECK.
Observe el uso del operador lógico AND y el operador de comparación mayor que (>) y menor que
(<) en los ejemplos.
18 de nov de 2024 Base de datos | Mauricio H. 24
Restricciones de clave: PRIMARY
KEY y UNIQUE
Las restricciones son cláusulas especiales opcionales que forman
parte de la definición de una tabla. Se colocan después de los
atributos de tabla al definirla, o bien se pueden agregar más tarde a la
tabla ya definida.
PRIMARY KEY(<A>): especifica un atributo A (o varios) que constituye
la clave principal de la relación. Si la clave no es compuesta, puede
colocar la cláusula en la misma línea de definición del atributo elegido
como clave.
- Ejemplo 1: NumeroDpto INT PRIMARY KEY
- Ejemplo 2: PRIMARY KEY(NumeroDpto)
- Ejemplo 3: PRIMARY KEY(AtributoA,AtributoB)
UNIQUE(<A>): especificación del atributo A como clave secundaria
alternativa.
18 de nov de 2024 Base de datos | Mauricio H. 25
Restricciones de integridad
referencial: FOREING KEY
FOREIGN KEY (FK): Especifica el atributo que Ejemplo:
hace referencia a la clave de una tabla externa. CREATE TABLE EMPLEADO
- En la definición de una FK se añade una acción de (...
activación referencial: Las opciones son: SET NULL,
CASCADE, SET DEFAULT. Las acciones posibles Dno INT NOT NULL DEFAULT 1,
son ON UPDATE y ON DELETE. Ante un borrado o
actualización de tuplas referenciadas, se actualiza CONSTRAINT EMPPK
también la tabla que tiene el atributo FK relacionado.
Por ejemplo, con SET DEFAULT ON DELETE, ante PRIMARY KEY(Dni),
un borrado de tuplas referenciadas el sistema coloca
el valor DEFAULT en el atributo FK de las tuplas CONSTRAINT SUPERFKEMP
implicadas. Con CASCADE ON DELETE se propaga
el borrado de tuplas, de tal forma que se borran FOREIGN KEY(SuperDni) REFERENCES EMPLEADO(Dni)
también las tuplas con la FK implicadas.
ON DELETE SET NULL
CONSTRAINT <Nombre>: Permite añadir un
nombre de restricción a una restricción, se ON UPDATE CASCADE
coloca antes de definir la restricción. Estos
CONSTRAINT EMPDEPTFK
nombres deben ser únicos en el esquema al
que pertenece la tabla correspondiente. El FOREIGN KEY(Dno) REFERENCES DEPARTAMENTO(NumeroDpto)
nombre permite gestionar la restricción más
tarde, sea para eliminarla o sustituirla por otra. ON DELETE SET DEFAULT ON UPDATE CASCADE );
18 de nov de 2024 Base de datos | Mauricio H. 26
Restricciones de tupla con CHECK
Se pueden añadir una o varias cláusulas CHECK en el bloque
CREATE TABLE. Estas evalúan cada tupla individual que se va a
insertar en la tabla, pero no tiene efecto en las tuplas que ya existen al
momento de añadir dicha cláusula.
- Ejemplo con nombre de restricción:
CONSTRAINT restriccion_Fecha
CHECK (FechaCreaciónDpto <= FechaIngresoDirector);
- Al solicitar la modificación o inserción de una tupla, se verifica si la condición de
CHECK de la tabla es violada o no. La solicitud será rechazada si esta viola la
condición de CHECK. Puede crear varias restricciones para una misma tabla.
Observe que CHECK sirve como una forma de validación de datos, ya
que evita que se inserten datos que no cumplan condiciones
establecidas. También sirve para consultas más generales.
18 de nov de 2024 Base de datos | Mauricio H. 27
Sentencias para cambiar el
esquema
Se presentan en esta sección una serie de comandos de evolución del esquema de
SQL. Estos son DROP, ALTER y MODIFY. También se involucra la palabra clave ADD
para agregar elementos (como atributos y restricciones) y SET para establecer valores
(como SET DEFAULT ‘1234’).
DROP: Permite eliminar un elemento de la definición de la base de datos.
- DROP se combina con elementos como DATABASE, TABLE, COLUMN y CONSTRAINT. El
comportamiento de DROP depende del contexto.
- DROP tiene dos modos de eliminación: CASCADE o RESTRICT. Si borra una tabla, atributo o
restricción usando DROP junto con la opción CASCADE, se borran también las restricciones y
vistas que hacen referencia a esos elementos. Si se usa para eliminar un esquema, CASCADE
produce el borrado del esquema y sus elementos (tablas, restricciones, etc.). En general con
RESTRICT se elimina un elemento solo si no se hace referencia a él desde otros elementos, en
caso contrario se rechaza el borrado.
- Si intenta usar DROP junto con RESTRICT para borrar un objeto (tabla, columna, …) que contiene
alguna clave primaria referenciada desde otros objetos, se producirá un error.
18 de nov de 2024 Base de datos | Mauricio H. 28
Algunos usos de DROP, ALTER,
ADD y MODIFY
DROP DATABASE ALTER TABLE
EMPRESA CASCADE; EMPRESA.EMPLEAD
DROP TABLE O ADD COLUMN
SUBORDINADO Trabajo
CASCADE; VARCHAR(12);
ALTER TABLE
EMPRESA.EMPLEADO DROP
ALTER TABLE
COLUMN Dirección CASCADE; EMPRESA.EMPLEADO
ALTER TABLE DROP CONSTRAINT
EMPRESA.DEPARTAMENTO MODIFY
COLUMN DniDirector DROP SUPERFKEMP
DEFAULT; CASCADE;
18 de nov de 2024 Base de datos | Mauricio H. 29
Algunos usos de DROP, ALTER,
ADD y MODIFY
Observe en los ejemplos previos que se usa ALTER
TABLE junto con DROP COLUMN en una misma
instrucción para eliminar un atributo de una tabla existente.
Si existen tuplas en la tabla afectada, obviamente se
borran también los valores de la columna borrada.
Se usa ALTER TABLE junto con ADD COLUMN para
agregar un nuevo atributo a una tabla ya definida. MODIFY
COLUMN permite realizar una modificación a un atributo,
la modificación pudiera ser una redefinición del atributo,
como si estuviera definiéndolo por primera vez.
18 de nov de 2024 Base de datos | Mauricio H. 30
Otro ejemplo
ALTER TABLE EMPRESA.EMPLEADO DROP CONSTRAINT SUPERFKEMP
CASCADE;
- En el ejemplo al borrar la restricción de clave principal (o UNIQUE) mientras está siendo
referenciada desde claves foráneas (FK), esas restricciones de claves foráneas serán también
borradas.
Cuando se intenta modificar el tipo de dato de un atributo de una tabla que ya tiene
tuplas, se puede generar un error por truncamiento de valores de atributo, como por
ejemplo el error “ER_TRUNCATED_WRONG_VALUE_FOR_FIELD” en MySQL, y se
aborta la operación.
- En ciertos casos, no podrá modificar un atributo de una tabla que contiene tuplas, y será necesario
eliminar el atributo y volverlo a crear con las nuevas especificaciones.
- Al usar ALTER TABLE para modificar o agregar restricciones de una tabla con tuplas, es posible
que tenga que eliminar previamente algunas o todas las tuplas de la tabla, o cambiar valores de
ciertos atributos, esto depende de las relaciones actuales de esa tabla con otras.
- Si se crea un objeto previamente borrado con DROP, las restricciones asociadas que fueron
borradas junto con el objeto se recuperarán, o al menos las restricciones relevantes.
18 de nov de 2024 Base de datos | Mauricio H. 31
Estructura SELECT-FROM-WHERE
Estructura general para seleccionar tuplas/subtuplas que cumplen ciertas
condiciones en un momento dado:
SELECT <lista de atributos>
FROM <lista de tablas>
WHERE <condición>;
La lista de atributos se refiere a aquellos atributos que serán recuperados.
La lista de tablas son las relaciones necesarias para procesar la consulta.
La condición es una expresión booleana que selecciona las tuplas que
serán recuperadas, conceptualmente la condición de WHERE es evaluada
por cada combinación de tuplas de las tablas de FROM.
18 de nov de 2024 Base de datos | Mauricio H. 32
Un ejemplo con SELECT-FROM-
WHERE
C0: Recuperar la fecha de nacimiento y dirección del
empleado (s) cuyo nombre sea Jose Pérez Pérez.
SELECT FechaNac, Dirección
FROM EMPLEADO
WHERE Nombre=‘José’ AND Apellido1=‘Pérez’ AND
Apellido2=‘Pérez’;
SELECT equivale a SELECT ALL, lo que significa que no se
eliminan tuplas duplicadas del resultado (si las hay). Si
desea borrar tuplas duplicadas use SELECT DISTINT en
lugar de SELECT.
18 de nov de 2024 Base de datos | Mauricio H. 33
Un ejemplo con SELECT-FROM-
WHERE
C1: Por cada proyecto ubicado en ‘Gijón’, mostrar su número, el número del departamento
que lo gestiona y el primer apellido, dirección y fecha de nacimiento del director del
mismo.
SELECT NumProyecto, NumDptoProyecto, Apellido1, Dirección, FechaNac
FROMPROYECTO, DEPARTAMENTO, EMPLEADO
WHERE NumDptoProyecto=NumeroDpto AND DniDirector=Dni AND
UbicaciónProyecto=‘Gijón’;
Observe que en WHERE, hay operaciones de selección y concatenación, mientras que en
SELECT hay operaciones de proyección, tal como en el álgebra relacional. La diferencia
principal es que SQL por defecto implementa las relaciones como multiconjuntos (pueden
aparecer tuplas duplicadas en los resultados).
18 de nov de 2024 Base de datos | Mauricio H. 34
Uso de prefijos y alias
C1A:
SELECT Nombre, EMPLEADO.Nombre, Dirección
FROM EMPLEADO, DEPARTAMENTO
WHERE DEPARTAMENTO.Nombre=‘Investigación’ AND DEPARTAMENTO.NumeroDpto=EMPLEADO.NumeroDpto;
Ya que un atributo puede tener el mismo nombre que otro atributo de otra relación, se usa el nombre de la relación como prefijo para diferenciarlos.
C1B: Listar nombres de empleados junto al nombre de su supervisor.
SELECT E.Nombre, E.Apellido1, S.Nombre, S.Apellido1
FROM EMPLEADO AS E, EMPLEADO AS S
WHERE E.SuperDni=S.Dni;
E y S son alias para referirse a una relación, varios alias pueden referirse a una misma relación. El uso de alias además facilita la lectura de la consulta. El uso
explícito de AS es opcional. AS tambien puede ser usado en SELECT para renombrar atributos (Ej: SELECT E.Apellido AS Ap FROM EMPLEADO AS
E …).
18 de nov de 2024 Base de datos | Mauricio H. 35
Clausula WHERE no especificada y
uso de asterisco
Cuando no se especifica la condición WHERE, el
resultado es el producto cruzado de las relaciones
de FROM con la proyección de atributos colocada
en SELECT:
C1:
SELECT Dni, NombreDpto
FROM EMPLEADO, DEPARTAMENTO;
18 de nov de 2024 Base de datos | Mauricio H. 36
Clausula WHERE no especificada y
uso de asterisco
El asterisco significa recuperar todos los atributos de la relación que resulta después de procesar la consulta.
C1:
SELECT *
FROM EMPLEADO, DEPARTAMENTO
WHERE NombreDpto=’Investigacion’ AND Dno=NumeroDpto;
Ya habrá notado que la condición de WHERE puede ser confusa cuando no se usan prefijos (o alias), a menos que conozca de
antemano a cuáles tablas pertenecen los nombres de atributos. Una buena práctica es usar siempre prefijos o alias para identificar
claramente los atributos que se están usando en WHERE. Así, el ejemplo anterior se puede reescribir del siguiente modo:
SELECT *
FROM EMPLEADO AS E, DEPARTAMENTO AS D
WHERE D.NombreDpto=’Investigacion’ AND E.Dno=D.NumeroDpto;
18 de nov de 2024 Base de datos | Mauricio H. 37
UNION, EXCEPT, INTERSECT
Son las operaciones básicas sobre conjuntos
en SQL. Por defecto, las relaciones resultantes
de estas operaciones son conjuntos de tuplas
(las tuplas duplicadas se eliminan del
resultado).
Se deben aplicar a relaciones compatibles con
la unión (las relaciones deben tener los
mismos atributos, y con los mismos nombres).
18 de nov de 2024 Base de datos | Mauricio H. 38
Ejemplo de uso de UNION
Liste los proyectos en los que (SELECT DISTINCT P.NumProyecto
esté implicado un (al menos FROM PROYECTO P, DEPARTAMENTO,
EMPLEADO E
un) empleado de apellido WHERE
Pérez, sea como participante P.NumDptoProyecto=NumeroDpto AND
en el proyecto ó como jefe del DniDirector=E.Dni AND
departamento que dirije esos E.Apellido1=’Perez’)
proyectos. UNION
Para obtener resultados (SELECT DISTINCT P.NumProyecto
multiconjunto y no descartar FROM PROYECTO P, TRABAJA_EN,
tuplas duplicadas, use UNION EMPLEADO
WHERE P.NumProyecto=NumProy AND
ALL, EXCEPT ALL e DniEmpleado=Dni AND
INTERSECT ALL. E.Apellido1=’Perez’)
18 de nov de 2024 Base de datos | Mauricio H. 39
Comparación de subcadenas con
LIKE
Se pueden especificar patrones de cadenas mediante dos
caracteres reservados: % y _. LIKE permite buscar partes de una
cadena.
El % representa una cantidad arbitraria de caracteres en la posición
de la cadena donde se coloque, y _ simboliza un solo carácter.
18 de nov de 2024 Base de datos | Mauricio H. 40
Comparación de subcadenas con
LIKE
Otro ejemplo en el cual se busca la coincidencia de un
atributo de tipo fecha con una constante de fecha, los
guiones especifican la cantidad de dígitos de la fecha. Se
seleccionan y proyectan las tuplas cuyo valor del atributo
implicado tenga el mismo patrón de cadena dado en
WHERE.
18 de nov de 2024 Base de datos | Mauricio H. 41
Insertar en una cadena uno de los
caracteres reservados
Método para colocar en la cadena algún carácter
reservado (%, _ ), usando un carácter de escape
arbitrario:
- ‘AB\ _CD\ %EF’ ESCAPE ‘\ ’
- Observe que después de la cadena, se coloca ESCAPE
seguido por el carácter de escape escogido para la
cadena concreta. Si quiere incluir en la cadena el
apóstrofe que se usa para delimitar cadenas, use dos
apóstrofes juntos.
18 de nov de 2024 Base de datos | Mauricio H. 42
Operadores aritméticos
La cláusula SELECT permite incluir operadores aritméticos
sobre los atributos. Estos operadores solo funcionan sobre
atributos numéricos.
Ejemplo: Mostrar sueldo junto al nombre de los empleados de
un proyecto concreto, aumentado un 10%, y renombrado como
“SueldoAumentado”.
18 de nov de 2024 Base de datos | Mauricio H. 43
Uso de BETWEEN
Permite especificar un rango de valores.
Ejemplo: Listar información de los empleados del
dpto 5, cuyo sueldo sea un monto entre 30000 y
40000.
18 de nov de 2024 Base de datos | Mauricio H. 44
Ordenar tuplas seleccionadas
ORDER BY ordena tuplas del resultado de una consulta por uno o varios
atributos. Se coloca debajo de WHERE.
Se ordena por cada uno de los atributos especificados, comenzando con el de
la izquierda. Cada ordenamiento por atributo da como resultado grupos de
tuplas ordenadas. Un ordenamiento se realiza en cada grupo resultante del
ordenamiento previo.
18 de nov de 2024 Base de datos | Mauricio H. 45
Lógica de tres valores
Hasta el momento se AND TRUE FALSE UNKNOWN
consideró que las TRUE TRUE FALSE UNKNOWN
FALSE FALSE FALSE FALSE
expresiones lógicas podían UNKNOWN UNKNOWN FALSE UNKNOWN
resultar como TRUE o como
FALSE. Existe un tercer valor
en SQL, que es UNKNOWN,
el cual sirve para procesar
expresiones que incluyen
valores NULL. Se definen
entonces tablas de valores
extendidas para los
operadores AND, OR y NOT.
18 de nov de 2024 Base de datos | Mauricio H. 46
Lógica de tres valores
OR TRUE FALSE UNKNOWN NOT
TRUE TRUE TRUE TRUE TRUE FALSE
FALSE TRUE FALSE UNKNOWN FALSE TRUE
UNKNOWN TRUE UNKNOWN UNKNOWN UNKNOWN UNKNOWN
En un bloque SELECT-FROM-WHERE, las
combinaciones de tuplas que evalúan la
condición lógica como FALSE o UNKNOWN no
son seleccionadas en el resultado de la
consulta.
18 de nov de 2024 Base de datos | Mauricio H. 47
Comparación de un valor con NULL
Se utiliza IS o IS NOT para comparar un valor
con NULL, esto comprueba si un valor es o
no es NULL.
Ejemplo: SELECT * FROM EMPLEADO
WHERE Dni IS NOT NULL
- En el ejemplo, si un empleado tiene a NULL
como valor de Dni, no se selecciona ese
empleado.
18 de nov de 2024 Base de datos | Mauricio H. 48
Consultas anidadas
Consisten en bloques SELECT-FROM-WHERE
dentro de la cláusula WHERE de otra consulta, la
cuál es la consulta externa. El conjunto de tuplas
resultantes de la consulta interna se suele usar
para comprobar si una tupla concreta existe dentro
de ese conjunto.
Acá se introduce el operador IN, el cual
comprueba si un valor (o tupla) se encuentra
dentro de algún conjunto de valores (o tuplas).
18 de nov de 2024 Base de datos | Mauricio H. 49
Consultas anidadas
Ejemplo: Seleccione de la base de datos los proyectos en los que
participe algún empleado de apellido Pérez.
- SELECT DISTINCT NumProyecto FROM PROYECTO P WHERE
NumProyecto IN (SELECT T.NumProy FROM TRABAJA_EN T,
EMPLEADO E WHERE T.DniEmpleado=E.Dni AND E.Apellido1=’Perez’);
En el ejemplo anterior, por cada tupla PROYECTO (como tupla P),
se comprobará si el número del proyecto está dentro del conjunto
de proyectos resultantes de la consulta interna. La consulta
interna recupera todos los proyectos en los que trabaja algún
empleado de apellido “Perez”. Si se encuentra la tupla P en el
conjunto mencionado, se selecciona esa tupla P.
18 de nov de 2024 Base de datos | Mauricio H. 50
Consultas anidadas
Ejemplo: Seleccione los Dni de aquellos empleados que trabajan en proyectos
y durante la misma cantidad de horas, en los cuales trabaja el empleado con
Dni=’123456789’. Recuerde que la tabla TRABAJA_EN relaciona a cada
empleado con los proyectos en los que trabaja y las horas que dedica el
empleado a cada proyecto, es decir las tuplas son combinaciones empleado-
proyecto-horas-departamento.
SELECT DISTINCT DniEmpleado FROM TRABAJA_EN TJ WHERE
(NumProy,Horas) IN (SELECT NumProy,Horas FROM TRABAJA_EN TK
WHERE Dni=’123456789’);
- En el ejemplo anterior se usa una subtupla junto con IN. Por cada tupla TRABAJA_EN
(bajo alias TJ), se comprueba si la combinación proyecto-horas de la tupla TJ se
encuentra en el resultado de la consulta interna, la cual devuelve las combinaciones
proyecto-horas de TRABAJA_EN (TK) asociadas con el empleado con Dni =
‘123456789’. Observe que la consulta interna y la externa trabajan usando la misma
tabla TRABAJA_EN, como si se tratara de dos tablas, además el uso de los parentesis
en la subtupla y en la consulta anidada.
18 de nov de 2024 Base de datos | Mauricio H. 51
Consultas anidadas
Ejemplo de uso de ALL junto con operadores de
comparación:
SELECT Apellido1,Nombre FROM EMPLEADO WHERE
Sueldo > ALL (SELECT Sueldo FROM EMPLEADO Ei
WHERE Ei.Dno=5);
En este ejemplo, por cada empleado se comprueba si su
sueldo es mayor que todos los sueldos de los empleados del
departamento 5, si el sueldo cumple la condición, se
selecciona el empleado. Observe que tanto la consulta
interna como la externa hacen uso de la tabla de empleados
de forma independiente.
18 de nov de 2024 Base de datos | Mauricio H. 52
Consultas anidadas
correlacionadas
En SQL una consulta anidada en la cláusula WHERE de
otra consulta puede hacer referencia a las tuplas (o
combinación de tuplas) de la consulta externa, mediante el
uso de alias.
Las consultas correlacionadas se entienden mejor si se
tiene en cuenta que por cada tupla (o combinación de
tuplas) de la consulta externa, se evalúa la consulta
interna, y cada evaluación puede devolver conjuntos de
tuplas distintos, según la tupla externa que se está usando
en la evaluación de la consulta interna.
18 de nov de 2024 Base de datos | Mauricio H. 53
Consultas anidadas
correlacionadas
Veamos el siguiente ejemplo: Suponga que cada empleado en la empresa
podría tener cero, uno o más subordinados (también empleados) a su
cargo. Se tiene una tabla SUBORDINADO que relaciona cada
subordinado con el empleado único que lo supervisa. Se dispone además
de la tabla EMPLEADO vista anteriormente. Se pide recuperar los
(nombres de) empleados que tienen uno o más subordinados de la misma
edad que el propio empleado, usando consultas correlacionadas.
- Consulta: SELECT E.Nombre, E.Apellido1 FROM EMPLEADO AS E WHERE E.Dni IN
(SELECT DniSupervisor FROM SUBORDINADOS S WHERE E.Edad=S.Edad);
Por cada empleado de E, la consulta interna recupera todos los subordinados de la empresa
que tienen la edad del empleado E, junto a los supervisores (DniSupervisor) de dichos
subordinados. Si el Dni del empleado se encuentra entre los (DniSupervisor) recuperados,
significa que el empleado supervisa a uno o más subordinados de su misma edad, por lo que se
selecciona ese empleado en la consulta externa.
18 de nov de 2024 Base de datos | Mauricio H. 54
Funciones EXISTS y UNIQUE en
SQL
La función EXISTS (o NO EXISTS) se usa para comprobar si el resultado de
una consulta de selección es un conjunto vacío (sin tuplas) o no. EXISTS
devuelve TRUE si el resultado es una o más tuplas, y FALSE si es vacío (la
función NO EXISTS se usa de igual forma que EXISTS pero devuelve los
resultados contrarios). Vamos a reformular la consulta anterior usando
EXISTS:
SELECT E.Nombre, E.Apellido1 FROM EMPLEADO AS E WHERE EXISTS
(SELECT * FROM SUBORDINADOS S WHERE E.Dni=S.DniSupervisor AND
E.Edad=S.Edad);
- Observe que EXISTS se aplicó sobre un bloque SELECT-FROM-WHERE completo.
Por cada empleado, se evalúa la consulta anidada.
- Puede notar que un método de consulta puede ser más simple que otro. Además hay
que tomar en cuenta que alguno de los métodos puede ser más eficiente.
18 de nov de 2024 Base de datos | Mauricio H. 55
Funciones EXISTS y UNIQUE en
SQL
La función UNIQUE(Q), devuelve TRUE si
el resultado de la consulta Q no contiene
tuplas duplicadas, en caso contrario
devuelve FALSE.
La función UNIQUE permite comprobar si el
resultado de una consulta es o no un
multiconjunto de tuplas.
18 de nov de 2024 Base de datos | Mauricio H. 56
La función EXCEPT
Una expresión con EXCEPT tiene dos
conjuntos de tuplas S1 y S2. El resultado de
S1 EXCEPT S2 es el conjunto de tuplas de
S1 que no están en S2 (es decir es una resta
de conjuntos). Se obtiene vacío si todas las
tuplas de S1 están en S2. EXCEPT se puede
combinar con EXISTS para formular
consultas.
18 de nov de 2024 Base de datos | Mauricio H. 57
La función EXCEPT
Veamos un ejemplo de consulta con
EXCEPT: Se desea recuperar de la
base de datos los empleados que
trabajan en todos los proyectos del
departamento 5.
Por cada empleado E, se recuperan
dos conjuntos de tuplas. Al conjunto
de (números de) proyectos del
departamento 5, se le resta el
conjunto de proyectos en los que
participa el empleado. Si el resultado
es vacío, el WHERE externo es
TRUE y el empleado participa en
todos los proyectos del
departamento 5.
18 de nov de 2024 Base de datos | Mauricio H. 58
Uso de NOT EXISTS
El mismo problema anterior se puede
resolver desde otra perspectiva. Por cada
empleado, se recuperarán proyectos del
departamento 5 en los cuales NO participa
ese empleado. Si el resultado de la
recuperación es vacío (sin tuplas) el
empleado participa en todos los proyectos del
departamento 5.
18 de nov de 2024 Base de datos | Mauricio H. 59
Uso de NOT EXISTS
18 de nov de 2024 Base de datos | Mauricio H. 60
Uso de NOT EXISTS
La idea es determinar si existe un B (del Dpto 5) que
no esté relacionado con el empleado actual, para
hacerlo se usa la tupla auxiliar C. Observe el NOT
EXIST externo, que comprueba si NO existe un
conjunto de tuplas B (del Dpto 5) que NO estan
relacionadas con el empleado actual, si el conjunto
resultante no es vacío, se concluye que el empleado
no tiene relación con al menos un proyecto del
Departamento 5. Entonces ese empleado será
descartado. Hay una correlación de dos niveles
porque cada tupla empleado es usada junto con C,
por cada tupla B.
18 de nov de 2024 Base de datos | Mauricio H. 61
Conjuntos de tuplas explícitos
El resultado de una consulta es un conjunto de tuplas o subtuplas.
Es posible especificar conjuntos explícitos de tuplas o subtuplas.
Los valores de atributos de cada tupla se colocan entre paréntesis
y están separados por comas, las tuplas a su vez se separan entre
sí con comas. Se aplica la misma regla de formato para cualquier
conjunto. Entonces podemos tener lo siguiente:
- ... WHERE (NumProy,Dpto) IN (Q);
Q puede ser el resultado de una consulta o un conjunto explícito,
por ejemplo así:
- … WHERE (NumProy , Dpto) IN ( (1,’Investigación’) , (3 , ’Ventas’) );
18 de nov de 2024 Base de datos | Mauricio H. 62
Tablas concatenadas en SQL
Las tablas concatenadas se refiere a tablas que se
obtienen como resultado de una concatenación en la
clausula FROM de una consulta. Las operaciones de
concatenación son ejecutadas en FROM y las tablas
resultantes son las que se usan en la consulta.
Ejemplo: SELECT * FROM (EMPLEADO JOIN
DEPARTAMENTO ON Dno=NumeroDpto) WHERE
NombreDpto = ‘Investigacion’;
Las concatenaciones en FROM se pueden combinar con el
uso de alias de tablas y atributos, usando las reglas vistas.
Se pueden usar concatenaciones NATURAL JOIN y las
variantes OUTER JOIN en FROM.
18 de nov de 2024 Base de datos | Mauricio H. 63
Funciones agregadas
Son funciones que se aplican sobre un conjunto de tuplas
para obtener información resumida sobre ese conjunto
(COUNT, SUM, MAX, MIN, AVG). Normalmente se obtiene
una tupla resumen a partir de un conjunto resultante de
tuplas. La función COUNT(*) cuenta las tuplas de un conjunto
y COUNT(A) cuenta la cantidad de valores del atributo A de
un conjunto. SUM(Q) suma valores del conjunto Q escalar
(duplicados o no). Las demás funciones son para obtener el
valor máximo, mínimo o promedio de un conjunto de valores
numéricos, usualmente se opera sobre los valores de un
atributo. Las funciones se pueden usar en SELECT o en
HAVING.
18 de nov de 2024 Base de datos | Mauricio H. 64
Ejemplo de uso de funciones
Recuperar la suma de sueldos, sueldo máximo, mínimo y
promedio de todos los empleados de la empresa:
- SELECT SUM(Sueldo), MAX(Sueldo), MIN(Sueldo), AVG(Sueldo)
FROM EMPLEADO;
Contar los sueldos diferentes almacenados en la base de
datos de la empresa:
- SELECT COUNT (DISTINCT Sueldo) FROM EMPLEADO;
NOTA: Si se usa COUNT(*) esto devuelve la cantidad de
tuplas de una selección.
18 de nov de 2024 Base de datos | Mauricio H. 65
Las cláusulas GROUP BY y HAVING
En una selección, la cláusula GROUP BY se
puede colocar después de WHERE y sirve para
agrupar las tuplas seleccionadas por uno o varios
atributos de agrupamiento. Los atributos de
agrupamiento se separan con comas y deben
aparecer también en SELECT. Normalmente el
agrupamiento se usa junto con las funciones
agregadas (COUNT, SUM, etc), las cuales se
aplican en cada uno de los grupos.
18 de nov de 2024 Base de datos | Mauricio H. 66
Las cláusulas GROUP BY y HAVING
Un ejemplo: Por cada proyecto, recupere en una tabla
el nombre del proyecto, su número, y la cantidad de
empleados que actualmente trabajan en ese proyecto:
- SELECT NumProyecto, NombreProyecto, COUNT(*) FROM
PROYECTO, TRABAJA_EN WHERE
NumProyecto=NumProy GROUP BY NumProyecto,
NombreProyecto
Note que el agrupamiento se aplica después de filtrar
las tuplas por la condición de WHERE, no antes. Por
último se aplican las funciones (si existen) a cada
grupo resultante.
18 de nov de 2024 Base de datos | Mauricio H. 67
Las cláusulas GROUP BY y HAVING
Suponga que más allá de obtener grupos de tuplas, queremos
seleccionar solo aquellos grupos que cumplen una cierta condición.
Para hacer esto usamos HAVING, que permite filtrar los grupos
resultantes. En ese sentido funciona como WHERE, pero se evalúa la
condición en cada grupo. La sintaxis general es:
- GROUP BY A1,A2, … HAVING <Condición>;
Por ejemplo a la consulta previa que recupera información de cada
proyecto podemos agregar HAVING:
- … GROUP BY NumProyecto, NombreProyecto HAVING COUNT(*) > 2;
- Así, de los proyectos obtenidos se recuperan solo aquellos en los cuales se
cumple que trabajan más de dos empleados.
18 de nov de 2024 Base de datos | Mauricio H. 68
Las cláusulas GROUP BY y HAVING
Consulta: Recuperar por cada
departamento en los que
trabajan más de 4 empleados,
aquellos cuyo sueldo es mayor
a 30000.
Una posible solución usando
GROUP BY y HAVING se
muestra a la derecha. Por
cada empleado con sueldo
mayor a 30000, se comprueba
en la consulta interna si su
departamento tiene más de 4
empleados en total.
18 de nov de 2024 Base de datos | Mauricio H. 69
Comando INSERT
El comando INSERT permite insertar tuplas en una relación.
Se puede insertar una o varias tuplas a la vez. El formato es:
INSERT INTO EMPLEADO VALUES (‘Ricardo’,’Flores’,…),
(…),…,(...);
- Se deben colocar valores a todos los atributos de tupla,
ordenados según la definición de la tabla. Observe que las tuplas
se separan por comas.
- Después de VALUES se coloca un conjunto de tuplas/subtuplas
explícito o incluso el resultado de una selección de tuplas
compatibles con la tabla.
18 de nov de 2024 Base de datos | Mauricio H. 70
Comando INSERT
Se puede insertar una tupla, dando los valores de algunos atributos.
Los atributos omitidos deben tener un valor DEFAULT y/o permitir
NULL. El formato es:
INSERT INTO E(Aj,Ak) VALUES (vj,vk),…,(...);
No es posible omitir valores de los atributos que son NOT NULL y no
tienen valor DEFAULT.
SQL tiene la capacidad de rechazar tuplas si se viola alguna
restricción que se haya definido previamente en la tabla o en un
atributo, por ejemplo, incluir un valor de FK que no exista como clave
referenciada, o un valor que este fuera de un rango CHECK de la
tabla. Un ejemplo de mensaje de error de la consola SQL al insertar
una tupla con restricciones presentes es: “Cannot add or update a
child row: a foreign key constraint fails”.
18 de nov de 2024 Base de datos | Mauricio H. 71
Comando DELETE
DELETE permite eliminar tuplas de una tabla.
Su sintaxis general es:
- DELETE FROM R WHERE <Condición>;
La condición de WHERE es evaluada por cada
tupla de R. La tupla de R que evalúe como
TRUE la condición de WHERE será borrada. En
ese sentido funciona de forma similar a una
selección. En FROM solo se puede colocar una
tabla.
18 de nov de 2024 Base de datos | Mauricio H. 72
Comando UPDATE
UPDATE permite actualizar valores de tuplas de una tabla. Su sintaxis es:
UPDATE R SET Aj = vj,Ak = vk, … WHERE <Condición>;
De nuevo, la condición de WHERE se evalúa por cada tupla de la relación R.
En SET los valores v que se pueden asignar a los atributos A pueden ser
resultados de expresiones o constantes.
En el comando UPDATE, no se permite hacer referencia a la tabla objetivo en
una cláusula FROM de la condición.
Tanto UPDATE como DELETE estarán sujetas a las acciones de activación
referencial especificadas en la base de datos. Por ejemplo al actualizar un
valor de entidad e[Aj], se puede propagar el valor nuevo a la FK de otra tabla
que apunta a ese valor actualizado.
18 de nov de 2024 Base de datos | Mauricio H. 73
Restricciones como aserciones
Son restricciones generales sobre el estado de la base de
datos. Cada restricción evalúa una expresión lógica. Se debe
especificar un nombre de restricción y una cláusula CHECK
con la condición a evaluar. Una aserción se coloca fuera de
las tablas, la sintaxis general es:
- CREATE ASSERTION NombreAsercion CHECK (<Condicion>);
En general, en la condición se evalúan combinaciones de
tuplas de las tablas de la base de datos, tal como en las
consultas de selección. La restricción es violada si una o más
combinaciones de tuplas hace que la condición sea FALSE.
18 de nov de 2024 Base de datos | Mauricio H. 74
Restricciones como aserciones
Una restricción comprueba la existencia de un conjunto Q de tuplas que violan la restricción
creada, para esto se puede chequear NOT EXISTS (Q). Si Q resulta vacío, no hay tuplas que
violen la restricción.
- CREATE ASSERTION NombreAsercion CHECK ( NOT EXISTS (Q) );
- Q puede ser una selección SELECT-FROM-WHERE como las que se han visto anteriormente.
- La aserción vigila que se cumpla una condición en todo momento. Cualquier solicitud de cambio
en los datos que provoque la violación de la condición será rechazada.
Alternativamente a las aserciones se pueden usar restricciones tipo CHECK en los atributos,
dominios (CREATE DOMAIN) y tuplas de tablas, como se ha explicado anteriormente.
Si al ocurrir una violación de una aserción (un evento), quisiera que el sistema ejecute ciertas
acciones automáticas, se debe crear un “disparador” (CREATE TRIGGER). Un disparador
ejecuta determinadas acciones cuando ocurre un determinado evento.
18 de nov de 2024 Base de datos | Mauricio H. 75
Vistas en SQL
Una vista en SQL es una tabla que se deriva de otras tablas, es una tabla virtual, no
almacenada necesariamente en la base de datos, al contrario de las tablas base, cuyas
tuplas están almacenadas físicamente. Las vistas se actualizan cuando cambia la base
de datos, es decir, con las vistas no tenemos que hacer consultas cada vez que
queramos obtener la información más reciente de la base de datos, la vista devuelve la
información actualizada cuando es consultada.
El comando CREATE VIEW permite crear la vista. Su sintaxis es similar a un comando
de selección.
- CREATE VIEW R AS Q;
- CREATE VIEW R(Aj,Ak,…) AS Q; --Puede renombrar los atributos para la vista
- DROW VIEW R; -- Este comando borra la vista R
- Q es una selección que devuelve un conjunto de tuplas, como las que se han visto anteriormente.
Luego de definir la vista nombrada como R, puede consultar sobre la vista como si fuera una tabla
normal. Se puede renombrar los atributos que tendrá la vista, colocando los nuevos nombres entre
paréntesis.
18 de nov de 2024 Base de datos | Mauricio H. 76
Actualización de vistas
Sobre algunas vistas puede usar UPDATE para cambiar los valores que
muestran dichas vistas. El sistema utiliza estrategias de actualización
dependiendo de la complejidad de la vista. Las actualizaciones de vistas
simples, por lo general se mapean como una actualización a las tablas
base.
Cuando las vistas son complejas e involucran varias tablas, el sistema
puede aplicar actualizaciones incrementales, es decir, no se calcula desde
el principio toda la vista cada vez que se introduce un cambio en las tablas
base, en su lugar se actualiza la vista solo en base a las tuplas de tablas
modificadas en cada actualización.
Debe agregar WITH CHECK OPTION al final de la definición de una vista,
si esta va a actualizarse. Así el sistema comprueba si es posible actualizar
la vista.
18 de nov de 2024 Base de datos | Mauricio H. 77
18 de nov de 2024 Base de datos | Mauricio H.