Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Gestión de Datos
Material de estudio
Sistema de Gestión de Base de Datos (DBMS: Data Base Management System) que está compuesto
por un conjunto de programas y archivos del Sistema Operativo que realizan operaciones de
compilación y traducción de sentencias, implementan la integridad referencial, control de
concurrencias, recuperación automática ante fallas, seguridad a diversos niveles.
MODELO DE DATOS
Conjunto de reglas y herramientas conceptuales que se emplean para describir datos, las relaciones
entre los datos, el significado de los mismos y las restricciones sobre los mismos
1
MODELO DE DATOS IMPLEMENTACIONALES
• Jerárquico(IMS)
•estructura jerárquica, de árbol
1970 •implementa punteros para relacionar datos
Vista abstracta de los datos: ocultar detalles de cómo se almacena y mantienen los datos.
Niveles de abstracción:
Nivel físico: es un nivel interno, con estructura de archivos, índices, etc.
Nivel conceptual: define la base de datos a nivel global.
Nivel de vista: es un nivel externo, con subconjuntos de la base de datos global para una
aplicación determinada.
Vista 1 Vista 2
Vista n
Nivel Externo
Nivel conceptual Mapeo externo/conceptual
Lo que cambia en realidad es el mapeo entre los diferentes niveles. Muy pocas Bases de Datos
comerciales tienen implementado a full la arquitectura de tres niveles, por el alto costo que se paga en
eficiencia para tener un mapeo completo entre los distintos niveles.
LENGUAJES
Todo DBMS cuenta con dos tipos de lenguajes
Lenguaje de Definición de Datos (DDL: Data Definition Language) me permite definir los
datos a nivel conceptual, se genera un archivo especial denominado diccionario de datos
(DATA DICTIONARY)
Lenguaje de Manipulación de Datos (DML: Data Manipulation Language) tiene sentencias
que permiten recuperar la información como también ingresar, modificar y eliminar datos.
Huésped: se pueden ingresar sentencias del DML en un lenguaje estándar como C++,
COBOL, Visual Basic, etc.
Interrogación: lenguajes propios que sirven para manipular datos en la BD.
Análisis de factibilidad: analizar las posibles de áreas de aplicación, hacer un estudio de costos-
beneficios, determinar la complejidad de datos y procesos.
Diseño:
1. Diseño de la Base de Datos
2. Diseño de las aplicaciones del sistema (procesos)
Implementación: del SI, se cargan los datos en la BD y se hacen pruebas de las aplicaciones (test de
las distintas transacciones).
3
Operación y mantenimiento: involucra el entrenamiento de los usuarios. La operación comienza
cuando se han validado todas las funciones. El monitoreo de la performance, y el mantenimiento del
sistema son las actividades más importantes de la fase operacional.
Definición del sistema: se definen el alcance de la BD, sus usuarios y aplicaciones. Se identifican las
interfaces de varias categorías de usuarios, las necesidades de almacenamiento y procesamiento.
Diseño de BD: al final de esta fase se completa el diseño lógico y físico de la BD en el DBMS elegido.
Operación: la BD y sus sistema se pone en operación (nuevo y viejo trabajan en paralelo por un
tiempo).
2- Diseño Conceptual de la BD
3- Elección de un DBMS
5- Diseño Físico de la BD
4
FASES DEL DISEÑO DE UNA BD (PARA BD GRANDES)
DIAGRAMAS ENTIDAD-RELACIÓN
Objetos básicos:
Entidades:
- “Cosas” del mundo real con existencia independiente.
- Existencia física: persona, casa, auto empleado.
- Existencia conceptual: compañía, trabajo, curso.
- Objetos de datos principales de los que se desea guardar información.
Atributos:
- Características de las entidades y relaciones que los describen y le agregan detalle.
- Tipos de atributos:
o Identificador/descriptor,
o Simple/compuesto,
o Simple/multivaluado,
o Derivado.
5
Relaciones:
Representan asociaciones entre una o más entidades, no tienen una existencia conceptual o
física, si se elimina una de las entidades que las soporta desaparece la relación.
6
RELACIONES
Grado:
o Unaria:
o Binaria:
o Ternaria:
o N-aria
Cardinalidad:
Indica la cantidad de ocurrencias de entidades conectadas a ambos lados de la asociación.
La cardinalidad en una relación ternaria o n-aria merece especial atención. Por ejemplo en
una relación ternaria se considera que una entidad tiene una cardinalidad de 1 si está
relacionada solo con una instancia de las otras dos entidades asociadas.
7
Existencia de una relación:
La existencia de una entidad en una relación puede ser definida como obligatoria u opcional
(Participación: total o parcial).
o Si una ocurrencia de una entidad ya sea en el lado “uno” o en el lado “muchos” debe
existir para que sea incluida en una relación -> obligatoria. Define una cardinalidad
mínima (existencia) de 1.
o Si una ocurrencia de una entidad ya sea en el lado “uno” o en el lado “muchos” puede
no existir para que sea incluida en una relación -> opcional. Define una cardinalidad
mínima (existencia) de 0.
La cardinalidad máxima puede estar representada por un número entero, cuando así
corresponda, o por una letra (por lo general n o m) indicando un valor genérico desconocido
(muchos).
8
Atributos de una relación:
Las relaciones pueden tener atributos propios que surgen de la asociación que se establece
entre las entidades.
Se emplea para entidades que contienen ciertos atributos comunes que pueden ser
generalizados en una entidad de nivel más alto: la entidad superclase ó supertipo. Las clases
de nivel más bajo son los subtipos y especializan el concepto generalizado en el supertipo,
agregándole los atributos que los describen con más precisión.
Definida por predicado: cuando se puede especificar poniendo una condición en el valor de
un atributo a que subclase pertenece una entidad (Empleado-Tipo de trabajo).
o Disyunto: las subclases deben ser disyuntas, una entidad puede ser miembro a lo
sumo de una de las subclases de la especialización, sino son superpuestas.
9
o Especialización parcial: alguna entidad en la superclase puede no ser miembro de
las subclases en la especialización.
o Disyunta – Total
o Disyunta - Parcial
o Superpuesta – Total
o Superpuesta – Parcial
Las ENTIDADES fuertes del modelo se transforman en una relación (TABLA) que incluye todos los
atributos de la entidad. Uno de sus atributos debe ser la clave primaria de la tabla.
Para las asociaciones BINARIAS con cardinalidad 1:1 donde participan las entidades S y T, se debe
elegir una de las entidades, S por ejemplo, e incluir en como clave foránea en S, la clave primaria de T.
Es preferible elegir como S a la entidad que participa en la asociación con existencia obligatoria
(existencia 1). Los atributos propios de la asociación también se deben incluir en S. De la
transformación resultan dos tablas correspondientes a cada una de las entidades que participan de la
relación con el agregado de la clave foránea y los atributos de la asociación correspondientes.
Para las asociaciones BINARIAS con cardinalidad 1:N donde participan las entidades S y T, se debe
identificar la relación S del lado N de la asociación, e incluir como clave foránea de S la clave primaria
de T. Los atributos propios de la asociación también se deben incluir en S. El resultado final es
siempre dos tablas correspondientes a cada una de las entidades S y T que participan de la asociación,
con el agregado de la clave foránea y los atributos propios correspondientes a la asociación.
Para las asociaciones de GRADO BINARIO con cardinalidad N:M y para asociaciones con grado
mayor a 2 (>2) se genera una nueva tabla para la relación donde se incluyen como claves foráneas las
claves primarias de las entidades que participan de la asociación, su combinación constituirá la clave
primaria de la tabla generada. Incluya también los atributos propios de la relación.
Se debe notar que para las asociaciones 1:1 y 1:N también se pueden generar nuevas tablas, esto es
particularmente útil cuando existen pocas instancias de la relación y evitar de esta forma valores nulos
en las claves foráneas.
Por cada atributo multivaluado A se debe crear una nueva tabla. A esta tabla se le debe
agregar como clave foránea la clave primaria (K) de la entidad que posee el atributo multivaluado A.
La clave primaria de la tabla generada la constituirá la combinación de A y K.
10
1. Vertical: Crear una tabla para la entidad de nivel más alto, crear una tabla para c/u de las
entidades de nivel más bajo incluyendo la clave de la entidad de nivel más alto como clave
foránea.
Cuenta(Número_cuenta, Saldo)
CajaAhorros(Tasa_interés, Número_cuenta)
CuentaCorriente(Saldo_desc, Número_cuenta)
2. Horizontal: No crear una tabla para la entidad de nivel más alto, en cambio crear una
tabla para cada una de las entidades de nivel más bajo donde además de los atributos
propios se incluyan una columna por cada uno de los atributos de la entidad de nivel más
alto.
CajaAhorros(Tasa_interés, Número_cuenta,
Saldo)
CuentaCorriente(Saldo_desc, Número_cuenta,
Saldo)
11
Transformación en tablas de una exclusión
CONCEPTOS BÁSICOS
Las tablas son la estructura lógica de una BD Relacional, no su estructura física. La estructura física
constará de archivos (secuenciales, indexados, hash), índices, etc.
La información de las bases de datos está representada de una sola manera, como valores de datos
explícitos. Este es el único medio disponible, no hay punteros conectando una tabla con otra.
Los operadores para la recuperación de datos son operadores que generan nuevas tablas a partir de
las tablas existentes.
Otras propiedades:
12
CLAVES
El/los atributo/s que distinguen unívocamente una ocurrencia de una entidad de otra se denomina
superclave. Conjunto de uno o más atributos que permiten identificar de forma única a una entidad.
Propiedades:
Ejemplo:
a) DNI
b) NyAp + fecha_nacimiento+dirección
d) DNI + NyAp
e) DNI + fecha_nacimiento
Claves candidatas: aquellas superclaves en la que ningún subconjunto de ella es superclave (a, b, c).
Superclaves mínimas. También se denominan claves únicas. (Para sentencias SQL de creación de
tablas estas son las Unique Key)
Claves primarias: la clave que el diseñador de la BD elige entre el conjunto de claves candidatas
como medio principal para identificar la/las entidades en el conjunto de entidades. (Primary Key)
Las entidades débiles son aquellas que no cuentan con un conjunto de atributos propios suficientes
para formar una clave primaria.
Valores nulos: en una DB relacional se pueden especificar restricciones en las que se permiten
valores nulos o no para un atributo. Un valor nulo por lo general indica desconocimiento de la
información:
¡Por lo general se prohíbe que algún componente de clave primaria contenga valores nulos!
Conjunto de entidades fuerte: conjunto de entidades que tiene una clave primaria.
13
Claves foráneas: clave que pertenece a otra entidad a la cual está ligada y cuyos valores deben ser
consistentes (Foreign Key) Dada una tabla base R2, una clave foránea en R2 es un subconjunto FK de
atributos de R2 tal que:
- Existe una tabla R1 con una clave candidata CK y en todo momento cada valor de FK en
R2 es idéntico a algún valor de CK en R1.
Valores nulos:
No se permiten valores nulos en claves primarias, tampoco en claves foráneas en relaciones que son
obligatorias. Se permiten en los otros casos pero se deben emplear con mucho cuidado.
Restricciones de integridad referencial: se refieren a que se debe hacer con las claves foráneas
cuando se actualiza o se elimina la clave primaria y/o candidata a la que hace referencia:
- on delete/update set to null : se ponen en nulo todas las claves foráneas que son iguales
a la clave primaria/candidata (en la definición la clave foránea debe aceptar valores nulos).
14
- on delete/update set default: se ponen en el valor por omisión definidos todas las claves
foráneas que son iguales a la clave primaria/candidata.
CRACIÓN DE TABLAS
DEFAULT expr especifica el valor por omisión si el mismo no está en la sentencia INSERT.
Ejemplo:
15
TIPOS DE RESTRICCIONES
Las restricciones son importantes para asegurar la integridad de los datos en la Base de Datos. Las
restricciones se chequean cuando se ingresan, actualizan o eliminan datos de una tabla.
Restricción Descripción
Sólo una clave primaria por tabla. Es una columna, o conjunto de ellas, que
identifica unívocamente a cada fila de la tabla.
PRIMARY KEY Ninguna columna de la clave primaria pueda contener un valor nulo.
Puede definirse a nivel de columna o de tabla.
Una clave primaria compuesta se crea usando la definición a nivel de tabla.
Se crea automáticamente un índice para la columna/s PRIMARY KEY.
16
- Se pueden definir a nivel de columna o a nivel de tabla.
FOREIGN KEY se usa para definir la columna en la tabla hija, cuando se establece la
restricción a nivel de tabla.
ON DELETE CASADE indica que cuando se borra la fila en la tabla padre las filas
dependientes en la tabla hija, también serán borradas. Sin esta
opción, la fila en la tabla padre no puede ser borrada mientras haya
referencias a ella en la tabla hija.
Ejemplo:
(empno NUMBER(4),
ename VARCHAR2(10),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
Previamente se debe haber definido DEPTNO en la tabla DEPT, como clave primaria o única!
Sentencias DML permitidas por las acciones de integridad referencial cuando se ejecutan sobre
claves primarias/únicas de la tabla padre, o sobre claves foráneas de la tabla hijo.
17
sin su correspondiente valor en correspondiente en la tabla
la tabla padre. padre.
Ejemplos:
RESTRICCIÓN CHECK
18
MODIFICACIÓN DE TABLAS
agregar columnas
DEFAUL expr especifica el valor por defecto para una nueva columna.
NOT NULL agrega una restricción de NOT NULL para la nueva columna.
19
ADD ( tipo_doc NUMBER(1) DEFAULT 0,
nro_doc NUMBER(8));
A tener en cuenta:
Si una tabla contiene filas, los campos de la nueva columna se ponen en NULL.
tipo de dato
tamaño
DEFAULT expr especifica el valor por defecto para una nueva columna.
NOT NULL agrega una restricción NOT NULL para la nueva columna.
Ejemplo:
20
MODIFY ( tipo_doc VARCHAR2(4)
ERROR en línea 2:
Tabla modificada.
AGREGAR RESTRICCIÓN
Ejemplo:
3 (tipo_doc IN ('DNI','LC','LE','CIPF'));
A tener en cuenta:
Se puede agregar una restricción de NOT NULL a una columna existente usando la cláusula
MODIFY del comando ALTER TABLE.
21
ELIMINAR UNA RESTRICCIÓN
Se debe usar el comando ALTER TABLE con la cláusula DROP. El nombre de la restricción se puede
obtener examinando las vistas.
A tener en cuenta:
Con el DROP de la tabla la BD pierde todos sus datos y sus índices asociados.
22
MANIPULACIÓN DE DATOS
Estos comandos están directamente relacionados con las transacciones y el control de los cambios
sobre los datos.
Comando Descripción
Se puede agregar una nueva fila a una tabla por medio del comando INSERT.
Nota: este comando con la cláusula VALUES inserta únicamente una fila por vez en la tabla.
23
AGREGAR FILAS CON SUBCONSULTAS
Se puede usar la sentencia INSERT para agregar filas a una tabla donde los valores se derivan de
otras tablas ya existentes. En lugar de la cláusula VALUES, se usa una subconsulta.
FROM vendedores;
ACTUALIZAR FILAS
UPDATE tabla
[WHERE condición];
condición identifica las filas a ser actualizadas y está compuesto por nombres de columnas,
expresiones, constantes, subconsultas y operadores de comparación.
Nota: es conveniente usar la clave primaria para identificar a una fila en particular. El uso de otras
columnas puede causar que se actualicen varias filas. Identificar a una fila en la tabla VENDEDORES por
la columna APELLIDOS es peligroso porque varios empleados pueden tener el mismo.
24
Ejemplo: Transferir el vendedor 17 a la oficina 1 y actualizar la identificación del empleado al cual
responderá para que dependa directamente del responsable de esa oficina de ventas.
SET id_oficina = 1,
id_vend_responde_a =
(SELECT id_vend
FROM oficinas_vtas
WHERE id_oficina = 1)
ELIMINAR FILAS
[WHERE condición];
WHERE id_oficina = 6;
Si se omite la cláusula WHERE, se eliminarán todas las filas de la tabla, pero la tabla aún
existe como tal.
25
ÁLGEBRA RELACIONAL
Conjunto de operaciones que toman una o dos relaciones(tablas) como entrada y producen
una nueva relación(tabla) como resultado.
26
27
LA OPERACIÓN SELECCIONAR
Ejemplos:
LA OPERACIÓN PROYECTAR
Operación unitaria que devuelve su relación argumento con ciertas columnas omitidas; se eliminan
las filas duplicadas.
Ejemplos:
Operación binaria, que combina cada una de las tuplas de una relación con todas las tuplas de la
otra.
OPERACIONES DE CONJUNTO
Las tablas deben ser compatibles para la operación de conjunto, para ello deben cumplir con las
siguientes condiciones:
UNIÓN DE CONUNTOS
Operación binaria, que contiene las tuplas de que aparecen en ambas relaciones (tablas) eliminando
los duplicados.
28
INTERSECCION DE CONJUNTOS
Operación binaria, que contiene las tuplas que son iguales en ambas relaciones (tablas). Las lista
una sola vez.
( )
DIFERENCIA DE CONJUNTOS
Operación binaria, que contiene las tuplas que están en una relación (tabla) pero que no está en la
otra.
Ej.: Encontrar los clientes que tienen cuenta y pero que no tienen préstamo en la CasaCentral
Operación binaria, que contiene las tuplas que son combinación de tuplas de dos relaciones) tablas
pero que tienen un valor igual en un atributo que toma valores del mismo dominio en ambas
relaciones (tablas).
Esta operación surge como un producto cartesiano seguido de una operación de selección. La
selección se realiza forzando la igualdad en aquellos atributos que están en ambas relaciones y que
toman valores del mismo dominio (obviamente de aquellos que interesa aparear).
29
DIVISIÓN
Sea el siguiente ejemplo: se quiere obtener los clientes que tienen cuenta en todas las sucursales de
la ciudad de “Paraná”.
( )
Los clientes y las sucursales donde tienen cuenta se obtiene por medio de:
( )
La respuesta son solo los nombres de los clientes que cumplen con los valores de la sucursal que
corresponden a Paraná.
OPERACIÓN RENOMBRAR
Se denota por la letra griega r y puede renombrar el nombre de la relación, los nombres de los
atributos o ambos.
Ejemplos:
Renombra la relación R en S.
30
DESCOMPOSICIÓN DE UNA SECUENCIA DE SENTENCIAS
A veces es preferible en lugar de escribir una secuencia de sentencias del algebra relacional
descomponerla en una serie de sentencias.
Grupo: agrupar tuplas de una relación con el mismo valor en uno/algunos de sus Atributos.
31
OPERACIONES DEL ÁLGEBRA RELACIONAL EN SQL
Select *
Select *
where cliente.numero-cliente
=préstamo.número-cliente
32
USO DE DISTINCT-UNION-INTERSECT-MINUS/EXCEPT
EL CONECTOR IN EN SQL
“Encontrar todos los clientes que tienen un “Encontrar todos los clientes que tienen un
préstamo y una cuenta en la sucursal Casa préstamo y pero no tienen una cuenta en la
Central”. sucursal Casa Central”.
“Encontrar el nombre y la ciudad de todos los clientes que tienen un préstamo en alguna sucursal”
En consultas que contienen subconsultas, se aplica una regla de ámbito a las variables de
tupla.
En una subconsulta, está permitido usar sólo variables de tupla definidas en la misma
subconsulta o en cualquier consulta que contenga a la subconsulta.
Si una variable de tupla está definida tanto localmente como globalmente (en una consulta
que la contiene), se aplica la definición local.
33
Las variables de tupla son muy útiles para comparar dos tuplas de la misma relación
COPARACIÓN DE CONJUNTOS
(select activo
from sucursal
Lo que se compara aquí es el valor individual de cada tupla con el conjunto de valores que se obtienen
en la subconsulta anidada.
SQL también permite las comparaciones < some, <= some, > some, >= some y <> some.
La palabra clave any es sinónimo de some en SQL.
Si quisiéramos encontrar los nombres de las sucursales que tienen un activo mayor que
todas las sucursales de Santa Fe, deberíamos usar la construcción > all.
34
Del mismo modo SQL permite las
select nombre-sucursal comparaciones < all, <= all, >all, >= all y <>
all.
from sucursal
(select activo
from sucursal
EXISTS retorna verdadero si la subconsulta no está vacía retorna falso si la subconsulta está
vacía.
NOT EXISTS retorna verdadero si la subconsulta está vacía retorna falso si la subconsulta no
está vacía.
“Encontrar todos los clientes que tienen una cuenta y un préstamo en la sucursal Casa Central”
select nombre-cliente
from cliente
where exists (select *
from cuenta
where cuenta.nombre-cliente = cliente.nombre-cliente
and nombre-sucursal = “Casa Central”)
and exists (select *
from prestamo
where prestamo.nombre-cliente = cliente.nombre-cliente
and nombre-sucursal = “Casa Central”)
Es muy útil para dar respuesta a consultas “para todos”. Supongamos las siguientes tablas:
registrado_en(nroLib, Id-curso)
35
“Encontrar el NyAP de los estudiantes que se registraron en todos los cursos”
select NyAP
from estudiante
where not exists
(select *
from curso
where not exists
(select *
from registrado_en
where estudiante.nroLib=
registrado_en.nrolib and curso.id-
curso=registrado_en.id-curso)
SELECT NyAP
FROM estudiante
WHERE not exists
( ( SELECT Id_curso
FROM curso
)
minus (except)
( SELECT Id_curso
FROM registrado_en
WHERE estudiante.nroLib= registrado_en.nrolib
)
);
SELECT NyAP
FROM estudiante, registrado_en
WHERE estudiante.nroLib= registrado_en.nrolib
GROUP By nrolib, NyAP
HAVING count (*) = ( SELECT count (*)
FROM curso )
SQL proporciona 5 funciones que pueden ser empleadas con cláusulas de agrupamiento (GROUP
BY) o solas en la cláusula SELECT donde se considera la tabla completa como un grupo. Estas
funciones son:
mínimo: min
promedio: avg
máximo: max
total: sum
cuenta: count
36
Las operaciones como avg se llaman funciones agregación porque se emplean para operar sobre
grupos de tuplas.
El resultado de una función de agregación es un valor único.
La cláusula having, seguido de un agrupamiento (group by) sirve para declarar una condición
que se aplica a los grupos más que a las tuplas.
“Encontrar las sucursales que tienen un saldo promedio en las cuentas mayor a $ 1500”
Si en la misma consulta aparecen una cláusula where y una cláusula having, primero se aplica el
predicado de la cláusula where. Las tuplas que satisfacen el predicado where son colocadas en
grupos por la cláusula group by. Después se aplica la cláusula having a cada grupo. Los grupos que
satisfacen el predicado de la cláusula having son utilizados por la cláusula select para generar tuplas
del resultado de la consulta.
“Encontrar el saldo promedio de todos los clientes con cuentas que viven en Santo Tomé
37
ORDENAMIENTO DE FILAS (ORDER BY)
FROM tabla
Los valores numéricos se muestran con el valor más bajo en primer lugar, por ejemplo 1 a
999.
Los valores de fecha se muestran con el valor más temprano en primer lugar, por ejemplo
01/01/1992 antes que 01/01/1995.
Los valores de caracteres se muestran en orden alfabético, por ejemplo primero la A y último
la Z.
En ORACLE, los valores nulos se muestran últimos en las secuencias ascendentes y primeros
en las secuencias descendentes.
Se puede usar un alias de columna en la cláusula ORDER BY.
Otro método para ordenar el resultado de una consulta es por posición. Es útil cuando se ordena por
una expresión larga, se especifica la posición que tiene en la cláusula SELECT.
Se puede ordenar por varias columnas, inclusive por columnas que no aparecen en la
cláusula SELECT.
Se puede cambiar el ordenamiento para una columna por ejemplo agregando DESC
después del nombre de la columna.
OPERADORES DE COMPARACIÓN
Operador Significado
= Igual a
38
Operador Significado
Existen otros operadores como ANY, ALL, SOME, EXISTS que se estudiarán más adelante.
Ejemplos:
OPERADOR LIKE
Me permite seleccionar filas en la que algún campo determinado coincida con un patrón de caracteres
39
Mostrar el salario de todos los empleados cuyo Mostrar el salario de todos los empleados con
nombre comienza con SM. nombre SM%
O bien
SELECT sal
FROM emp
WHERE ename = ’SM%’
En la primera consulta se puede ver que el operador LIKE seguido de % toma la secuencia de
caracteres como un patrón, no es igual en los otros dos casos. La búsqueda es sensible a mayúsculas y
minúsculas, se puede utilizar una función UPPER para pasar los valores a minúsculas.
EQUIJOIN
Un equijoin es una operación binaria, combina filas de dos o más tablas pero que selecciona las
filas que tienen valores iguales para ciertas columnas (columnas que toman valores del mismo
dominio en ambas tablas, por lo general sus claves primarias-foráneas).
Es conveniente preceder el nombre de la columna con el nombre de la tabla por claridad y para mejorar
el acceso a la base de datos.
Si el mismo nombre de columna aparece en más de una tabla, entonces se debe prefijar con el nombre
de la tabla correspondiente.
Para combinar tablas, se necesita como mínimo una cantidad de condiciones de igualdad equivalentes a
la cantidad de tablas menos uno.
Esta regla no aplica si la tabla tiene una clave primaria compuesta.
En las operaciones de equijoin (producto natural) es útil el uso de alias en lugar de repetir los
nombres de las tablas como en el siguiente ejemplo:
Mostrar apellidos, nombres y localidad de todos los clientes cuyo código postal es (3000), ordenados
por apellido.
40
4 WHERE C.cod_post = L.cod_post
5 AND C.cod_post_aux = L.cod_post_aux
6 AND C.cod_post = 3000
7 ORDER BY C.apellidos;
4 AND Z.cod_post_max;
Se podrían usar otros operadores tales como <= y >=, sin embargo BETWEEN es más simple. Los
alias de tablas se especificaron por razones de performance y, no por posible ambigüedad.
SINTAXIS ANSI
SELECT …
INNER
LEFT [OUTER]
FROM table_name RIGHT [OUTER] JOIN table_name
FULL [OUTER]
ON condición de join
WHERE …
41
SELECT EN EL FROM
GROUP BY p.id_cliente) cl
WHERE c.id_cliente=cl.id_cliente
En esta consulta se pide mostrar el apellido y nombre del Cliente y el promedio de las cantidades
compradas.
Las tablas pedidos y renglones de pedido no tienen el nombre el apellido del cliente, pero si el
id_cliente, es por eso que se emplea un SELECT en el FROM, que se ejecuta primero y el resultado es
como si se hubiera empleado una vista. También se podría haber resuelto con una vista.
Ejemplo:
“Encontrar el nombre del profesor que tiene el menor promedio de notas en los
exámenes”
SELECT P.nombre
WHERE P.Id_profesor=E.Id_profesor
FROM Examenes Ex
GROUP BY Ex.Id_profesor);
42
SELECT P.nombre, AVG(nota)
WHERE P.id_profesor=E.id_profesor
FROM Examenes E
VISTAS
Una vista es una tabla lógica basada en una o varias tablas o vistas.
Una vista no contiene datos propios a través de ella se pueden ver los datos de las tablas.
Las tablas sobre las que se basa la vista se denominan tablas base.
La vista se almacena como una sentencia SELECT en el diccionario de datos.
SINTAXIS ABREVIADA
AS subconsulta
FORCE crea la vista sin importar que la tabla base exista o no.
43
Subconsulta es una sentencia SELECT completa. Se pueden usar los alias para las
columnas en la lista del SELECT.
La consulta que define a una vista puede contener una sintaxis SELECT compleja,
incluyendo uniones, grupos y subconsultas.
La consulta que define la vista no puede contener la cláusula ORDER BY.
El sistema asigna un nombre por omisión (SYS_Cn) a la restricción WITH CHECK
OPTION.
La opción OR REPLACE se emplea para cambiar la definición de la vista sin eliminarla y
recrearla, o reasignar los permisos otorgados previamente.
Ejemplos:
Crear una vista con los datos Crear una vista con los nombres de
personales de los clientes del oficina, monto de ventas mínimo,
vendedor 11 máximo y promedio por oficina (estos
SQL> CREATE VIEW clientes_vend11_vi últimos tomados de la tabla
2 AS SELECT id_cliente, apellidos, VENDEDORES)
nombres, domicilio SQL> CREATE VIEW oficina_vtas_vi
3 FROM clientes 2 AS SELECT O.nombre OFICINA,
4 WHERE id_vend = 11; 3 MIN(V.ventas) "Vtas. Mínimas",
4 MAX(V.ventas) "Vtas. Máximas",
SQL> SELECT *FROM clientes_vend11_vi; 5 AVG(V.ventas) "Vtas. Promedio"
6 FROM oficinas_vtas O, vendedores V
7 WHERE O.id_oficina = V.id_oficina
8 GROUP BY O.nombre;
MODIFICAR VISTAS
44
Modificar CLIENTES_VEND11_VI para agregar un alias a los nombres de columna
Los alias deben ser listados en el mismo orden que se pusieron las columnas en la subconsulta.
Para modificar los datos de una vista, excepto los casos antes mencionadas se agrega lo
siguiente:
- Columnas definidas por expresiones, (por ej. NRO_ATENCIONES * 12)
Se pueden agregar datos a través de una vista, excepto los casos mencionados y además no
deben existir columnas NOT NULL en la tabla base, no seleccionadas por la vista. Los datos
se agregan directamente en la tabla base.
45
DEPENDECIAS FUNCIONALES
Es una relación entre uno o más atributos. Si se da el valor de un atributo se pueda obtener el valor
de otro.
Ej.: si se conoce el número de cuenta de un cliente se pueda conocer su saldo, saldo es entonces
funcionalmente dependiente de número de cuenta.
Se lee como que número de cuenta determina funcionalmente el saldo o por ejemplo que DNI fija o
determina el nombre y apellido y la dirección de una persona.
Un valor de un determinante está relacionado con un valor del atributo determinado, por el
contrario, un valor del/los determinados tendrá uno o más diferentes valores del determinante.
+
F = conjunto cerrado (o closure) de dependencias funcionales que se pueden inferir del conjunto F.
46
A partir de las reglas de Armstrong se pueden deducir las siguientes reglas:
+
En algunos casos es muy difícil, prácticamente imposible determinar F .
CLAUSURAS
A BC A BC (dada)
CD EF AD CD por aumento
AD EF por transitividad
AD F por descomposición
Se define la clausura de X con respecto a F (se denomina X+), como el conjunto de los atributos de A
R tal que X _ A.
CLOSURE (X,R) := X
Hacer
Para cada DF K®Y en R
Hacer
si K es un subconjunto de CLOSURE (X,R) luego
CLOSURE(X,R):= CLOSURE(X,R) union Y
fin-hacer
fin-para
si CLOSURE(X,R) no cambio en la iteración luego EXIT
fin-hacer
47
Dada la relación R con 1. Inicializamos CLOSURE(K,S) = {A,B}
atributos {A,B,C,D,E,F}, y F
(conjunto de dfs) : 2. Hacemos el loop interno 4 veces una para cada DF.
• En la segunda agregamos F
+
Sea F un conjunto de dfs y X Y una df, luego X Y es cierta si y solo si Y X
48
número_cliente nombre
número_cliente localidad Mientras número_cliente es único, nombre no lo es.
nombre localidad
NORMALIZACIÓN
¿Qué es normalización?
Una tabla (concepto matemático de relación) debe tener las siguientes propiedades:
sus atributos (columnas) deben ser simples no debe tener arreglos ni grupos repetitivos
(multivaluados, compuestos)
un atributo debe corresponderse con un solo dominio
cada columna debe tener un nombre único
orden de las columnas no debe ser importante
no deben existir filas repetidas (no siempre se cumple)
el orden de las filas no es importante
Si una tabla cumple con las siguientes propiedades se dice que está en primera forma normal ( 1NF).
Definición:
“Una relación (tabla) está en primera forma normal (1FN) si cumple la propiedad que sus dominios
(atributos o columnas) contienen sólo valores atómicos, esto es que no tienen arreglos ni grupos
repetitivos”
49
NORMALIZACIÓN
Esta tabla contiene un grupo repetido ya que cada pedido puede tener más de un producto
Observar que ambas relaciones tienen una clave, que existe una clave (id_pedido) que me permite
asociar ambas tablas. La segunda relación tiene una clave compuesta por dos atributos Id_pedido y
Id_producto.
La forma no normalizada se corresponde con una relación (tabla) con atributos multivaluados o con
atributos compuestos.
No se cuenta con la información de un producto hasta que no haya un pedido para ese
producto
Si se elimina la única fila que contiene un producto determinado se pierde la información
sobre ese producto
Cada fila de PEDIDOS sobre un mismo producto repite la información de ese producto
(descripción, precio), si se cambia la información sobre el producto se deberán realizar
muchas actualizaciones
“Una tabla (relación) está en Segunda Forma Normal si además de estar en 1NF cualquiera de sus
atributos no-claves dependen completamente de cada una de las claves candidatas de la tabla
(relación)”
La dependencia debe ser completa sobre el total de la clave (para claves compuestas) y no para una
parte de ella. 2FN se aplica sólo cuando tenemos claves compuestas.
50
Id_pedido, Id_producto cantidad, total_producto
La información sobre un producto se puede insertar, borrar y modificar sin necesidad de tener un
pedido.
“Una tabla (relación) está en Tercera Forma Normal si además de estar en 2NF cualquiera de sus
atributos no-claves no depende transitivamente de las claves candidatas de la tabla (relación)”
Id_proveedor dirección
51
Para eliminar las dependencias transitivas:
Con estas formas normales se resuelven la mayor parte de los modelos de datos de la vida real. Pero
se han desarrollado otras formas normales, para casos muy específicos.
“Una tabla (relación) está en BCNF si cada determinante es una clave candidata”
Dependencia funcional: relación entre atributos en donde, si se fija el valor de uno de ellos
(determinante, lado izquierdo) se puede conocer el valor del otro/s (dependiente/s, lado derecho).
52
Dependencias de valores múltiples sólo pueden existir en tablas (relaciones) de al menos tres
atributos, dos de los cuales poseen valores múltiples y sus valores sólo dependen del tercer atributo.
Nro_libreta Especialidad
Nro_libreta Actividad
Problemas:
• Si un estudiante toma otra especialidad se deben generar tuplas para cada una de las actividades y
viceversa.
• Si un estudiante deja una actividad se deben eliminar todas las filas que la contienen. Lo mismo
para las especialidades.
53
DESNORMALIZACIÓN
Las tablas normalizadas evitan los problemas que presentamos y se prefieren a las no
normalizadas.
De todos modos, en algunos casos la normalización puede ser innecesaria.
Dependerá del caso la tabla no normalizada puede ser más fácil de procesar y no presentaría
muchas dificultades duplicar los datos de Ciudad y Provincia.
La desnormalización por lo general busca agilizar la performance en la búsqueda y/o
modificación de las tablas.
Es un recurso que se debe emplear con mucho cuidado, no debe ser un recurso que se emplea
con frecuencia!!!
54
SEGURIDAD
Los datos guardados en la base de datos deben estar protegidos contra los accesos no autorizados,
de la destrucción o alteración malintencionadas además de la introducción accidental de
inconsistencias que evitan las restricciones de integridad. En este apartado se examina el modo en
que se pueden utilizar mal los datos o hacerlos inconsistentes de manera intencionada. Se presentan
luego mecanismos para protegerse de dichas incidencias.
VIOLACIONES DE LA SEGURIDAD
Debe conservarse la seguridad en todos estos niveles si hay que asegurar la seguridad de la base de
datos. La debilidad de los niveles bajos de seguridad (físico o humano) permite burlar las medidas de
seguridad estrictas de niveles superiores (base de datos). En el resto de este apartado se aborda la
seguridad en el nivel del sistema de bases de datos. La seguridad en los niveles físico y humano, aunque
importante, cae fuera del alcance de este texto.
La seguridad dentro del sistema operativo se aplica en varios niveles, que van desde las contraseñas
para el acceso al sistema hasta el aislamiento de los procesos concurrentes que se ejecutan en el sistema.
El sistema de archivos también proporciona algún nivel de protección. Las notas bibliográficas hacen
referencia al tratamiento de estos temas en los textos sobre sistemas operativos. Finalmente, la seguridad
en el nivel de la red ha logrado un amplio reconocimiento a medida que Internet ha pasado de ser una
plataforma para la investigación académica a convertirse en la base del comercio electrónico
internacional. Las notas bibliográficas muestran el tratamiento dado por los libros de texto a los
principios básicos de la seguridad de las redes. Se presenta la discusión sobre la seguridad en términos
del modelo relacional de datos, aunque los conceptos de este capítulo son igualmente aplicables a todos
los modelos de datos.
55
AUTORIZACIONES Y VISTAS
Vistas: permiten a un usuario que acceda a una parte de la información almacenada en una relación
(tabla).
Se utiliza a las vistas como medio de proporcionar a un usuario un modelo personalizado de la base
de datos. Una vista puede ocultar los datos que un usuario no necesita ver. La capacidad de las vistas
para ocultar datos sirve para simplificar el uso del sistema y para mejorar la seguridad. El uso del
sistema se simplifica porque se permite al usuario restringir su atención a los datos de interés.
Aunque puede que se niegue el acceso directo a una relación, puede que se le permita el acceso a
parte de esa relación mediante una vista. Por tanto, se puede utilizar una combinación de seguridad
en el nivel relacional y en el nivel de las vistas para limitar el acceso de un usuario precisamente a los
datos que necesita.
En el ejemplo bancario considérese un empleado que necesita saber los nombres de todos los
clientes que tienen un préstamo en cada sucursal. Este empleado no está autorizado a ver la
información concerniente a los préstamos concretos que pueda tener cada cliente. Por tanto, se le
debe negar el acceso directo a la relación préstamo. Pero si va a tener acceso a la información
necesaria se le debe conceder acceso a la vista cliente-préstamo, que consiste sólo en los nombres de
los clientes y las sucursales en los que tienen un préstamo. Esta vista se puede definir en SQL de la
manera siguiente:
where prestatario.número-préstamo
= préstamo.número-préstamo)
select *
from préstamo-cliente
Evidentemente, el empleado está autorizado a ver el resultado de esta consulta. Sin embargo,
cuando el procesador de consultas traduce la consulta en una consulta sobre las relaciones reales de
la base de datos, se obtiene una consulta sobre prestatario y préstamo. Por tanto, se debe comprobar
la autorización de la consulta del empleado antes de que comience el procesamiento de la misma.
La creación de vistas no necesita la autorización de recursos. El usuario que crea una vista no
recibe necesariamente todos los privilegios sobre la misma. Ese usuario sólo recibe los privilegios que
no proporcionan autorizaciones adicionales respecto de las que ya posee. Por ejemplo, un usuario no
puede recibir la autorización de actualización sobre una vista sin tener la autorización de
actualización sobre las relaciones utilizadas para definir la vista. Si un usuario crea una vista sobre la
que no se puede conceder ninguna autorización, se deniega la solicitud de creación de la vista. En el
56
ejemplo de la vista cliente-préstamo, el creador de la vista debe tener autorización de lectura sobre
las relaciones prestatario y préstamo.
Seguridad en la base de datos se refiere a autorizar/desautorizar acciones de los usuarios sobre los
objetos de la base de datos.
Usuario: nombre definido en la base de datos que se puede conectar y acceder a los objetos.
Schema: conjunto nominado de objetos tales como tablas, vistas, clusters, procedimientos y
paquetes asociados con un usuario particular.
Por omisión, una vez que el usuario se conecta con la base de datos, tiene acceso a todos los objetos
contenidos en el schema correspondiente.
El usuario se asocia con un schema del mismo nombre. Y a la vez usuario y schema se usan para
referirse a lo mismo.
Si la autenticación del usuario va a ser realizada por la base de datos, el sistema operativo, o el
servicio de autenticación de red.
Asignar los valores default al usuario y sus tablespaces temporarios.
Una lista, si existen, de tablespaces temporarios accesibles por el usuario, y las cuotas (límites)
que el usuario tiene.
El perfil (profile) de recursos del sistema que el usuario tiene disponible.
Los privilegios y roles que el usuario posee para acceder a los objetos de la base de datos.
PRIVILEGIOS Y ROLES
Un privilegio es un derecho para ejecutar un tipo particular de sentencia SQL o para acceder a un
objeto de otro usuario.
Un privilegio del sistema es un derecho a realizar una acción particular, o realizar una acción sobre
cualquier objeto de un tipo particular.
57
Ejemplos: los privilegios para crear tablespaces o para borrar filas de cualquier (any) tabal de una
base de datos.
PRIVILEGIOS DE OBJETOS
Un privilegio de objetos es un derecho a realizar una acción particular sobre un objeto específico
()tabla, vista, secuencia, procedimiento, función o paquete).
Algunos objetos como los clusters o los índices no se asocian a privilegios de objetos, sino que son
controlados por privilegios del sistema.
Un usuario posee automáticamente todos los privilegios sobre los objetos de su schema y puede
dárselos (GRANT) a cualquier otro usuario o rol. Asignándole GRANT OPTION estos usuarios pueden
dar estos privilegios a otros usuarios.
ALTER: permite modificar la estructura interna de un objeto. No implica que permite al usuario poder
modificar el contenido de los datos.
INDEX: permite crear un índice en una tabla. Note que no es suficiente contar con un privilegio
SELECT.
REFERENCES: permite crear o alterar otra tabla que referencia a “ésta” como clave foránea.
ÍNDICE
INDEX
TABLA
58
Para tener privilegios sobre una vista se deben
UPDATE INSERT tener privilegios sobre las tablas por las cuales
se generan las vistas.
VISTA
SELECT DELETE
ON objeto
Ejemplos:
59
GRANT Select ON Prestamo TO U1 WITH GRANT OPTION
ON [schema.]object
[CASCADE CONSTRAINTS];
Los que asignan privilegios solo pueden quitárselos a aquellos usuarios a los que ellos le han
asignado privilegios.
Cuando se quitan privilegios de objetos estos se quitan es cascada, cuando fueron asignados con
GRANT OPTION. Por ejemplo:
1. USER1 obtiene un privilegio SELECT sobre un objeto con la opción GRANT OPTION de
SCOTT
2. USER1 garantiza el privilegio SELECT sobre la tabla EMP a USER2
3. Se quita el privilegio SELECT a USER1, este también se le quita a USER2.
Ejemplos:
Privilegios “any”: privilegios que se aplican solo a objetos que uno genera, sino también a objetos
de otros usuarios. Se aplican para DBAs o para desarrolladores experimentados.
Monitoreo: son los que están atentos con lo que pasa en la Base de Datos. Asignados por lo general
a DBAs.
60
PRIVILEGIOS DE SISTEMA
61
QUITAR PRIVILEGIOS DEL SISTEMA
Ejemplos:
GRANT DBA TO U5
Desarrolladores: La mayoría de los CREATE y DROP. Hay que ser cuidadosos en la privilegios que se
brindan a este grupo.
Algunos privilegios no tan conocidos: ANALYZE ANY, AUDIT ANY, BACKUP ANY TABLE, LOCK
ANY TABLE, COMMENT ANY TABLE.
Mantenimiento de BD: CREATE, ALTER, DROP PROFILE; CREATE ROLE; CREATE, ALTER,
DROP ROLLBACK SEGMENT; CREATE, ALTER, MANAGE TABLESPACE; ALTER, DROP USER; ALTER
Database.
ROLES
Los roles se emplean para asignar privilegios relacionados con los usuarios finales de un sistema
• puede asignarse a otro roles. No obstante un rol no se puede autorizar a sí mismo ni tampoco de
manera circular
62
• a cualquier usuario de la base de datos se le puede asignar un rol
• un rol garantizado indirectamente (un rol asignado a un rol) puede ser explícitamente habilitado
o inhabilitado al usuario. No obstante para habilitar un rol que contiene otro roles, los roles
contenidos se habilitan implícitamente habilitando el rol que los contiene.
Primero, el DBA debe crear el rol. Luego puede asignar privilegios al rol y usuarios al rol.
Una vez que el rol está creado, el DBA puede usar el comando GRANT para asignar usuarios al rol
como también asignar privilegios al rol.
DOMINIO DE UN USUARIO
63