1. INTRODUCCIÓN
2. LENGUAJES PARA LA DEFINICIÓN Y MANIPULACIÓN DE DATOS. 1
2.2 Cálculo relacional de tuplas. 2
2.3 Cálculo relacional de dominios. 2
1. INTRODUCCIÓN
Entre los modelos existentes de sistemas gestores el relacional es el más común.
Este modelo relacional cuenta con 3 lenguajes formales (el álgebra relacional, el cálculo relacional de tuplas y el cálculo relacional de dominios)
SQL es el lenguaje más utilizado, aunque también existen (QBE, QUEL)
2. LENGUAJES PARA LA DEFINICIÓN Y MANIPULACIÓN DE DATOS
Los sistemas gestores de bases de datos relacionales incluyen lenguajes para la definición de datos y la manipulación de esos datos, el DDL, que constituye el lenguaje para la definición de datos y DML, que constituye el lenguaje para la manipulación de los mismos.
Los lenguajes relacionales pueden ser clasificados en:
– Procedimentales: El usuario debe indicar las operaciones a realizar, y la secuencia en la que se llevan a cabo.
– No procedimentales: Permiten que el usuario se limite a describir los datos y efectuar consultas sin indicar el modo en que se llevará a cabo.
2.1 Álgebra relacional
Constituye un lenguaje de consulta procedimental y cuenta con un conjunto de operaciones básicas para consultar una BD.
2.1.1 Operación seleccionar
2.2 Cálculo relacional de tuplas
Es no procedimental, lo que significa que no se indica la secuencia de operaciones, sino una descripción de lo que deseamos.
Las consultas se representan mediante lo siguiente:
{t|P(t)} à t= variable libre P= una fórmula
2.3 Cálculo relacional de dominios
No es procedimental. Usamos varias variables que toman valores en el dominio de un atributo en lugar de emplear variables de tupla como en el caso anterior. Las expresiones utilizadas en el cálculo relacional de dominios son:
{<x1,…,xn> | P (x1,…,xn)} à x: son variables anónimas P(x1,…xn) es una fórmula
3. LENGUAJES COMERCIALES
Los lenguajes estudiados anteriormente son lenguajes formales que sirven como base para el desarrollo de lenguajes comerciales que basados en los anteriores acompañan a productos comerciales para la consulta y definición de datos en sistema de gestión de bases de datos relacional.
– SQL, relacionado con el álgebra relacional.
– QUEL, relacionado con el cálculo relacional de tuplas.
– QBE, relacionado con el cálculo relacional de dominios.
3.1 QBE
· Lenguaje de manipulación de datos desarrollado por Watson de IBM en los 70.
· Lenguaje no procedimental con sintaxis bidimensional.
· Las columnas representan los atributos de la relación.
· En las filas, aparecen constantes y variables de dominio precedido por (_)
· Para mostrar impreso un determinado atributo se emplea la orden “P” que debe aparece bajo la columna del atributo que nos interesa.
Ejemplo:
Profesor |
Dni |
Nombre |
Apellidos |
Especialidad |
Localidad |
|
P._x |
P._y |
P._z |
Historia |
P._w |
La ordenación: P.AO (ascendente) P.DO (descendente)
Profesor |
Dni |
Nombre |
Apellidos |
Especialidad |
Localidad |
|
P. |
P.AO(2) |
P.AO(1) |
Historia |
Sevilla |
La eliminación: D.
Profesor |
Dni |
Nombre |
Apellidos |
Especialidad |
Localidad |
D. |
11.111.111 |
|
|
|
|
La inserción: I.
Profesor |
Dni |
Nombre |
Apellidos |
Especialidad |
Localidad |
I. |
22.222.222 |
Pedro |
García Gar |
Historia |
Villanueva |
Modificación: U.
Profesor |
Dni |
Nombre |
Apellidos |
Especialidad |
Localidad |
|
11.111.111 |
|
|
|
U. C/Olmo 1 |
3.2 Quel
· Lenguaje de manipulación de datos no procedimental incluido en la BD Ingres y desarrollado en la Uni de Berkeley Californida. La estructura general de una consulta es la siguiente:
range of t1 is r1
range of t2 is r2
……………………………..
…………………………….
range of tm is rm
retrieve (ti1.aj1, ti2.aj2, …….., tim.ajm)
where p
donde t1,…..,tm son las tuplas que usamos para la consulta, r1,…,rm son las relaciones correspondientes a t1,…,tm.
La cláusula RETRIEVE es equivalente a la cláusula SELECT de SQL, y P es el predicado de selección.
· Ejemplo: Obtener todos los clientes que tienen cuenta en la sucursal principal.
RANGE OF t IS deposito RETRIEVE (t.nombre_cliente) WHERE t.nombre_sucursal = “Principal”.
· Como ejemplo de una consulta en la que aparezcan dos tuplas de dos relaciones distintas podríamos usar el siguiente: ” Obtener todos los nombres de los clientes y sus ciudades de residencia que tienen préstamo en la sucursal principal.”
RANGE OF t IS cliente RANGE OF s IS prestamo RETRIEVE (s.nombre_cliente, t.ciudad_cliente) WHERE s.nombre_sucursal = “Principal” AND t.nombre_cliente = s.nombre_cliente
QUEL no incluye eliminación de duplicados por defecto, si se quiere conseguir ésta, es necesario indicarlo mediante la cláusula UNIQUE.
RANGE …………. RETRIEVE UNIQUE (………….) WHERE …….
A) Inserción.
· Para la inserción de tuplas individuales:
APPEND TO deposito (lista de atributos con valores nuevos).
Ej: APPEND TO deposito (num_cuenta = 287, nombre_sucursal = “Murcia”….)
· A continuación, podemos ver un ejemplo de inserción de tuplas de una relación en otra relación.
RANGE OF t IS prestamo
APPEND TO temp (t.nombre_cliente)
WHERE t.nombre_sucursal = “Principal”
Donde temp quedará formada como una relación cuyo único atributo es nombre_cliente. Si temp ya existiera cuando se realizó la inserción, entonces los atributos que tenga temp deben coincidir con los atributos que insertamos en la cláusula APPEND.
B) Modificación.
· Por su sencillez, veremos la modificación mediante un ejemplo por el cual aumentaremos en un 5% los saldos de la relación deposito.
RANGE OF t IS deposito
REPLACE t (saldo = t.saldo x 1.05)
C) Eliminación.
· Para la eliminación usamos el comando DELETE que borra tuplas completas.
Ej: Eliminar todas las tuplas de prestamo para todos los clientes cuyo nombre sea López.
RANGE OF t IS prestamo
DELETE (t) WHERE nombre_cliente = “López”.
4. SQL
El modelo relacional nace gracias a las aportaciones de E.F Codd que trabaja en IBM.
En 1974 SEQUEL(Structured English Query Language) à ahora SQL
4.1 DDL
Lenguaje de definición de datos, que nos permite la definición de los componentes de la BD, como las tablas, índices y vistas.
4.1.1 Creación de tablas
CREATE TABLE Person (
PersonID int, NOT NULL UNIQUE PRIMARY KEY
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
4.1.2 Modificación de tablas
ALTER TABLE Person
ADD (DateOfBirth date)
4.1.3 Eliminación de tablas
DROP TABLE Shippers;
4.1.4 Vistas
Permiten definir subconjuntos de datos formados con una o varias tablas y/o vistas.
Tienen apariencia de tabla, pero ocupa menos espacio porque se almacena solo la definición de la vista y no los datos que la forman.
Muestra al usuario una visión parcial de los datos.
4.1.4.1 Creación de vistas
CREATE VIEW [Current Product List] AS
SELECT ProductID, ProductName
FROM Products
WHERE Discontinued = No;
4.1.4.2 Eliminación de vistas
DROP VIEW view_name;
4.1.5 Índices
Permiten acceder a la información de una tabla, mediante un determinado orden de forma rápida, aumentado el rendimiento de los accesos a la información.
4.1.5.1 Creación de índices
CREATE INDEX idx_lastname
ON Persons (LastName);
4.1.5.2 Eliminación de índices
DROP INDEX index_name;
4.2 DML
Nos permiten introducir, eliminar, modificar y consultar datos contenidos en la BD.
4.2.1 Insertando valores en una tabla
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES (‘Cardinal’, ‘Tom B. Erichsen’, ‘Skagen 21’, ‘Stavanger’, ‘4006’, ‘Norway’);
4.2.2 Borrando registros en una tabla
DELETE FROM Customers
WHERE CustomerName=’Alfreds Futterkiste’;
4.2.3 Modificando registros
UPDATE Customers
SET ContactName = ‘Alfred Schmidt’, City= ‘Frankfurt’
WHERE CustomerID = 1;
4.2.4 Consultas
SELECT * FROM Customers
ORDER BY Country;
La opción DISTINCT la usamos para evitar duplicados
SELECT DISTINCT Country FROM Customers;
4.2.4.2 Operadores de conjunto
El lenguaje SQL cuenta con las operaciones de unión, intersección y diferencia definidas en el álgebra relacional, de modo que podemos operar sobre dos consultas como si se tratara de conjunto de tuplas.
Unión (o uno o el otro)
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
Intersección (uno y el otro)
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
FROM Production.WorkOrder
Diferencia (tuplas que pertenecen a un conjunto y no al segundo)
SELECT supplier_id
FROM suppliers
MINUS
SELECT supplier_id
FROM orders;
4.2.4.3 Predicados
Se recuperan tuplas que cumplen dicha condición.
Agregación:
SELECT Avg(Gastos) AS Promedio FROM Pedidos WHERE Gastos > 100;