III Modelos de datos relacional

3.1 Estructura de las bases de datos
Una B.D. relacional consiste en un conjunto de tablas las cuales tienen asignado un nombre único. En este modelo los datos y sus relaciones se representan por medio de tablas.
En terminología relacional una fila en una relación representa un registro o una entidad; Cada columna en una relación representa un campo o un atributo.


3.2 Lenguajes formales de consulta
Álgebra relacional
Lenguaje de consulta de procedimientos que cuenta con cinco operaciones fundamentales.

Operador Descripción
v Elegir
Proyectar
X Producto cartesiano
U Unión
- Diferencia

Prestamo
nom-suc num-préstamo nom-cliente importe
centro 15 López 1500
periférico 25 Jiménez 2000
sur 30 Gutiérrez 2500
norte 35 Salas 2000

Cuenta
nun-cuenta saldo
100 6000
150 9000


Operación elegir ( 1)
Consiste en escoger tuplas que satisfagan cierto predicado.

1nom-suc = "centro" (préstamo)
Resultado:
centro 15 López 1500

Operación proyectar ( 8 )
Consiste en mostrar solo ciertas columnas de una tabla.

8num-prestamo, nom-cliente (préstamo).
Resultado:
15 López
25 Jiménez
30 Gutiérrez
35 Salas

Ejemplo:
8nom-cliente (importe > 1500 (préstamo))
Resultado:
Jiménez
Gutiérrez
Salas

Operación producto cartesiano (X)
Consiste en crear otra tabla a partir del producto cartesiano de 2 tablas.
Ejemplo:

A =
a1
a2
a3
B =
b1
b2
A X B =
a1 b1
a1 b2
a2 b1
a2 b2
a3 b1
a3 b2

PRÉSTAMO X CUENTA

nom-suc num-prestamo nom-cliente importe num-cuenta saldo
Centro 15 López 1500 100 6000
Centro 15 López 1500 150 9000
Periférico 25 Jiménez 2000 100 6000
Periférico 25 Jiménez 2000 150 9000
Sur 30 Gutiérrez 2500 100 6000
Sur 30 Gutiérrez 2500 150 9000
Norte 35 Salas 2000 100 6000
Norte 35 Salas 2000 150 9000

1nom-suc = "centro" ( PRÉSTAMO X CUENTA )

Operación Unión ( U )
Consiste en crear otra tabla a partir de la unión de dos tablas.

Deposito
nom-suc num-cuenta nom-cliente saldo
centro 300 Ramos 150
sur 305 Flores 450
norte 310 Aguero 500
centro 315 López 200

( 8 nom-cliente ( 1 nom-suc = "centro " ( DEPOSITO )))
U
( 8 nom-cliente ( 1 nom-suc = " centro " ( PRÉSTAMO )))
Resultado :
López
Ramos

Operación Diferencia ( - )
Consiste en encontrar las tuplas que estén en una tabla pero que no estén en otra.

Ejemplo:

A
B
A
B

Todo lo que esta en A pero que no esta en B

( 8 nom-cliente ( 1 nom-suc = "centro" ( DEPOSITO ))) -
( 8 nom-cliente ( 1 nom-suc = "centro" ( PRÉSTAMO)))

Resultado:
Ramos.


3.3 Lenguaje de Consulta Comercial
S.Q.L. ( Structured Query Lenguaje )

S.Q.L. Se introdujo como lenguaje de consulta del sistema R, es una combinación del álgebra relacional y construcciones del calculo relacional.

La estructura básica de una expresión en S.Q.L. se compone de tres cláusulas que son las siguientes:
SELECT ( ELEGIR )
FROM ( DE )
WHERE ( DONDE )

SELECT
Corresponde a la operación de proyección del álgebra relacional.

FROM
Es una lista de tablas que se van a examinar durante la ejecución de una expresión.

WHERE
Corresponde al predicado de selección del álgebra relacional.

Forma de una consulta en S.Q.L.
SELECT A1, A2.,An.
FROM r1, r2.,rn.
WHERE p1,p2,...,pn.

A : Representan atributos.
r : Representan tablas.
p : Representan predicados.

La forma de una consulta en S.Q.L. equivale a la expresión del álgebra relacional siguiente :

( ¶ A1,A2,...,An ( Tp ( r1 X r2 X r3 X ... X rn.))

Union
Una unión permite consultar los resultados de dos o mas tablas en una sola salida; cuando los resultados de las tablas son semejantes (muestran la misma información) se suprimen las salidas redundantes, operando asi como una unión de conjuntos.
 
SELECT <lista de campos> FROM <tabla1> WHERE <condicion1>
UNION
SELECT <lista campos2> FROM <tabla2> WHERE <condicion2>

Like
Consulta por coincidencia parcial en cadenas

SELECT <nombre _ campo>
FROM <tablas>
WHERE <campo char> LIKE <cadena de coincidencia>

caracteres validos en <cadena de coincidencia>
"-" un carácter cualquiera.
"%" una secuencia de caracteres cualquiera.

Ejemplos en S.Q.L.
Ejemplo 1
Hacer una consulta que muestre solamente los nombres de sucursales de la tabla DEPOSITO.
Solución:
SELECT num-suc
FROM deposito

Ejemplo 2
Hacer una consulta que muestre los nombres de los clientes que tienen una cuenta de deposito en la sucursal centro.
Solución:
SELECT nom-cliente
FROM deposito
WHERE num-suc = " centro "

Ejemplo 3
Nombre de los clientes que tengan una cuenta de deposito, un préstamo o ambas cosas en la sucursal centro.
Solución:
( SELECT nom-cliente FROM deposito WHERE nom-suc. = " centro " ).
UNION
( SELECT nom-cliente FROM préstamo WHERE nom-suc. = " centro " ).

Ejemplo 4
Nombre de los clientes que tienen tanto un préstamo como una cuenta de deposito en la sucursal centro.
Solución :
( SELECT nom-cliente FROM deposito WHERE nom-suc = "centro" )
INTERSECT
( SELECT nom-cliente FROM préstamo WHERE nom-suc = "centro" )

Ejemplo 5
Nombre de clientes de la sucursal centro que tienen cuenta de deposito ahí pero que no han recibido préstamo en ese sucursal.

Solución :
( SELECT nom-cliente FROM deposito WHERE nom-suc = "centro" )
MINUS
( SELECT nom-cliente FROM préstamo WHERE nom-suc = "centro" )

Clientes
Nom-cliente calle ciudad
López Madero Saltillo
Jiménez Allende Saltillo
Gutiérrez Aldama Torreón
Salas Hidalgo Torreón
Flores Abasolo Saltillo
Aguero Madero Monclova

Ejemplo 6
Encontrar el nombre del cliente y la ciudad donde viven todos aquellos que tengan un préstamo en la sucursal centro.
Solución :
SELECT clientes.nom-clientes, ciudad
FROM prestamo, clientes
WHERE (clientes.nom-clientes = préstamo.nom-clientes) AND (nom-suc = "centro" )

Conectores en S.Q.L.
Permiten comparar un solo valor con los miembros de todo un conjunto
1.- in
2.- any
3.- all

IN
Verifica si pertenece a una tabla. Donde la tabla es un grupo de valores producidos por la cláusula SELECT.

Ejemplo:
Encontrar los nombres de clientes que tienen préstamo en la sucursal centro y tienen cuenta de deposito.

SELECT nom-cliente
FROM préstamo
WHERE nom-suc = "centro" AND nom-cliente
IN ( SELECT nom-cliente FROM deposito WHERE nom-suc = "centro" )

Resultado :
López

ANY
Verifica que el valor de la tupla sea por lo menos un miembro de todos los valores del conjunto.
Ejemplo:
Encontrar todos los nombres de sucursales que tienen un activo mayor que alguna de las sucursales situadas en la ciudad de Torreón.

Sucursal
nom-suc ciudad activo
centro Saltillo 300000
sur Saltillo 400000
norte Saltillo 200000
centro Torreón 210000
sur Torreón 270000
norte Torreón 350000
centro Monclova 100000
sur Monclova 150000
norte Monclova 600000

Solución :
SELECT nom-suc
FROM sucursal
WHERE ciudad <> "Torreon"
AND activo > any ( SELECT activo FROM sucursal WHERE ciudad = "Torreón" )

La comparación > any en la cláusula WHERE del SELECT externo es verdad si el activo de la tupla es mayor que por lo menos un miembro del conjunto de todos los valores del activo de la ciudad de Torreón.

ALL
Verifica que el valor es igual/mayor/menor que todos los miembros de todos los valores del conjunto.

Ejemplo:
Se modifica ligeramente la consulta anterior, si se buscan todas las soluciones que tengan un activo mayor que todas las sucursales de Torreón.

SELECT nom-suc
FROM sucursal
WHERE ciudad <> "Torreón" AND activo > all ( SELECT activo
FROM sucursal
WHERE ciudad = "Torreón" )

Funciones de S.Q.L. standard:
1. AVG Promedio
2. MAX Máximo
3. MIN Mínimo
4. COUNT # de tuplas

ORDER BY
Hace que las tuplas en el resultado de una consulta aparezcan en orden de menor a mayor.

Ejemplo:
SELECT nom-cliente FROM préstamo ORDER BY nom-cliente

GROUP BY
Sirve para formar grupos, las tuplas que tengan el mismo valor para un atributo se colocan en grupo.

Ejemplo:
Encontrar el saldo promedio de todas las cuentas de deposito en cada una de las sucursales incluir el nombre de las sucursales.

Solución :
SELECT nom-suc FROM deposito GROUP BY nom-suc


3.4 Modificación de la base de datos
La modificación de la base de datos se expresa usando el operador asignación. Las asignaciones se hacen a relaciones ya existentes en la base de datos.

Eliminación
Una solicitud de eliminación se expresa de forma muy parecida a una consulta. Sin embargo, en vez de presentar tuplas al usuario, quitamos las tuplas seleccionadas de la base de datos. Sólo podemos eliminar tuplas completas; no podemos eliminar únicamente valores de determinados atributos.

Inserción
Para insertar datos en una relación, bien especificamos la tupla que sa va a insertar o escribimos una consulta cuyo resultado sea un conjunto de tuplas que se va a insertar.

Actualización
En ciertas ocasiones podemos querer cambiar un valor en una tupla sin cambiar todos los valores de la tupla. Si hacemos estos cambios usando eliminación e inserción, es posible que no podamos conservar los valores que no queremos cambiar. En lugar de ello, usamos el operador actualización.

Creación de Tablas
CREATE TABLE<nombre de la tabla>
(
<campo1> (<tipo>[,NO NULL]),
<campo2> (<tipo>[,NO NULL]),...
)Tipos de Datos
CHAR (<LONG>)[VAR]
FLOAT
INTEGER
SMALLINT

Creacion de Indices
CREATE [UNIQUE] INDEX <nom.indice> ON < nom>tabla>
(
<nomcampo1> [ASC/DES],
<nomcampo2> [ASC/DES],...
)Modificar Tablas (expandirlas)
EXPAND TABLE <nom.tabla>
ADD FIELD <nom.campo> (<TIPO>[NO NULL]) Eliminar Tablas
DROP TABLE <nom.tabla> Eliminar Indices
DROP <nom.indice> Ejemplos

Creacion de Tablas (SQL standard)

CREATE TABLE persona
(
nombre(CHAR(40) VAR, NO NULL),
edad(SMALLINT, NONULL),
estatura(FLOAT, NO NULL),
telefono(CHAR(7))
)

Creacion de Tablas (SQL Access)
CREATE TABLA Cuenta (
Num_cuenta integer Not NULL,
Saldo flota
)

Creacion de Indices
Por nombre
CREATE INDEX ind_nom ON persona (
nombre
)

Insertar datos
INSERT INTO <nom.tabla>
[(<campo1>,<campo2>...):]
< <valor1>,<valor2>...>

Modificar datos
UPDATE <nom.tabla>
SET <campo1> = <campo1>,
<campo2> = <campo2>,...
[WHERE <condicion>]

Eliminar datos
DELETE<nom.tabla>
[WHERE <condicion>]Ejemplo Insertar (SQL Standard)
Insert into persona < 'juan',15,1,75,'2-15-15','forjadores'>


Ejemplo Insertar (SQL Access)
INSERT INTO Cuenta (num_cuenta, saldo) VALUES (10, 6000)

Íncrementar edad de todas las tuplas
Update persona
Set edad=edad+1


3.5 Vistas
Son una especie de tablas virtuales; es decir no existen físicamente sino que forman mediante la selección y/o filtrado de los componentes de otras tablas, una vista puede ser definida en base a una vista previa. Esto significa que pueden crearse dependencia entre las vistas.

Formato de definición de vistas
 
DEFINE VIEW <nombre vista>
[(identif_campo1, identif_campo2,...)]
AS <operación de consulta>

Ejemplo:
se desea crear una vista para obtener los nombres y domicilios de los clientes adultos es deseable el establecimiento de las cabeceras nombre del cliente, domicilio del cliente.

DEFINE VIEW cliente_adulto
(nombre del cliente, domicilio del cliente)
AS (SELECT nombre,domicilio FROM clientes WHERE estado = 'adulto')

Como puede verse, la especificación de los identificadores es opcional; si estos se omiten se asumiran los nombres de los campos extraídos en la consulta.

La operación de consulta permite todos los formatos validos de consulta en SQL con execepción del group by.

Cuando una vista es definida en base a otra, se se dice que es dependiente de esta por lo tanto, se suprimira automáticamente la vista dependiente si se suprime la vista original.

Eliminación de vistas
Drop view <nombre tabla>

Ejemplo
suponga que se desea crear una vista dependiente de la vista cliente adulto que contenga solamente a los clientes que viven sobre forjadores. Se desean los mismos campos y la vista sera llamada cliente_adulto_forjadores.

DEFINE VIEW cliente_adulto_forjadores
AS (SELECT * FROM cliente_adulto WHERE domicilio_del_cliente like 'forjadores%')

DROP VIEW cliente_adulto
(se eliminara tambien la vista cliente_adulto_forjadores, puesto que es dependiente de cliente_adulto.)
La eliminación de una tabla provoca tambien la eliminación automatica de todas las listas que se hayan definido haciendo referencia a ella.



Anterior

Contenido

Siguiente

Base de Datos I
Ing. Flora Gonzalez, Ing. Tomas Lopez, Ing. Cesar Rodriguez

 

Hosted by www.Geocities.ws

1