Vous êtes sur la page 1sur 256

Formación de Analistas de Sistemas

Informáticos

BASES DE DATOS

Fabián Castellano

Año 2017
INDICE
Presentación 4
Iconos Utilizados en el Módulo 5
Práctica Profesionalizante 6
Unidad 1: Introducción a las Bases de Datos 8
Objetivo de la unidad 1 8
Introducción 8
Características de una Base de Datos 18
Usuarios de una Base de Datos 22
Arquitectura de las Bases de Datos 24
Herramientas de un Sistema de Bases de Datos 26
Lenguajes en un Sistema de Gestión de Bases de Datos 28
Clasificación de los Sistemas de Gestión de Bases de Datos 29

Unidad 2: Modelo de Datos Relacional 31


Objetivo de la unidad 2 31
Modelo de Datos Relacional 31
Modelo Entidad Relación 33
Entidades y atributos 33
Relaciones 37
Propiedades de una Relación 39
Diagrama Entidad Relación 45
Elementos de un Diagrama Entidad Relación 46
Entidades 46
Relaciones 46
Tipos de Objeto Asociativo 51
Tipos de Entidades Débiles 53
Supertipo, Subtipo y Especialización 54
Técnica para construir un DER 57
Reglas de Construcción de un DER 58
Ejercicios Resueltos 60

1
Unidad 3: Diseño Físico de una Base de Datos 74
Objetivos de la unidad 3 74
Introducción 74
Tablas 74
Normalización 78
Primera Forma Normal 79
Segunda Forma Normal 80
Tercera Forma Normal 81
Ejercicios Resueltos 82
El Proceso de Diseño de una Base de Datos 89
Integridad de los Datos Contenidos en una Base de
Datos Relacional 94

Diagrama de Tablas 94
Ejercicios Resueltos 95

Unidad 4: SQL – Lenguaje Estructurado de Consulta 104


Objetivo de la unidad 4 104
Introducción 104
Lenguaje de Definición de Datos (DDL) 109
Create Table 109
Drop Table 111
Alter Table 112
Lenguaje de Manipulación de Datos (DML) 114
Insert 114
Delete 122
Update 127
Control de Transacciones 129
Select 132
Funciones Agregadas 148
Group By 153
Having 159
Union 160

2
Funciones de una Línea 162
Funciones Numéricas 166
Funciones de Conversión de Datos 168
Funciones que Operan con Números 169
Outer Join 169
Subqueries 172
Minus 174
Intersect 175
Vistas 176
Indices 179
Secuencias 181
Lenguaje de Control de Datos (DCL) 183
Ejercicios Resueltos 185
MySQL 196

Unidad 5: Arquitectura de Sistemas de Bases de Datos 222


Objetivo de la unidad 5 222
Introducción 222
Sistemas Centralizados 222
Sistemas Cliente-Servidor 224
Sistemas Distribuidos 238
Auto evaluación 243
Resolución Auto evaluación 245
Glosario 251
Bibliografía del Espacio Curricular 254

3
PRESENTACION
Es mi gran objetivo como profesor de Bases de Datos lograr
que se interesen por esta área del mundo de los sistemas. Que
tengan una cursada entretenida y que al finalizar obtengan
conocimientos sólidos que puedan aplicar en su vida profesional.
También me gustaría que no se queden sólo con el material de la
materia, sino que investiguen todo lo que puedan ya sea en libros,
publicaciones o en el inmenso mundo de Internet.
Esta materia se relaciona muy fuertemente con otras como son:
Programación II, Análisis y Diseño de Sistemas y Desarrollo e
Integración Profesional.
La materia contará con clases teóricas, clases prácticas y prácticas
profesionalizantes, incluiremos dos trabajos prácticos obligatorios
con la opción de un recuperatorio cada uno, el alumno deberá
desarrollar y aprobar la práctica profesionalizante antes de finalizar
la cursada, una vez aprobada la cursada el alumno tiene acceso a
rendir el examen final presencial, para obtener la aprobación de la
materia.
Cuando se desarrolla un sistema, la construcción correcta y precisa
de una base de datos es clave en el éxito final del sistema, donde se
deben incorporar conceptos que permitan optimizar la forma de
almacenar la información y la velocidad en el acceso a esos datos.
Utilizaremos el recurso de los foros de discusión con los que cuenta
el sistema de IRSO VIRTUAL, cuando necesitemos presentar temas
que requieran el aporte y discusiones de todos nosotros.
Al finalizar esta materia el alumno, deberá contar con conocimientos
precisos en la construcción de una base de datos relacional,
eficiente efectiva y durable en el tiempo, podrán organizar y
almacenar la información en las bases de datos seleccionando las
alternativas más adecuadas para sus aplicaciones.

4
Aprenderán a utilizar el siempre vigente lenguaje SQL en todas sus
características tanto básicas como avanzadas, este lenguaje es muy
solicitado por las empresas que buscan personal de sistemas.
Fabián Castellano

ICONOS UTILIZADOS EN EL MODULO

Actividad

Atención o recuerde
El icono de Atención o recuerde es para aquellas definiciones o
textos breves que deben recordar o son conceptos claves que se
usarán a lo largo del módulo

Lea con atención

El icono de Lea con atención será usado cuando el texto para leer
con atención es largo y tal vez de allí surge una actividad o un
ejemplo posterior.

Foro

5
Práctica Profesionalizante.

Las prácticas profesionalizantes son estrategias de formación para


que los alumnos consoliden, integren y amplíen, las capacidades y
conocimientos del perfil profesional, referidas a situaciones de
trabajo.
Permiten acercar al alumno al ejercicio profesional utilizando
diversas estrategias didácticas enfrentándolo con situaciones de
incertidumbre, singularidad y conflicto de valores, reconociendo
jerarquías y roles del campo profesional.
Bases de Datos es una materia que pertenece al área de formación
de las prácticas profesionalizantes. Por lo tanto desarrollaremos un
proyecto de diseño y construcción de una base de datos donde el
alumno ocupará un rol del ámbito laboral determinado, cuya
presentación y aprobación será obligatoria como condición para
poder aprobar la cursada. Como ocurre en la actividad profesional el
alumno deberá interactuar con diferentes personas, en nuestro caso
profesores que cumplirán diferentes roles como son:
Responsable del área de usuarios que solicita un
requerimiento.
Responsable funcional que aprueba el diseño.
Responsable de pasajes de ambientes.
A su vez el alumno también cumplirá diferentes roles como son:
Diseñador de la base de datos.
Tester.
Soporte técnico de la base de datos.
Toda comunicación entre los roles de este ambiente simulado, se
producirá como ocurre en la actividad profesional a través de
formularios de solicitud de requerimientos, formularios de solicitud de
autorizaciones y formularios de aprobación.

6
La Práctica Profesionalizante deberá seguir los siguientes pasos y
comenzará cuando se promedie la unidad 2 del programa:

1)_ Una vez recibido el formulario de solicitud de requerimientos se


realizará un relevamiento de información necesaria, para esta tarea
utilizaremos el foro provisto en IRSO Virtual.
2)_ Se diseña y construye el Diagrama Entidad Relación con su
Diccionario de Datos asociado con un graficador de uso profesional,
se realiza el proceso de Normalización de cada una de las
estructuras de datos, luego se construye el nuevo Diagrama Entidad
Relación.
3)_ Se diseña y construye el Diagrama de Tablas con su Diccionario
de Datos asociado con un graficador de uso profesional, el
responsable funcional aprueba el diseño.
4)_ El alumno toma el rol de soporte técnico de la base de datos,
realiza la instalación en tres ambientes de trabajo: desarrollo, test y
producción utilizando el Sistema de Gestión de Base de Datos
Relacional MySQL de distribución gratuita.
5)_ Se crean las estructuras de las tablas y todas sus relaciones en
el ambiente de desarrollo, luego en el ambiente de test.
El alumno en el rol de tester realiza en el ambiente de test la prueba
informando al terminar mediante formulario el resultado de la
prueba.
Se crean las estructuras de las tablas en el ambiente de producción
previa autorización.
6)_ Se realiza la carga de las tablas con los datos.

El desarrollo de esta práctica profesionalizante, deberá ser


documentada y presentada con calidad profesional.

7
UNIDAD1: INTRODUCCION A LAS BASES DE DATOS.

Objetivo de la unidad 1:
En esta unidad el alumno reconocerá conceptos básicos y
teóricos de bases de datos referidos a la creación y administración
de una base de datos.

Introducción.
Las bases de datos tienen hoy en día una importancia
fundamental en lo que se refiere al uso de computadoras, aplicables
a una gran cantidad de áreas de la vida moderna como ser la
ingeniería, medicina, educación, negocios, comunicaciones,
financieras, etc.

Definamos el término Base de Datos.


Una base de datos es básicamente un conjunto de datos que
se encuentran relacionados entre sí.
Cuando hablamos de datos nos referimos a elementos que tienen
implícito un significado.

Ejemplos de bases de datos son: Alumnos del Instituto;


vehículos registrados en la Ciudad de Buenos Aires; los datos
de todos los libros que se encuentran en la Biblioteca Nacional;
todos los clientes y sus operaciones en un banco; los datos de
los médicos de los pacientes historias clínicas asociadas de un
hospital; todos los productos, las facturas y operaciones que
encontramos en una fábrica, etc.

La definición anterior es muy vaga, y debemos mejorarla, ya que las


bases de datos deben incluir una serie de propiedades.
Veamos entonces una definición muy conocida de una base de
datos.

8
Una base de datos es un conjunto de datos interrelacionados
almacenados en conjunto, sin redundancia perjudicial o innecesaria
con el objeto de servir a una aplicación o más de la mejor manera
posible.1

Las bases de datos pueden ser de diferentes tamaños y ser desde


muy simples hasta muy complejas.

Ejemplo: una base de datos que incluya nuestra agenda de teléfonos


puede considerarse simple, y una que pertenezca a una gran
empresa en donde se incluyen los datos de sus proveedores,
clientes, empleados, materias primas, productos terminados, ventas
y compras realizadas, puede considerarse de mayor complejidad.
Cuando se crean bases de datos que deban ser usadas en
computadoras es necesario el uso de:
Una serie de programas que nos permitirán no sólo crear
la base de datos sino también mantenerla, estos
programas habrán sido escritos para esa tarea específica.
Un sistema de gestión de base de datos (SGBD), o en
inglés (DBMS) data base management system, es decir
software de propósito general que nos permite definir,
crear y administrar la base de datos para que puedan ser
útiles en diversas aplicaciones.

Analizando los dos puntos anteriores el alumno se preguntará que


diferencia existe si ambos indican lo mismo?
El punto 1) se refiere al software que creamos nosotros como
programadores, para una aplicación específica, en cambio con el 2)

1
Del libro Organización de las Base de Datos. - James Martin

9
disponemos de software que es aplicable a cualquier aplicación que
use la base de datos.

Ahora si utilizamos un sistema de gestión de base de datos de


propósito general o uno desarrollado por nosotros estos deben tener
una gran funcionalidad que nos permitan trabajar con soltura sobre
la base de datos.

Denominamos sistema de base de datos a la base de datos más el


sistema de gestión de base de datos.

Veamos un ejemplo de una base de datos, que el alumno pueda


reconocer fácilmente:
La siguiente base de datos se refiere a una clínica médica, en donde
se encuentran registrados los pacientes, los médicos, la nómina de
las diferentes obras sociales a la cual el paciente puede pertenecer y
cuando un paciente es atendido por un médico, registrar la consulta,
el diagnóstico y el tratamiento recomendado.

Pacientes.
Nro historia Apellido Nombre Fec. Nac Sexo Tipo Nro doc Cod
clínica doc Obra
Social
1002 Pereyra Ariel José 11/03/1926 M LE 3.545.212 OS1
2008 Mayoral Ana María 21/10/1980 F DNI 26.899.998 OS3
4323 García Anibal 19/06/1964 M DNI 16.887.874 OS1
8787 Almeida Cristina 20/12/1943 F LC 7.787.545 OS2
6765 Martinez Josefina 12/04/1977 F DNI 20.984.654 OS2
9893 Pizzi Gerardo 26/03/1950 M DNI 7.765.789 OS1

10
Médicos
Nro. Apellido Nombre Fec. Nac Sexo Especialidad
matrícula
298987 Rosales Mariano 01/06/1970 M CM
108789 Di Marco Rubén 11/12/1950 M CA
230989 Perez Anton Liliana 30/05/1964 F OF
089897 Silva Martina 21/09/1942 F CM

Obras Sociales
Cod Obra Denominación Dirección Localidad Teléfono
Social
OS1 OSECAC Av. Corrientes 1232 Ciudad de Buenos Aires. 4333-9191
OS2 OSPLAD Av. Pueyrredon 301 Ciudad de Buenos Aires. 4332-9898
OS3 OSEM 25 de Mayo 3219 Ciudad de Buenos Aires. 4200-1882
OS4 OSEC Av. L. N. Alem 1001 Ciudad de Buenos Aires. 4132-7656

Consulta Médica
Nro historia Nro. Fecha/hora Diagnóstico Tratamiento recomendado
clínica Matrícula consulta
1002 298987 12/11/2000 Gripe Reposo 7 días.
13:30hs
2008 298987 13/02/2001 Fractura de Yeso durante 30 días.
15:00hs fémur
4323 230989 13/02/2001 Miopía Anteojos con mayor aumento.
16:00hs
8787 089897 14/02/2001 Dolor de espalda Faja y analgésicos.
16:30hs

Especialidades
Especialidad Denominación
CA Cardiología
CM Clínica Médica
OF Oftalmología

En donde observamos que la tabla Pacientes contiene datos de


todos los pacientes que son atendidos en la clínica, incluyendo un

11
número de Historia Clínica, el cual es un número que le es asignado
al paciente por única vez y que lo identificará unívocamente respecto
de otros pacientes, también se incluye un Código de Obra Social a la
cual pertenece el paciente y que es un código para obtener la
denominación de la Obra Social, observando la tabla Obras Sociales
y buscando por Código de Obra Social obtenemos su denominación.

Ejemplo:
El paciente cuyo número de historia clínica es 1002, Ariel José
Pereira, posee como código de Obra Social OS1, accediendo por
OS1 a la tabla Obras Sociales observamos que a OS1 le pertenece
la denominación OSECAC.
Luego en Médicos, encontramos los nombres de todos los médicos
que atienden en la clínica, con su número de matrícula que lo
identifica en forma unívoca entre otros médicos y la especialidad,
que está representada por un código, por lo tanto de igual manera
que lo que ocurría con los códigos de obras sociales en este caso
accediendo por Especialidad en la tabla Especialidades obtenemos
la denominación de la especialidad.

Ejemplo:
Así el médico Rubén Di Marco con número de matrícula 108789
posee la especialidad de Cardiólogo.
Luego nos encontramos con la tabla Consulta Médica en donde
cada vez que un paciente es atendido por un médico, es registrada
esta situación en donde figura, el paciente identificado por su
número de historia clínica, el médico que lo atendió identificado por
su número de matrícula, fecha y hora de la consulta, el diagnóstico y
el tratamiento recomendado.

Observando la anterior base de datos obtenemos las siguientes


conclusiones:

12
Estamos almacenando datos que representan a los pacientes, los
médicos, las Obras Sociales, las Especialidades y las Consultas
Médicas realizadas, en donde los registros pueden estar
relacionados entre sí, en su gran mayoría todas las bases de datos
cuentan con muchos registros y muchas relaciones entre ellos.
Sobre las bases de datos realizamos operaciones de consultas y
actualizaciones.
Cuando hablamos de manipulación de una base de datos nos
referimos a las consultas y actualizaciones que se realizan sobre
esta.
Ejemplos de consultas que realizamos sobre la base de datos son:

Obtener una lista de todos los pacientes registrados en


la clínica.
Obtener una lista de todos los médicos incluyendo la
denominación de su especialidad, donde intervienen
las tablas Médicos y Especialidades.
Obtener una lista de todos los pacientes que hayan
sido atendidos por la médica Martina Silva, en donde
primero accedemos a Médicos luego a partir del
apellido y el nombre obtenemos el número de matrícula
(089897), luego vamos a Consulta Médica y
obtenemos el Número de Historia Clínica del paciente,
después con este Número y accediendo a Pacientes
obtenemos el Apellido y el Nombre del Paciente.

Volvamos a los Sistemas de Gestión de Bases de Datos, para verlo


en más detalle y conocer la funcionalidad que debe brindar:
Un Sistema de Gestión de Bases de Datos (SGBD4) es un conjunto
de programas, procedimientos, lenguajes, herramientas, etc., que
brinda, tanto a los usuarios comunes como a los analistas,
programadores o administradores de una base de datos, las
herramientas necesarias para describir y manipular los datos

13
integrados en la base de datos, manteniendo su integridad,
confidencialidad y disponibilidad

En la siguiente figura observamos la arquitectura de un sistema de


bases de datos donde observamos que el SGDB hace de nexo entre
los usuarios que acceden a la base de datos mediante las
aplicaciones y la base de datos que contiene la información.

Aplicación 1 Aplicación 2 Aplicación 3 Aplicación N

Sistema de Gestión de Base


de Datos

Base de Datos

Más adelante veremos distintos tipos de usuarios que utilizan las


bases de datos. Entonces para poder dar soporte a estos
usuarios el Sistema de Gestión de Base de Datos debe ofrecer
una serie de funciones:

14
1. Función de definición: permite a los diseñadores de la base
de datos describir los elementos de datos, su estructura y las
relaciones que existen entre ellos; el SGBD proporciona un
lenguaje para la definición de las tablas, los atributos que la
componen, las restricciones semánticas y las características
de tipo físico o almacenamiento necesarias.
2. Función de manipulación: permite a los usuarios de la base
de datos agregar, eliminar o modificar los datos de ella
siempre se respeten las características de seguridad que
haya establecido el administrador de la base de datos.
3. Función de control: esta función se ocupa de las interfaces
que requieren los distintos tipos de usuarios para
comunicarse con la base de datos y de las herramientas
necesarias para el administrador para definir los mecanismos
de seguridad y mantenimiento de la base de datos.

Para que el SGBD pueda realizar estas funciones se necesita un


lenguaje que permita especificar lo que cada tipo de usuario necesita
en su comunicación con la base de datos. En las base de datos
relacionales se emplea el SQL (Standard Query Language) que
conoceremos en esta materia más adelante.

Ejercitación
Siguiendo el razonamiento empleado en los últimos ejemplos,
resolver indicando cuales son los pasos a seguir.

1)_ Como se obtiene una lista de todos los pacientes cuya


obra social es OSECAC.
2)_ Como se obtiene una lista de todos los médicos cuya
especialidad es Clínica médica

15
3)_ Como se obtiene una lista de todos los pacientes
incluyendo Apellido y Nombre cuyo diagnóstico en la consulta
fue Gripe.
4)_ Como se obtiene una lista de todos los pacientes
incluyendo Apellido y Nombre que hayan recibido una
Consulta en el año 2001.

Ejemplos de actualizaciones que realizamos sobre la base de datos


son:
Cambiar la especialidad del médico Mariano
Rosales de Clínica Médica a Cardiología (en este
caso se accede a Especialidades, se obtiene el
código de Cardiología (CA), luego se busca
Mariano Rosales y se actualiza su especialidad de
CM por CA.
Cambiar la fecha de nacimiento del paciente Ana
María Mayoral (21/10/1980) por (21/11/1980) se
busca a Ana María Mayoral y se actualiza su fecha
de nacimiento.
Ingresar la especialidad PA, Pediatría.

Ejercitación
Siguiendo el razonamiento empleado en los últimos ejemplos,
resolver indicando cuales son los pasos a seguir.

1)_ Cual es el razonamiento para Ingresar una nueva obra


social con Cod de Obra Social OS5 y Denominación OSPCN,
ingresar el paciente (Juan María Colochini (demás datos a
criterio del alumno) y asignarle la obra social OSPCN.

2)_ Cual es el razonamiento para Ingresar una nueva consulta


de la médica Liliana Perez Anton y el paciente Gerardo Pizzi,

16
fecha/ hora consulta, diagnóstico y tratamiento recomendado
a criterio del alumno.

Entonces las consultas a una base de datos son la obtención de


datos que se encuentran almacenados y las actualizaciones son los
cambios que realizamos a las bases de datos, estos cambios
pueden ser ingresar nuevos datos, modificar los existentes o
eliminarlos.
Una base de datos, no sólo contiene datos, en el caso anterior de
pacientes, médicos, especialidades, obras sociales y consultas
médicas sino contiene además lo que se denomina catálogo del
sistema, que incluye información referida a la estructura de cada
tabla, el formato en el cual se almacenan los datos y restricciones
que se le aplican a los datos.
El catálogo es utilizado por el software del SGBD y por los usuarios
de la base de datos que necesiten conocer la estructura de esta.
El software de SGDB no está escrito sólo para una aplicación de
base de datos específica así que deberá consultar la estructura de la
base de datos. El software del SGBD debe trabajar con muchas
aplicaciones de base de datos.
En una base de datos es común encontrar que los usuarios
necesiten una vista diferente de los datos de la misma base de
datos. ¿Que significa esto? Un usuario en particular puede que sólo
necesite acceder a parte de la información de toda la base de datos,
como por ejemplo sólo necesita tener acceso a la tabla de pacientes,
otro usuario puede necesitar conocer los datos de los médicos
incluyendo la descripción de la especialidad y necesita abstraerse de
la relación existente entre los médicos y los pacientes. Cada una de
estas dos visiones descriptas es lo que se denomina vistas. Un
SGBD debe proporcionar a los usuarios la posibilidad de crear vistas
y de esta manera cumplir con la necesidad de los usuarios.

17
Todo SGBD en la que trabajen muchos usuarios debe permitir que
estos puedan acceder simultáneamente a la base de datos. Esta
característica es fundamental para que puedan acceder a la base de
datos diferentes aplicaciones y toda la información sea mantenida en
una sola base de datos.
El SGBD debe incluir software para asegurar que cuando diferentes
usuarios actualicen datos al mismo tiempo lo hagan de manera
controlada. Considerando la base de datos de la clínica el sistema
debería controlar que no sea asignado un turno para una consulta
para un mismo médico en la misma fecha y en el mismo horario a
dos o más pacientes o que a dos pacientes le asignen el mismo
número de historia clínica.

CARACTERÍSTICAS DE UNA BASE DE DATOS.


Las bases de datos actuales deben poseer una serie de
características fundamentales que le permiten cumplir con su función
de manera óptima.

1)_ Control de redundancia.


Considerando nuestra conocida base de datos de la clínica, podría
darse el caso en que cada vez que un paciente solicita un turno para
una consulta, se le solicitan todos sus datos nuevamente (apellido,
nombre, teléfono, código postal, dirección, localidad, fecha de
nacimiento, etc., y estos datos se almacenan nuevamente, esto
significa que los datos personales de los pacientes almacenados en
la base de datos se encuentran repetidos (duplicados, triplicados,
etc).
Esto genera una serie de inconvenientes graves como son:
a)_ Los datos al encontrarse repetidos generan una
duplicación o más del espacio que necesitan para ser
almacenados.
b)_ En el caso que alguno de los datos repetidos haya que
actualizarlos, habrá que actualizar cada uno de los datos

18
tantas veces como versiones existan del mismo, y si por algún
error (por ejemplo se produce un corte de energía eléctrica
cuando se está actualizando), estos datos no serán todos
actualizados y tendremos información incoherente como
podría ser el caso que la fecha de nacimiento no fue
actualizada en todos lados y se encuentran con diferentes
valores.
¿Pero como solucionamos este problema?
La solución consiste en crear una base de datos en donde cada
dato se almacena en un solo lugar, esto logra evitar la inconsistencia
de los datos y ahorra espacio de almacenamiento.
Pero sí bien la teoría no acepta la redundancia en algunos casos se
la utiliza en forma controlada con el objeto de poder mejorar la
velocidad de acceso a los datos.

2)_ Restricción de acceso.


En una base de datos existen muchas personas que llamaremos
usuarios que trabajan en ella.
Es común que no todos los usuarios tengan acceso a toda la
información disponible en la base de datos y que sólo tengan acceso
a una porción de la información almacenada en la base de datos,
esto puede darse ya que ciertos datos pueden tener el carácter de
confidenciales y sólo ciertas personas puedan tener acceso a ellos.
Supongamos un sistema de un banco en el que es necesario evitar
que cualquier usuario tenga acceso al monto de dinero que tiene un
cliente almacenado en su caja de ahorro.
Los accesos a la base de datos están protegidos por contraseñas o
password que son asignados a cada uno de los usuarios y de esta
manera se logra restringir el acceso a los datos.
Un usuario puede tener permiso sólo para consultar datos de
algunas tablas, en cambio otro con mayor permiso podrá consultar y
actualizar el contenido de los datos.

19
El SGBD posee un subsistema de seguridad y autorización que
permite a un usuario administrador de la base de datos crear los
usuarios y especificar las restricciones de acceso necesarias a la
base de datos.

3)_ Diferentes interfases.


Como dijimos más arriba existen usuarios que deben interactuar de
forma diferente con la base de datos, algunos sólo se ocuparán de
realizar consultas, otros podrán realizar modificaciones a los datos y
otros podrán crear o modificar la estructura de las tablas de la base
de datos. Por este motivo para diferentes usuarios que interactúan
con la base de datos, el SGDB debe ofrecer diferentes interfases o
pantallas para cada uno de ellos.

4)_ Restricciones de integridad.


El SGBD debe ofrecer una serie de recursos para poder definir las
restricciones y tener la capacidad de hacerlas cumplir.
En nuestra base de datos de la clínica un ejemplo sería que todo lo
que se ingrese en el campo fecha de nacimiento tanto de la tabla
pacientes o médicos debe ser un dato de tipo fecha válido, es decir
el SGBD debería controlar que no sea almacenado algo como
32/01/2001 o la palabra AULA, en el primer caso porque no es una
fecha válida y en el segundo porque es obvio que la palabra AULA
no es una fecha, o que no se puedan ingresar los datos de un
médico cuya especialidad no se encuentre previamente en la tabla
de Especialidades.
Ejemplo: si quiero ingresar un nuevo médico con la especialidad DE
Dermatólogo, primero tendremos que ingresar la nueva especialidad
en la tabla Especialidades para luego poder ingresar el médico con
la especialidad recién creada, otros ejemplos serían: no podemos
registrar una consulta en la tabla Consultas Médicas si antes no se
encuentran registrados el paciente y el médico.

20
Pero existe la posibilidad que se ingresen datos erróneos sin que
estos sean detectados por las restricciones de integridad.
Por ejemplo, si le asignamos la especialidad Oftalmología al médico
Rubén Di Marco que sólo posee la especialidad de Cardiólogo, este
tipo de errores sólo puede ser descubierto por un ser humano que
verifica la base de datos.

5)_ Recuperación y resguardo de la información.


Todo SGBD debe poseer los recursos necesarios para recuperar la
información en el caso que se produzcan fallas en el software o en el
hardware. Por ejemplo si se produce un error en el momento en que
el sistema está realizando tareas de actualización de los datos, el
SGBD se ocupará de dejar la base de datos en el estado previo al
comienzo de la actualización y antes de producirse el error, otra
posibilidad es que el proceso de actualización que fue interrumpido
sea reanudado en el punto donde había sido interrumpido y de esta
manera poder continuar con el proceso de actualización.

6)_ Información actualizada.


Los SGBD logran que la información este disponible para todos los
usuarios un instante después que esta fue actualizada.
Es decir por ejemplo si un médico actualiza la historia clínica de un
paciente con los resultados de un análisis, esta actualización en la
historia clínica del paciente está inmediatamente disponible para otro
médico que la necesite consultar o modificar.

USUARIOS DE UNA BASE DE DATOS.


Cuando trabajamos con una base de datos chica es común
que una sola persona la diseñe, la construya y la actualice. Este no
es el caso de las bases de datos grandes con cientos de usuarios,
en donde existirán personas que adoptarán diferentes roles, entre
los que encontramos:

21
1)_ Administradores de base de datos.
En una base de datos grande se necesita una persona que
supervise y controle los recursos disponibles. Estos recursos son la
base de datos y el SGBD. La administración de estos recursos es
asignada a una persona conocida con el nombre de Administrador
de base de datos o (DBA Database Administrator) en inglés.

El administrador de base de datos es el encargado de autorizar el


ingreso a la base de datos y de vigilar su uso, es el responsable
cuando se producen accesos de personas no autorizadas a la base
de datos o cuando el sistema tarda mucho tiempo en dar respuesta
a una consulta.
En una empresa importante un Administrador de base de datos no
está sólo ya que cuenta con personal de apoyo.

2)_ Diseñadores de base de datos.


Los diseñadores de base de datos se encargan de determinar las
estructuras necesarias para almacenar los datos, así también como
identificar los datos que serán almacenados. Esta tarea es realizada
antes que se construya la base de datos y son los encargados de
obtener todo tipo de información que ayude a determinar cuales son
las características que son esperadas por los usuarios finales de la
base de datos.
Esta actividad tiene una importancia crucial en la vida de la base de
datos ya que podrá determinar el éxito o el fracaso en el uso de esta.

3)_ Usuarios finales.


Los usuarios finales son todas aquellas personas que tienen acceso
a la base de datos para poder realizar consultas o actualizaciones.
Existen diferentes tipos de usuarios finales:
 Los usuarios finales ocasionales, los cuales acceden muy
de vez en cuando pero probablemente a diferente
información cada vez.

22
 Los usuarios finales simples, la mayoría de los usuarios
finales son de este tipo. Su actividad más común es realizar
consultas y actualizaciones permanentes de la base de
datos de lo que se denominan consultas standard.

Ejemplo: Consultas sobre la disponibilidad de pasajes aéreos en una


agencia de turismo.
Consulta de los alumnos inscriptos para cada materia en el Instituto.
Luego de rendir un examen la actualización de todas las notas
obtenidas por los alumnos.
 Los usuarios finales avanzados son aquellas personas que
pueden realizar consultas o actualizaciones muy complejas y que
conocen la capacidad de la base de datos para aprovechar todo su
potencial.
Los SGBD cuentan con muchos recursos para permitir el acceso a la
base de datos. En el caso de los usuarios finales ocasionales sólo
necesitan conocer algunos recursos que emplearán algunas veces.
Los usuarios finales simples sólo deben conocer los tipos estándar
de consultas o actualizaciones que emplearán muy seguido. En el
caso de los usuarios finales avanzados necesitan conocer en
profundidad los recursos que les brinda un SGBD para de esta
manera poder satisfacer sus complejos requerimientos.

ARQUITECTURA DE LAS BASES DE DATOS

Existen tres puntos importantes propios de los sistemas de


bases de datos:
1)_ La división entre los programas de la aplicación y los
datos.
2)_ La existencia de diferentes vistas para que sean utilizadas
por los diferentes tipos de usuarios.

23
3)_ El uso de un catálogo para almacenar la estructura de la
base de datos.
En el año 1975, el comité ANSI-SPARC (American National
Standard Institute - Standards Planning and Requirements
Committee) determinó una arquitectura de tres niveles para los
sistemas de bases de datos, que resulta muy apropiada para
conseguir estas tres características.

La función de la arquitectura de tres niveles es el de lograr


separar los programas de aplicación de la base de datos física. En
esta arquitectura, el esquema de una base de datos se define en
tres niveles de abstracción distintos:

1. El nivel interno en donde queda descripta la estructura física


de la base de datos mediante un esquema interno. Este
esquema se especifica mediante un modelo físico y describe
todos los detalles para el almacenamiento de la base de
datos, así como las formas de acceso.
2. El nivel conceptual se ocupa de describir la estructura de
toda la base de datos para los usuarios por ejemplo de una
empresa u organización), mediante un esquema conceptual.
Este esquema no muestra los detalles de las estructuras
donde se almacenan los datos y se ocupa de describir
entidades, atributos, relaciones, operaciones de los usuarios y
restricciones. En este nivel se puede utilizar un modelo
conceptual o un modelo lógico para especificar el esquema.
3. El nivel externo se ocupa de describir varios esquemas
externos o vistas de usuario. Cada esquema externo describe
la parte de la base de datos que interesa a un grupo de
usuarios determinados y oculta a ese grupo el resto de la
base de datos. En este nivel se puede utilizar un modelo
conceptual o un modelo lógico para especificar los esquemas.

24
Es importante aclarar que los tres esquemas sólo son observaciones
de los mismos datos pero con distintos niveles de abstracción. Los
únicos datos reales están a nivel físico, almacenados en por ejemplo
un disco rígido. En un SGBD basado en la arquitectura de tres
niveles, cada grupo de usuarios trabaja exclusivamente con su
propio esquema externo.

ARQUITECTURA DE TRES NIVELES.

La arquitectura de tres niveles permite explicar la independencia de


datos que definimos como la capacidad para modificar el esquema
en un nivel del sistema sin tener que modificar el esquema del nivel
inmediato superior. Encontramos dos tipos de independencia de
datos:

La independencia lógica definida como la capacidad de


modificar el esquema conceptual sin tener que alterar los
esquemas externos ni los programas de aplicación. Podemos
modificar el esquema conceptual para ampliar la base de
datos o para reducirla. Si, por ejemplo, se reduce la base de
datos eliminando una entidad, los esquemas externos que no
se refieran a ella no deberán verse afectados.
La independencia física es la capacidad de modificar el
esquema interno sin tener que alterar el esquema conceptual
(o los externos). Por ejemplo, puede ser necesario
reorganizar ciertas tablas físicas con el fin de mejorar el
rendimiento de las operaciones de consulta o de actualización
de datos. Dado que la independencia física se refiere sólo a la
separación entre las aplicaciones y las estructuras físicas de
almacenamiento, es más fácil de conseguir que la
independencia lógica.

25
HERRAMIENTAS DE UN SISTEMA DE BASES DE
DATOS.
Los SGBD poseen las herramientas que ayudan al
administrador de la base de datos a realizar su trabajo.
Carga de datos: existe una herramienta que se ocupa
de realizar la carga inicial de la base de datos.
Supongamos que en una empresa contamos con un
sistema y su base de datos asociada que es
reemplazada por otra base de datos por ejemplo más
moderna, entonces toda la información con la que

26
cuenta la vieja base de datos debe ser almacenada en
la nueva base de datos.
En muchas ocasiones no es posible realizar una copia directa
entre las dos bases de datos, entonces tendremos que utilizar
algún formato en los datos que pueda ser interpretado tanto
en la base de datos vieja como en la nueva, básicamente son
los archivos de texto, esta herramienta se ocupará de leer
estos archivos de texto con los datos de la base de datos vieja
y copiarlos a la nueva base de datos.

Resguardo de información o backup: esta


herramienta se ocupa de crear copias de seguridad de
la base de datos. Estas copias almacenadas en algún
dispositivo, podrán ser utilizadas en el caso que se
produzca algún problema en la base de datos y sea
necesario restaurar los datos que fueron copiados en
su momento.

Reorganización de archivos: esta herramienta se


utiliza para poder mejorar el comportamiento u
optimizar la base de datos, es común regenerar los
índices de las tablas, este concepto lo veremos más
adelante,

Existen otra clase de herramientas como por ejemplo para


comprimir archivos, ordenar archivos, etc.

LENGUAJES DE UN SISTEMA DE GESTION DE BASE


DE DATOS
En base a las funciones a las que debe soportar un SGBD a
los distintos niveles de estructuración de una base de datos que
vimos, los SGBD deben

27
brindar un lenguaje para que los distintos tipos de usuarios se
comuniquen con la base de datos.
En los SGBD relacionales se cuenta con el lenguaje SQL que de
acuerdo a lo que realicen sus instrucciones se dividen en:

Lenguaje de Definición de Datos (LDD): utilizado para


definir la estructura lógica de la base de datos (nivel
lógico), la estructuras externas requeridas para el
desarrollo de las diferentes aplicaciones (nivel externo) así
como la estructura interna (nivel físico).
Lenguaje de Manipulación de Datos (LMD): una vez se ha
descrito la base de datos, ésta ya está preparada para
cargar los datos en las estructuras definidas y para su
utilización. El Lenguaje de Manipulación de Datos permite
agregar, eliminar, modificar y buscar datos en la base de
datos. Es el SGBD el que se encarga de acceder al
correspondiente soporte físico para localizar los datos con
los que se harán las operaciones especificadas.
Lenguaje de Control: el administrador de la base de datos
utiliza este lenguaje para especificar los aspectos de
seguridad física (copias de seguridad en caso de caída,
etc.) así como de protección frente a accesos no
permitidos (autorizaciones y contraseñas, perfiles de
usuarios, etc.). El lenguaje de control también se requiere
para definir los interfaces que necesitan los distintos
usuarios para comunicarse con la BD.

CLASIFICACIÓN DE LOS SISTEMAS DE GESTIÓN DE


BASES DE DATOS.
Un criterio que se utiliza para clasificar los SGBD es el que se
refiere al modelo lógico en el que se basan. Los modelos lógicos
más utilizados en los SGBD comerciales actuales son el modelo

28
relacional, anteriormente se utilizaban además los modelos de red y
el jerárquico. Los SGBD más nuevos utilizan el modelo orientado a
objetos.
El modelo relacional se basa en el concepto llamado relación, en
este tipo de modelo los datos y las relaciones que existen entre los
datos se representan con las llamadas relaciones que poseen un
nombre único.
En el modelo relacional la base de datos es reconocida por los
usuarios como un conjunto de tablas, aunque esta visión es sólo a
nivel lógico ya que físicamente puede estar implementada por
diferentes estructuras de almacenamiento.
Otro modelo es el de red donde los datos se representan como
colecciones de registros y las relaciones entre los datos se
representan mediante conjuntos. Los registros son organizados
como un grafo. El SGBD de red más conocido es el sistema IDMS.
El modelo jerárquico es similar a un modelo de red con restricciones.
Aquí también los datos son representados como colecciones de
registros y las relaciones entre los datos mediante conjuntos, la base
de datos jerárquica puede ser representada con un árbol. El SGBD
jerárquico más importante es el sistema IMS.
Actualmente un gran porcentaje de los SGBD comerciales están
basados en el modelo relacional, y los sistemas más antiguos están
basados en el modelo de red o el jerárquico. Tanto el modelo de red
como el jerárquico necesitan que el usuario tenga conocimiento de la
estructura física de la base de datos para poder trabajar con ella a
diferencia del modelo relacional donde existe más independencia de
los datos.
El modelo conocido como orientado a objetos es descrito como un
conjunto de objetos, sus propiedades y sus operaciones. Aquellos
objetos que posean la misma estructura y comportamiento forman
parte de una clase y tales clases son organizadas en jerarquías. Las
operaciones aplicables a cada clase se definen como
procedimientos predefinidos llamados métodos.

29
Otro criterio para poder clasificar los SGBD es por la cantidad de
usuarios que trabajan con el sistema. Los sistemas que sólo sirven a
un usuario al mismo tiempo, se los conoce como monousuarios.
Aquellos sistemas que atienden a varios usuarios al mismo tiempo
se los conoce como sistemas multiusuario, estos representan la gran
mayoría de los sistemas actuales.
Otro criterio de clasificación es el número de sitios en los que se
encuentra distribuida la base de datos. La mayoría de los SGBD son
centralizados, donde sus datos se almacenan en una sola
computadora. Los SGBD centralizados pueden atender a varios
usuarios, pero el SGBD y la base de datos están en una sola
computadora.
Cuando el SGBD es distribuido la base de datos y el software puede
estar distribuido en varios sitios conectados mediante una red. Un
cuarto criterio es el costo del SGBD.
Por último, los SGBD pueden ser de propósito general o de
propósito específico. Cuando el rendimiento es fundamental, se
puede diseñar y construir un SGBD de propósito especial para una
empresa específica, y este sistema no sirve para otras aplicaciones.

30
UNIDAD 2: MODELO DE DATOS RELACIONAL

Objetivo de la unidad 2:
El alumno estará en condiciones de construir un modelo
relacional, identificará los diferentes elementos del modelo
empleando la herramienta Diagrama Entidad Relación.

MODELO DE DATOS RELACIONAL.


Los datos son actualmente el arma más poderosa de
cualquier organización. Una buena gestión de los datos puede
determinar de manera clave los beneficios de cualquier empresa.
Supongamos el caso de un banco y pensemos en los miles de
clientes donde con sus datos se realizan operaciones diarias; el mal
uso de los mismos puede traer pérdidas enormes para la empresa.
En ocasiones esta mala utilización puede ser por la falta de
formación de los empleados, pero muchas veces es ocasionada por
un mal diseño del sistema o base de datos que administra los datos.
Hoy en día todas las empresas cuentan con herramientas
informáticas de creación de bases de datos; entonces, ¿por qué se
producen caídas y fallas en los sistemas?. La respuesta no está en
las herramientas en sí, sino, en cómo se diseña la base de datos.
Cada herramienta dispone de sus propias herramientas de diseño,
pero todas ellas se basan en los mismos conceptos teóricos,
conceptos que si se desconocen no pueden ser aplicados.
La utilización de un modelo de datos permite diseñar bases de datos
a nivel conceptual (y por tanto muy cercano al usuario) y por
supuesto la formación de personal calificado en este campo.
El modelo Entidad/Interrelación (E/R) es un modelo conceptual que
ha demostrado ser muy válido para cumplir con este objetivo, pues
está a un nivel de abstracción lo suficientemente elevado como para
poder diseñar cualquier base de datos con independencia de la
máquina en la que se implemente. Además, en la actualidad
disponemos en el mercado una amplia gama de herramientas que

31
automatizan en gran parte las tareas del diseño y que toman como
base este modelo de datos.
El modelo E/R fue propuesto por Peter Chen en 1976. Desde
entonces muchos autores se han interesado por él, estudiándolo y
ampliándolo, consiguiendo diversas variantes del modelo (distintas
formas de representación de los objetos), pero todas ellas parten del
mismo concepto: el conocimiento del mundo real que se desea
representar a través de un análisis de los requisitos o
especificaciones del problema.
En la realización del esquema o diseño conceptual de cualquier base
de datos es fundamental el conocimiento del problema a modelar y
es en este conocimiento donde representan un papel primordial los
usuarios finales del sistema, pues es en esta primera etapa de
modelización en la que el diseñador de la base de datos debe hacer
tantas entrevistas como sean necesarias con los usuarios para
conseguir comprender todas las especificaciones del problema. Una
vez conocidos los objetivos y las necesidades se deberá pasar al
diseño propiamente dicho de la base de datos.
El modelo E/R, como todos los modelos, consiste en un conjunto de
conceptos, reglas y notaciones que permiten formalizar la semántica
del mundo real que se pretende modelar en un diagrama que
denominamos esquema de la Base de Datos.
El concepto de Modelo Relacional, específicamente el
llamado Modelo Entidad Relación es muy utilizado en la actualidad.
Este modelo es utilizado en la confección de las bases de datos y
muchas herramientas aplican su teoría.
Cuando se encara el proceso de diseño de una base de datos, lo
primero es ocuparse de la recolección de datos y el análisis de
requerimientos etapa durante la cual la persona encargada del
diseño visita a los futuros usuarios de la base de datos para así
poder conocer cuales son las características de lo que espera el
usuario de la base de datos. En esta etapa también deben
especificarse los requerimientos funcionales, los cuales consisten en

32
las operaciones definidas por el usuario o transacciones que se
aplicarán a la base de datos que incluyen la actualización y la
consulta de los datos.
El siguiente paso es la creación del llamado Esquema Conceptual.
Este esquema representa la descripción de los requerimientos del
usuario incluyendo características de los datos, las restricciones y
sus relaciones, este esquema no tiene características de
implementación, generalmente son más fáciles de entender y por
este motivo es muy útil para poder comunicarse con usuarios que no
son técnicos.
Este esquema conceptual sirve para controlar que todos los
requerimientos solicitados por el usuario estén incluidos.

El siguiente paso es construir el llamado Diseño Lógico de la Base


de Datos el cual consiste en implementar la base de datos en un
SGBD comercial.
El paso final es el Diseño Físico de la Base de Datos el cual consiste
en determinar las estructuras de almacenamiento internas y la
organización de los archivos de la base de datos.

Modelo Entidad Relación


El Modelo Entidad Relación describe los datos mediante
entidades, atributos y relaciones.

Entidades y atributos.

Una Entidad es algo que representa un objeto y que interesa


al sistema.
Un atributo representa lo que describimos de la entidad.
Una entidad puede ser basicamente algo tangible como por ejemplo
un libro, un teléfono, una mesa, una locomotora, etc., o puede ser
algo de existencia conceptual o un rol como ser una empresa, una

33
sucursal, un alumno, un profesor, un cliente, un médico, un
contribuyente, etc.
Cada entidad tiene una serie de atributos que la describen, por
ejemplo la entidad libro tiene como atributos el ISBN (International
Standard Book Number) es el número por el cual se identifica a
cualquier libro en el mundo, el nombre del libro, el o los autores,
género, cantidad de páginas, editorial, idioma original, edición, etc.
La entidad empresa tiene como atributo el nombre, su número de
CUIT, su número de ingresos Brutos, dirección, teléfonos, localidad,
e-mail, etc. Una entidad en particular tendrá valores para cada uno
de sus atributos.
En el siguiente ejemplo observamos dos entidades y posibles
valores asociados.

Libros
ISBN: 968-444-399-4
Nombre: SISTEMAS DE BASES DE DATOS
Autor: Rames A Elmasri, Shamkant B
Navathe
Idioma original: Inglés.
Editorial: Prentice Hall.

Alumnos:
Apellido: De la Sierra
Nombre: Antonio Raúl
Fecha de Nacimiento: 10/02/1955.
Tipo Documento: DNI
Número Documento: 10.432.987

Tipos de Atributos.
En el modelo Entidad Relación se utilizan varios tipos de
atributos: simples o compuestos; monovaluados o multivaluados.

34
Los atributos multivaluados son aquellos que están compuestos de
otros atributos.
Por ejemplo el atributo dirección puede ser dividido en atributos más
simples como calle, número y localidad.
Los atributos compuestos son útiles cuando los usuarios se refieren
a veces al atributo compuesto como una unidad y otras veces se
refieren a cada uno de sus componentes.
Los atributos simples son por ejemplo los anteriores: Calle, número,
localidad, apellido, fecha de nacimiento, etc., es decir aquellos que
no pueden ser ya descompuestos.
Otro tipo de atributos son los monovaluados, como por ejemplo la
fecha de nacimiento de un alumno, o el nombre de un empleado, es
decir que pueden tomar un solo valor, también existen los atributos
multivaluados como por ejemplo el sexo de una persona que puede
tomar el valor de femenino o masculino, o la forma de realizar un
pago (contado, cheque, tarjeta de crédito).

Una entidad puede tener atributos que no poseen ningún valor, por
ejemplo el atributo dirección de e-mail puede ser nulo para una
persona que no lo posea.

Atributos claves en las entidades.


Las entidades casi siempre tienen uno o más atributos que
identifica una instancia entre otras de forma unívoca. En el ejemplo
visto más arriba el atributo ISBN identifica univocamente a un libro
entre todos los libros, una persona es identificada por su tipo de
documento junto con su número de documento, el nombre no sirve
para identificar univocamente a una persona ya que todos sabemos
que existen diferentes personas que tienen el mismo nombre y el
mismo apellido.

35
Conjuntos de valores de los atributos (dominios).
Los atributos de una entidad pueden estar asociados a un
conjunto posible de valores o dominio que representan los valores
posibles que ese atributo puede tomar.
Vayamos a los ejemplos:
En el caso de un tipo de documento el dominio estará representado
por los siguientes valores:
DNI (Documento Nacional de Identidad)
CI (Cédula de Identidad)
LE (Libreta de Enrolamiento)
LC (Libreta Cívica)

Para el sexo de una persona:


F (Femenino)
M (Masculino)

Para un atributo como trámite completo.


S (Si)
N (No)

Para la edad en el caso que sólo se admitan menores:


De 4 a 16 años.

Para colores posibles de un automóvil en particular:


Ro (Rojo)
Az (Azul)
Ve (Verde)
Bl (Blanco)

En el ejemplo anterior el valor que toma el atributo es Ro y no Rojo


pues ocupa menos espacio un código o una abreviatura que la
descripción completa del valor, ídem con los tipos de documentos, o

36
incluso con el valor S que representa Si, pero en algún lugar de la
base de datos vamos a tener que almacenar que Ro significa Rojo.
Este punto quizás parezca absurdo pero tengamos en cuenta que
pueden existir millones de registros que necesiten almacenar uno de
estos valores y un mínimo ahorro significa mucho en el total, además
de ser una característica entre otras que determinan si una base de
datos es de cierta calidad.
Volviendo a los anteriores ejemplos observamos que los dominios
son de dos tipos aquellos que tienen valores fijos que pueden tomar
(Tipo de documento, color, etc) o aquellos que están representados
por rangos de valores (edad).

Relaciones
Otros de los elementos del modelo relacional son las
relaciones. Definimos como relación a una abstracción que muestra
la asociación entre entidades.
Una entidad puede estar conectada a una o más relaciones pero
nunca conectada directamente a otra entidad.
Veamos un ejemplo:
Representamos a los alumnos que cursan materias

37
El gráfico anterior representa lo siguiente: el alumno Garcia Juan
cursa Programación I, Perez María cursa Algebra y Bases de Datos,
Arias Pablo cursa Redes y Bases de Datos y Marcos Ana cursa
Algebra y Redes.
En el caso anterior cursa es la relación que está conectando a dos
entidades (Alumnos y Materias).
Veamos otro ejemplo, en este caso la relación entre Empleados y
Sectores de una empresa.

Unicamente se define una relación entre dos o más tipos de objetos


si dicha relación está basada en políticas, reglas o leyes que
interesan al sistema que se modela.

Es decir que sólo se tendrán en cuenta aquellas relaciones que


tengan valor para nuestro sistema. Por ejemplo si estamos
construyendo una base de datos para el Instituto no incluiremos la
relación Profesores con su automóvil pues es una relación que no
tiene importancia para este caso.

38
PROPIEDADES DE UNA RELACION
Las relaciones poseen una serie de propiedades que
debemos tener en cuenta,

Ellas son:
Grado
Conectividad
Condicionalidad

Grado de una Relación


Definimos como grado de una relación a la cantidad de
entidades que forman parte de la relación, así encontramos a
relaciones de diferentes grados:
Unario en donde una sola entidad forma parte de
la relación.
Binario dos entidades forman parte de la relación.
Ternario tres entidades forman parte de la relación.
Etc.

Estudiemos cada uno de los casos: los dos ejemplos anteriores


tienen una relación de grado binario pues en el primero intervienen
dos entidades (Alumnos y Materias) y en el segundo (Empleados y
Sectores de una Empresa), de este tipo de grado son la gran
mayoría de las relaciones de un modelo relacional.
Como ya dijimos cuando el grado de una relación es unario, sólo una
entidad forma parte de la relación, estos casos no son muy
comunes.
Un ejemplo típico es la relación de una materia con ella misma con
respecto a la correlatividad, por ejemplo la materia Programación II
tiene como correlativa a Programación I, es decir que una materia
está relacionada con otra materia de la misma entidad.

39
En el ejemplo anterior tenemos Algebra como materia correlativa de
Análisis Matemático, y a Programación I como correlativa de
Programación II.
Otro ejemplo es el de las estaciones de subte en donde una estación
es precedida por otra estación, en este caso también una estación
de la entidad estaciones está relacionada con otra estación de la
misma entidad.
En las relaciones de grado ternario son tres las entidades que
forman parte de la relación, este tipo de relación así como las
unarias no son muy comunes, en donde cada una de las tres
entidades está relacionada con las otras dos.
Un ejemplo puede ser la relación que existe entre un fabricante un
componente y un proyecto, veamos este ejemplo en forma abstracta.

40
Conectividad de una Relación
Por conectividad entendemos a la cantidad de instancias de
un objeto que participan en la relación con otro objeto.
De esta manera podemos encontrar relaciones que tienen una
cardinalidad de tipo 1:1 (decimos que la relación es de tipo uno a
uno), o de cardinalidad 1:M (decimos que es de tipo uno a muchos),
de cardinalidad M a 1 (de muchos a uno) y de cardinalidad M:N (de
muchos a muchos). Siempre que nos refiramos a las letras M, N o P
significa muchos.

Relación 1:1
Veamos un ejemplo de una relación de 1:1, con la relación
que existe entre una provincia y un gobernador, en este caso una
Provincia tiene un solo gobernador y un gobernador gobierna una
sola Provincia.

41
Relación 1:M
En este caso una instancia de una entidad se relaciona con una o
muchas instancias de la otra entidad, veamos un ejemplo:

Veamos que en el ejemplo anterior el cliente C3 está relacionado


sólo con una factura, es decir que cuando hablamos de muchos es
el máximo de instancias con el cual una instancia se relaciona con
otra u otras instancias de la otra entidad.

42
Relación M:1
Una relación de tipo muchos a uno es similar a la del ejemplo
anterior todo depende del lugar en el cual se encuentra la entidad,
veamos un ejemplo en donde supuestamente un proveedor provee
una o más materias primas

Relación M:N
En este tipo de relación cada una de las instancias de la
primera entidad se relaciona con una o muchas instancias de la otra
entidad y viceversa es decir cada una de las instancias de la
segunda entidad se relaciona con una o muchas instancias de la
primera entidad, en el siguiente ejemplo tenemos las entidades libros
y autores en la cual un libro es escrito por uno o muchos autores y
por el otro lado un autor lo es de uno o muchos libros.

43
Condicionalidad de una relación
Con la propiedad condicionalidad estamos indicando si la
relación entre las entidades es obligatoria u opcional, lo que significa
determinar si existen o no instancias de ambas entidades que
forman parte de la relación.
Supongamos el siguiente ejemplo: las entidades son profesor y
materia la relación es dicta, en la cual una materia puede no tener
asignado ningún profesor, y un profesor puede dictar varias
materias. Otro ejemplo puede ser en la relación pacientes y médicos
en una clínica un médico puede no atender a ningún paciente ya que
puede ser el director de la clínica.

44
Del ejemplo anterior observamos que si bien la relación es de
cardinalidad M a N, el médico M2 no atiende a ningún paciente por
lo tanto esta relación es condicional.
Otro ejemplo es el caso de la relación unaria que vimos más arriba
que también es condicional ya que por ejemplo la materia Estructura
de un Computador o cualquiera de las materias de primer año no
tienen correlativas.

DIAGRAMA ENTIDAD RELACIÓN

El Modelo Relacional cuenta basicamente con dos


herramientas: el Diagrama Entidad Relación, conocido con el
nombre de DER y el Diccionario de Datos del Modelo Relacional.
El Diagrama Entidad Relación es una herramienta gráfica que
nos permite representar el Modelo Relacional con todas sus
entidades y sus relaciones. Con el Diagrama Entidad Relación se
observan los datos almacenados en el sistema y es representado
como una red de entidades conectadas con relaciones.

45
Elementos de un Diagrama Entidad Relación.
Entidades.
Las entidades son uno de los elementos que forman parte de
un DER, una entidad es representada con un rectángulo donde en
su interior se escribe el nombre de la entidad, según el autor que se
consulte, en el DER pueden o no estar incluidos los atributos de la
entidad, en nuestro caso no incluiremos los atributos en el DER,
estos quedarán descriptos en el Diccionario de Datos que veremos
más adelante.

Ejemplos:

Clientes

Clientes = Numero de cliente, Apellido, Nombre, Domicilio, Código


Postal, Localidad, CUIT, Número de Ingresos Brutos, Telefono,
dirección e-mail.

Otros ejemplos de entidades:


Empresas = Razón social, Dirección, Localidad, Código Postal,
Teléfono, Número Fax, CUIT, Número de Ingresos Brutos, Dirección
de e-mail, Página WEB.

Escuelas = Nombre escuela, dirección, localidad, teléfono, código


postal, distrito escolar.

Relaciones.
Las relaciones son otro de los elementos que forman parte de
un DER, y son representados mediante un rombo, donde en su
interior se escribe el nombre de la relación, para este nombre se
utiliza o un verbo que representa la asociación entre las dos

46
entidades que relaciona o el nombre de las dos entidades separadas
por un guión.
Veamos un ejemplo.
Para una relación que conecta Médicos con Pacientes. Las dos
opciones son las siguientes:

1)_ Utilizando el verbo Tiene como nombre de la relación.

Medicos Tiene Pacientes

2)_ Médicos - Pacientes.

Medicos-
Médicos Pacientes
Pacientes

Las dos opciones son válidas, en algunas ocasiones es difícil


encontrar un verbo que represente la relación, o en el caso de
encontrarlo este nombre se repite en otras relaciones dentro del
mismo DER, este es el típico caso de elegir el verbo "tiene".
Veamos ahora como se conectan dos o más entidades a través de
una relación en un Diagrama Entidad Relación.
Estudiemos detenidamente la relación Pacientes Médicos. De
acuerdo con lo visto más arriba esta es una relación de grado binario
pues la relación está compuesta por dos entidades y con respecto a
su cardinalidad es de tipo M:N (o de Muchos a Muchos). Lo
representamos de la siguiente manera:

1,M Medicos- 1,N


Médicos Pacientes
Pacientes

47
Se lee de la siguiente manera: un médico tiene uno o muchos
pacientes (N) y un paciente tiene uno o muchos médicos (M).
Observemos con cuidado la manera en la que se expresa la
cardinalidad en una relación. Ahora estudiamos en profundidad la
forma de expresar la cardinalidad, cuando aparece 1,M significa que
un paciente está relacionado como MÍNIMO con un médico y como
MAXIMO con M o muchos médicos, y para el caso inverso, un
médico está relacionado como MINIMO con un paciente y como
MAXIMO con muchos en este caso representado con la letra N.
Veamos otros ejemplos que representan la cardinalidad de una
relación
Para una relación de 1:1.

1,1 1,1
Esposos Tiene Esposas

En este caso decimos que un esposo esta relacionado como mínimo


con una esposa y como máximo con una esposa (por lo menos en
nuestra cultura occidental). y una esposa esta relacionada como
mínimo con un esposo y como máximo con un esposo. Quizás algún
alumno se pregunte ¿Pero y si una persona no está casada,
entonces debería relacionarse como mínimo con ningún
esposo/esposa, pero este caso no puede darse ya que la entidad se
refiere a esposos o esposas).

Para una relación de 1:M

1,1 1,M
Proyectos Trabaja Empleados

48
Significa que un empleado trabaja en un proyecto como mínimo y
un proyecto como máximo y en un proyecto trabajan uno o muchos
empleados.
Para una relación de M:1

1,M 1,1
Facturas Tiene Clientes

Una factura le pertenece a un cliente como mínimo y a un cliente


como máximo, y un cliente tiene una factura como mínimo y muchas
facturas como máximo.
Para una relación M:N.

1,M 1,N
Canciones Tiene Com positores

En este caso una canción fue compuesta por uno o muchos


compositores y un compositor puede ser el autor de una o muchas
canciones.
Veamos ahora ejemplos con relaciones condicionales.
Para el caso 1,M condicional.

1,1 0,M
Materias
Alumnos Tiene
Aprobadas

49
En donde un alumno no tiene aprobada ninguna o muchas materias,
ninguna puede ser para el caso de un alumno que recién se inscribe
en primer año y todavía no aprobó ningún final.
Para el caso 1,1 condicional.

Donde un empleado puede o no tener una Tarjeta de Crédito


Corporativa y una Tarjeta de Crédito Corporativa le pertenece a un
solo empleado de la empresa.
Veamos ahora como se representa una relación de grado unario en
un DER.
Donde vemos que es una relación de cardinalidad N: M
condicional, es condicional en ambos sentidos porque existen
materias que no tienen correlativas como es el caso de
Programación I o Estructura de un Computador y para la relación en
el otro sentido Seminario no es correlativa de ninguna otra materia.

50
Ahora veamos como se representa una relación ternaria.

1,M 1,N
Proyecto Tiene Empleado

1,P
En este caso un proyecto está relacionado con un empleado
Producto

y un producto, un empleado está relacionado con un proyecto y con


un producto y un producto está relacionado con un proyecto y con un
empleado, es decir que cada uno de las tres entidades de la relación
está relacionada con os otros dos.

Tipos de Objeto Asociativo.


Otro de los elementos que forman parte de un Diagrama
Entidad Relación son los llamados Tipos de Objeto Asociativo o
TOA, estos tipos de elementos aparecen cuando en una relación
además de conectar las entidades posee atributos propios, es decir
que contiene información que existe siempre y cuando exista la
relación y en el caso que la relación no exista, tampoco existirá el
TOA.
Un Tipo de Objeto Asociativo es representado en un Diagrama
Entidad relación como un rectángulo que está conectado a través de
una flecha a la relación.
En el ejemplo siguiente tenemos las entidades locador y locatario
que está conectada por una relación, de esa misma relación surge el
contrato de alquiler que representa el Tipo de Objeto Asociativo.

51
1,M 1,N
Locadores Locatarios

Contratos de
Alquiler

Observemos que la relación no tiene nombre en su interior, esto se


debe a que su nombre es reflejado con el TOA ya que este
representa a la relación más aquellos atributos que le pertenecen a
la relación.
Veamos otros ejemplos
En este caso un tratamiento existe, mientras exista un paciente y un
médico que lo atienda.

1,M 1,N
Médicos Pacientes

Tratamientos

En este caso un empleado trabaja en un proyecto, de este trabajo se


completa diariamente una planilla de hojas de actividad donde figura
la tarea realizada por un empleado en un proyecto.

52
1,M 1,1
Empleados Proyectos

Hojas de
actividad

En este caso un curso es creado cuando un profesor dicta una


materia, curso tiene atributos que le son propios como por ejemplo
el día de la semana y el horario de la clase, el aula asignada, etc.

1,M 1,N
Materias Profesores

Cursos

Un Tipo de Objeto Asociativo es un tipo de elemento muy común en


un DER.

Tipos de entidades débiles.


En algunos casos no existe en la entidad atributos claves
propios, en estos casos denominamos a estos tipos de entidad como
entidades débiles.
Las entidades de este tipo se identifican por su relación con otras
entidades en combinación con algunos de los valores de sus

53
atributos. Decimos que esta otra entidad es el propietario
identificador y llamamos al tipo de relación que conecta un tipo de
entidad débil con su propietario el vínculo identificador.
Los tipos de entidades débiles siempre tienen una restricción de
participación total ya que un tipo de entidad débil no se puede
identificar sin una entidad propietaria.
Aunque no siempre la restricción de participación total significa que
exista la entidad débil ya que una entidad Licencia de Conductor
debe su existencia al propietario de la licencia pero no es entidad
débil pues Licencia de conductor tiene atributo clave propio que es el
número de la licencia.
Los tipos de entidades débiles por lo general tienen una clave parcial
que es el conjunto de atributos que pueden identificar a las
entidades débiles relacionadas con la entidad propietaria.

Entidad
Propietaria

Entidad
débil

En un Diagrama Entidad Relación una entidad débil se identifica


dibujando la entidad y la relación que los conecta con doble línea.

Supertipo, Subtipo y Especialización.

54
En algunos casos una entidad tiene varias subagrupaciones
adicionales que deben representarse explicitamente por su
importancia en la base de datos.
El conjunto de instancias de cada una de estas agrupaciones es un
subconjunto de la entidad. Por ejemplo dada la entidad empleado
existen diferentes subgrupos: secretarias, técnicos, administrativos,
etc., lo que significa que toda entidad que sea miembro de una de
estas subagrupaciones también será un empleado.
Cada una de estas subagrupaciones es un subtipo de la entidad
empleado y empleado es supertipo de cada uno de estos subtipos.

Llamamos a la relación entre un supertipo y un subtipo como


relación supertipo/subtipo. En el ejemplo empleado / secretaria,
empleado / técnico y empleado / administrativo son tres relaciones
supertipo / subtipo y cualquier elemento del subtipo es también un
empleado (una secretaria es también un empleado). Un miembro
del subtipo es una entidad igual que el supertipo pero tiene un papel
específico. Una instancia no puede existir simplemente por ser
miembro del subtipo, también debe serlo del supertipo.

55
Veamos como se representan un supertipo y sus subtipos en un
Diagrama Entidad Relación.

Empleados

Secretarias Técnicos Ingenieros

Herencia de atributos en las relaciones supertipo / subtipo.


Un importante concepto de las relaciones supertipo/subtipo
es que un subtipo debe poseer atributos que le son propios además
de los que hereda como miembro del supertipo.

Entonces podemos decir que un subtipo hereda todos los atributos


del supertipo. Especialización. La especialización es el hecho de
agrupar un conjunto de subtipos de un supertipo. Este agrupamiento
se produce teniendo en cuenta alguna característica distintiva del
subtipo.

56
Empleados

Empleados
Técnicos

Secretarias Técnicos Ingenieros

En este caso Empleados técnicos es una especialización de los


subtipos técnicos e ingenieros.

Técnica para construir un DER.


Para construir un DER puede utilizarse como regla de práctica
básica el tomar los sustantivos importantes como entidades y los
verbos importantes como relaciones:
Identificar las entidades.
Individualizar identificadores únicos de las entidades, si
la entidad posee una sola instancia, este elemento no
es una entidad.
Identificar relaciones entre objetos.
Clasificar relaciones según conceptos de grado,
conectividad, condicionalidad.
Identificar tipos de objetos asociativos.
Identificar supertipos y subtipos, agrupando objetos
que posean atributos comunes y alguna condición de
diferenciación.

57
Dibujar el DER según la notación de la herramienta.
Eliminar elementos redundantes o fuera del alcance del
sistema.

Reglas de construcción de un DER.

Una entidad puede estar conectada a una o más relaciones.


Una relación debe conectarse a una o más entidades.
Una entidad no puede estar conectada directamente a otra
entidad.
Una relación no puede estar conectada directamente a otra
relación.
No pueden existir distintos elementos con el mismo nombre.
No incluir relaciones irrelevantes para el sistema.
Eliminar relaciones que no puedan existir en el mundo real.
Eliminar relaciones redundantes.
Si una entidad sólo tiene su identificador como atributo,
eliminarla e incluir la información en otra entidad.

Veamos ahora dados algunos enunciados ejemplos de


Diagramas Entidad Relación.

Analicemos con más detalles algunas de las reglas de


construcción de un DER.

 Una entidad puede estar conectada a una o más


relaciones.

En el siguiente ejemplo vemos que la entidad A está relacionada con


la entidad C a través de la relación A-C y con la entidad B a través
de la relación A-B.

58
 Una relación debe conectarse a una o más entidades.

Lo siguiente no puede suceder, la relación F no está conectada con


ninguna otra entidad.

 Una entidad no puede estar conectada directamente a otra


entidad, debe hacerlo a través de una relación.

59
Lo siguiente no puede suceder, la entidad G está conectada
directamente a la entidad H en un DER, pero si en otro tipo de
diagramas, los diagramas de tablas.

Existen otras formas de graficar un Diagrama Entidad Relación, en


donde no se dibujan los rombos que representan las relaciones, pero
en esta forma de graficar que utilizamos en la materia Bases de
Datos si incluimos los rombos.

Ejercicio resuelto
Empresa Constructora de Edificios:
Esta empresa cuenta con una nomina de personal disponible para
poder ser asignado a las diferentes obras. Una persona puede estar
asignada a una o mas obras, y en una obra pueden trabajar una o
mas personas, de esta asignación debe aparecer una ficha de
actividad de las personas en las obras, en donde debe figurar la
fecha, la hora y la actividad realizada.
Toda persona esta especializada en una o mas tareas, y una tarea
puede ser realizada por una o mas personas de la empresa
(ejemplos frentista, colocador de azulejos, electricistas, yeseros,
etc.).
Toda obra además del personal propio puede tener asignado
profesionales para realizar aquellas tareas con la que no existe
personal especializado (como es el caso de algún ingeniero que
estudie el suelo para saber si este puede resistir los pisos que se
desean construir, o el impacto ambiental de la obra, etc.), por este

60
motivo un profesional puede estar asignado a una o mas obras y una
obra puede contar con la colaboración de ninguno o muchos
profesionales.
Toda obra necesita contar con una serie de recursos como ser
mezcladoras de cemento, martillos neumáticos, inyectores de
hormigón, etc. y un recurso puede ser usado en ninguna o muchas
obras. Por cada recurso usado en cada obra debe figurar una
planilla de uso del recurso, en donde se debe almacenar las fechas
en el que fue utilizado y si sufrió roturas.
Los recursos pueden pertenecer o no a la empresa constructora, en
el caso que no lo sean, estos se pueden alquilar a un proveedor, por
lo cual se deberá confeccionar un contrato de alquiler.

61
1,M 1,N
Pers onal Obras

1,M
1,M 0,M

Tiene
Trabaja
Ficha de
actividad
0,N
1,N

Profesionales
Tareas

1,N

Planilla de
Recursos
us o

0,N

Contrato de
alquiler

0,M

Proveedores

62
Ejercicio resuelto
Armado de Televisores
Esta empresa se encuentra ubicada en Tierra del Fuego y se dedica
al armado de televisores.
Las componentes de los televisores pueden ser comprados a un
importador, en tal caso la compra viene acompañada de la factura,
otras piezas son fabricadas en la empresa, para lo cual esas piezas
tienen asignado un operario que se dedica exclusivamente a un tipo
de pieza, aunque una pieza puede ser fabricada por mas de un
operario, el operario completa una hoja de confección con las la
fecha y la cantidad fabricada..
Los diferentes modelos de televisores están compuestos por 300 o
más piezas, aunque una pieza puede estar incorporada en más de
un televisor, existe un mapa de armado para cada modelo de
televisor donde se indica la ubicación y el orden de las piezas que lo
componen.

63
DICCIONARIO DE DATOS.
Vamos a utilizar el diccionario de datos para describir los
elementos que forman parte de un DER.

Agregamos una @ a los atributos que sirvan como identificación


única.

Objetos = @identificador + atributos.

Tipo de objeto asociativo = {@identificador1} + {@identificador2} +


atributos.

Relación
@identificador1 + @identificador2 (caso 1:1).

64
{@identificador1} + @identificador2 (caso N:1).
{@identificador1} + {@identificador2} (caso m:n).

Super tipo = {atributos comunes} + {subtipos}.

Sub tipo = idem objetos.

Veamos algunos ejemplos.

ALUMNOS = @nro-alumno + tipo_doc + nr_doc + apellido + nombre


+ domicilio + localidad + codigo_postal.

LIBROS = @nro_libro + nombre + autor + idioma original + fecha


primera edicion.

PACIENTES = @nro_historia_clinica + apellido + nombre + domicilio


+ localidad + codigo_postal + obra_social.

Veamos ahora el diccionario de datos de los dos últimos ejercicios.


1)_Empresa Constructora de Edificios:

Entidades

PERSONAL = @Nro_Legajo + Apellido + Nombre +


Tipo_Documento + Nro_Documento + Sexo + Domicilio + Localidad
+ Codigo_Postal + Fecha_Nacimiento + Telefono.

OBRAS = @Nro_Obra + Denominación + Direccion + Localidad +


Nro_Permiso.

PROFESIONALES = @Nro_CUIT + Apellido + Nombre + Domicilio +


Localidad + Localidad + Codigo_Postal + Telefono +
Tipo_Documento + Nro_Documento + Fecha_Nacimiento

65
TAREAS = @Codigo_Tarea + Denominación + Caracteristicas +
Observaciones.

RECURSOS = @Codigo_Recurso + Denominación +


Caracteristicas.

PROVEEDORES = @Nro_CUIT + Razon_Social + Telefono +


Direccion + Localidad + Codigo_Postal + Email.

Tipos de Objeto Asociativo

FICHA_DE_ACTIVIDAD = @Nro_Legajo + @Nro_Obra + Fecha +


Hora + Actividad_Realizada.

PLANILLA_DE_USO = @Nro_Obra + @Codigo_Recurso + Fecha +


Roturas.

CONTRATO_DE_ALQUILER = @Codigo_Recurso + @Nro_CUIT +


Fecha_Inicio_Contrato + Fecha_Fin_Contrato + Monto_Alquiler

Relaciones

TRABAJA = {@Nro_Legajo} + {@Codigo_Tarea}

TIENE = {@Nro_Obra} + {@Nro_CUIT}

2)_ Armado de Televisores

Entidades

COMPONENTES = @Cod_Componente + Descripcion

66
TELEVISORES = @Cod_Televisor + Modelo + Caracteristicas.

IMPORTADOR = @Nro_Importador + Razon_Social + CUIT

OPERARIOS = @Nro_Legajo + Apellido + Nombre + Domicilio +


Telefono + Tipo_Doc + Numero_Doc

Tipos de Objeto Asociativo

MAPA_DE_ARMADO = @Cod_Componente + @Cod_Televisor +


Cantidad + Ubicación

HOJA_DE_CONFECCION = @Cod_Componente + @Nro_Legajo +


@Fecha + Cantidad_Fabricada.

Relaciones

COMPONENTES – IMPORTADOR = {@Nro_Componente} +


{@Nro_CUIT}

Lea con atención

Ejercicio resuelto
Consideremos la carrera de Analista de Sistemas que ustedes están
cursando:
Sabemos que contamos con Alumnos, Profesores, Materias, Cursos
(cuando tenemos una materia le asignamos un profesor), Materias
Cursadas por los alumnos, Finales rendidos por los alumnos,
además las materias tienen correlativas.
Analizar toda esta información que disponemos y construir un
Diagrama Entidad Relación y su Diccionario de Datos.

67
Observen con cuidado cada una de las entidades, las relaciones, las
características de las relaciones como la conectividad y la
condicionalidad, los tipos de objetos asociativos como son los
Cursos y Materias Cursadas por Alumnos.
Intenten resolverlo, les envío además la resolución de este ejercicio,
y por favor me lo envían para la corrección, aunque les quede muy
diferente a la resolución.

Resolución
Veamos la relación que existe entre Materias Cursadas por Alumnos
y Finales rendidos, una Materia Cursada por un Alumno está
relacionada con un 0,2 con Finales Rendidos, esto es porque un
alumno que aprobó la cursada de una materia, todavía no rindió para
esa materia ningún final, y como máximo dos finales ya que se
disponen de dos oportunidades de rendir un final por la cursada.

68
Diccionario de Datos:

Entidades

Alumnos: @Nro_Matrícula + Apellido + Nombre + Tipo_Documento


+ Nro_Documento + Domicilio + Localidad + Teléfono.

Profesores: @Nro_Legajo + Apellido + Nombre + Tipo_Documento +


Nro_Documento + Domicilio + Localidad + Teléfono.

Materias: @Código_Materia + Nombre_Materia

69
Finales_Rendidos: @(Nro_Matrícula + Nro_Curso + Fecha_Final) +
Código_Materia + Calificación.

Tipos de Objeto Asociativos

Materias_Cursadas_por_Alumnos: @(Nro_Matrícula + Nro_Curso) +


Código_Materia + Calificación_Cursada (Aprobada o Desaprobada).

Cursos: @(Nro_Curso + Nro_Legajo) + Código_Materia + Año

Podemos incluir mucha más información en este DER, por ejemplo


que hacemos con las materias que fueron aprobadas por
equivalencia o incluir una entidad de Nacionalidad y relacionarlos
con las entidades Profesores y Alumnos, podríamos incluir una
entidad con las fechas de finales incluyendo como atributos los
profesores que fueron parte de la mesa examinadora.

Ejercitación.
Se animan a pensar como resolverían estos temas?

Dado el siguiente enunciado construir el Diagrama Entidad Relación


con su Diccionario de Datos asociado.

Lea con atención

Ejercicio resuelto

Empresa de Desarrollo de Software.


Esta empresa cuenta entre sus empleados Analistas de Sistemas,
Testers y Programadores.
Un empleado puede estar asignado a uno o varios proyectos y un
proyecto puede tener asignado desde uno a varios empleados, de
esta relación surgen las actividades que realiza cada empleado en el

70
proyecto, la fecha en la que comenzó a trabajar en el proyecto y la
fecha de finalización de su trabajo que puede ser nula.
Un empleado tiene una categoría y una categoría puede tener uno o
muchos empleados, dentro de las categorías encontramos a los
asistentes, juniors, semi seniors, seniors.
Todo proyecto puede tener asociado ninguno o varios proveedores
de equipamiento, y un proveedor puede serlo de uno o varios
proyectos de los cuales surgen las condiciones de contratación.

Empleados 1,N 1,M Proyectos

1,N 1,N

Planilla de
Actividades
Emp - Cat

Condiciones
1,1 de 0,N
Contratación

Categorias Proveedor

Diccionario de Datos:

Entidades

Empleados: @Cod_Empleado + Apellido + Nombre + Domicilio +


Localidad + Tipo_Documento + Nro_Documento.

71
Categorias: @Cod_Categoria + Descripcion_Categoria.

Proyectos: @Cod_Proyecto + Nombre_Proyecto+ Características.

Proveedores: @Cod_Proveedor + Razon_Social + Cuit + Direccion +


Localidad.

Tipos de Objeto Asociativos

Planilla_de_Actividades: @Cod_Empleado + @Cod_Proyecto +


Fecha_Inicio + Fecha_Fin.

Condiciones_de_Contratacion:@Cod_Proyecto + @Cod_Proveedor
+ Condiciones_Contratacion

Relaciones

Empleados-Categorias = {@Cod_Empleado} + {@Cod_Categoria}

Ejercitación.

Dado los siguientes enunciados construir el Diagrama Entidad


Relación con su Diccionario de Datos asociado.

1) Fábrica de Lavarropas:
Esta empresa Argentina ubicada en la zona sur del Gran Buenos
Aires, fabrica distintos modelos de lavarropas para ser vendidos en
el mercado interno.
Un modelo de lavarropas esta compuesto por 15 o mas piezas y una
pieza puede componer uno o mas modelos de lavarropas, como
consecuencia de esto surgen las condiciones del armado del

72
lavarropa donde figura la ubicación de la pieza y las condiciones
para su colocación.
Las piezas pueden ser fabricadas por uno o más operarios y un
operario puede fabricar una o mas piezas, debe existir una orden de
fabricación que le es entregada al operario.
Algunas piezas son compradas a uno o mas proveedores externos y
un proveedor puede serlo de una o mas piezas, como consecuencia
de esta compra debe existir una orden de compra.
Los distintos modelos son vendidos a uno o mas Negocios
Minoristas y un Negocio Minorista puede comprar uno o mas
modelos, es necesario guardar la información de las compras del
mes que se realizaron.

2)_ Fábrica de Muebles.


Esta fábrica tiene a su personal especializado en diferentes tareas
por ejemplo: cortadores, armadores, dibujantes, etc., aunque cada
persona puede estar especializada en una o más actividades y una
actividad puede tener especializadas 1 o más personas.
Las personas están asignadas a un sector de la fábrica y donde en
un sector pueden estar asignadas una o más personas.
Una persona puede estar asignada a la fabricación de uno o más
muebles y una mueble puede estar fabricado por una o más
personas por cada mueble se debe completar una planilla donde se
almacena la fecha y hora de realización de cada actividad junto con
las características de lo realizado.
Los diferentes modelos de muebles son vendidos en negocios
minoristas, aunque no todos los modelos de muebles son vendidos
en todos los negocios.
La materia prima la proveen uno o más proveedores y un proveedor
puede serlo de una o más materias primas, como consecuencia de
esto surge él remito.

73
UNIDAD 3: DISEÑO FISICO DE UNA BASE DE DATOS.

Objetivos de la unidad 3:
Al término de la unidad el alumno identificará los elementos
que forman una base de datos física, podrá diseñar la estructura de
la base de datos a partir de los elementos aprendidos en la unidad 2.

Introducción
Anteriormente vimos como se construía una base de datos
desde el punto de vista lógico, ahora vamos a estudiar como se
construye una base de datos físicamente.
Luego de haber estudiado el Diagrama Entidad Relación conocimos
las entidades, las relaciones, los tipos de objeto asociativos, los
supertipos y subtipos etc., estos elementos lógicos serán
transformados en esta instancia en elementos físicos como ser por
ejemplo las tablas de una base de datos, empecemos por definirla:

TABLAS
Una tabla es un conjunto de datos sobre algún tema
específico como por ejemplo alumnos, profesores, empleados,
proveedores, libros, automóviles, pacientes, clientes, medicamentos,
etc.
Las tablas organizan los datos en columnas que las conocemos con
el nombre de campos y las filas conocidas como registros.

Clave Primaria
Es el conjunto de aquellos campos cuyos valores puede
identificar un registro de otro dentro de una tabla en forma unívoca.

74
La clave primaria por definición debe estar formada por la menor
cantidad posible de atributos, esta característica de las claves
primarias se las conoce como propiedad de minimalidad.

La clave primaria es única.

La clave primaria se la conoce en inglés con el nombre de


Primary-Key ( se pronuncia praimari ki)

Veamos algunos ejemplos:


Para la tabla Clientes una clave primaria podría ser el nro_cliente.
Para la tabla Médicos una clave primaria podría ser el nro_legajo.
Para la tabla Libros una clave primaria puede ser el ISBN.
Para la tabla Artículos una clave primaria puede ser nro_articulo.
Para la tabla Análisis Clínicos una clave primaria puede ser
cod_analisis_clínico.

En cada uno de los anteriores ejemplos podemos identificar que la


clave primaria elegida identifica en forma única a un registro de la
tabla entre el resto de los registros, lo que significa que si en la tabla
clientes figura el cliente número 1235, Martínez Ramón Oscar este
cliente con su número aparece una sola vez.
Si bien en los ejemplos anteriores todas las claves primarias están
compuestas por un solo atributo, puede suceder que la clave
primaria esté compuesta por más de un atributo.

Clave Única.
Una clave única es también un atributo o conjunto de atributos
que identifican unívocamente a un registro de la tabla entre otros
registros de la tabla, pero a diferencia de la clave primaria, pueden
existir o ninguna, una o varias claves únicas.

75
La clave primaria también es una clave única, la diferencia es que
por definición la clave primaria debe ser o la más importante para
nuestra tabla o tener la menor cantidad de atributos.
La clave única se la conoce en inglés con el nombre de
Unique-Key. (se pronuncia iunic ki).

Ejemplos
Para la tabla Clientes la clave primaria podría ser nro_cliente y una
clave única formada por los dos campos tipo documento y número
documento.

Clave Foránea.
La clave foránea es un campo o conjunto de campos de una
tabla que son la clave primaria o clave única de la otra tabla con la
cual está relacionada.
Se la conoce en inglés como Foreign-Key
Veamos un ejemplo:

Veamos el diccionario de datos.

Empleado: nro_empleado + apellido + nombre + tipo_documento +


nro_documento.
Siendo el nro_empleado la clave primaria de empleados.
Departamento: Nro_departamento + Nombre_Departamento.
Siendo nro_departamento la clave primaria de Departamento.
Entonces cuando transformemos estas dos entidades en tablas, la
clave primaria de Departamento se suma como campo a la tabla
empleado, y pasa a llamarse clave foránea.

76
Clave Secundaria.
Es un campo o conjunto de campos que permiten recuperar
registros en forma rápida dentro de un objeto que cumplen con
determinada propiedad, en la próxima unidad veremos como se
crean cuando estudiemos Índices en SQL.

Dependencia Funcional Completa


Esta definición la utilizaremos más adelante cuando veamos
normalización.

Se dice que un atributo A tiene dependencia funcional completa con


un conjunto de atributos B si el valor de A está relacionado con todos
los elementos del conjunto B.

Veamos el siguiente ejemplo:

Conjunto A

Sistema Operativo
Unix
Multiusuario

Muy buenas características de


seguridad

El sistema operativo Unix tiene muchos años, con plena vigencia y


tiene características que lo señalan como muy bueno.

77
Decimos entonces que el elemento Unix tiene Dependencia
Funcional Completa con el conjunto A, ya que Unix está relacionado
con todos los elementos del conjunto A.

Dependencia Funcional Parcial


Se dice que un atributo A tiene dependencia funcional parcial
con un conjunto de atributos B si el valor de A está relacionada con
algunos pero no todos los elementos del conjunto B.

Agregamos un elemento más al conjunto A, y ahora el elemento


Unix está relacionado con algunos pero no con todos los elementos
del conjunto A.

Conjunto A

Sistema Operativo
Unix
Multiusuario

Muy buenas características de


seguridad

Fácil de usar

NORMALIZACION

Desarrollaremos este tema en el foro.


Edgar Codd, el impulsor del modelo relacional, es Dr en
Ciencias Matemáticas y trabajando en IBM, pudo darse cuenta que
una tabla se podía transformar en una o más tablas relacionadas.
Esto dio origen a la técnica de normalización.

Definición de Normalización

78
Es un conjunto de reglas y procedimientos que permiten
definir una estructura de datos simple y estable frente a los cambios.

Veamos este tema combinando explicación teórica con el desarrollo


de un ejemplo.

Trabajamos con la siguiente estructura:

Factura = @#factura + #cliente + nombre cliente + fecha + {#artículo


+ nombre artículo + cantidad artículo + precio unitario + precio por
cantidad} + precio total.

Analizándola observamos que por cada #factura aparecen uno o


muchos artículos, es decir como pasa realmente, cuando realizamos
una compra, por cada factura figuran uno o varios artículos que
compramos junto con la cantidad de artículos, el precio unitario y el
precio por la cantidad.
Decimos entonces que @articulo, nombre articulo, cantidad artículo,
precio unitario y precio por cantidad forman un grupo repetitivo.
Veamos las formas normales.

PRIMERA FORMA NORMAL.

Definición:
Una estructura de datos sin grupos repetitivos está
automáticamente en Primera Forma Normal.

Técnica de Construcción.
Veamos como transformamos una estructura para que quede en
primera forma normal

1)_ Identificar claves únicas.

79
2)_ De las claves únicas, seleccionar la clave primaria.
3)_ Dividir el objeto en tantos objetos como sean necesarios para
separar los grupos repetitivos.

Volvamos al ejemplo, de la estructura original FACTURA, y la


transformamos en este caso en dos estructuras:

Factura_Cabecera = @#factura + #cliente + nombre cliente + fecha


+ precio total.

Factura_Detalle = @#factura + @#artículo + nombre artículo +


cantidad artículo + precio unitario + precio por cantidad.

En donde observamos que ya no existen grupos repetitivos,


continuamos trabajando pero ahora con FACTURA CABECERA y
FACTURA DETALLE.

SEGUNDA FORMA NORMAL

Definición:
Un objeto está en Segunda Forma Normal si está en Primera
Forma Normal y además todos los atributos no clave tienen
dependencia funcional completa con la clave primaria.

Técnica de Construcción
Si la clave primaria está compuesta por más de un atributo,
verificar que cada atributo que no pertenece a la clave primaria
depende de toda la clave y no solamente de una parte. Dividir el
objeto si es necesario para lograr este objetivo.
Si la clave primaria esta compuesta de un solo atributo la estructura
ya se encuentra en segunda forma normal.

80
Factura_Cabecera = @#factura + #cliente + nombre cliente + fecha
+ precio total.

Factura_Detalle = @#factura + @#artículo + cantidad artículo +


precio por cantidad.

Articulo = @#artículo + nombre artículo + precio unitario.

Observamos que en factura detalle no es suficiente el #factura para


identificar la clave primaria, por eso ahora la clave primaria está
compuesta por #factura y #artículo.

TERCERA FORMA NORMAL

Definición
Un objeto está en Tercera Forma Normal si está en Segunda
Forma Normal y además todos sus atributos que no son clave
primaria sean independientes entre sí.

Técnica de Construcción
Verificar que todos los atributos no clave sean mutuamente
independientes entre si. Suprimir atributos redundantes o dividir los
objetos.

Continuamos trabajando con Factura Cabecera, Factura Detalle y


Articulos.

Ejemplo:
Factura_Cabecera = @#factura + #cliente + fecha.

Cliente = @#cliente + nombre cliente.

Factura_Detalle = @#factura + @#artículo + cantidad artículo.

81
Articulo = @#artículo + nombre artículo + precio unitario.

Nota: precio total y precio por cantidad se deben eliminar ya que se


pueden calcular con otros atributos. Precio por cantidad
multiplicando la cantidad de artículos por el precio unitario, y el
precio total con la suma de todos los precios por cantidad.

Veamos otro ejemplo:


Normalizamos la siguiente estructura:

Remiseria = nro_habilitacion + CUIT + Razon_Social + Direccion +


Telefono + Numero_patente + Modelo_automovil +
Marca_automovil.

Identifiquemos clave primaria y si existen grupos repetitivos los


encerramos entre corchetes.

Remiseria = @nro_habilitacion + CUIT + Razon_Social + Direccion


+ Telefono + {Numero_patente + Modelo_automovil +
Marca_automovil }

Ahora aplicamos la primera forma normal, dividimos la estructura


para eliminar los grupos repetitivos.

Remiseria = @nro_habilitacion + CUIT + Razon_Social + Direccion


+ Telefono.

Remiseria_Automoviles = @nro_habilitacion + @numero_patente


+ Modelo_Automovil + Marca_automovil.

Aplicando la segunda forma normal

82
Remiseria = @nro_habilitacion + CUIT + Razon_Social + Direccion
+ Telefono (la estructura queda sin cambios porque ya se
encuentra en segunda forma normal).

Remiseria_Automoviles = @nro_habilitacion + @nro_patente.

Automoviles = @nro_patente + Modelo_automovil +


Marca_automovil.

Analizando observamos que las tres estructuras ya se encuentran en


tercera forma normal.

Veamos otro ejemplo:

Shoping = Numero_Shoping + Nombre_Shoping +


Domicilio_Shoping + Localidad_Shoping + Codigo_Postal_Shoping +
Numero_Local + Nombre_Local + CUIT_Local +
Apellido_Dueño_Local + Nombre_Dueño_Local +
Tipo_Documento_Dueño + Numero_Documento_Dueño +
CUIT_Shoping.

Aplicando la Primera Forma Normal


1)_ Identifico grupos repetitivos, los encierro entre llaves, e idénticos
claves primarias.

Shoping = Numero_Shoping + Nombre_Shoping +


Domicilio_Shoping + Localidad_Shoping + Codigo_Postal_Shoping +
{Numero_Local + Nombre_Local + CUIT_Local +
Apellido_Dueño_Local + Nombre_Dueño_Local +
Tipo_Documento_Dueño + Numero_Documento_Dueño} +
CUIT_Shoping.

Luego queda:

83
Shoping = @Numero_Shoping + Nombre_Shoping +
Domicilio_Shoping + Localidad_Shoping + Codigo_Postal_Shoping +
CUIT_Shoping.

Locales = @Numero_Shoping + @Numero_Local + Nombre_Local


+ CUIT_Local + Apellido_Dueño_Local + Nombre_Dueño_Local +
Tipo_Documento_Dueño + Numero_Documento_Dueño

Aplicando la segunda forma normal.


Shoping = @Numero_Shoping + Nombre_Shoping +
Domicilio_Shoping + Localidad_Shoping + Codigo_Postal_Shoping +
CUIT_Shoping.
Ya se encuentra en segunda forma normal porque su clave primaria
está compuesta por un solo item.

Locales = @Numero_Shoping + @Numero_Local + Nombre_Local


+ CUIT_Local + Apellido_Dueño_Local + Nombre_Dueño_Local +
Tipo_Documento_Dueño + Numero_Documento_Dueño

Aplicando la tercera forma normal.


Shoping = @Numero_Shoping + Nombre_Shoping +
Domicilio_Shoping + Localidad_Shoping + Codigo_Postal_Shoping +
CUIT_Shoping.

Locales = @Numero_Shoping + @Numero_Local + Nombre_Local


+ CUIT_Local + Tipo_Documento_Dueño +
Numero_Documento_Dueño

Dueños=@Tipo_Documento_Dueño+
@Numero_Documento_Dueño + Apellido_Dueño_Local +
Nombre_Dueño_Local

84
Donde Tipo_Documento_Dueño y Numero_Documento_Dueño de
Locales es clave foránea a la tabla Dueños.

Veamos otro ejemplo.

Cliente = Nro_Cliente + Apellido + Nombre + Cod_Pais_Nacimiento


+ Pais_Nacimiento + Telefono + Domicilio + Codigo_Postal

1)_ Identifico si existen grupos repetitivos e idénticos claves


primarias.

Cliente = @Nro_Cliente + Apellido + Nombre +


Cod_Pais_Nacimiento + Pais_Nacimiento + Telefono + Domicilio +
Codigo_Postal

Aplicando la primera forma normal, la estructura queda igual porque


no existen grupos repetitivos.

Cliente = @Nro_Cliente + Apellido + Nombre +


Cod_Pais_Nacimiento + Pais_Nacimiento + Telefono + Domicilio +
Codigo_Postal

Ahora aplicamos la segunda forma normal, pero como la clave


primaria tiene un solo atributo, la estructura queda igual.

Cliente = @Nro_Cliente + Apellido + Nombre +


Cod_Pais_Nacimiento + Pais_Nacimiento + Telefono + Domicilio +
Codigo_Postal

Aplicando la tercera forma normal, vemos que algunos atributos no


clase no son independientes entre si ellos son:
Cod_Pais_Nacimiento y Pais_Nacimiento, entonces creamos una
nueva estructura Paises_Nacimiento, veamos el resultado final:

85
Cliente = @Nro_Cliente + Apellido + Nombre +
Cod_Pais_Nacimiento + Telefono + Domicilio + Codigo_Postal

Paises_Nacimiento = @Cod_Pais_Nacimiento + Pais_Nacimiento

Veamos otro ejemplo.


Dadas las siguientes dos estructuras aplicar la técnica de
Normalización.

Pedido de Fabricación = @Nro_Pedido + Nro_Proveedor +


Razon_Social + Fecha + CUIT Proveedor + Código_Articulo +
Descripción Artículo + Cantidad + Cantidad Total Pedida de
Artículos.

Primera Forma Normal

Identificamos los grupos repetitivos y los encerramos entre llaves


Pedido de Fabricación = @Nro_Pedido + Nro_Proveedor +
Razon_Social + Fecha + CUIT Proveedor + {Código_Articulo +
Descripción Artículo + Cantidad} + Cantidad Total Pedida de
Artículos.
Ahora que encontramos grupos repetitivos dividimos la estructura
para que queden en Primera Forma Normal.

Pedido de Fabricación = @Nro_Pedido + Nro_Proveedor +


Razon_Social + Fecha + CUIT Proveedor + Cantidad Total Pedida
de Artículos.
Articulos_Pedidos = @Nro_Pedido + @Código_Articulo +
Descripción Artículo + Cantidad.

86
Segunda Forma Normal:

Pedido de Fabricación = @Nro_Pedido + Nro_Proveedor +


Razon_Social + Fecha + CUIT Proveedor + Cantidad Total Pedida
de Artículos. (No le realizamos cambios)
Articulos_Pedidos = @Nro_Pedido + @Código_Articulo +
Descripción Artículo + Cantidad.

Vemos que Descripción_Articulo depende sólo del Código_Articulo,


y la Cantidad de Nro_Pedido y Código_Articulo porque la cantidad
es de ese artículo en ese nro_Pedido, dividimos la estructura hasta
que quede en Segunda Forma Normal.

Articulos_Pedidos = @Nro_Pedido + @Código_Articulo +


Cantidad.

Articulos = @Código_Articulo + Descripción Artículo

Entonces en esta Segunda Forma Normal nos quedaron estas tres


estructuras:

Pedido de Fabricación = @Nro_Pedido + Nro_Proveedor +


Razon_Social + Fecha + CUIT Proveedor + Cantidad Total Pedida
de Artículos.

Articulos_Pedidos = @Nro_Pedido + @Código_Articulo +


Cantidad.

Articulos = @Código_Articulo + Descripción Artículo

Tercera Forma Normal

87
Vemos que el atributo Cantidad Total Pedida de Articulos puede ser
calculado sumando todas las Cantidades de ese Nro_Pedido, por lo
tanto podemos eliminarlo. También vemos que la Razon_Social
depende del Nro_Proveedor, lo mismo ocurre con el CUIT
Proveedor, entonces como estos atributos no clave dependen entre
si, dividimos la estructura. Finalmente nos queda así:

Pedido de Fabricación = @Nro_Pedido + Nro_Proveedor Fecha.

Proveedor: @Nro_Proveedor + Razon_Social + CUIT Proveedor

Articulos_Pedidos = @Nro_Pedido + @Código_Articulo +


Cantidad.

Articulos = @Código_Articulo + Descripción Artículo

Observen como las cuatro estructuras quedaron conectadas


por las claves foráneas.

Veamos otro ejemplo

Empresa = @Nro_Empresa + Razon_Social + Nro_Sucursal +


Dirección_Sucursal + Localidad_Sucursal + CUIT_Empresa +
Rubro_Empresa.

Primera Forma Normal

Identificamos el grupo repetitivo encerrado entre llaves.

Empresa = @Nro_Empresa + Razon_Social + {Nro_Sucursal +


Dirección_Sucursal + Localidad_Sucursal} + CUIT_Empresa +
Rubro_Empresa.

88
Dividimos la estructura para cumplir con la Primera Forma Normal.

Empresa = @Nro_Empresa + Razon_Social + CUIT_Empresa +


Rubro_Empresa.

Sucursales = @Nro_Empresa + @Nro_Sucursal +


Dirección_Sucursal + Localidad_Sucursal

Segunda Forma Normal

Empresa tiene como clave primaria un solo atributo por lo tanto se


encuentra en segunda forma normal.

En el caso Sucursales Direccion_Sucursal y Localidad_Sucursal


están relacionados con el Nro_Sucursal y Nro_Empresa, o sea lo
dejamos igual.

Tercera Forma Normal

Todos los atributos no clave son independientes entre si por lo tanto


el resultado final es:

Empresa = @Nro_Empresa + Razon_Social + CUIT_Empresa +


Rubro_Empresa.

Sucursales = @Nro_Empresa + @Nro_Sucursal +


Dirección_Sucursal + Localidad_Sucursal

EL PROCESO DE DISEÑO DE UNA BASE DE DATOS


Veamos en que se transforman cada uno de los elementos
que forman parte del Diagrama Entidad Relación cuando queremos
construir la base de datos.

89
Hasta ahora considerábamos las relaciones como una conexión
entre datos, pero veremos como son representadas físicamente
según el tipo.

Relación 1:1
Para una relación entre dos entidades del Diagrama Entidad
Relación de grado 1:1, se debe elegir una de las entidades y agregar
como atributo en una entidad la clave primaria de la otra entidad.
Consideremos las dos entidades A y B.

1,1 1,1
A Tiene B

A = @A1 + A2 + A3 + A4.
B = @B1 + B2 + B3 + B4.

Luego queda:
A = @A1 + A2 + A3 + A4.
B = @B1 + B2 + B3 + B4 + A1.
Observemos que la clave primaria de la entidad A pasa a formar
parte como atributo de la entidad B.

Relación 1:N
En el caso que la relación entre dos entidades sea del tipo
1:N, agregar como atributo en la entidad que tiene el grado de N, la
clave primaria de la otra entidad.

1,1 1,N
A Tiene B

A = @A1 + A2 + A3 + A4.
B = @B1 + B2 + B3 + B4 + A1.

90
Vemos que la entidad B es la que tiene el grado N, es decir un
elemento de la entidad A está relacionado con uno o muchos de la
entidad B.

Similar solución es aplicable en el caso que la relación sea de tipo


N:1.

Relación N:1

1,N 1,1
A Tiene B

A = @A1 + A2 + A3 + A4
B = @B1 + B2 + B3 + B4

Luego queda:

A = @A1 + A2 + A3 + A4.+ B1
B = @B1 + B2 + B3 + B4.
En este caso la que tiene la cardinalidad de N es A, por eso la clave
primaria de B pasa como atributo a la tabla A.

Relación N:M
Para el caso en que la relación sea del tipo N:M(es decir una
relación de muchos a muchos), se debe crear una nueva tabla que
hará de nexo entre las otras dos, teniendo como atributos las claves
primarias de las entidades de las cuales hace de nexo.

91
1,N 1,M
A Tiene B

A = @A1 + A2 + A3 + A4.
B = @B1 + B2 + B3 + B4.

Luego obtenemos las siguientes tres tablas:

A = @A1 + A2 + A3 + A4.
B = @B1 + B2 + B3 + B4.
C = @A1 + @ B1.

Tipo de Objeto Asociativo


En el caso de la configuración para un Tipo de Objeto
Asociativo, se deberá crear una nueva tabla, compuesta por las
claves primarias de las entidades de las cuales está conectada, más
los atributos que le son propios al Tipo de Objeto Asociativo.
Siendo A y B dos objetos y C un tipo de objeto asociativo:

A = @A1 + A2 + A3 + A4.
B = @B1 + B2 + B3 + B4.
C = @A1 + @B1 + C1 + C2 + C3.

92
Supertipos y Subtipos
En el caso de super tipos y sub tipos, los super tipos, son
tratados como un objeto, en el caso de los sub tipos asociados,
deberán poseer la clave primaria del super tipo más los atributos que
le son propios.
Siendo A el Super Tipo y A1, A2 los subtipos:

Las tablas quedan así:

A = @A1 + A2 + A3 + A4.
A1 = @A1 + A11 + A12 + A13 + A14.
A2 = @A1 + A21 + A22 + A23 + A24.

Relación Ternaria
En el caso de una relación ternaria, es decir que en la relación
intervienen 3 entidades, se deberán crear 3 nuevas tablas que harán
de nexo entre las entidades.

A = @A1 + A2 + A3 + A4.
B = @B1 + B2 + B3 + B4.
C = @C1 + C2 + C3+ C4.

93
Las entidades existentes que luego se transforman en tablas con las
tres nuevas tablas quedarían como:

A = @A1 + A2 + A3 + A4.
B = @B1 + B2 + B3 + B4.
C = @C1 + C2 + C3+ C4.
A-B = @A1 + @B1.
A-C = @A1 + @C1.
B-C = @B1 + @C1.

INTEGRIDAD DE LOS DATOS CONTENIDOS EN UNA


BASE DE DATOS RELACIONAL
La metodología de diseño de bases de datos relacional,
determina la existencia de dos reglas de integridad que deben darse
en una base de datos relacional, a saber:

Regla de Integridad de Entidad o Integridad de Dominio:


Cualquier tabla de la base de datos debe tener clave primaria y en
ningún caso su valor puede ser NULL, es decir, valor indefinido, para
poder cumplirla se deben respetar que cuando se creen las tablas, el
los campos que definen la clave primaria no debe permitir valores
nulos, aprenderemos como hacerlo cuando en la próxima unidad
estudiemos la instrucción CREATE TABLE en SQL.
Otra posibilidad de realizar el control es mediante programas que se
almacenan en la base de datos (stored procedures) que se ejecutan
ante una determinada acción, por ejemplo estos stored procedures
pueden ejecutarse cada vez que se intente insertar un nuevo registro
a una tabla.

Regla de Integridad Referencial


Esta regla hace referencia a que el valor de una clave foránea
en una tabla debe coincidir con algún valor de clave primaria en la
tabla con la que está relacionado. Esto implica que el valor del
campo de un archivo está definido en otro archivo.

94
DIAGRAMA DE TABLAS.
Cuando estudiamos en la unidad anterior el Diagrama Entidad
Relación, dijimos que representaba la relación entre diferentes
objetos como son las entidades, tipos de objeto asociativo,
supertipos y subtipos, ya conocimos que significa la normalización y
como las relaciones del Diagrama Entidad Relación son
representadas físicamente en tablas, emplearemos todos estos
conocimientos para construir un Diagrama de Tablas.

El Diagrama de Tablas también conocido como Diagrama de Datos


en inglés Data Diagrammer (se pronuncia Data Diagramer),
representa a las tablas relacionadas.
Veamos los pasos a seguir:

1)_ Construir el Diagrama Entidad Relación junto con su Diccionario


de Datos asociado.
2)_ Aplicar la técnica de normalización a todos los elementos del
Diagrama Entidad Relación.

3)_ Transformamos estos nuevos objetos considerando su


representación física.
4)_ Construimos el Diagrama de Tablas.
5)_ Definimos los tipos de datos y su longitud para cada unos de los
campos que forman parte de las tablas.

Veamos un ejemplo:
Continuamos con el ejemplo visto en la unidad 3, Armado de
Televisores.

Ahora normalizamos

Operarios se encuentra en primera, segunda y tercera forma normal.

95
Televisores se encuentra en primera, segunda y tercera forma
normal.

Importador se encuentra en primera, segunda y tercera forma


normal.

Componentes se encuentra en primera, segunda y tercera forma


normal.

Mapa_de_Armado se encuentra en primera, segunda y tercera


forma normal.

Hoja_de_Confección se encuentra en primera, segunda y tercera


forma normal.
En este caso no debimos normalizar ninguna estructura, es común
que en la realidad suceda esto ya que al conocer normalización se
tiende a diseñar las entidades ya normalizadas.

Diagrama de Tablas

96
Ahora vemos la composición de las tablas.

Operarios

Nro_legajo number (20) obligatorio


Apellido char(30) obligatorio
Nombre char(30) obligatorio
Domicilio char(25)
Telefono char(15)
Tipo_doc char(3) obligatorio
Numero_doc number(8) obligatorio

Nro_legajo clave primaria

Televisores

Cod_Televisor number (5) obligatorio


Modelo char(25) obligatorio
Caracteristicas char(50)

Cod_Televisor clave primaria

Importador

Nro_importador number (15) obligatorio


Razon_social char(30) obligatorio
CUIT number (20) obligatorio
Nro_importador clave primaria

Componentes

Cod_componente numero(5) obligatorio


Descripción char(50)

97
Cod_componente clave primaria

Mapa_de_Armado

Cod_componente numero(5) obligatorio


Cod_televisor number(5) obligatorio
Cantidad number(10)
Ubicación char(50)
Cod_componente y Cod_televisor son clave primaria.

Hoja_de_Confeccion

Cod_componente number(5) obligatorio


Nro_legajo number(20) obligatorio
Fecha date obligatorio
Cantidad_Fabricada number(3)
Cod_Componente, Nro_legajo y Fecha forman la clave primaria.

Ejercicio Resuelto:
Dado el siguiente Diagrama Entidad Relación y su Diccionario de
Datos, construir el Diagrama de Tablas y su Diccionario de Datos
asociado.

98
Diccionario de Datos
Ritmo = @#Ritmo + Nombre_Ritmo + Características.
Profesor = @#Profesor + Apellido_Profesor + Nombre_Profesor.
Alumno = @#Alumno + Apellido_Alumno + Nombre_Alumno.
Examen_Rendido = @#Ritmo + @#Alumno + @Fecha +
Calificación.

Diagrama de Tablas

99
Ritmo Profesor

Examen
Rendido

Alumno

Diccionario de Datos del Diagrama de Tablas


Ritmo = @#Ritmo + Nombre_Ritmo + Características + #Profesor
(Donde #Profesor será una foreign key hacia la tabla profesor).

Profesor = @#Profesor + Apellido_Profesor + Nombre_Profesor.

Alumno = @#Alumno + Apellido_Alumno + Nombre_Alumno.

Examen_Rendido = @#Ritmo + @#Alumno + @Fecha + Calificación


+ #Profesor
(Donde #Profesor será una foreign key hacia la tabla profesor).

Ejercicio Resuelto:

100
Dado el siguiente Diagrama Entidad Relación y su Diccionario de
Datos, construir el Diagrama de Tablas y su Diccionario de Datos.
Trenes de Larga Distancia

Locomotora 1,N 1,1 Maquinista

Viaje 1,N Viaje-Rec

1,1

Recorrido

Diccionario de Datos
Locomotora = @#locomotora + Modelo + Marca + Año Fabricación +
Potencia.
Maquinista = @#Legajo + Apellido + Nombre + Tipo Documento +
#Documento + Fecha Nacimiento
Recorridos = @#Recorrido + Estación Salida + Hora Salida+
Estación Llegada + Hora Llegada + Cantidad de Estaciones.
Viaje = @#locomotora + @#Legajo + @fecha + Día Salida + Hora
Salida Efectiva + Día llegada + Hora Llegada Efectiva.

Diagrama de Tablas.

101
Locomotora Maquinista

Viaje

Recorrido

Diccionario de Datos del Diagrama de Tablas


Locomotora = @#locomotora + Modelo + Marca + Año Fabricación +
Potencia.
Maquinista = @#Legajo + Apellido + Nombre + Tipo Documento +
#Documento + Fecha Nacimiento
Recorridos = @#Recorrido + Estación Salida + Hora Salida+
Estación Llegada + Hora Llegada + Cantidad de Estaciones
Viaje = @#locomotora + @#Legajo + @fecha + Día Salida + Hora
Salida Efectiva + Día llegada + Hora Llegada Efectiva + #Recorrido
Nota: Agregamos en Viaje #Recorrido que será foreign key hacia la
tabla Recorrido.

Ejercitación.

Dado el siguiente Diagrama Entidad Relación y su Diccionario de


Datos asociado, se pide:
a)_ Crear el Diagrama de Tablas.
b)_ Crear el Diccionario de Datos del Diagrama de Tablas.
Aplicar normalización si es necesario.

102
Discos 0, N 1,1 Genero Musical

1,M
0,M

1,N

1,N

Compañía
Banda o Solista Grabación
Grabadora

Nota: En Grabación encontramos la fecha en que el disco sale por


primera vez a la venta y la cantidad de discos que se incluyen,
observen que la flecha indica un TOA.

Discos = Numero_Disco + Nombre_Disco


Banda o Solista = Numero_Musico + Nombre_Banda_Solista +
Cantidad_Integrantes.
Genero_Musical = Codigo_Genero + Descripción_Genero.
Compañía_Grabadora = Numero_Compañia + Razon_Social +
Direccion + Localidad + Codigo_Postal + CUIT.
Grabacion = Numero_Disco + Numero_Compañia + Fecha +
Cantidad_Discos.

Ejercitación.
Considerando el enunciado que se encuentra mas arriba sobre
Empresa Constructora de Edificios del cual contamos con el

103
Diagrama Entidad Relación y su Diccionario de Datos asociado se
pide.
a) Aplicar la técnica de Normalización.
b) Construir el Diagrama de Tablas.
c) Construir el Diccionario de Datos del Diagrama de Tablas.

UNIDAD 4: SQL – LENGUAJE ESTRUCTURADO DE


CONSULTA

Objetivo de la unidad 4:

104
Al término de la unidad el alumno podrá construir una base de
datos relacional, modificar su estructura y realizar consultas,
ingresos y modificación de la información que se encuentra
almacenada aplicando el lenguaje SQL.

Desarrollaremos este tema en el foro.

Introducción.
El SQL (Lenguaje Estructurado de Consulta), (que se
pronuncia deletreando en inglés las letras que lo componen, es decir
"ese-cu-ele") comienza a desarrollarse en 1974 en los laboratorios
de investigación de IBM, con la creación de un lenguaje para la
especificación de las características de las bases de datos que
utilizaban el modelo relacional, con la definición, por parte de Donald
Chamberlin y de su equipo.
Este lenguaje se llamaba SEQUEL (Structured English Query
Language) y se implementó en un prototipo llamado SEQUEL-XRM
entre 1974 y 1975. Las experimentaciones con ese prototipo 1
El American
condujeron, entre 1976 y 1977, a una revisión del lenguaje National Standards
Institute (ANSI) es
(SEQUEL/2), que a partir de ese momento cambió de nombre por una organización
motivos legales, convirtiéndose en SQL. El prototipo (System R), privada, no lucrativa,
que administra y
basado en este lenguaje, se adoptó y utilizó internamente en IBM y coordina la
lo adoptaron algunos de sus clientes elegidos. Gracias al éxito de estandarización
voluntaria y el
este sistema, que no estaba todavía comercializado, también otras sistema de
compañías empezaron a desarrollar sus productos relacionales conformidad a los
estándares, en los
basados en SQL. A partir de 1981, IBM comenzó a entregar sus EEUU.
productos relacionales y en 1983 empezó a vender DB2. En el curso
de los años ochenta, numerosas compañías (por ejemplo Oracle y
Sybase entre otros) comercializaron productos basados en SQL, que
se convierte en el estándar industrial de hecho por lo que respecta a
las bases de datos relacionales.
En 1986, el ANSI1 adoptó SQL como estándar para los lenguajes
relacionales y en 1987 se transformó en estándar ISO (International
Organization for standardization).

105
Esta versión del estándar va con el nombre de SQL/86. En los años
siguientes, éste ha sufrido diversas revisiones que han conducido
primero a la versión SQL/89 y, posteriormente, a la actual SQL/92.
El hecho de tener un estándar definido por un lenguaje para bases
de datos relacionales abre potencialmente el camino a la
intercomunicabilidad entre todos los productos que se basan en él.
Desde el punto de vista práctico, por desgracia las cosas fueron de
otro modo. Efectivamente, en general cada productor adopta e
implementa en la propia base de datos sólo el corazón del lenguaje
SQL.
Actualmente, está en marcha un proceso de revisión del lenguaje
por parte de los comités ANSI e ISO, que debería terminar en la
definición de lo que en este momento se conoce como SQL3. Las
características principales de esta nueva encarnación de SQL
deberían ser su transformación en un lenguaje stand-alone (mientras
ahora se usa como lenguaje hospedado en otros lenguajes) y la
introducción de nuevos tipos de datos más complejos que permitan,
por ejemplo, el tratamiento de datos multimediales.
El SQL es un lenguaje simple, estructurado y muy poderoso que nos
permite definir, consultar y modificar los datos de una base de datos
relacional.
Sus operaciones las realiza sobre las llamadas tablas en donde
existen filas y columnas en base a las que se almacenan los datos.
Antes de comenzar con el estudio del lenguaje definiremos las
siguientes tablas con las cuales vamos a trabajar, tablas que
podríamos encontrar en el sistema del instituto, estas cinco tablas
son solo una parte de las que encontramos en la realidad.

Alumnos
Nro_ Apellido Nombre Tipo_Doc Nro_Doc Sexo Pais_Nacimiento
Alumno
1 Garcia Jose Ramon DNI 10.455.656 M AR

106
2 Martinez Analia DNI 16.776.543 F AR
3 Arias Adrian Marcelo DNI 23.878.652 M PE
4 Perez Maria Evangelina DNI 20.881.330 F AR
5 Sosa Aldo DNI 10.878.767 M BO

Materias
Cod_Materia Denominación Carga_horaria Año_Carrera
A1 Programacion I 8 1
A2 Algebra 4 1
A3 Estructura de un 4 1
Computador
A4 Ingles Tecnico 2 1
A5 Teoría de Sistemas 2 1
A6 Análisis Matemático 2 2
A7 Bases de Datos 2 2
A8 Etica Profesional 2 2
A9 Probabilidad y 4 2
Estadística
A10 Programación II 8 2
A11 Redes 4 2
A12 Administración de 6 3
Proyectos
A13 Análisis y Diseño de 6 3
Sistemas
A14 Estructura e 4 3
Información de las
Organizaciones
A15 Investigación 4 3
Operativa
A16 Desarrollo e 8 3
Integración
Profesional

Materias Correlativas
Cod_Materia Cod_Materia_Correlativa
A6 A2
A7 A1
A7 A3

107
A8 A5
A9 A6
A10 A1
A11 A3
A12 A7
A12 A10
A12 A14
A13 A7
A13 A10
A13 A14
A14 A2
A15 A9
A16 A12
A16 A13
A16 A15

Finales Rendidos
Cod_Materia Nro_Alumno Fecha_Final Nota
A1 1 10/03/2000 6
A2 3 03/03/2000 2
A1 4 12/12/2000 7
A3 1 13/12/2000 9
A3 2 20/12/2003 4
A4 1 10/03/2005 5
A5 4 02/03/2009 8

Países
Pais_Nacimiento Nombre_Pais
AR Argentina
PE Perú
BO Bolivia
UR Uruguay

Veamos el Modelo de Datos de las cinco tablas anteriores.

108
Las instrucciones en SQL se dividen basicamente en dos categorías:

Las instrucciones DML (Data Manipulation Languaje) se utilizan para


manipular datos, consultando, modificando, insertando o eliminándolos
en las tablas y.
Las instrucciones DDL (Data Definition Languaje) se utilizan para crear,
modificar o eliminar las definiciones de las tablas o de otros objetos.

LENGUAJE DE DEFINICIÓN DE DATOS (DDL)

CREATE TABLE

109
Esta instrucción nos permite crear tablas, pudiendo
determinar los campos que la forman, los tipos de datos, si los
campos admitirán valores nulos o no entre los valores que
almacenarán y la definición de la clave primaria, claves únicas y
foráneas.
Veamos como se usa la instrucción con la definición de las
anteriores tablas.

CREATE TABLE paises


(pais_nacimiento CHAR(2) NOT NULL,
Nombre_pais CHAR(30) NOT NULL
PRIMARY KEY (pais_nacimiento))

CREATE TABLE alumnos


(nro_alumno NUMBER(5) NOT NULL,
apellido CHAR(30) NOT NULL,
nombre CHAR(35) NOT NULL,
tipo_doc CHAR(3) NOT NULL,
nro_doc NUMBER(8) NOT NULL,
sexo CHAR(1),
pais_nacimiento CHAR(2) NOT NULL
UNIQUE (tipo_doc, nro_doc),
PRIMARY KEY (nro_alumno)
FOREIGN KEY (pais_nacimiento) REFERENCES
paises (pais_nacimiento))

Con las instrucciones anteriores creamos las tablas paises y


alumnos, con todos sus campos y su respectivo tipo de datos, donde
todos los campos a excepción de sexo en alumnos no pueden tomar
valores nulos, con una clave única compuesta por la concatenación
de los campos tipo_doc y nro_doc y su clave primaria compuesta por
el campo nro_alumno y una clave foránea con el campo

110
pais_nacimiento que apunta al campo pais_nacimiento de la tabla
paises.
Ahora vamos a crear las otras tablas:

CREATE TABLE materias


(cod_materia CHAR(3) NOT NULL,
denominacion CHAR(40) NOT NULL,
carga_horaria NUMBER(2),
anio_carrera NUMBER(1)
PRIMARY KEY (cod_materia))

En la creación de la tabla anterior vemos que los campos


cod_materia y denominación no pueden tomar valores nulos, con la
clave primaria compuesta por el campo cod_materia.

CREATE TABLE finales_rendidos


(cod_materia CHAR(3) NOT NULL,
nro_alumno NUMBER(5) NOT NULL,
fecha_final DATE NOT NULL,
nota NUMBER(2) NOT NULL,
PRIMARY KEY (cod_materia, nro_alumno, fecha_final),
FOREIGN KEY (cod_materia) REFERENCES
materias(cod_materia),
FOREIGN KEY (nro_alumno) REFERENCES alumnos(nro_alumno))

Para la tabla finales_rendidos tenemos que todos sus campos


exigen valores no nulos, con su clave primaria compuesta por la
concatenación de los campos cod_materia, nro_alumno y
fecha_final, observamos dos claves foráneas la primera relaciona el
campo cod_materia de la misma tabla (finales_rendidos) con el
campo cod_materia de la tabla materias, la segunda clave foránea
relaciona el nro_alumno de la tabla finales rendidos con el campo
nro_alumno de la tabla alumnos.

111
Como podemos observar esta cuarta tabla creada se encuentra
relacionada con tablas creadas anteriormente.
Ahora creamos la última tabla.

CREATE TABLE materias_correlativas


(cod_materia CHAR(3) NOT NULL,
cod_materia_correlativa CHAR(3) NOT NULL
PRIMARY KEY (cod_materia, cod_materia_correlativa),
FOREIGN KEY (cod_materia) REFERENCES
materias(cod_materia),
FOREIGN KEY (cod_materia_correlativa) REFERENCES materias
(cod_materia))

Más adelante aprenderemos como se crea una tabla con registros


de otra tabla utilizando la instrucción SELECT.

DROP TABLE.
Esta instrucción sirve para eliminar una tabla, borra los datos
de la tabla y la estructura de la tabla. Se describe de la siguiente
manera.

DROP TABLE paises;


Quedó eliminada la tabla paises.
Veamos como eliminamos el resto de las tablas.

DROP TABLE alumnos;


DROP TABLE materias;
DROP TABLE finales_rendidos;
DROP TABLE materias_correlativas;

Las instrucciones anteriores eliminan las tres tablas anteriormente


creadas.

112
ALTER TABLE.
Con esta instrucción podemos modificar la estructura de la
tabla, por ejemplo podemos agregar un nuevo campo a una tabla ya
creada, agreguemos el campo fecha_nacimiento de tipo DATE a la
tabla alumnos.

ALTER TABLE alumnos


ADD fecha_nacimiento DATE;

Es decir con la cláusula ADD agregamos campos a una tabla, si


quisiéremos agregar más de una campo a la vez los hacemos de la
siguiente manera, donde observamos que los nuevos campos a
agregar están separados por una coma y encerrados entre
paréntesis.

ALTER TABLE alumnos


ADD (fecha_nacimiento DATE,
email CHAR(30));

Después de esta instrucción la estructura de la tabla alumnos es la


siguiente:

Nombre ¿Nulo? Tipo


------------------------------- -------- -----------
nro_alumno NOT NULL NUMBER(5)
apellido NOT NULL CHAR(30)
nombre NOT NULL CHAR(35)
tipo_doc NOT NULL CHAR(3)
nro_doc NOT NULL NUMBER(8)
sexo CHAR(1)
fecha_nacimiento DATE
email CHAR(30)

113
La instrucción ALTER TABLE también sirve para modificar
uno o más campos de la tabla. Por ejemplo si queremos que el
campo email pase de ser un char(30) a un char(35), lo hacemos de
la siguiente manera.

ALTER TABLE alumnos


MODIFY email CHAR(35);

Ahora queremos cambiar el campo email a NOT NULL.

ALTER TABLE alumnos


MODIFY email NOT NULL;

Si queremos cambiar un campo que se encuentra en NULL o sea


que es permitido que ese campo pueda tener un valor nulo y pasarlo
a NOT NULL, esto será posible siempre y cuando todas las filas de
la tabla tengan en ese campo un valor distinto de nulo.
Ejemplo en nuestra tabla de alumnos el campo fecha_nacimiento
tiene permitido que su valor sea un nulo, si quiero modificar esta
condición y obligar a que la tabla no acepte valores nulos en el
campo fecha_nacimiento, previo a la modificación todos los alumnos
deberán tener una fecha válida en ese campo.

Sólo podemos agregar a una tabla un campo NOT NULL si la tabla


no posea filas.

El alumno se preguntará como se utiliza esta instrucción para poder


eliminar un campo de la tabla? Sencillamente no se puede hacer con
esta instrucción, la solución es eliminar la tabla con la instrucción
DROP TABLE y volver a crearla con la nueva estructura, y si la tabla
tiene datos habrá que previamente salvar los datos para después
volver a insertarlos en la tabla. Esta característica produce que en la

114
realidad que queden campos que no se utilizan debido a los cambios
que se producen en las tablas, pero si bien esto es cierto en el SQL
Standard que vemos acá, algunos SQL están permitiendo que se
pueda eliminar un campo con algún adicional.

LENGUAJE DE MANIPULACION DE DATOS (DML)


Este tipo de lenguaje permite a los usuarios de la base de
datos realizar consultas o manipulación de datos.

INSERT.
La instrucción INSERT permite insertar filas a una tabla,
comencemos con la tabla paises.

INSERT INTO paises


(pais_nacimiento, nombre_pais)
VALUES
(“AR”, “Argentina”);

INSERT INTO paises


(pais_nacimiento, nombre_pais)
VALUES
(“PE”, “Peru”) ;

INSERT INTO paises


(pais_nacimiento, nombre_pais)
VALUES
(“BO”, “Bolivia”);

INSERT INTO paises


(pais_nacimiento, nombre_pais)
VALUES
(“UR”, “Uruguay”);

115
Con las cuatro instrucciones INSERT anteriores ingresamos a la
tabla paises, cuatro filas que representan los datos de la tabla paises
que vimos mas arriba.
Trabajemos ahora sobre la tabla alumnos ejecutando las
instrucciones INSERT.

INSERT INTO alumnos


(nro_alumno, apellido, nombre, tipo_doc, nro_doc, sexo,
pais_nacimiento)
VALUES
(1, “Garcia”, “Jose Ramon”, “DNI”, 10455656, “M”, “AR”);

INSERT INTO alumnos


(nro_alumno, apellido, nombre, tipo_doc, nro_doc, sexo,
pais_nacimiento)
VALUES
(2, “Martinez”, “Analia”, “DNI”, 16776543, “F”, “AR”);

INSERT INTO alumnos


(nro_alumno, apellido, nombre, tipo_doc, nro_doc, sexo,
pais_nacimiento)
VALUES
(3, “Arias”, “Adrian Marcelo”, “DNI”, 23878652, “M”, “PE”);

INSERT INTO alumnos


(nro_alumno, apellido, nombre, tipo_doc, nro_doc, sexo,
pais_nacimiento)
VALUES
(4, “Perez”, “Maria Evangelina”, “DNI”, 20881330, “F”, “AR”);

INSERT INTO alumnos

116
(nro_alumno, apellido, nombre, tipo_doc, nro_doc, sexo,
pais_nacimiento)
VALUES
(5, “Sosa”, “Aldo”, “DNI”, 10878767, “M”, “BO”);

Con las cinco instrucciones INSERT anteriores agregamos cinco


filas a la tabla alumnos, observamos que en el campo
pais_nacimiento de la tabla alumnos debe figurar algún valor del
campo pais_nacimiento de la tabla paises.
Veamos esta instrucción aplicada a las otras dos tablas.

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A1”, “Programacion I”, 8, 1);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A2”, “Algebra”, 4, 1);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A3”, “Estructura de un Computador”, 4, 1);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A4”, “Ingles Tecnico”, 2, 1);

INSERT INTO materias

117
(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A5”, “Teoria de Sistemas”, 2, 1);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A6”, “Analisis Matematico”, 2, 2);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A7”, “Bases de Datos”, 8, 2);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A8”, “Etica Profesional”, 2, 2);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A9”, “Probabilidad y Estadistica”, 4, 2);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A10”, “Programación II”, 8, 2);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A11”, “Redes”, 4, 2);

118
INSERT INTO materias
(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A12”, “Administración de Proyectos”, 6, 3);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A13”, “Analisis y Diseño de Sistemas”, 6, 3);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A14”, “Estructura e información de las Organizaciones”, 4, 3);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A15”, “investigación Operativa”, 4, 3);

INSERT INTO materias


(cod_materia, denominacion, carga_horaria, anio_carrera)
VALUES
(“A16”, “Desarrollo e Integración Profesional”, 8, 3);

Completemos ahora la tabla finales_rendidos.

INSERT INTO finales_rendidos


(cod_materia, nro_alumno, fecha_final, nota)

VALUES
(“A1”, 1, “10/03/2000”, 6)

119
INSERT INTO finales_rendidos
(cod_materia, nro_alumno, fecha_final, nota)
VALUES
(“A2”, 3, “03/03/2000”, 2);

INSERT INTO finales_rendidos


(cod_materia, nro_alumno, fecha_final, nota)
VALUES
(“A1”, 4, “12/12/2000”, 7);

INSERT INTO finales_rendidos


(cod_materia, nro_alumno, fecha_final, nota)
VALUES
(“A3”, 1, “13/12/2000”, 9);

INSERT INTO finales_rendidos


(cod_materia, nro_alumno, fecha_final, nota)
VALUES
(“A3”, 2, “20/12/2003”, 4);

INSERT INTO finales_rendidos


(cod_materia, nro_alumno, fecha_final, nota)
VALUES
(“A4”, 1, “10/03/2005”, 5);

INSERT INTO finales_rendidos


(cod_materia, nro_alumno, fecha_final, nota)
VALUES
(“A5”, 4, “02/03/2009”, 8);

Por último trabajemos con la tabla materias_correlativas.

120
INSERT INTO materias_correlativas
(cod_materia, cod_materia_correlativa)
VALUES
(“A6”, “A2”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A7”, “A1”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A7”, “A3”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A8”, “A5”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A9”, “A6”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A10”, “A1”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)

121
VALUES
(“A11”, “A3”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A12”, “A7”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A12”, “A10”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A12”, “A14”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A13”, “A7”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A13”, “A10”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A13”, “A14”);

122
INSERT INTO materias_correlativas
(cod_materia, cod_materia_correlativa)
VALUES
(“A14”, “A2”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A15”, “A9”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A16”, “A12”),

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A16”, “A13”);

INSERT INTO materias_correlativas


(cod_materia, cod_materia_correlativa)
VALUES
(“A16”, “A15”);

DELETE.

Esta instrucción utiliza para borrar filas de una tabla dada una
condición.
Supongamos que queremos borrar todas las filas de la tabla
alumnos, la sintaxis es la siguiente.
DELETE FROM alumnos;

123
En este caso no hay ninguna condición en la instrucción se eliminan
todas las filas de la tabla alumnos.
Ahora veamos como podemos borrar las filas de una tabla con
alguna condición.
Supongamos que quiero borrar aquellas filas de la tabla alumnos
cuyo sexo sea masculino o sea que tengan el valor “M” en el campo
sexo.

DELETE FROM alumnos


WHERE sexo = “M”;

Luego de ejecutada la anterior instrucción, eliminamos tres filas de la


tabla que son los alumnos número 1, 3 y 5.
Veamos otros ejemplos:
Queremos borrar de la tabla paises el país Uruguay.

DELETE FROM paises


WHERE pais_nacimiento = “UR”

Otra forma de borrar la misma fila podría ser:


DELETE FROM paises
WHERE nombre_pais = “Uruguay”;

Es decir necesitamos identificar una fila en particular, entonces lo


hacemos mediante el campo pais_nacimiento o el campo
nombre_pais.

Otros ejemplos pueden ser:

DELETE FROM materias


WHERE denominacion = “Algebra”

124
En este caso se borra la fila cuyo campo denominación tiene el valor
Algebra, en este caso borramos una sola fila de la tabla materias.

Hasta ahora siempre utilizamos en la condición de WHERE el


símbolo = veamos otras opciones.

DELETE alumnos
WHERE nro_alumno > 3;
En este caso utilizando el símbolo matemático de mayor >,
eliminamos todos los alumnos sean o 4 o superior, entonces para
nuestro ejemplo eliminamos a los alumnos con el nro_alumno 4 y 5.

DELETE alumnos
WHERE apellido < “B”;
Con esta instrucción estamos borrando a todos los alumnos cuyo
apellido empiece con la letra “A”, en nuestro ejemplo eliminamos al
alumno Arias Adrián Marcelo.

DELETE alumnos
WHERE apellido > “Perez”;
En nuestro caso eliminamos aquellos alumnos que en orden
alfabético aparezcan después de Perez, es decir a Sosa Aldo.

Veamos ahora la combinación de dos símbolos.

DELETE paises
WHERE nombre_pais >= “Perú”;
Estamos eliminando a Perú y a Uruguay.

DELETE alumnos
WHERE nro_doc <= 20000000;

125
Estamos eliminando a aquellos alumnos cuyo número de documento
sea menor o igual a 20 millones, en nuestro caso eliminamos a
García José Ramón, Martinez Analía y Sosa Aldo.

Veamos la combinación de los símbolos mayor y menor, que


podemos traducirlo como distinto.
Eliminemos de la tabla finales_rendidos a aquellas filas que no
tengan en su nota un 2.

DELETE finales_rendidos
WHERE nota >< 2;
En nuestro caso todas las filas a excepción de una serán eliminadas.

Incorporamos ahora un concepto que aprendieron cuando


estudiaron Pascal en Programación I, y son las palabras AND y OR.
Donde AND lo traducimos como Y, y OR como o.
Eliminemos todos los alumnos de la tabla alumnos cuyo nro_alumno
sea mayor que 2 y que el nro_alumno sea menor o igual a 4.

DELETE alumnos
WHERE nro_alumno > 2 AND nro_alumno <= 4;

Veamos un ejemplo combinando dos campos diferentes.

DELETE finales_rendidos
WHERE nro_alumno > 3 AND nota >= 8;
Observemos que se deben cumplir las dos condiciones es decir que
el nro_alumno sea mayor que 3 y que la nota se 8 o mayor.
En nuestro caso eliminamos la fila del cod_materia “A5”, nro_alumno
4, fecha final “02/03/09” y nota 8.

Empleamos ahora la palabra OR.

126
Necesitamos eliminar de la tabla finales_rendidos aquellas filas que
tengan en el campo nota un número menor o igual a 3 o una nota
mayor o igual a 9.

DELETE finales_rendidos
WHERE nota <= 3 OR nota >= 9;
Estamos eliminando aquellas filas de los alumnos que tengan como
nota de final un 3 o menos y los que tienen como nota un 9 o 10.

También podemos combinar el AND y el OR tantas veces como


necesitemos, observemos el uso de los paréntesis.

DELETE finales_rendidos
WHERE (nro_alumno >=3 AND nro_alumno <= 4) OR nota = 5;

Por último analicemos la siguiente instrucción.

DELETE finales_rendidos
WHERE cod_materia = “A99”;
En este caso no eliminamos ninguna fila ya que no existe ningún
cod_materia con valor “A99”.

La cláusula WHERE admite muchas otras restricciones, las


analizaremos más con detalle cuando estudiemos la instrucción
SELECT.

Actividad

1)_ Considere las siguientes tablas: Jugadores de fútbol, Equipos


de fútbol, diseñar la estructura de las tablas, crearlas mediante la
instrucción Create Table y luego insertar 5 registros en cada una.
Para aquellos que no conozcan de fútbol, no tienen porque ser

127
valores de jugadores reales, no se olviden de incluir las claves
primarias y la clave foránea.

2)_ Luego escribir la instrucción Delete necesaria, para eliminar de la


tabla aquellos equipos de fútbol cuyo nombre comience con las
letras X o W.
Nota: entre los datos de las tablas de Equipos no tiene porque haber
Equipos que comiencen con esas letras.

UPDATE.
Esta instrucción se utiliza para modificar filas en una tabla,
Es decir modificamos los valores de los campos que se encuentran
almacenados.
Veamos algunos ejemplos. Si queremos modificar el apellido de un
alumno con nro_documento 104556565, por Garcia Veron.

UPDATE alumnos
SET apellido = “Garcia Veron”
WHERE nro_doc = 10455656;
Observamos que luego de la palabra SET, figuran primero en campo
que se desea modificar, el símbolo = y después el nuevo valor.

Para el alumno del ejemplo anterior modificamos el tipo de


documento por LE y número de documento por 48769098, en este
caso vemos que después de la palabra SET aparecen los dos
campos a modificar separados por comas.

UPDATE alumnos
SET tipo_doc = “LE”,
nro_doc = 48769098
WHERE tipo_doc = “DNI”
AND nro_doc = 104556565;

128
Si no incluimos la cláusula WHERE no estaríamos restringiendo por
ninguna condición y modificaríamos los dos campos de todos los
alumnos.
Este sería el caso.
UPDATE alumnos
SET tipo_doc = “LE”,
nro_doc = 48769098;

Ahora todos los alumnos tendrán tipo de documento LE y


nro_documento 48769098.

Ahora modificamos la carga_horaria de todas las materias al valor 6


para aquellas que tengan como carga_horaria un 4 y que
pertenezcan al primer año de la carrera.
En este caso se modifican dos materias: Algebra y Estructura de un
Computador.

UPDATE materias
SET carga_horaria = 6
WHERE carga_horaria = 4 AND año_carrera = 1;

Modifiquemos la carga_horaria de todas las materias de tercer año,


incrementando su valor actual en una hora mas, así por ejemplo si
Investigación Operativa tiene el valor de 4, pasa al valor 5.

UPDATE materias
SET carga_horaria = carga_horaria + 1
WHERE año_carrera = 3;

Veamos ahora esta instrucción UPDATE.

UPDATE alumnos
SET tipo_doc = “CI”

129
WHERE tipo_doc = “XY”;
En este caso no se realiza ninguna modificación ya que no existe
ningún alumno que tenga en el campo tipo_doc el valor “XY”

Actividad

1)_ Crear mediante la instrucción Create Table la tabla Películas con


los siguientes campos Cod_Pelicula, Nombre, Genero,
Actor_Principal, Año, Cantidad_Disponible.

2)_ Insertar 5 registros.

3)_ Aplicando la instrucción UPDATE realizar las siguientes


modificaciones:
a)_ Para todas las películas aumentar en 1 la cantidad de películas
disponibles.
b)_ Modificar el Genero de aquellas películas cuyo género sea
“Comedia” a “Comedia y Cómica”
c)_ Asignarle el número 5 en Cantidad Disponible a todas las
películas cuyo año sea igual a 2009.

4)_ Considerando que el Cod_Pelicula es de tipo numérico entero


evaluar que efecto tiene la siguiente instrucción:

UPDATE Películas
SET genero = “Drama”
WHERE genero = “Documental”
AND (Cod_Pelicula < 10 AND Cod_Pelicula > 12)

CONTROL DE TRANSACCIONES
Cuando utilizamos las instrucciones INSERT, UPDATE y
DELETE estas modificaciones en los datos sólo pueden ser vistas
por el usuario que las realizó. Esto sucede porque estas

130
instrucciones no modifican los datos de la base, para que las
modificaciones se hagan efectivas existen instrucciones para
confirmar o desechar la modificación. Son los llamados instrucciones
para el control de transacciones:
COMMIT: esta instrucción realiza efectivamente las modificaciones
en la base de datos. Desecha todos los SAVEPOINT activos.
Supongamos que sobre una misma base de datos trabajan dos
personas las llamamos el usuario 1 y el usuario 2.
El usuario 1 realiza la siguiente operación

INSERT INTO alumnos


(nro_alumno, apellido, nombre, tipo_doc, nro_doc, sexo,
pais_nacimiento)
VALUES
(6, “Benitez”, “Marcelo Ramon“, “DNI”, 25.124.325, “M”, “AR”);

Este nuevo alumno no es visto por el usuario 2, sólo el usuario 1


puede verlo, entonces para que todos los usuarios de la base de
datos puedan ver a este nuevo alumno, se debe ejecutar la
instrucción COMMIT.

ROLLBACK: esta instrucción deshace todas las modificaciones que


se realizaron sobre la base de datos desde la ejecución del último
COMMIT.
Seguimos con el ejemplo anterior si el usuario 1 ejecutó la
instrucción de INSERT y sin haber ejecutado COMMIT se ejecuta la
instrucción ROLLBACK, se pierden todos los cambios ya no lo
puede ver ningún usuario.

SAVEPOINT (nombre del savepoint): es usada para volver atrás


alguna modificación hasta el SAVEPOINT utilizando ROLLBACK;

131
ROLLBACK (TO (nombre del SAVEPOINT)); vuelve las
modificaciones realizadas sobre la base de datos después del último
COMMIT o hasta el SAVEPOINT que sea especificado.

Para estas últimas dos instrucciones veamos un ejemplo:


Ejecutemos lo siguiente

INSERT INTO alumnos


(nro_alumno, apellido, nombre, tipo_doc, nro_doc, sexo,
pais_nacimiento)
VALUES
(7, “Rojas”, “Mariano“, “DNI”, 15.314.211, “M”, “AR”);

SAVEPOINT puntoa;

INSERT INTO alumnos


(nro_alumno, apellido, nombre, tipo_doc, nro_doc, sexo,
pais_nacimiento)
VALUES
(8, “Ruiz”, “Rosa“, “DNI”, 30.231.436, “F”, “AR”);

Me doy cuenta que la última instrucción insert, tiene un alumno


equivocado, y deseo eliminarlo, pero sólo este, y Roja Mariano esta
correcto y lo deseo conservar.
Luego ejecuto

ROLLBACK TO puntoa
Elimine el insert de la alumna Ruiz Rosa.

Algunas aclaraciones:
 El nombre del savepoint puede ser cualquiera nombre,
como si fuera el nombre de una variable en Pascal.
 Puedo trabajar con más de un savepoint.

132
 En el ejemplo anterior si después del segundo insert
ejecuto la instrucción COMMIT, y luego ejecuto
ROLLBACK TO puntoa, esta no tiene ningún efecto, ya
que los cambios se hicieron efectivos en la base de datos.

SELECT
La instrucción SELECT nos permite realizar consultas simples
y muy complejas, de esta manera podemos obtener información de
una Base de Datos
Esta instrucción presenta muchas características que estudiaremos
paso a paso.
Vemos la sintaxis de esta instrucción en su forma más simple,
supongamos que queremos obtener los nombres y apellido de todos
los alumnos

SELECT nombre, apellido


FROM alumnos;

En este caso vemos que después de la palabra reservada SELECT


encontramos los nombres de los campos que queremos consultar y
en el orden en el que queremos que aparezcan, después de la
palabra FROM el nombre de la tabla en este caso alumnos.
El resultado de esta consulta es la siguiente:

Nombre Apellido
Jose Ramon Garcia
Analia Martinez
Adrian Marcelo Arias
Maria Evangelina Perez
Aldo Sosa

Ahora vamos a obtener todos los campos de la tabla alumnos:

133
SELECT nro_alumno,
apellido,
nombre,
tipo_doc,
nro_doc,
sexo,
pais_nacimiento
FROM alumnos;

La instrucción anterior obtiene el siguiente resultado:

Nro_ Apellido Nombre Tipo_Doc Nro_Doc Sexo Pais_Nacimiento


Alumno
1 Garcia Jose Ramon DNI 10.455.656 M AR
2 Martinez Analia DNI 16.776.543 F AR
3 Arias Adrian Marcelo DNI 23.878.652 M PE
4 Perez Maria Evangelina DNI 20.881.330 F AR
5 Sosa Aldo DNI 10.878.767 M BO

Obtenemos el mismo resultado si reemplazamos la lista de todos los


campos por un asterisco *.

SELECT *
FROM alumnos;

Esto se traduce como * es igual a todos los campos

Incorporamos a la instrucción Select la cláusula Where que vimos


anteriormente en las instrucciones Delete y Update.
Ahora vamos a obtener el Nro de alumno, apellido y nombre de
todos aquellos alumnos que sean masculinos es decir que en el
campo sexo tengan la letra “M”.

134
SELECT nro_alumno,
apellido,
nombre
FROM alumnos
WHERE sexo = ‘M’;

El resultado es el siguiente:

Nro_Alumno Apellido Nombre


1 Garcia Jose Ramon
3 Arias Adrian Marcelo
5 Sosa Aldo

Obtener el nro_alumno, nombre y apellido de aquellos alumnos que


sean de sexo femenino y pais_nacimiento Argentina.

SELECT nro_alumno,
apellido,
nombre
FROM alumnos
WHERE sexo = 'F'
AND pais_nacimieto = “AR”

El resultado es el siguiente:

Nro_ Apellido Nombre Tipo_Doc Nro_Doc Sexo Pais_Nacimiento


Alumno
2 Martinez Analia DNI 16.776.543 F AR
4 Perez Maria Evangelina DNI 20.881.330 F AR

Analizando las últimas instrucciones vemos que la cláusula WHERE


sirve para poder filtrar la consulta en base a algún criterio, este

135
criterio puede tener incluida la cláusula AND, el uso de paréntesis o
la cláusula OR y de esta manera poder realizar filtros complejos,
veamos un ejemplo:
Obtener el numero de alumno, el apellido y el nombre de todos
aquellos alumnos que sean masculinos y pais_nacimiento sea
Bolivia o de aquellos alumnos cuyo sexo sea femenino.

SELECT nro_alumno,
nombre,
apellido
FROM alumnos
WHERE (sexo = “M”
AND pais_nacimiento = “BO”)
OR sexo = “F”;

El resultado de la consulta es la siguiente:

Nro_ Apellido Nombre Tipo_Doc Nro_Doc Sexo Pais_Nacimiento


Alumno
2 Martinez Analia DNI 16.776.543 F AR
4 Perez Maria Evangelina DNI 20.881.330 F AR
5 Sosa Aldo DNI 10.878.767 M BO

Obtener todos los datos de aquellas materias de primer año que


tengan una carga horaria de 4 o más horas o aquellas materias de
tercer año que tengan una carga horaria de 6 o más horas.

SELECT cod_materia,
denominacion,
carga_horaria,
año_carrera
FROM materias
WHERE (año_carrera = 1
AND carga_horaria >= 4)

136
OR (año_carrera = 3
AND carga_horaria >= 6);
El resultado es el siguiente:

Cod_Materia Denominación Carga_horaria Año_Carrera


A1 Programacion I 8 1
A2 Algebra 4 1
A3 Estructura de un 4 1
Computador
A12 Administración de 6 3
Proyectos
A13 Análisis y Diseño de 6 3
Sistemas
A16 Desarrollo e Integración 8 3
Profesional

Obtener todos los datos de aquellos alumnos que tengan tipo de


documento DNI y nro de documento mayor a 20.000.000.

SELECT nro_alumno,
nombre,
apellido,
tipo_doc,
nro_doc,
sexo,
pais_nacimiento
FROM alumnos
WHERE nro_doc > 20000000
AND tipo_doc = “DNI”;

El resultado es el siguiente:

137
Nro_ Apellido Nombre Tipo_Doc Nro_Doc Sexo Pais_Nacimiento
Alumno
3 Arias Adrian Marcelo DNI 23.878.652 M PE
4 Perez Maria Evangelina DNI 20.881.330 F AR

Obtener todos los datos de aquellos finales donde la nota fue 4 o mas
y el cod_materia no sea “A16”

SELECT cod_materia,
nro_alumno,
fecha_final,
nota
FROM finales_rendidos
WHERE nota >= 4
AND cod_materia <> “A16”;

El resultado es el siguiente:
Cod_Materia Nro_Alumno Fecha_Final Nota
A1 1 10/03/2000 6
A1 4 12/12/2000 7
A3 1 13/12/2000 9
A3 2 20/12/2003 4
A4 1 10/03/2005 5
A5 4 02/03/2009 8

Ahora vamos a estudiar la cláusula ORDER BY, esta cláusula sirve


para que el resultado de la consulta quede ordenada en base a
algún criterio. Veamos un ejemplo, si queremos obtener la lista de
todos los alumnos ordenados en forma ascendente por apellido.
SELECT nro_alumno,
apellido,
nombre
FROM alumnos
ORDER BY apellido;

138
El resultado es el siguiente:

Nro_ Apellido Nombre Tipo_Doc Nro_Doc Sexo Pais_Nacimiento


Alumno
3 Arias Adrian Marcelo DNI 23.878.652 M PE
1 Garcia Jose Ramon DNI 10.455.656 M AR
2 Martinez Analia DNI 16.776.543 F AR
4 Perez Maria Evangelina DNI 20.881.330 F AR
5 Sosa Aldo DNI 10.878.767 M BO

Si quisiésemos que el resultado este ordenado por apellido y para


aquellos casos en los que dos o más alumnos posean el mismo
apellido y poder ordenar como segundo criterio por nombre:

SELECT nro_alumno,
apellido,
nombre
FROM alumnos
ORDER BY apellido,
Nombre;
Es decir primero se ordena por apellido, en el caso que coincida se
ordena por nombre.

Veamos un ejemplo pero con la tabla finales_rendidos, necesitamos


obtener todos los registros de la tabla ordenado primero por el
nro_alumno y luego por la nota.

SELECT cod_materia,
nro_alumno,
fecha_final,
nota
FROM finales_rendidos

139
ORDER BY nro_alumno, nota;

Veamos el resultado.

Cod_Materia Nro_Alumno Fecha_Final Nota


A4 1 10/03/2005 5
A1 1 10/03/2000 6
A3 1 13/12/2000 9
A3 2 20/12/2003 4
A2 3 03/03/2000 2
A1 4 12/12/2000 7
A5 4 02/03/2009 8

Como vimos en estos ejemplos, siempre se ordenaron las filas en


forma ascendente, es decir que por default, se ordena en forma
ascendente.

Incorporamos dos nuevas palabras: ASC y DESC. La palabra ASC


significa ascendente y es el valor que la cláusula ORDER BY tiene
por omisión, el otro valor es DESC (descendente), veamos un
ejemplo:

SELECT pais_nacimiento,
nombre_pais
FROM paises
ORDER BY nombre_pais DESC;

Pais_Nacimiento Nombre_Pais
UR Uruguay
PE Perú
BO Bolivia
AR Argentina

Ahora trabajamos sobre la tabla finales_rendidos, donde


necesitamos obtener todas las filas ordenadas primero por

140
cod_materia en forma descendente y después por nro_alumno de
forma ascendente.

SELECT cod_materia,
nro_alumno,
fecha_final,
nota
FROM finales_rendidos
WHERE cod_materia DESC,
Nro_alumno ASC;

Cod_Materia Nro_Alumno Fecha_Final Nota


A5 4 02/03/2009 8
A4 1 10/03/2005 5
A3 2 20/12/2003 4
A3 1 13/12/2000 9
A2 3 03/03/2000 2
A1 4 12/12/2000 7
A1 1 10/03/2000 6

De lo visto hasta ahora podemos obtener las siguientes


conclusiones:
La instrucción SELECT, está compuesta como mínimo de la
cláusula FROM
El orden en el que se escriben las distintas cláusulas de la
instrucción SELECT es fundamental, esto es válido también
para las cláusulas que veremos más adelante.

Uso de dos o más tablas.


Continuamos trabajando con la instrucción SELECT pero incluyendo
dos o más tablas, veamos que ocurre al incluir dos tablas en la
misma instrucción SELECT.

141
SELECT cod_materia,
nro_alumno,
fecha_final,
nota,
pais_nacimiento,
nombre_pais
FROM finales_rendidos, paises;

El resultado es el siguiente:

Cod_Materia Nro_Alumno Fecha_Final Nota Pais_ Nombre_pais


nacimiento
A1 1 10/03/2000 6 AR Argentina
A1 1 10/03/2000 6 PE Perú
A1 1 10/03/2000 6 BO Bolivia
A1 1 10/03/2000 6 UR Uruguay
A2 3 03/03/2000 2 AR Argentina
A2 3 03/03/2000 2 PE Perú
A2 3 03/03/2000 2 BO Bolivia
A2 3 03/03/2000 2 UR Uruguay
A1 4 12/12/2000 7 AR Argentina
A1 4 12/12/2000 7 PE Perú
A1 4 12/12/2000 7 BO Bolivia
A1 4 12/12/2000 7 UR Uruguay
A3 1 13/12/2000 9 AR Argentina
A3 1 13/12/2000 9 PE Perú
A3 1 13/12/2000 9 BO Bolivia
A3 1 13/12/2000 9 UR Uruguay
A3 2 20/12/2003 4 AR Argentina
A3 2 20/12/2003 4 PE Perú
A3 2 20/12/2003 4 BO Bolivia
A3 2 20/12/2003 4 UR Uruguay
A4 1 10/03/2005 5 AR Argentina
A4 1 10/03/2005 5 PE Perú
A4 1 10/03/2005 5 BO Bolivia

142
A4 1 10/03/2005 5 UR Uruguay
A5 4 02/03/2009 8 AR Argentina
A5 4 02/03/2009 8 PE Perú
A5 4 02/03/2009 8 BO Bolivia
A5 4 02/03/2009 8 UR Uruguay

Vemos que en el ejemplo anterior se encuentran dos tablas la tabla


finales_rendidos y paises.y no existe la cláusula where, en estos
casos se produce lo que se conoce en matemática un Producto
Cartesiano, la tabla finales_rendidos tiene 7 registros y la tabla
paises 4 registros el resultado de la consulta anterior son los (7 * 4)
28 registros es decir que cada uno de los registros de
finales_rendidos se combinan con cada uno de los registros de la
tabla paises.
Si en el ejemplo anterior hubiésemos incluido todos los campos de
las tablas alumnos y paises, al ejecutar la consulta el interprete de
SQL nos hubiera advertido que el campo pais_nacimiento se
encuentra tanto en la tabla alumnos como en la tabla paises por lo
tanto debemos indicar a que tabla pertenece el campo.
Entonces aparece el concepto de alias, las tablas tienen ahora una
letra o palabra que representa a la tabla, veamos un ejemplo
incluimos además la cláusula where.

SELECT nro_alumno,
apellido,
nombre,
a.pais_nacimiento,
nombre_pais
FROM alumnos a,
paises p
WHERE a.pais_nacimiento = p.pais_nacimiento;

Vemos que en la cláusula FROM incluimos el alias de la tabla


alumnos como a y el alias de la tabla paises como p.

143
Además indicamos con a.pais_nacimiento que nos referimos a la
tabla alumnos y con p.pais_nacimiento a la tabla paises.
También observamos que con la cláusula Where estamos igualando
los campos pais_nacimiento de ambas tablas, ya no se produce el
producto cartesiano.
El resultado del Select es el siguiente:

Nro_ Apellido Nombre Pais_ Nombre_Pais


Alumno Nacimiento
1 Garcia Jose Ramon AR Argentina
2 Martinez Analia AR Argentina
3 Arias Adrian Marcelo PE Perú
4 Perez Maria Evangelina AR Argentina
5 Sosa Aldo BO Bolivia

Ahora veamos un ejemplo donde incluimos tres tablas:


Obtener los nombres de las materias, apellido y nombre de los
alumnos, fecha de final y nota obtenida.

SELECT m.denominacion,
a.apellido,
a.nombre,
f.fecha_final,
f.nota
FROM materias m,
alumnos a,
finales_rendidos f
WHERE f.cod_materia = m.cod_materia
AND f.nro_alumno = a.nro_alumno;
El resultado es el siguiente:

Denominacion Apellido Nombre Fecha_Final Nota


Programación I Garcia Jose Ramon 10/03/2000 6
Algebra Arias Adrian Marcelo 03/03/2000 2

144
Programación I Perez Maria Evangelina 12/12/2000 7
Estructura de un Garcia Jose Ramon 13/12/2000 9
Computador
Estructura de un Martinez Analia 20/12/2003 4
Computador
Ingles Tecnico Garcia Jose Ramon 10/03/2005 5
Teoría de Perez Maria Evangelina 02/03/2009 8
Sistemas

Creo que a esta altura podemos darnos cuenta lo útil que puede
resultar el lenguaje SQL.

Veamos un ejemplo con la combinación de todos lo aprendido hasta


el momento.
Obtener los datos de los alumnos, con el nombre_pais de aquellos
alumnos que sean varones y argentinos ordenados por nro_doc en
forma descendente.

SELECT a.nro_alumno,
a.apellido,
a.nombre,
a.tipo_doc,
a.nro_doc,
a.sexo
p.nombre_pais
FROM alumno a,
paises p
WHERE a.pais_nacimiento = p.pais_nacimiento
AND a.sexo = “M”
AND a.pais_nacimiento = “AR”
ORDER BY nro_doc DESC;

El resultado es:

145
Nro_ Apellido Nombre Tipo_Doc Nro_Doc Sexo Nombre_Pais
Alumno
1 Garcia Jose Ramon DNI 10.455.656 M Argentina

Observamos en el último ejemplo que existe una sola manera de


incluir en orden las cláusulas, ejemplo la cláusula Where no puede ir
después del Order by o el Where antes del From.

Actividad

Dada la siguiente definición de una tabla:

Empleados:
Nro_Empleado Numérico (8) Obligatorio Clave
Primaria
Apellido Char(30) Obligatorio
Nombre Char(30) Obligatorio
Tipo_Documento Char(3) Obligatorio Si
Nro_Documento Numérico(20) Obligatorio Si
Domicilio Char(30)
Localidad Char(30)
Código_Postal Numérico(4)
Telefono Numérico(25)
Pais_Nacimiento Char(25)
Sexo Char(1)
Email Char(30)
Fecha_Nacimiento Date

Construir mediante sentencias Select las siguientes consultas:

a)_ Seleccionar todos los campos de la tabla Empleados:

146
b)_ Seleccionar los apellidos y los nombres de aquellos empleados
mujeres (los que tienen la letra “F” en el campo sexo).

c)_ Seleccionar los apellidos, nombres, tipo y número de


documentos de aquellos empleados que vivan en Morón cuyo país
de nacimiento sea Paraguay.

d)_ Seleccionar los apellidos, nombres de aquellos empleados que


vivan en Vicente López o en Martínez.

e)_ Seleccionar los apellidos, nombres de aquellos empleados cuyo


código_postal se encuentre entre 1420 y 1429.

f)_ Seleccionar todos los datos de los empleados primero ordenado


por apellido en forma ascendente y luego por nombre en forma
descendente de aquellos empleados cuyo tipo de documento sea LE
y número de documento sea inferior a 12.000.000.

Creación de una tabla con registros de otra tabla


Cuando estudiamos la instrucción CREATE TABLE dijimos
que existía otra manera de crear una tabla.
Se puede crear una tabla mediante la instrucción CREATE TABLE
con renglones de otra tabla utilizando en combinación con la
instrucción SELECT:
Veamos un ejemplo.

CREATE TABLE alumnos_paises_hermanos


(nro_alumno NUMBER(5) NOT NULL,
apellido CHAR(30) NOT NULL,
nombre CHAR(35) NOT NULL,
tipo_doc CHAR(3) NOT NULL,
nro_doc NUMBER(8) NOT NULL)
AS

147
SELECT nro_alumo,
apellido,
nombre,
tipo_doc,
nro_doc
FROM alumnos
WHERE pais_nacimiento <> “AR”;

Observamos lo siguiente creamos una nueva tabla llamada


alumnos_paises_hermanos con cinco campos seleccionados de la
tabla alumnos, es decir no estamos obligados a crear una tabla con
los mismos campos, y una vez creada se completa con los datos de
los alumno que no son Argentinos.
Veamos el resultado:

Nro_ Apellido Nombre Tipo_Doc Nro_Doc


Alumno
3 Arias Adrian Marcelo DNI 23.878.652
5 Sosa Aldo DNI 10.878.767

Veamos otro ejemplo con la combinación de tres tablas.

CREATE TABLE mesas_finales


(materia CHAR(40) NOT NULL,
apellido CHAR(30) NOT NULL,
nombre CHAR(35) NOT NULL,
fecha_examen DATE NOT NULL,
calificacion NUMBER(2) NOT NULL)
SELECT m.denominacion,
a.apellido,
a.nombre,
f.fecha_final,
f.nota
FROM materias m,

148
alumnos a,
finales_rendidos f
WHERE f.cod_materia = m.cod_materia
AND f.nro_alumno = a.nro_alumno;

Materia Apellido Nombre Fecha_Final Calificacion


Programación I Garcia Jose Ramon 10/03/2000 6
Algebra Arias Adrian Marcelo 03/03/2000 2
Programación I Perez Maria Evangelina 12/12/2000 7
Estructura de un Garcia Jose Ramon 13/12/2000 9
Computador
Estructura de un Martinez Analia 20/12/2003 4
Computador
Ingles Tecnico Garcia Jose Ramon 10/03/2005 5
Teoría de Perez Maria Evangelina 02/03/2009 8
Sistemas

FUNCIONES AGREGADAS.
Las funciones agregadas son aquellas que nos permiten
realizar utilidades de cálculo en las bases de datos.
Estas funciones se las utiliza dentro de las consultas SELECT y
devuelven un único valor al ser aplicadas a un grupo de registros.
Veamos las funciones:

COUNT
Esta función devuelve la cantidad de registros que cumplen cierta
condición, el * significa que contará todos los registros incluyendo
valores nulos, si escribimos el nombre de una columna nos
devolverá la cantidad de registros que cumplen con la condición pero
no incluirá los valores nulos, si agregamos a esta segunda opción la
palabra distinct (en inglés distinto), no contará aquellos valores que
figuren dos o más veces, veamos algunos ejemplos:

SELECT COUNT(*)
FROM alumnos;

149
Recordamos que el * (asterisco) cuando vimos la instrucción select
indicaba que nos referíamos a todos los campos.
Nos devuelve el siguiente resultado.

COUNT(*)
5

En este caso nos está diciendo que la tabla alumnos está compuesta
de cinco registros.
Idéntico resultado obtenemos con la siguiente instrucción ya que en
este caso no hay ningún valor nulo.

SELECT COUNT(apellido)
FROM alumnos

COUNT(apellido)
5

Estudiemos ahora la palabra DISTINCT en dos instrucciones select.


Ejecutamos el siguiente select

SELECT COUNT(nro_alumno)
FROM finales_rendidos;

Obtenemos el siguiente resultado:

COUNT(nro_alumno)
7

Ahora ejecutamos lo siguiente:

150
SELECT COUNT(DISTINCT nro_alumno)
FROM finales_rendidos

El resultado es el siguiente:
COUNT(DISTINCT nro_alumno)
4

Es decir se cuenta siguiendo la columna la cantidad de alumnos sin


repetir, o sea encontramos cuatro alumnos que rindieron exámenes.

Función SUM
Veamos su sintaxis:
SUM([DISTINCT] columna), esta función se utiliza para sumar los
valores de tipo numérico de aquellos registros que cumplan con la
condición, si incluimos DISTINCT no se sumarán los valores
repetidos.

Veamos un ejemplo:
SELECT SUM(nota)
FROM finales_rendidos;

SUM(nota)

41

En nuestro ejemplo como no tenemos registrada la misma nota para


dos alumnos, el resultado del siguiente select es idéntico al anterior.

SELECT SUM( DISTINCT nota)


FROM finales_rendidos;

151
SUM(DISTINCT nota)

41

Veamos un ejemplo con la columna nro_alumno de la tabla


finales_rendidos

SELECT SUM(DISTINCT nro_alumno)


FROM finales_rendidos;

El resultado es el siguiente:

SUM(DISTINCT nro_alumno)

10

Para obtener el 10 se realizó la siguiente suma: 1 + 2 + 3 + 4.

Función AVG.
Esta función devuelve el promedio de una columna de tipo
numérico que cumpla con cierta condición, si incluimos la palabra
DISTINCT no se incluirán para el cálculo aquellos valores repetidos.
Veamos su sintaxis:

AVG([DISTINCT] columna)

SELECT AVG(nota)
FROM finales_rendidos

El resultado es el siguiente:

AVG(nota)
5,857

152
Como dijimos anteriormente como no tenemos registradas notas
iguales a distintos alumnos la siguiente instrucción genera el mismo
resultado.
SELECT AVG( DISTINCT nota)
FROM finales_rendidos

El resultado es el siguiente:
AVG(DISTINCT nota)
5,857

Función Max
Esta función devuelve el valor máximo de la columna que
cumple con la condición, en este caso esta función puede ser
aplicada a tanto a valores numéricos a valores de tipo carácter y de
tipo fecha, veamos la sintaxis.

MAX([DISTINCT] columna)

Veamos un ejemplo, queremos obtener el apellido del alumno que


se encuentre último en una lista ordenada alfabéticamente.

SELECT MAX(apellido)
FROM alumnos;

El resultado es el siguiente:

MAX (apellido)
Sosa

Otro ejemplo.
SELECT MAX (fecha_final)
FROM finales_rendidos;

153
MAX (fecha_final)
02/03/2009

Función MIN
Esta función devuelve el valor mínimo de una columna que
cumpla con la condición, su sintaxis es similar a la de la función MAX
y se puede aplicar a columnas de tipo carácter, de tipo fecha o
numérico.

SELECT MIN(nota)
FROM finales_rendidos;

MIN (nota)
2

Incorporemos la cláusula where en el siguiente ejemplo.

SELECT MIN(nota)
FROM finales_rendidos
WHERE cod_materia = “A1”;

MIN (nota)
6

GROUP BY
Si necesitamos que una sentencia Select nos devuelve una
serie de registros que se encuentren agrupados mediante algún
criterio debemos incluir en la construcción de la consulta la cláusula
Group by.
La cláusula Group by es opcional y la sintaxis dentro de una
sentencia Select es la siguiente:

154
SELECT campos
FROM tabla
WHERE criterio
GROUP BY campos del grupo
ORDER BY campo1, campo2;

Los valores Null en los campos GROUP BY se agrupan y no se


omiten.
Veamos un ejemplo: considerando la tabla finales rendidos
agrupemos sus registros por el campo nro_alumno

SELECT nro_alumno
FROM finales_rendidos
GROUP BY nro_alumno;

El resultado es el siguiente:

nro_alumno
1
3
4
2

Veamos la consulta anterior sin la inclusión del Group by:

SELECT nro_alumno
FROM finales_rendidos

nro_alumno
1

155
3
4
1
2
1
4

Observamos que al agrupar mediante uno o más campos no se


repiten los registros.
Ahora vamos a incluir en la tabla finales_rendidos un nuevo registro
utilizando la instrucción insert que ya conocemos.

INSERT INTO finales_rendidos


(cod_materia, nro_alumno, fecha_final, nota)
VALUES
('A2', 3, 10/12/2000, 7);

Después de ingresar este nuevo registro la tabla finales rendidos


queda asi:
Finales Rendidos
Cod_Materia Nro_Alumno Fecha_Final Nota
A1 1 10/03/2000 6
A2 3 03/03/2000 2
A1 4 12/12/2000 7
A3 1 13/12/2000 9
A3 2 20/12/2003 4
A4 1 10/03/2005 5
A5 4 02/03/2009 8
A2 3 10/12/2000 7

O sea el alumno 3, rindió en la primera oportunidad la materia A2 y


reprobó el examen, luego volvió a presentarse en la misma materia
el dia 10/12/2000 y obtuvo un 7.

156
Ahora veamos un ejemplo donde agrupamos por dos campos:
cod_materia y nro_alumno de la tabla finales_rendidos.

SELECT cod_materia, nro_alumno


FROM finales_rendidos
GROUP BY cod_materia, nro_alumno;

Este es el resultado:

cod_materia nro_alumno
A1 1
A2 3
A1 4
A3 1
A3 2
A4 1
A5 4

Veamos la sentencia SELECT anterior sin el Group by.

SELECT cod_materia, nro_alumno


FROM finales_rendidos;

cod_materia nro_alumno
A1 1
A2 3
A1 4
A3 1
A3 2
A4 1
A5 4
A2 3

157
Combinamos ahora las funciones agregadas que ya conocemos con
la cláusula group by.
Veamos un ejemplo con la función count.
Queremos saber cuantos finales rindió cada alumno:

SELECT nro_alumno, COUNT(*)


FROM finales_rendidos
GROUP BY nro_alumno;
Observemos que la función count es tratada como un campo más, el
resultado es el siguiente.
nro_alumno COUNT(*)
1 3
2 1
3 2
4 2

Ahora queremos saber cuantas veces cada alumno rindió cada


materia, para esto necesitamos agrupar por los campo nro_alumno y
cod_materia, incluyendo la función count.

SELECT nro_alumno, cod_materia, COUNT(*)


FROM finales_rendidos
GROUP BY nro_alumno, cod_materia

nro_alumno cod_materia COUNT(*)


1 A1 1
1 A3 2
1 A4 1
2 A3 1
3 A2 1
4 A1 1
4 A5 1

158
En la cláusula group by todos los campos que figuran en el select
deben estar en la cláusula group by y en el mismo orden.

No sólo podemos utilizar la función count con la cláusula group by


sino también cualquier otra función agregada que conocemos.
Ejemplo Obtener la mayor nota que cada alumno obtuvo, para eso
utilizamos la función MAX.

SELECT nro_alumno, MAX(nota)


FROM finales_rendidos
GROUP BY nro_alumno;

nro_alumno MAX (nota)


1 9
3 7
4 8
2 4

Veamos ahora un ejemplo con la función agregada AVG.


Obtener el promedio de las notas agrupado por materia.

SELECT cod_materia, AVG (nota)


FROM finales_rendidos
GROUP BY cod_materia;

El resultado es:
cod_materia AVG (nota)
A1 6,5
A2 4,5
A3 6,5

159
A4 5
A5 8

HAVING
Así como la cláusula WHERE sirve para poder condicionar los
registros obtenidos por la sentencia SELECT, la cláusula HAVING
sirve para condicionar los grupos.
Veamos un ejemplo: supongamos que queremos obtener sólo los
datos de aquellos alumnos que hayan rendido la materia en más de
una oportunidad.

SELECT nro_alumno, cod_materia, COUNT(*)


FROM finales_rendidos
GROUP BY nro_alumno, cod_materia
HAVING COUNT(*) > 1

El resultado es el siguiente:
nro_alumno cod_materia COUNT(*)
3 A2 2

Sólo obtenemos un registro ya que el alumno 3 rindió la materia A2


en dos oportunidades.

Veamos otros ejemplos:


Obtener aquellos alumnos que tengan como promedio un cinco o
mas en sus calificaciones.

SELECT nro_alumno, AVG(nota)


FROM finales_rendidos
HAVING AVG(nota) >= 5;

El resultado es:

160
nro_alumno AVG(nota)
1 6,66
3 4,5
4 7,5
2 4

UNION
La cláusula UNION combina dos o más sentencias SELECT
en un único resultado. Este resultado es la suma de los resultados
de cada uno de los SELECT.
Creamos una nueva tabla profesores

CREATE TABLE profesores


(nro_profesor NUMBER(5) NOT NULL,
apellido CHAR(30) NOT NULL,
nombre CHAR(35) NOT NULL,
tipo_doc CHAR(3) NOT NULL,
nro_doc NUMBER(8) NOT NULL,
UNIQUE (tipo_doc, nro_doc),
PRIMARY KEY (nro_profesor))
Luego de ejecutar las instrucciones insert obtenemos la siguiente
tabla.

Profesores
Nro_ Apellido Nombre Tipo_Doc Nro_Doc
Profesor
100 Lombardero Daniel DNI 25.124.325
101 Perera Rodolfo DNI 26.226.543
102 Castellano Fabián DNI 17.878.652
103 Rivas Ana DNI 20.881.330
104 Ramasco Alicia DNI 19.878.767

161
Veamos como aplicamos la instrucción UNION y el resultado que
obtenemos.

SELECT apellido, nombre


FROM alumnos
UNION
SELECT apellido, nombre
FROM profesores;

apellido nombre
Garcia Jose Ramon
Martinez Analia
Arias Adrian Marcelo
Perez Maria Evangelina
Sosa Aldo
Lombardero Daniel
Perera Rodolfo
Castellano Fabián
Rivas Ana
Ramasco Alicia

Cuando se use la instrucción UNION, la lista de los campos para


cada una de las sentencias SELECT deben tener el mismo número
de columnas, el mismo tipo de datos y el mismo orden.

La instrucción UNION, tiene dos formas de uso, la primera es como


vimos recién, la otra es utilizar UNION ALL.
Supongamos que en el último ejemplo existe un alumno y un
profesor que tenga el mismo apellido y el mismo nombre, en ese
caso si utilizamos UNION, ese apellido y nombre aparecen una sola

162
vez, en cambio si usamos el UNION ALL, en el resultado aparecerá
dos veces.
Resumiendo UNION ALL, incluye la totalidad de las filas obtenidas
en cada uno de los select, aunque se encuentren repetidos, el
UNION no muestra las filas si están repetidas.

Actividad
1)_ Dadas las siguientes tablas, escribir la sentencia Union entre
ambas tablas y mostrar el resultado en otra tabla para todos los
campos.

2)_ Escribir la sentencia Union All entre ambas tablas y mostrar el


resultado en otra tabla para todos los campos.

Donde Fábrica y Proveedor son los nombres de las tablas.

Fabrica
Nombre Medida
Tornillo Cabeza Frezada 1 1/4
Arandela Grover ¼
Arandela Plana 5/16

Proveedor
Nombre Medida
Tornillo Cabeza Tanque ¾
Arandela Grover ¼
Arandela Plana 3/8

FUNCIONES DE UNA LÍNEA

Funciones de Caracter: necesitan como entrada datos de tipo


carácter.

163
LOWER
Esta función transforma una cadena de caracteres a
minúscula del valor de una columna.
Veamos un ejemplo:

SELECT LOWER (apellido)


FROM profesores;

Apellido
lombardero
perera
castellano
rivas
ramasco

UPPER
Esta función transforma una cadena de caracteres a
mayúscula del valor de una columna.
Veamos un ejemplo en donde consultamos dos veces el apellido de
los alumnos en el primer caso aplicando la función UPPER y en la
segunda no.

SELECT UPPER(apellido), apellido


FROM alumnos;

El resultado es el siguiente:
UPPER(apellido) Apellido
GARCIA Garcia
MARTINEZ Martinez
ARIAS Arias
PEREZ Perez
SOSA Sosa

164
INITCAP
Obtiene la primer letra de la columna en mayúscula el resto
de las letras en minúscula.

SELECT INITCAP (apellido), INITCAP (nombre)


FROM alumnos;

Apellido Nombre
Garcia Jose Ramon
Martinez Analia
Arias Adrian Marcelo
Perez Maria Evangelina
Sosa Aldo

En nuestro caso, no produjo ningún cambio, porque los datos


estaban en ese formato.

SUBSTR
Su sintaxis es SUBSTR(columna/valor, posición, n); donde se
obtiene una subcadena (en inglés substring) de la columna/valor
desde el número expresado en posición hasta n posiciones.
Ejemplo obtener una subcadena de los apellidos de los profesores
desde la segunda letra hasta la cuarta.

SELECT apellido, SUBSTR (apellido, 2, 3)


FROM profesores;
apellido SUBSTR(apellido , 2,3)
Lombardero omb
Perera ere
Castellano ast
Rivas iva
Ramasco ama

165
Tener en cuenta que la letra n, son posiciones y el ejemplo pide
hasta la cuarta letra, si comenzamos en la letra dos, el valor de n
debe ser 3.

LTRIM
Esta función elimina de la columna los espacios en blanco
desde la izquierda. Su sintaxis es LTRIM(columna).

SELECT LTRIM(apellido)
FROM profesores;

En nuestro ejemplo no tiene ningún cambio porque los apellidos


están justificados a la izquierda

RTRIM
Esta función elimina de la columna en blanco desde la
derecha, Su sintaxis es RTRIM(columna) elimina de la columna los
espacios en blanco desde la derecha.

SELECT RTRIM (apellido)


FROM profesores;

RTRIM(apellido)
Lombardero
Perera
Castellano
Rivas
Ramasco

166
LENGTH
Esta función devuelve la cantidad de caracteres que tiene la
columna.
Veamos un ejemplo, donde se pide contar la cantidad de letras que
tienen los apellidos de los alumnos.

SELECT apellido, LENGTH(apellido)


FROM alumnos;

apellido LENGTH(apellido)
Garcia 6
Martinez 8
Arias 5
Perez 5
Sosa 4

FUNCIONES NUMÉRICAS
Algunas de estas funciones conocen su significado cuando
estudiaron Pascal.

MOD
Esta función devuelve el resto de la división, su sintaxis
MOD(Valor 1, Valor 2), y nos devuelve el resto de la división del
valor 1 dividido el valor 2.

SELECT nota, MOD(nota, 2)


FROM finales_rendidos;

Nota MOD (nota, 2)


6 0
2 0
7 1

167
9 1
4 0
5 1
8 0
7 1

ABS
Su sintaxis ABS(columna) devuelve el valor absoluto de la
columna.

SELECT nota, ABS(nota, 2)


FROM finales_rendidos;

Nota ABS(nota, 2)
6 3
2 1
7 3
9 4
4 2
5 2
8 4
7 3

SIGN
Su sintaxis SIGN(columna) devuelve –1 si la columna es
negativo, 0 si es 0 y 1 si tiene valor positivo.
En nuestros datos no tenemos números negativos o ceros.

SELECT nota, SIGN(nota)


FROM finales_rendidos;

168
Nota SIGN(nota)
6 1
2 1
7 1
9 1
4 1
5 1
8 1
7 1

Existen muchísimas funciones aplicables a todo tipo de datos como


ser de tipo fecha, numéricas, de carácter, con números binarios, etc
pero son particulares de cada motor de bases de datos.
Por ejemplo en ORACLE, encontramos lo siguiente:

FUNCIONES DE CONVERSIÓN DE DATOS


Estas funciones convierten un tipo de dato en otro.

TO_CHAR(numero/fecha, formato) convierte un numero o una fecha


con formato a carácter.

TO_NUMBER (caracteres) convierte caracteres en un valor


numérico siempre que contengan números.

TO_DATE (Caracteres, formato) convierte caracteres en una fecha


según formato.
Donde Formatos de fechas pueden ser
‘DD/MM/YYYY’ donde DD son dias, MM meses y YYYY años.
Otras opciones:
‘DD-MM-YYYY’, ‘DD-MM-YY’
Incluyendo la hora.
‘DD/MM/YYYY HH24:MI:SS’ donde HH24 es la hora en formato 24
horas, MI minutos y SS segundos.

169
FUNCIONES QUE OPERAN CON NÚMEROS

SQRT esta función calcula la raiz cuadrada, su sintaxis es:


SQRT (campo);

EXP esta función calcula el valor e (2.71828183) elevado a la


potencia su sintaxis es: EXP (columna)

LN esta función calcula en logaritmo natural de un número, su


sintaxis es: LN(columna)

SIN esta función calcula el seno de un número.

COS esta función calcula el coseno de un número.

Los anteriores son sólo algunos ejemplos que podemos encontrar.

OUTER JOIN
En las tablas que creamos más arriba tenemos algunas tablas
que están relacionadas entre si: por ejemplo la tabla alumnos está
relacionada con la tabla países. La tabla alumno y la tabla materias
están relacionadas con la tabla finales_rendidos. La tabla materias
correlativas está relacionada con la tabla materias.
De estos ejemplos también observamos lo siguiente, si bien las
tablas están relacionadas no todas las filas de las tablas están
relacionadas con otra u otras filas de otras tablas, por ejemplo no
existe ningún alumno de los que cuenta nuestra tabla que tenga
como país de nacimiento Uruguay, aunque quizás en el futuro
tengamos un alumno Uruguayo.

170
De la relación entre la tabla alumnos y finales rendidos observamos
que el alumno con apellido Sosa, aún no rindió ningún examen final.
De la relación entre la tabla materias y finales rendidos varias
materias no fueron rendidas por ningún alumno como son Análisis
Matemático, Bases de Datos, Redes, etc.
Entonces cuando existe relación entre dos tablas pero no todos los
datos de una tabla se encuentran relacionados en la otra tabla y
necesitamos obtener toda la información de ambas tablas usamos lo
que llamamos outer join.
Ejemplo si trabajamos con las tablas alumnos y finales_rendidos, y
queremos obtener el nro_alumno, apellido, nombre del alumno y en
el caso que haya rendido algún examen la materia y nota obtenida,

SELECT a.Nro_Alumno, a.Apellido, a.nombre, f.cod_materia,


f.Nota
FROM alumnos a, finales_rendidos f
WHERE a.nro_alumno = f.nro_alumno(+);

El símbolo (+) aparece en la condición de where en el lado del igual


de los campos de las tablas que quizás no tengan información

Veamos el resultado
Nro_alumno Apellido Nombre Cod_materia Nota
1 Garcia Jose Ramon A1 6
1 Garcia Jose Ramon A3 9
1 Garcia Jose Ramon A4 5
2 Martinez Analia A3 4
3 Arias Adrian Marcelo A2 2
3 Arias Adrian Marcelo A2 7
4 Perez Maria Evangelina A1 7
4 Perez Maria Evangelina A5 8
5 Sosa Aldo

Como podemos observar Sosa Aldo no rindió ningún examen.

171
Veamos otro ejemplo, obtener el apellido, nombre y país nacimiento
de todos los alumnos, incluir todos los países.

SELECT a.apellido, a.nombre, p.pais_nacimiento, p.nombre_pais


FROM alumnos a, paises p
WHERE a.pais_nacimiento(+) = p.pais_nacimiento;

Veamos el resultado.

Apellido Nombre Pais_nacimiento Nombre_pais


Garcia Jose Ramon AR Argentina
Martinez Analia AR Argentina
Arias Adrian Marcelo PE Perú
Perez Maria Evangelina AR Argentina
Sosa Aldo BO Bolivia
UR Uruguay

Actividad

Dadas las siguientes tablas:

Empleados.

Nro_Legajo Apellido Nombre Cod_Categoria


1001 Perez Alberto José Sup
1002 Sosa Ana Laura Sec
1003 Martinez Valeria Susana Ead
1004 Salas Roberto Cad

Categorías.

Cod_Categoria Categoría
Sup Supervisor
Sec Secretaria

172
Ead Empleado Administrativo
Acu Analista de Cuentas
Cad Cadete
Jse Jefe de Sector
Pas Pasante

Observamos que las dos tablas anteriores se encuentran


relacionadas a través del campo Cod_Categoría, además vemos
que todos los empleados tienen su categoría, pero algunas
categorías no tienen un empleado asociado, como son Pasante,
Analista de Cuentas y Jefe de Sector, entonces:

1)_ Escribir una sentencia Select seleccionando Todas las


Categorías, y los Nro_Legajos, Apellidos y Nombres de los
empleados de esas categorías, ordenada por Categoría en forma
ascendente.

SUBQUERIES
Un subquery es una instrucción SELECT en donde existe un
SELECT dentro de otro, El select más interno se ejecuta primero y el
resultado de este es usado por el select inmediatamente más
externo. Se pueden construir subqueries con hasta 16 niveles, de
SELECT.
Veamos un ejemplo donde podamos aplicar este concepto.
Supongamos que necesitamos obtener aquellos nro de alumnos que
obtuvieron notas mayores o iguales al promedio obtenidos por todos
los alumnos.

SELECT nro_alumno
FROM finales_rendidos
WHERE Nota >= (SELECT AVG(Nota)
FROM finales_rendidos);

173
En este caso se ejecuta primero el select interno que obtiene la nota
promedio entre todos los alumnos, luego ese valor lo usamos en la
condición de WHERE del SELECT siguiente.

SELECT AVG(nota)
FROM finales_rendidos;

Nos devuelve como resultado el valor 6, luego con este valor se


ejecuta la consulta siguiente.

SELECT nro_alumno
FROM finales_rendidos
WHERE Nota >= 6;

El resultado es el siguiente:

nro_alumno
1
4
1
4
3

Observamos que el alumno 1 y 4 figura dos veces esto se debe a


que dos veces cada uno obtuvo una nota mayor o igual al promedio.
Para evitar esto utilizamos la conocida cláusula Distinct.

SELECT DISTINCT nro_alumno


FROM finales_rendidos
WHERE Nota >= 6;

El resultado es el siguiente:

174
nro_alumno
1
4
3

MINUS

Este comando es un operador lógico que sirve para reducir el


resultado de una consulta. Se hacen dos Select y el comando
MINUS resta o elimina del primer Select las filas que hay en el
segundo Select.

Veamos un ejemplo, tenemos dos tablas llamadas colores 1 y


colores 2 con los siguientes valores:
Colores 1
Nombre Color
Rojo
Blanco
Negro
Celeste
Gris

Colores 2
Nombre Color
Blanco
Gris

SELECT nombre_color
FROM COLORES1
MINUS
SELECT nombre_color
FROM COLORES 2

175
El resultado es el siguiente:
Nombre Color
Rojo
Negro
Celeste

Es decir elimino los colores de la tabla Colores 2, que encontró en la


tabla Colores 1.

INTERSECT

Este comando es un operador lógico que se aplica sobre dos select


y obtienen la intersección de los valores obtenidos en los select.
Funciona como un operador AND y el valor se selecciona si aparece
en los dos select.
Veamos un ejemplo, tenemos dos tablas, Ventas Internet y Ventas
Negocio.

Ventas Internet
Fecha Monto Vendido
10/01/2010 20.050
12/01/2010 3.251
13/01/2010 6.654
15/01/2010 9.254

Ventas Negocio
Fecha Monto Vendido
10/01/2010 25.214
13/01/2010 7.884

176
SELECT fecha
FROM Ventas Internet
INTERSECT
SELECT fecha
FROM Ventas Negocio

Veamos el resultado:

Fecha
10/01/2010
13/01/2010

Observamos que en el resultado aparecen las fechas 10/01/2010 y


13/01/2010 ambas fechas se encuentran el las dos tablas.

VISTAS
En SQL una vista es una tabla que nace como consecuencia
de otras tablas, donde estas tablas pueden ser otras vistas.
Las vistas no existen fisicamente se las considera tablas virtuales.
La instrucción para crear una vista es la siguiente:

CREATE VIEW nombre_vista


AS SELECT campo 1,
campo 2,
campo 3
FROM nombre_tabla
WHERE condición;

Con la instrucción anterior creamos una vista compuesta por


el los campos y la condición que se obtuvieron del select.

177
Creamos una vista llamada alumnas_v, con la misma estructura que
la tabla alumnos sin incluir el campo sexo y que contenga solo
mujeres.

CREATE VIEW alumnas_v


AS SELECT nro_alumno,
apellido,
nombre,
tipo_doc,
nro_doc,
pais_nacimiento
FROM alumnos
WHERE sexo = “F”;

Luego de creada la vista, ejecutamos el siguiente select.

SELECT nro_alumno,
apellido,
nombre,
tipo_doc,
nro_doc,
pais_nacimiento
FROM alumnas_v;

Nro_ Apellido Nombre Tipo_Doc Nro_Doc Pais_Nacimiento


Alumno
2 Martinez Analia DNI 16.776.543 AR
4 Perez Maria Evangelina DNI 20.881.330 AR

Veamos ahora como se crea una vista utilizando dos o más tablas.
Vamos a crear una vista con el apellido, nombre de los alumnos y el
código de las materias de las cuales rindieron finales.

178
CREATE VIEW alumnos_finales_v
AS SELECT a.apellido
a.nombre
f.cod_materia
FROM alumnos a, finales_rendidos f
WHERE a.nro_alumno = f.nro_alumno;

Una vez creada la vista podemos consultarla

SELECT * FROM alumnos_finales_v


ORDER BY apellido, nombre;

El resultado es el siguiente:

Apellido Nombre Cod_materia


Arias Adrián Marcelo A2
Arias Adrian Marcelo A2
Garcia Jose Ramon A1
Garcia Jose Ramon A3
Garcia Jose Ramon A4
Martinez Analia A3
Perez Maria Evangelina A1
Perez Maria Evangelina A5

Como vimos una vista puede estar representada por los campos de una
tabla o de la combinación de más de una tabla.

Es una buena práctica agregar al final del nombre de cada vista _v, de
esta manera identificamos rapidamente si se trata de una tabla o una
vista.

179
DROP VIEW
Así como conocimos la instrucción DROP TABLE para borrar una
tabla, existe la instrucción DROP VIEW para borrar una vista, su sintaxis
es la siguiente:

DROP VIEW nombre vista;

Veamos dos ejemplos

DROP VIEW alumnos_finales_v;

DROP VIEW alumnas_v;

INDICES
Los índices son caminos físicos de accesos a las tablas, sirven
para mejorar la velocidad de acceso a los datos que están almacenados
en las tablas.
Un índice es una estructura física de acceso que se especifica con base
en uno o más atributos de un archivo. El atributo o los atributos sobre los
que se crea el índice son conocidos con el nombre de atributos de
indización. Los índices producen que la ejecución de una consulta
tardará menos si alguno de los atributos por los cuales se está buscando
se encuentra indizada. Esta mejora en los accesos es mucho más
notoria si la consulta se realiza sobre tablas de muchos registros. La
instrucción para crear un índice es CREATE INDEX.
Veamos como podemos crear un índice sobre la tabla alumnos, en base
al apellido del alumno.

CREATE INDEX alumno_apellido


ON alumnos(apellido);

Por lo general los índices se crean en orden ascendente de los valores


del atributo de indización.

180
Si en el ejemplo anterior no especificamos orden la creación será para el
campo apellido del alumno en forma ascendente.
Ahora supongamos que queremos crear un índice sobre la misma tabla
alumnos, con un índice sobre los campos apellido y alumno ambos en
forma ascendente.

CREATE INDEX alumnos_ape_nom


ON alumnos (apellido ASC, nombre ASC);

Ahora vamos a crear un índice sobre la tabla materias y para el campo


denominación en forma descendente.

CREATE INDEX materias_deno


ON materias (denominacion DESC);

El SQL permite crear índices con alguna característica adicional, la de


poder crear un índice con la exigencia que el o los campos que forman el
índice sean únicos.
Por ejemplo vamos a crear un índice sobre la tabla alumnos para los
campos tipo_doc y nro_doc

CREATE UNIQUE INDEX alumnos_doc


ON alumnos (tipo_doc, nro_doc);

Veamos cual es la sentencia para eliminar un índice.

DROP INDEX alumno_ape_nom;


DROP INDEX materias_deno;
DROP INDEX alumnos_doc;

De esta manera eliminamos los índices recién creados.

181
SECUENCIAS
Algunas bases de datos como es en ORACLE, poseen un
objeto que se utiliza para generar automáticamente secuencias de
números. Como por ejemplo la generación de números de facturas o
números de remitos o números de socio en un club, la característica
de estos ejemplos es que deben ser números únicos.

CREATE SEQUENCE (nombre de la secuencia)


(INCREMENT BY n)
(START WITH n)
(MAXVALUE n)
(MINVALUE n)
(CYCLE / NOCYCLE)

A excepción del nombre de la secuencia el resto de las cláusulas


son opcionales.
(INCREMENT BY n) n define el incremento asignado a la secuencia,
el valor puede ser positivo o negativo, si fuera positivo la secuencia
es ascendente, si fuera negativo la secuencia es descendente. Si se
omite esta cláusula el valor por omisión es 1,
Por ejemplo si este valor es 10, el primer valor obtenido supongamos
sea 0, luego obtendremos un 10, 20, 30, 40, etc.
(START WITH n) n representa el valor inicial de la secuencia el valor
por omisión es MINVALUE para las secuencias ascendentes y
MAXVALUE para las sentencias descendentes.
(MAXVALUE n) n representa el mayor valor que la secuencia puede
obtener, el valor por omisión es 1 para las secuencias descendentes
y (1 * 1027) – 1 para secuencias ascendentes.
(MINVALUE n) n representa el menor valor que la secuencia puede
obtener, el valor por omisión es 1 para las secuencias ascendentes y
(-1 * 1027) – 1 para secuencias descendentes.
(CYCLE / NOCYCLE) si se especifica CYCLE y la secuencia es
ascendente el valor obtenido de la secuencia a MAXVALUE es

182
MINVALUE, y si fuera descendente después de MINVALUE
continuará con MAXVALUE. El valor por omisión es NOCYCLE en
este caso cuando la secuencia llegue a su límite dependiendo si es
ascendente o descendente no seguirá generando valores.

Veamos un ejemplo:

CREATE SECUENCE nro_factura_sec


INCREMENT BY 1
START WITH 1000
MAXVALUE 1000000

En este caso creamos la secuencia nro_Factura_sec que es


incrementada en 1, que comienza desde el 1000 y llega hasta el
1000000 no cíclico, es decir que el último número generado será
1000000.

La manera de obtener el actual número de la secuencia es:

SELECT nro_factura.CURRVAL
FROM DUAL;

En este caso nos devuelve el número 1000.

La manera de generar cada vez un número nuevo es:

SELECT nro_factura.NEXTVAL
FROM DUAL;
El primer valor que obtiene es 1001, luego 1002, 1003, etc.

ALTER SEQUENCE
Para modificar la definición de una secuencia usamos ALTER
SEQUENCE.

183
ALTER SEQUENCE (nombre de la secuencia)
(INCREMENT BY n)
(MAXVALUE n)
(MINVALUE n)
(CYCLE / NOCYCLE);

Ejemplo:
ALTER SEQUENCE nro_factura_seq
(MAXVALUE 10000);
Es decir cambiamos el máximo valor que puede tomar la secuencia.

Para borrar una secuencia utilizamos.


DROP SEQUENCE nro_factura_seq;

LENGUAJE DE CONTROL DE DATOS (DCL).


Con el nombre de lenguaje de control de datos nos referimos a la
parte del SQL que se ocupa de la seguridad y de la integridad en el uso
de la base de datos. La seguridad se ocupa de proteger los datos ante el
acceso, modificación o borrado no autorizados.
Permitir definir usuarios mediante instrucciones que son específicas de
cada SGBD. En sistemas multiusuario puede usarse el propio sistema
operativo, o poder definir usuarios con el SGBD.
Se pueden conceder permisos o privilegios a los usuarios.
La instrucción que se ocupa de otorgar permisos es la instrucción
GRANT.

GRANT ALL | Lista Privilegios

ON TABLE Lista Tablas

TO PUBLIC | Lista Usuarios

[WITH GRANT OPTION]

184
Con ALL o Lista Privilegios se otorgan o todos los privilegios o
seleccionar un subconjunto de privilegios que permitan borrar,
insertar o modificar (DELETE, INSERT, SELECT, UPDATE) una
tabla o conjunto de tablas.

Estos privilegios se conceden a todos los usuarios, lo identificamos


con PUBLIC o a una lista de usuarios.

Con la cláusula WITH GRANT OPTION nos está indicando que los
privilegios que le fueron otorgados a un usuario, el mismo usuario
puede asignárselos a otros usuarios por medio de instrucciones
GRANT.

También es posible restringir los privilegios a un subconjunto de las


columnas de la tabla.

GRANT SELECT, UPDATE (apellido, nombre, sexo)

ON TABLE alumnos;

El propietario de un objeto es el que tiene la posibilidad de otorgar


los privilegios y el propietario es el creador del objeto.

REVOKE

Para quitar los privilegios que fueron otorgados se utiliza la


instrucción REVOKE y los privilegios son eliminados en cascada en
el caso de que el usuario los haya traspasado a otros con GRANT
OPTION.

REVOKE ALL | listaPrivilegios

ON TABLE listaTablas

FROM PUBLIC | listaUsuarios;

185
El uso de vistas combinada con el control de los usuarios y el
otorgamiento responsable de los privilegios es el modelo de
seguridad que los administradores de la base de datos SQL utilizan.

Lea con atención

Veamos un ejemplo

Consideremos las 3 siguientes tablas:

Proveedores

Nro_Prov Razon_Social Categoría Ciudad


1 Prov 1 20 Mar del Plata
6 Prov 6 20 Mar del Plata
3 Prov 3 30 La Plata
4 Prov 4 10 La Plata
5 Prov 5 10 Bahia Blanca

Articulos

Nro_Articulo Nombre Peso Color Ciudad


10 A 5 Rojo Lobos
20 F 7 Rojo La Plata
30 A 5 Azul Mar del Plata
40 Z 3 Verde Mar del Plata
50 C 1 Verde La Plata
60 N 9 Rojo Mar del Plata

Nota: el campo ciudad de la tabla Articulos se refiere a la ubicación


donde están almacenados los artículos.

Proveedores_Articulos

Nro_Prov Nro_Articulo Cantidad


1 10 300
6 20 100

186
1 60 200
1 50 400
3 60 200
1 40 100
4 10 100
4 60 300
4 30 400
1 30 200
3 20 200
4 20 300
3 10 150

Creamos las tres tablas:


CREATE TABLE proveedores
(Nro_Prov integer not null,
Razon_Social char(10),
Categoría integer,
Ciudad Char(15));

CREATE TABLE Articulos


(Nro_Articulo integer not null,
Nombre char(25),
Peso integer,
Color char(8),
Ciudad char(15)),

CREATE TABLE Proveedores-Articulos


(Nro_Prov integer not null,
Nro_Articulo integer not null,
Cantidad integer);

187
1)_ Seleccionar el nro de todos los proveedores, vemos dos
soluciones.

a)_
SELECT Nro_Articulo
FROM Articulos;

b)_
SELECT DISTINCT Nro_Articulo
FROM Proveedores-Articulos;

El resultado de este segundo select es:

Nro_Articulo
10
20
60
50
40
30

Si la respuesta fuese del primer select lo que varía es el orden en el


que aparecen los Nro_Articulos.

2)_ Seleccionar el número, razón social, categoría y ciudad de todos


los proveedores.
a)_
SELECT *
FROM Proveedores;
b)_
SELECT Nro_Prov, Razon_Social, Categoría, Ciudad
FROM Proveedores;

188
3)_ Seleccionar el número de proveedor y la categoría de los
proveedores residentes en La Plata, ordenados ascendentemente
por categorías.
SELECT Nro_Prov, Categoría
FROM Proveedores
WHERE Ciudad = “La Plata”;

Nro_Proveedor Categoria
4 10
3 30

4)_ Seleccionar el número de proveedor de aquellos provedores de


La Plata con categoría mayor que 20.

SELECT Nro_Proveedor
FROM Proveedores
WHERE Ciudad = “La Plata
AND Categoría > 20;

Nro_Proveedor Categoria
3 30

5)_ Seleccionar el número de los proveedores cuya categoría no sea


20, en dos soluciones.

a)
SELECT Nro_Prov
FROM Proveedores
WHERE Categoría Not = 20;

189
b)
SELECT Nro_Prov
FROM Proveedores
WHERE Categoría <> 20;

Nro_Prov
3
4
5

6)_ Seleccionar todos los datos de los proveedores que suministran


el artículo 20.

SELECT *
FROM Proveedores
WHERE Nro_Prov IN (SELECT Nro_Prov
FROM Proveedores-Articulos
WHERE Nro_Articulo = 20);

Primero se resuelve el Select interior donde se obtienen los números


de proveedores que suministren el artículo 20.

Nro_Prov
6
3
4

Luego se resuelve el select exterior con la tabla proveedores y por


cada Nro_Prov se verifica si pertenece a la lista de número de
proveedores y el resultado es:

190
Proveedores

Nro_Prov Razon_Social Categoría Ciudad


6 Prov 6 20 Mar del Plata
3 Prov 3 30 La Plata
4 Prov 4 10 La Plata

7)_ Seleccionar el número de los proveedores que no suministren el


artículo 20.

El siguiente Select No es una solución correcta.

SELECT DISTINCT Nro_Prov


FROM Proveedores-Articulos
WHERE Nro_Prov <> 20;

Pues el resultado es el siguiente:


Nro_Prov
1
3
4

El proveedor 3 se encuentra en la respuesta, pero suministra el


artículo 20.

Veamos dos soluciones correctas:

a)_
SELECT DISTINCT Nro_Prov
FROM Proveedores-Articulos
NOT IN (SELECT Nro_Prov
FROM Proveedores-Articulos
WHERE Nro_Articulo = 20);

191
Observamos que primero se resuelve el select interno donde se
obtienen los proveedores que suministran el artículo 20.

b)_

SELECT Nro_Prov
FROM PROVEEDORES
MINUS
SELECT Nro_Prov
FROM Proveedores-Articulos
WHERE Nro_Articulo = 20;

O sea hacemos la diferencia con MINUS, entre los números de


todos los proveedores menos los números de proveedores que
suministran el artículo 20.
Veamos el resultado.

Nro_Prov Razon_Social Categoría Ciudad


1 Prov 1 20 Mar del Plata
5 Prov 5 10 Bahia Blanca

8)_ Seleccionar el número de proveedor, número de artículo y


ciudad para los proveedores y artículos que residen en la misma
ciudad.
Usamos alias para las tablas.

SELECT Nro_Prov, Nro_Articulo, a.ciudad


FROM Proveedores p, Articulos a
WHERE p.ciudad = a.ciudad;

Veamos el resultado.

192
Nro_Prov Nro_Articulo Ciudad
3 20 La Plata
4 20 La Plata
1 30 Mar del Plata
6 30 Mar del Plata
1 40 Mar del Plata
6 40 Mar del Plata
3 50 La Plata
4 50 La Plata
1 60 Mar del Plata
6 60 Mar del Plata

9) Seleccionar los número de proveedor, número de artículo y


nombre de la ciudad de los proveedores que suministren artículos
que se depositan en la misma ciudad donde ellos residen.
Realizamos un join entre las tres tablas.

SELECT p.Nro_Pro, a.Nro_Articulo, a.Ciudad


FROM Proveedores p, Articulos a, Proveedores_Articulos pa
WHERE p.Nro_Prov = pa.Nro_Prov
AND a.Nro_Articulo = pa.Nro_Articulo
AND p.ciudad = a.ciudad;
El resultado es:

Nro_Prov Numero_Articulo Ciudad


1 60 Mar del Plata
1 40 Mar del Plata
1 30 Mar del Plata
3 20 La Plata
4 20 La Plata

10) Seleccionar el número de los proveedores residentes en la


misma ciudad que el proveedor número 5.

193
SELECT Nro_Prov
FROM Proveedores
WHERE Ciudad = (SELECT Ciudad
FROM Proveedores
WHERE Nro_Prov = 5);

El resultado es el siguiente: sólo el proveedor 5 reside en Bahia


Blanca.

Nro_Prov
5

11) Seleccionar el número de los artículos suministrados por


proveedores de Mar del Plata. Vemos la respuesta con dos
soluciones:

a)_
SELECT DISTINCT Nro_Articulo
FROM Proveedores_Articulos pa, Proveedores p
WHERE pa.Nro_Prov = p.Nro_Prov
AND p.Ciudad = “Mar del Plata”;

b)_
SELECT DISTINCT Nro_Articulo
FROM Proveedores_Articulos
WHERE Nro_Prov IN (SELECT Nro_Pro
FROM Proveedores
WHERE Ciudad = “Mar del Plata”);

194
El resultado es:

Nro_Articulo
10
20
60
50
40
30

12) Seleccionar el número de aquellos artículos cuyo peso esté entre


4 y 8 o sean provistos por el proveedor 3, lo resolvemos en 3
soluciones distintas y aplicamos la declaración BETWEEN que en
inglés significa entre, resulta fácil de comprender.

a)_
SELECT pa.Nro_Articulo
FROM Articulos a
WHERE peso BETWEEN (4 AND 8)
UNION
SELECT Nro_Articulo
FROM Proveedores_Articulos
WHERE Nro_Prov = 3;

b)_
SELECT pa.Nro_Articulo
FROM Articulos a, Proveedores_Articulos pa
WHERE pa.Nro_Articulo = a.Nro_Articulo
AND (pa.Nro_Prov = 3 OR (Peso BETWEEN (4 AND
8)));

195
c)_
SELECT Nro_Articulo
FROM Articulos
WHERE (Peso >= 4 AND Peso <= 8)
OR Nro_Articulo IN (SELECT Nro_Articulo
FROM Proveedores_Articulos
WHERE Nro_Proveedor = 3);
13)
Seleccionar el nombre de los artículos que se depositan en la misma
ciudad donde está el depósito del artículo 50.

a)_
SELECT a2.Nombre
FROM Articulos a1, Articulos a2
WHERE a1.Ciudad = 50
AND a1.Ciudad = a2.Ciudad;
Sorprendidos con esta respuesta, esta también es una posibilidad
que nos ofrece el SQL, la de utilizar dos veces una misma tabla.

b)
SELECT Nombre
FROM Articulos
WHERE Ciudad = (SELECT Ciudad
FROM Articulos
WHERE Nro_Articulo = 50);
El resultado es el siguiente:

Nombre
F
C

196
14)_
Seleccionar el nombre de aquellos proveedores que suministren el
artículo 10.

a)
SELECT Razon_Social
FROM Proveedores
WHERE Nro_Prov IN (SELECT Nro_Prov
FROM Proveedores_Articulos
WHERE Nro_Articulo = 10);

b)
SELECT Razon_Social
FROM Proveedores p, Proveedores_Articulos pa
WHERE p.Nro_Prov = pa.Nro_Prov
AND Nro_Articulo = 10;

El resultado es el siguiente:

Razon_Social
Prov 1
Prov 4
Prov 3

MySQL

MySQL es una base de datos de código abierto, lo que significa que


cualquier persona puede acceder al código fuente, es decir, al
código de programación de MySQL. Un programador puede
colaborar en arreglar problemas, realizar mejoras o sugerir
optimizaciones.
MySQL es un sistema de administración de bases de datos
relacional

197
(RDBMS). Es un programa que permite almacenar una enorme
cantidad de datos y de administrarlos para cubrir las necesidades de
cualquier tipo de organización, desde pequeñas a grandes empresas
y organismos administrativos. MySQL compite con sistemas RDBMS
propietarios conocidos, como Oracle, SQL Server y DB2.
MySQL cuenta con todos los elementos necesarios para instalar el
programa para que puedan los usuarios tener diferentes niveles de
acceso, administrar el sistema y proteger los datos. Puede
desarrollar sus propias aplicaciones de base de datos en la mayor
parte de los lenguajes de programación utilizados hoy en dia y
ejecutarlos en casi todos los sistemas operativos.

Conexión a una base de datos


El equipo en el que se ejecuta MySQL y que almacena los datos se
llama servidor MySQL. Para poder conectarse a este servidor,
existen varias alternativas de instalación. Se puede instalar el cliente
y el servidor MySQL en su pc de escritorio. La otra opción es instalar
el cliente MySQL en su pc y el servidor MySQL en otro equipo al
que realizaremos la conexión.
Como tercer opción, su pc puede ser cualquier ordenador que se
conecte a otro equipo con un cliente MySQL instalado, que a su vez
se conecte al servidor MySQL, situado en el mismo equipo o en otro.
MySQL es un intérprete de SQL, permite crear base de datos y
tablas, insertar datos, modificarlos, eliminarlos, realizar consultas.
Las instrucciones se pueden ejecutar en línea de comandos o
embebidas en un lenguaje como PHP nos comunicamos con el
servidor. Cada sentencia debe terminar con punto y coma (;).

Con respecto a si es indiferente o no utilizar mayúsculas y


minúsculas cuando se escriben las instrucciones, depende del
sistema operativo, Para Windows es lo mismo, pero para Linux no.
Por ejemplo Windows interpreta igualmente las siguientes
sentencias:

198
create database instituto;
Create DataBase instituto;

Pero Linux interpretará como un error la segunda.

Es recomendable usar minúsculas.

Para que el servidor nos muestre las bases de datos existentes, se


lo solicitamos enviando la instrucción:

show databases;

Luego de ejecutar la instrucción nos muestra los nombres de las


bases de

Las tablas forman parte de una base de datos.

Para ver las tablas existentes en una base de datos ejecutamos.

show tables;

Aparecerán todas las tablas creadas.

Al crear una tabla debemos resolver qué campos (columnas) tendrá


y que tipo de datos almacenarán cada uno de ellos, es decir, su
estructura.

La tabla debe ser definida con un nombre y con el cual accederemos


a ella.

Creamos una tabla llamada "alumnos" con la siguiente instrucción.

create table alumnos (


nombre varchar(20),
apellido varchar(20));

199
Si queremos crear una tabla con un nombre que ya existe, se
mostrará un mensaje de error diciendo que la acción no se realizó
porque ya existe una tabla con el mismo nombre.

Para ver las tablas existentes en una base de datos ejecutamos:

show tables;

Aparecera "alumnos".

Para ver la estructura de una tabla usamos el comando "describe"


junto al nombre de la tabla:

describe alumnos;

Aparece lo siguiente:

Field Type Null


_________________________
nombre varchar(20) YES
apellido varchar(20) YES

Esta es la estructura de la tabla "Alumnos"; nos muestra cada


campo, su tipo, lo que ocupa en bytes y si ese campo acepta valores
nulos.

Para eliminar una tabla usamos "drop table” ejecutamos:

drop table alumnos;

Si ejecutamos nuevamente:

drop table alumnos;

Aparece un mensaje de error, indicando que no existe, ya que


intentamos borrar una tabla inexistente.

Para evitar este mensaje podemos ejecutar:

200
drop table if exists alumnos;

En la instruccion anterior especificamos que elimine la tabla


"alumnos" si existe.

Recordemos como crear la tabla "alumnos":

create table alumnos (


nombre varchar(20),
apellido varchar(20)
);

Al ingresar los datos de cada registro debe tenerse en cuenta la


cantidad y el orden de los campos.

Ahora vamos a agregar un registro a la tabla:

insert into alumnos (nombre, apellido) values ('Jose','Martinez');

Usamos "insert into". Especificamos los nombres de los campos


entre paréntesis y separados por comas y luego los valores para
cada campo, también entre paréntesis y separados por comas.

Los valores deben ingresarse en el mismo orden en que se nombran


los campos, si ingresamos los datos en otro orden los datos se
guardan de modo incorrecto, ejemplo si permutamos apellido por
nombre. Los datos ingresados, si son de cadenas de caracteres se
colocan entre comillas simples que son obligatorias.

Para ver los registros de una tabla usamos "select":

select nombre, apellido from alumnos;


Aparece un registro.

Un registro es una fila de la tabla que contiene los datos


propiamente dichos. Cada registro tiene un dato por cada columna.

201
Estos son algunos tipos de datos básicos:

El tipo de datos varchar se usa para almacenar cadenas de


caracteres. Una cadena es una secuencia de caracteres. Se coloca
entre comillas (simples):. El tipo "varchar" define una cadena de
longitud variable en la cual determinamos el máximo de caracteres.
Puede guardar hasta 255 caracteres. Para almacenar cadenas de
hasta 30 caracteres, definimos un campo de tipo varchar(30),
integer: se usa para guardar valores numéricos enteros, de -
2000000000 a 2000000000. El tipo float: se usa para almacenar
valores numéricos con decimales.

Los operadores relacionales que se usan en MySQL son los


siguientes:

= igual
<> distinto
> mayor
< menor
>= mayor o igual
<= menor o igual

Podemos seleccionar los registros cuyo apellido sea diferente de


'Garcia', para ello usamos:

select apellido, nombre from alumnos where apellido<>'Garcia';

Para eliminar los registros de una tabla usamos el comando "delete":

delete from alumnos;

La ejecución del comando indicado en la línea anterior borra TODOS


los registros de la tabla.

delete from alumnos where apellido='Garcia';

202
Si intentamos borrar un registro que no existe, o sea que ningún
registro cumple con la condición, no se borrarán registros, pues no
encontró registros con ese dato.

Para modificar uno o varios datos de uno o varios registros


utilizamos "update" Por ejemplo,

Utilizamos "update" junto al nombre de la tabla y "set" junto con el


campo a modificar y su nuevo valor. El cambio afectará a todos los
registros. Se pueden modificar algunos registros, para ello debemos
establecer condiciones de selección con "where".

Si no encuentra registros que cumplan con la condición del "where",


ningún registro será modificado. La cláusula where no es obligatoria,
pero si omitimos la cláusula "where" se modificarán todos los
registros.

Para definir un campo como clave primaria agregamos "primary key"


luego de la definición de todos los campos y entre paréntesis
colocamos el nombre del campo que queremos como clave.

Si intentamos ingresar un valor para la clave primaria que ya existe,


se indica un mensaje de error donde aparece que el registro no se
insertó porque el dato clave existe.

Cuando creamos una clave primaria estamos indexando la tabla, es


decir, creando un índice para dicha tabla.

Cuando definimos un campo de tipo entero puede tener otro atributo


extra 'auto_increment'. Donde los valores de ese campo
'auto_increment', comienzan en 1 y se incrementan en 1
automáticamente.

Sólo puede existir un campo "auto_increment" y debe ser clave


primaria (o estar indexado).

203
Para establecer que un campo autoincremente sus valores
automáticamente, éste debe ser entero (integer) y debe ser clave
primaria:

create table materiasles(


codigo int auto_increment,
denominacion varchar(30),
cantidad int
primary key (codigo)
);

Cuando un campo tiene el atributo "auto_increment" no se necesita


ingresar valor para él, porque se inserta automáticamente tomando
el último valor ingresado, o 1 si es el primero.

Para ingresar registros omitimos el campo definido como


"auto_increment", por ejemplo:

Si continuamos ingresando registros, el código (dato que no


ingresamos) se cargará automáticamente siguiendo la secuencia de
autoincremento.

Está permitido ingresar el valor correspondiente al campo


"auto_increment", por ejemplo:

insert into libros (codigo,denominación, cantidad)


values(12,'Tornillo cabeza fresada',75);

Con la siguiente precaución:

Si el valor está repetido aparecerá un mensaje de error y el


registro no se insertará
Si el valor dado saltea la secuencia, lo toma igualmente y en
las siguientes inserciones, continuará la secuencia tomando
el valor más alto.

204
Si el valor ingresado es 0, no lo toma y guarda el registro
continuando la
secuencia.
Si el valor ingresado es negativo (y el campo no está definido
para aceptar sólo valores positivos), lo ingresa.

Se pueden eliminar todos los registros de una tabla con "truncate


table". Por ejemplo, queremos vaciar la tabla "alumnos", usamos:

truncate table alumnos;

Con "truncate table" se vacía la tabla (elimina todos los registros) y


vuelve a crear la tabla con la misma estructura. La diferencia con
"delete" es la velocidad, es más rápido "truncate table" que con
"delete" donde se borran los registros uno por uno.

Otra diferencia es la siguiente: cuando la tabla tiene un campo


"auto_increment", si borramos todos los registros con "delete" y
luego ingresamos un registro, al cargarse el valor en el campo
autoincrementable, continúa con la secuencia teniendo en cuenta el
valor mayor que se había guardado; si usamos "truncate table" para
borrar todos los registros, al ingresar otra vez un registro, la
secuencia del campo autoincrementable vuelve a iniciarse en 1.

Por ejemplo, tenemos la tabla "libros" con el campo "codigo" definido


"auto_increment", y el valor más alto de ese campo es "5", si
borramos todos los registros con "delete" y luego ingresamos un
registro sin valor de código, se guardará el valor "6"; si en cambio,
vaciamos la tabla con "truncate table", al ingresar un nuevo registro
sin valor para el código, iniciará la secuencia en 1

Con la primera sentencia veremos los libros cuyo precio es igual a


"null" (desconocido); con la segunda, los libros cuyo precio es 0.

205
Igualmente para campos de tipo cadena, las siguientes sentencias
"select" no retornan los mismos registros:

select * from libros where editorial is null;


select * from libros where editorial='';

Con la primera sentencia veremos los libros cuya editorial es igual a


"null", con la segunda, los libros cuya editorial guarda una cadena
vacía.

Hemos visto algunos atributos extra para los campos.

Los campos de tipo entero pueden tener el atributo


"auto_increment", que incrementa automáticamente el valor del
campo en 1.

Un atributo "unsigned" (sin signo) permite sólo valores positivos.

Cuando almacenamos edades nunca guardaremos valores


negativos, entonces debemos definir un campo "edad" de tipo entero
sin signo:

edad integer unsigned;


Si necesitamos almacenar el precio de los libros, definimos un
campo de tipo "float unsigned" porque jamás guardaremos un valor
negativo. Hemos aprendido que al crear una tabla, es importante
elegir el tipo de dato adecuado, el más preciso, según el caso.

Hasta ahora hemos visto 3 tipos de datos: varchar, integer (con y sin
signo) y float (con y sin signo). Hay más tipos, incluso, subtipos.

Para guardar fechas y horas dispone de varios tipos: date (fecha),


datetime (fecha y hora), time (hora), year (año) y timestamp.

Otro valor que podemos almacenar es el valor "null". El valor 'null'


significa “valor desconocido” o "dato inexistente".

206
varchar(x): define una cadena de caracteres de longitud variable en
la cual determinamos el máximo de caracteres con el argumento "x"
que va entre paréntesis. Su rango va de 1 a 255 caracteres. Un
varchar(10) ocupa 11 bytes, pues en uno de ellos almacena la
longitud de la cadena. Ocupa un byte más que la cantidad definida.

char(x): define una cadena de longitud fija, su rango es de 1 a 255


caracteres. Si la cadena ingresada es menor a la longitud definida
(por ejemplo cargamos 'Juan' en un char(10)), almacena espacios en
blanco a la derecha, tales espacios se eliminan al recuperarse el
dato. Un char(10) ocupa 10 bytes, pues al ser fija su longitud, no
necesita ese byte adicional donde guardar la longitud. Por ello, si la
longitud es invariable, es conveniente utilizar el tipo char; caso
contrario, el tipo varchar.

El tipo de datos blob o text permite almacenar bloques de datos de


60000 caracteres de longitud.

Hasta ahora hemos visto 2 tipos de datos para almacenar valores


numéricos: integer (con y sin signo) y float (con y sin signo). Existe
variedad de tipos numéricos para representar enteros, negativos,
decimales.

Para almacenar valores enteros, por ejemplo, en campos que hacen


referencia a cantidades, precios, etc., usamos: 1) integer(x) o int(x):
su rango es de -2000000000 a 2000000000 aprox. El tipo "int
unsigned" va de 0 a 4000000000. El tipo "integer" tiene subtipos:

- mediumint(x): va de –8000000 a 8000000 aprox. Sin signo va de 0


a 16000000 aprox.

- smallint(x): va de –30000 a 30000 aprox., sin signo, de 0 a 60000


aprox.

207
- tinyint(x): define un valor entero pequeño, cuyo rango es de -128 a
127. El tipo sin signo va de 0 a 255.

- bool o boolean: sinónimos de tinyint(1). Un valor cero se considera


falso, los valores distintos de cero, verdadero.

- bigint(x): es un entero largo. Va de –9000000000000000000 a


9000000000000000000 aprox. Sin signo es de 0 a
10000000000000000000.

Para almacenar valores con decimales utilizamos:

float (t,d): número de coma flotante. Su rango es de -3.4e+38 a –


1.1e-38 (9 cifras).

Tipo de dato decimal o numeric: el primer argumento indica el total


de dígitos y el segundo, la cantidad de decimales. El rango depende
de los argumentos, también los bytes que ocupa. Si queremos
almacenar valores entre 0.00 y 99.99 debemos definir el campo
como tipo "decimal (4,2)". Si no se indica el valor del segundo
argumento, por defecto es 0. Para los tipos "float" y "decimal" se
utiliza el punto como separador de decimales.

Es importante elegir el tipo de dato adecuado según el caso, el más


preciso. Por ejemplo, si un campo numérico almacenará valores
positivos menores a

Para guardar fechas y horas dispone de varios tipos:

date: representa una fecha con formato "YYYY-MM-DD". El rango va


de "1000-01-01" a "9999-12-31".

datetime: almacena fecha y hora, su formato es "YYYY-MM-DD


HH:MM:SS". El rango es de "1000-01-01 00:00:00" a "9999-12-31
23:59:59".

208
time: una hora. Su formato es "HH:MM:SS". El rango va de "-
838:59:59" a "838:59:59".

year(2) y year(4): un año. Su formato es "YYYY" o "YY". Permite


valores desde 1901 a 2155 (en formato de 4 dígitos) y desde 1970 a
2069 (en formato de 2 dígitos).

Cualquier campo numérico puede tener otro atributo extra "zerofill".

"zerofill" rellena con ceros los espacios disponibles a la izquierda.

Por ejemplo, creamos la tabla "libros", definiendo los campos


"codigo" y "cantidad" con el atributo "zerofill":

create table libros(


codigo int(6) zerofill auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint zerofill,
primary key (codigo)
);

Si especificamos "zerofill" a un campo numérico, se coloca


automáticamente el atributo "unsigned".

Cualquier valor negativo ingresado en un campo definido "zerofill" es


un valor inválido.Es posible obtener salidas en las cuales una
columna sea el resultado de un cálculo y no un campo de una tabla.
Si queremos saber el monto total en dinero de un título podemos
multiplicar el precio por la cantidad por cada título, pero también
podemos hacer que MySQL realice el cálculo y lo incluya en una
columna extra en la salida:

select titulo, precio,cantidad,precio*cantidad from libros;

209
Si queremos saber el precio de cada libro con un 10% de descuento
podemos incluir en la sentencia los siguientes cálculos:

select titulo, precio,precio*0.1,precio-(precio*0.1) from libros;

Funciones para el manejo de cadenas.

MySQL tiene algunas funciones para trabajar con cadenas de


caracteres. Estas son algunas:

ord(caracter): Retorna el código ASCII para el caracter


enviado como argumento. Ejemplo:

select ord('A');

retorna 65.

char(x,..): retorna una cadena con los caracteres en código


ASCII de los enteros enviados como argumentos. Ejemplo:

select char(65,66,67);

retorna "ABC".

concat(cadena1,cadena2,...): devuelve la cadena resultado de


concatenar los argumentos. Ejemplo:

select concat('Hola,',' ','como esta?');

retorna "Hola, como esta?".

concat_ws(separador,cadena1,cadena2,...): "ws" son las


iniciales de "with separator". El primer argumento especifica el
separador que utiliza para los demás argumentos; el
separador se agrega entre las cadenas a concatenar.
Ejemplo:

select concat_ws('-','Juan','Pedro','Luis');

210
retorna "Juan-Pedro-Luis".

find_in_set(cadena,lista de cadenas): devuelve un valor entre


de 0 a n (correspondiente a la posición), si la cadena
envidada como primer argumento está presente en la lista de
cadenas enviadas como segundo argumento. La lista de
cadenas enviada como segundo argumento es una cadena
formada por subcadenas separadas por comas. Devuelve 0 si
no encuentra "cadena" en la "lista de cadenas". Ejemplo:

select find_in_set('hola','como esta,hola,buen dia');

retorna 2, porque la cadena "hola" se encuentra en la lista de


cadenas, en la posición 2.

length(cadena): retorna la longitud de la cadena enviada


como argumento. Ejemplo:

select length('Hola');

devuelve 4.

locate(subcadena,cadena): retorna la posición de la primera


ocurrencia de la subcadena en la cadena enviadas como
argumentos. Devuelve "0" si la subcadena no se encuentra en
la cadena. Ejemplo:

select locale('o','como le va');

retorna 2.

position(subcadena in cadena): funciona como "locate()".


Devuelve "0" si la subcadena no se encuentra en la cadena.
Ejemplo:

select position('o' in 'como le va');

211
retorna 2.

locate(subcadena,cadena,posicioninicial): retorna la posición


de la primera ocurrencia de la subcadena enviada como
primer argumentos en la cadena enviada como segundo
argumento, empezando en la posición enviada como tercer
argumento. Devuelve "0" si la subcadena no se encuentra en
la cadena. Ejemplos:

select locate('ar','Margarita',1);

retorna 1.

select locate('ar','Margarita',3);

retorna 5.

instr(cadena,subcadena): retorna la posición de la primera


ocurrencia de la subcadena enviada como segundo
argumento en la cadena enviada como primer argumento.
Ejemplo:

select instr('como le va','om');

devuelve 2.

lpad(cadena,longitud,cadenarelleno): retorna la cadena


enviada como primer argumento, rellenada por la izquierda
con la cadena enviada como tercer argumento hasta que la
cadena retornada tenga la longitud especificada como
segundo argumento. Si la cadena es más larga, la corta.
Ejemplo:

select lpad('hola',10,'0');

retorna "000000hola".

212
rpad(cadena,longitud,cadenarelleno): igual que "lpad" excepto
que rellena por la derecha.
left(cadena,longitud): retorna la cantidad (longitud) de
caracteres de la cadena comenzando desde la inquierda,
primer caracter. Ejemplo:

select left('buenos dias',8);

retorna "buenos d".

right(cadena,longitud): retorna la cantidad (longitud) de


caracteres de la cadena comenzando desde la derecha,
último caracter. Ejemplo:

select right('buenos dias',8);

retorna "nos dias".

substring(cadena,posicion,longitud): retorna una subcadena


de tantos caracteres de longitud como especifica en tercer
argumento, de la cadena enviada como primer argumento,
empezando desde la posición especificada en el segundo
argumento. Ejemplo:

select substring('Buenas tardes',3,5);

retorna "enas".

substring(cadena,posicion): retorna la subcadena de la


cadena enviada como argumento, empezando desde la
posición indicada por el segundo argumento. Ejemplo:

select substring('Margarita',4);

retorna "garita".

213
-substring(cadena from posicion): variante de
"substring(cadena,posicion)". Ejemplo:

select substring('Margarita' from 4);

retorna "garita".

substring_index(cadena,delimitador,ocurrencia): retorna la
subcadena de la cadena enviada como argumento antes o
después de la "ocurrencia" de la cadena enviada como
delimitador. Si "ocurrencia" es positiva, retorna la subcadena
anterior al delimitador (comienza desde la izquierda); si
"ocurrencia" es negativa, retorna la subcadena posterior al
delimitador (comienza desde la derecha). Ejemplo:

select substring_index( 'margarita','ar',2);

retorna "marg", todo lo anterior a la segunda ocurrencia de "ar".

select substring_index( 'margarita','ar',-2);

retorna "garita", todo lo posterior a la segunda ocurrencia de "ar".

ltrim(cadena): retorna la cadena con los espacios de la


izquierda eliminados. Ejemplo:

select ltrim(' Hola ');

retorna

"Hola "
.

rtrim(cadena): retorna la cadena con los espacios de la


derecha eliminados. Ejemplo:

select rtrim(' Hola ');

214
retorna

" Hola"
.

trim([[both|leading|trailing] [subcadena] from] cadena): retorna


una cadena igual a la enviada pero eliminando la subcadena
prefijo y/o sufijo. Si no se indica ningún especificador (both,
leading o trailing) se asume "both" (ambos). Si no se
especifica prefijos o sufijos elimina los espacios. Ejemplos:

select trim(' Hola ');

retorna 'Hola'.

select trim (leading '0' from '00hola00');

retorna "hola00".

select trim (trailing '0' from '00hola00');

retorna "00hola".

select trim (both '0' from '00hola00');

retorna "hola".

select trim ('0' from '00hola00');

retorna "hola".

select trim (' hola ');

retorna "hola".

replace(cadena,cadenareemplazo,cadenareemplazar):
retorna la cadena con todas las ocurrencias de la subcadena
reemplazo por la subcadena a reemplazar. Ejemplo:

215
select replace('xxx.mysql.com','x','w');

retorna "www.mysql.com'.

repeat(cadena,cantidad): devuelve una cadena consistente en


la cadena repetida la cantidad de veces especificada. Si
"cantidad" es menor o igual a cero, retorna una cadena vacía.
Ejemplo:

select repeat('hola',3);

retorna "holaholahola".

reverse(cadena): devuelve la cadena invirtiendo el order de


los caracteres. Ejemplo:

select reverse('Hola');

retorna "aloH".

insert(cadena,posicion,longitud,nuevacadena): retorna la
cadena con la nueva cadena colocándola en la posición
indicada por "posicion" y elimina la cantidad de caracteres
indicados por "longitud". Ejemplo:

select insert('buenas tardes',2,6,'xx');

retorna ""bxxtardes".

lcase(cadena) y lower(cadena): retornan la cadena con todos


los caracteres en minúsculas. Ejemplo:

select lower('HOLA ESTUDIAnte');

retorna "hola estudiante".

select lcase('HOLA ESTUDIAnte');

216
retorna "hola estudiante".

ucase(cadena) y upper(cadena): retornan la cadena con todos


los caracteres en mayúsculas. Ejemplo:

select upper('HOLA ESTUDIAnte');

retorna "HOLA ESTUDIANTE".

strcmp(cadena1,cadena2): retorna 0 si las cadenas son


iguales, -1 si la primera es menor que la segunda y 1 si la
primera es mayor que la segunda. Ejemplo:

select strcmp('Hola','Chau');

retorna 1.

Funciones matemáticas.

Los operadores aritméticos son "+","-","*" y "/". Todas las


operaciones matemáticas retornan "null" en caso de error. Ejemplo:

select 5/0;

MySQL tiene algunas funciones para trabajar con números. Aquí


presentamos algunas.

abs(x): retorna el valor absoluto del argumento "x". Ejemplo:

select abs(-20);

retorna 20.

ceiling(x): redondea hacia arriba el argumento "x". Ejemplo:

select ceiling(12.34),

retorna 13.

217
floor(x): redondea hacia abajo el argumento "x". Ejemplo:

select floor(12.34);

retorna 12.

greatest(x,y,..): retorna el argumento de máximo valor.


least(x,y,...): con dos o más argumentos, retorna el argumento
más pequeño.
mod(n,m): significa "módulo aritmético"; retorna el resto de "n"
dividido en "m". Ejemplos:

select mod(10,3);

retorna 1.

select mod(10,2);

retorna 0.

%: devuelve el resto de una división. Ejemplos:

select 10%3;

retorna 1.

select 10%2;

retorna 0.

power(x,y): retorna el valor de "x" elevado a la "y" potencia.


Ejemplo:

select power(2,3);

retorna 8.

218
rand(): retorna un valor de coma flotante aleatorio dentro del
rango 0 a 1.0.
round(x): retorna el argumento "x" redondeado al entero más
cercano. Ejemplos:

select round(12.34);

retorna 12.

select round(12.64);

retorna 13.

srqt(): devuelve la raiz cuadrada del valor enviado como


argumento.
truncate(x,d): retorna el número "x", truncado a "d" decimales.
Si "d" es 0, el resultado no tendrá parte fraccionaria.
Ejemplos:

select truncate(123.4567,2);

retorna 123.45;

Funciones para fecha y hora

MySQL tiene funciones para trabajar con fechas y horas

adddate(fecha, interval expresion): retorna la fecha


agregándole el intervalo especificado. Ejemplos:
adddate('2006-10-10',interval 25 day) retorna "2006-11-04".
adddate('2006-10-10',interval 5 month) retorna "2007-03-10".
adddate(fecha, dias): retorna la fecha agregándole a fecha
"dias". Ejemplo: adddate('2006-10-10',25), retorna "2006-11-
04".
addtime(expresion1,expresion2): agrega expresion2 a
expresion1 y retorna el resultado.

219
current_date: retorna la fecha de hoy con formato "YYYY-MM-
DD" o "YYYYMMDD".
current_time: retorna la hora actual con formato "HH:MM:SS"
o "HHMMSS".
date_add(fecha,interval expresion tipo) y
date_sub(fecha,interval expresion tipo): el argumento "fecha"
es un valor "date" o "datetime", "expresion" especifica el valor
de intervalo a ser añadido o substraído de la fecha indicada
(puede empezar con "-", para intervalos negativos), "tipo"
indica la medida de adición o substracción.

Ejemplo: date_add('2006-08-10', interval 1 month) retorna


"2006-09-10"; date_add('2006-08-10', interval -1 day) retorna
"2006-09-09"; date_sub('2006-08-10 18:55:44', interval 2
minute) retorna "2006-08-10 18:53:44"; date_sub('2006-08-10
18:55:44', interval '2:3' minute_second) retorna "2006-08-10
18:52:41". Los valores para "tipo" pueden ser: second, minute,
hour, day, month, year, minute_second (minutos y segundos),
hour_minute (horas y minutos), day_hour (días y horas),
year_month (año y mes), hour_second (hora, minuto y
segundo), day_minute (dias, horas y minutos),
day_second(dias a segundos).

datediff(fecha1,fecha2): retorna la cantidad de días entre


fecha1 y fecha2.
dayofmonth(fecha): retorna el día del mes para la fecha dada,
dentro del rango 1 a 31. Ejemplo: dayofmonth('2006-08-10')
retorna 10.
dayofweek(fecha): retorna el índice del día de semana para la
fecha pasada como argumento. Los valores de los índices
son: 1=domingo, 2=lunes,... 7=sábado). Ejemplo:
dayofweek('2006-08-10') retorna 5, o sea jueves.

220
dayofyear(fecha): retorna el día del año para la fecha dada,
dentro del rango 1 a 366. Ejemplo: dayofmonth('2006-08-10')
retorna 222.
extract(tipo from fecha): extrae partes de una fecha.

Ejemplos:

extract(year from '2006-10-10'), retorna "2006".


extract(year_month from '2006-10-10 10:15:25') retorna "200610".
extract(day_minute from '2006-10-10 10:15:25') retorna "101015";

Los valores para tipo pueden ser: second, minute, hour, day, month,
year, minute_second, hour_minute, day_hour, year_month,
hour_second (horas, minutos y segundos), day_minute (días, horas
y minutos), day_second (días a segundos).

hour(hora): retorna la hora para el dato dado, en el rango de 0


a 23.

Ejemplo: hour('18:25:09') retorna "18";

minute(hora): retorna los minutos de la hora dada, en el rango


de 0 a 59.
month(fecha): retorna el mes de la fecha dada, en el rango de
1 a 12.
now() y sysdate(): retornan la fecha y hora actuales.
period_add(p,n): agrega "n" meses al periodo "p", en el
formato "YYMM" o "YYYYMM"; retorna un valor en el formato
"YYYYMM". El argumento "p" no es una fecha, sino un año y
un mes. Ejemplo: period_add('200608',2) retorna "200610".
period_diff(p1,p2): retorna el número de meses entre los
períodos "p1" y "p2", en el formato "YYMM" o "YYYYMM". Los
argumentos de período no son fechas sino un año y un mes.
Ejemplo: period_diff('200608','200602') retorna 6.

221
second(hora): retorna los segundos para la hora dada, en el
rango de 0 a 59.
sec_to_time(segundos): retorna el argumento "segundos"
convertido a horas, minutos y segundos. Ejemplo:
sec_to_time(90) retorna "1:30".
timediff(hora1,hora2): retorna la cantidad de horas, minutos y
segundos entre hora1 y hora2.
time_to_sec(hora): retorna el argumento "hora" convertido en
segundos.
to_days(fecha): retorna el número de día (el número de día
desde el año 0).
weekday(fecha): retorna el índice del día de la semana para la
fecha pasada como argumento. Los índices son: 0=lunes,
1=martes,... 6=domingo). Ejemplo: weekday('2006-08-10')
retorna 3, o sea jueves.
year(fecha): retorna el año de la fecha dada, en el rango de
1000 a 9999. Ejemplo: year('06-08-10') retorna "2006".

222
UNIDAD 5: ARQUITECTURA DE SISTEMAS DE BASES
DE DATOS.

Objetivo de la unidad 5.
Al término de la unidad el alumno identificará diversas
arquitectura de sistemas de base de datos como las centralizadas, el
sistema cliente / servidor, sistemas paralelos y distribuidas.

Introducción
La arquitectura de un sistema de base de datos esta intimamente
relacionada con el sistema informático en el que se ejecuta el
sistema de bases de datos, algunos puntos clave de la arquitectura
de bases de datos son:
 Conexión en red: en esta conexión de computadoras se vera
la ejecución de tareas en un servidor y en los sistemas de
clientes. De aquí surge el sistema Cliente-Servidor.
 Procesamiento paralelo dentro de una computadora: Agiliza el
proceso de las tareas dentro de una base de datos.
 Distribución de datos: permite la accesibilidad de diferentes
áreas de la organización.

SISTEMAS CENTRALIZADOS
Este tipo de arquitectura se adapta a la forma tradicional de
una organización, con estructura centralizada y jerárquica, dividida
en departamentos. Cada departamento tiene actividades muy
específicas, las relaciones que pueda establecer con otros
departamentos están muy definidas y limitadas y se realizan a través
de la jerarquía.
El sistema de la base de datos centralizados se ejecuta en el único
sistema informático existente, sin interactuar con ningún otro
sistema.

223
La arquitectura está centralizada en un servidor central al que sólo
tienen acceso los usuarios del departamento correspondiente, no
puede estar ubicada en varias partes, sino que debe estar en una
sola computadora, a la cual podrán ingresar los usuarios que
necesiten hacer uso.
Las tareas de gestión y control son más sencillas pero no suelen
ofrecer soluciones excesivamente avanzadas en la gestión de bases
de datos.

Características funcionales
• La computadora central es la única computadora de la
organización.
• En ella encontramos todos los datos y es la responsable de toda la
información.
• Desde la computadora central se controla el acceso a múltiples
terminales conectadas a través de productos integrados al equipo.
• Las terminales funcionan como computadoras esclavas de la
computadora central.
• Cada usuario tiene un número asignado, derechos y prioridades de
ejecución en la máquina de sus programas o peticiones.

Características físicas
• Una única computadora corporativa con la suficiente capacidad
para soportar todos los procesos de la organización, todos los datos
y las posibles comunicaciones.
• Una gran base de datos donde se encuentran todos los datos de la
organización.
• Impresoras y terminales (o computadoras con emulación de
terminal) como puestos de trabajo conectados en grupos a la
computadora central.

224
Características lógicas
• Se ejecutan todos los procesos en la computadora central.
• Si la empresa está dividida geográficamente y dispone de
comunicaciones, todos los puestos de trabajo están conectados a la
computadora formando una "estrella".

Ventajas e Inconvenientes
Entre las principales ventajas se encuentran:
• Alto rendimiento en la operación.
• Alta disponibilidad.
• Entorno de trabajo muy estable y personal experimentado.
• Control total de la computadora, al ser éste único y residente en un
único Centro de Cómputos.
• Concentración de todo el personal de desarrollo y administración
del sistema en un único Centro de Cómputos.
• Alto nivel de seguridad.
• Entre los inconvenientes destacan:
• Alto precio del equipo, al necesitarse mucha potencia de
tratamiento para dar servicio a todos los usuarios que estén
conectados y gran espacio en disco para almacenar todos los datos
de la organización.
• Alta dependencia de las comunicaciones si existen. En caso de
caída de una línea, todos los puestos de trabajo dependientes de
dicha línea quedan inactivas.
• Interfaces de usuario de caracteres, donde no encontramos
gráficos y por lo tanto, poco amigables.

SISTEMAS CLIENTE-SERVIDOR
La Arquitectura Cliente/Servidor.- Es un modelo para el desarrollo de
sistemas de información en el que las transacciones se dividen en
procesos independientes que cooperan entre sí para intercambiar
información, servicios o recursos. Se denomina cliente al proceso
que inicia el diálogo o solicita los recursos y servidor al proceso que

225
da respuesta a las solicitudes.
La Arquitectura múltiples clientes / múltiples servidores.- Son mas
flexibles, ya que la base de datos es distribuida en varios servidores.
Cada cliente tiene un servidor directo al cual hace sus peticiones. La
comunicación entre los servidores ejecuta las transacciones y
peticiones de los usuarios y esta es transparente para ellos.
Arquitectura de igual a igual.-Un SGBD verdadero no distingue entre
cliente y servidor.
Idealmente cada maquina puede realizar la funcionalidad de cliente y
de servidor. La base de datos esta físicamente distribuida en
diferentes lugares fragmentado y replicando los datos. La
fragmentación es deseable ya que hace posible el poner los datos
cerca de los usuarios que los necesitan, de esta forma reduciendo
potencialmente el costo de la transmisión y reduciendo el tamaño de
las relaciones involucradas en las consultas de los usuarios.
Entre las principales características de la arquitectura
cliente/servidor se pueden destacar las siguientes:
• El servidor presenta a todos sus clientes una interfaz única
• El cliente no necesita conocer la lógica del servidor, sólo su interfaz
externa.
• El cliente no depende de la ubicación física del servidor, ni del tipo
de equipo físico en el que se encuentra, ni de su sistema operativo.
• Los cambios en el servidor implican pocos o ningún cambio en el
cliente.
Arquitectura Cliente / servidor.

226
Cliente

Servidor

Tipos de Arquitectura Cliente-Servidor:


Arquitectura de 2 capas:
La arquitectura cliente/ servidor tradicional es una solución de 2
capas. La arquitectura de 2 capas consta de tres componentes
distribuidos en dos capas: cliente (solicitante de servicios) y servidor
(proveedor de servicios). Los tres componentes son:
- Interfaz de usuario.
- Gestión del procesamiento.
- Gestión de la base de datos.
Hay 2 tipos de arquitecturas cliente servidor de dos capas:
- Clientes obesos (thick clients): La mayor parte de la lógica de la
aplicación (gestión del procesamiento) reside junto a la lógica de la
presentación (interfaz de usuario) en el cliente, con la porción de
acceso a datos en el servidor.
- Clientes delgados (thin clients): sólo la lógica de la presentación
reside en el cliente, con el acceso a datos y la mayoría de la lógica
de la aplicación en el servidor.
Es posible que un servidor funcione como cliente de otro servidor.
Esto es conocido como diseño de dos capas encadenado.

Limitaciones:
- El número usuarios máximo es de 100. Más allá de este número de
usuarios se excede la capacidad de procesamiento.

227
- No hay independencia entre la interfaz de usuario y los
tratamientos, lo que hace delicada la evolución de las aplicaciones.
- Dificultad de relocalizar las capas de tratamiento consumidoras de
cálculo.
- Reutilización delicada del programa desarrollado bajo esta
arquitectura.

Arquitectura de 3 capas:
La arquitectura de 3 capas surgió para superar las limitaciones de la
arquitectura de 2 capas. La tercera capa (servidor intermedio) está
entre el interfaz de usuario (cliente) y el gestor de datos (servidor).
La capa intermedia proporciona gestión del procesamiento y en ella
se ejecutan las reglas y lógica de procesamiento. Permite cientos de
usuarios (en comparación con sólo 100 usuarios de la arquitectura
de 2 capas). La arquitectura de 3 capas se usa cuando se necesita
un diseño cliente / servidor que proporcione, en comparación con la
arquitectura de 2 capas, incrementar el rendimiento, flexibilidad,
mantenibilidad, reusabilidad y escalabilidad mientras se esconde la
complejidad del procesamiento distribuido al usuario.

Limitaciones:
Construir una arquitectura de 3 capas es una tarea complicada. Las
herramientas de programación que soportan el diseño de
arquitecturas de 3 capas no proporcionan todos los servicios
deseados que se necesitan para soportar un ambiente de
computación distribuida. Un problema potencial en el diseño de
arquitecturas de 3 capas es que la separación de la interfaz gráfica
de usuario, la lógica de gestión de procesamiento y la lógica de
datos no es siempre obvia. Algunas lógicas de procesamiento de
transacciones pueden aparecer en las 3 capas. La ubicación de una
función particular en una capa u otra debería basarse en criterios
como los siguientes:
- Facilidad de desarrollo y comprobación.

228
- Facilidad de administración.
- Escalabilidad de los servidores.
- Funcionamiento (incluyendo procesamiento y carga de la red).

El middleware:
Como hemos visto, las capas están localizadas en máquinas
diferentes que están conectadas a través de la red. El middleware es
el software que proporciona un conjunto de servicios que permite el
acceso transparente a los recursos en una red. El middleware es un
módulo intermedio que actúa como conductor entre dos módulos de
software. Para compartir datos, los dos módulos de software no
necesitan saber cómo comunicarse entre ellos, sino cómo
comunicarse con el módulo de middleware.
Es el encargado del acceso a los datos: recibe las consultas y datos
recuperados directamente de la aplicación y los transmite por la red.
También se ocupa de enviar de vuelta a la aplicación, los datos de
interés y de la generación de códigos de error.

Ventajas y Desventajas
Ventajas
• Aumento de la productividad:
• Los usuarios pueden utilizar herramientas que le son familiares,
como hojas de cálculo y herramientas de acceso a bases de datos.
• Mediante la integración de las aplicaciones cliente/servidor con las
aplicaciones personales de uso habitual, los usuarios pueden
construir soluciones propias que se ajusten a sus necesidades muy
variables.
• Una interfaz gráfica de usuario bien diseñada reduce el tiempo de
aprendizaje de las aplicaciones.
• Se obtienen menores costos de operación:
• Permiten un mejor aprovechamiento de los sistemas existentes,
protegiendo la inversión. Por ejemplo, el compartir los servidores

229
(habitualmente caros) y dispositivos periféricos (como impresoras)
entre máquinas clientes permite un mejor rendimiento del conjunto.
• Proporcionan un mejor acceso a los datos. La interfaz de usuario
ofrece una forma homogénea de ver el sistema, independientemente
de los cambios o actualizaciones que se produzcan en él y de la
ubicación de la información.
• El movimiento de funciones desde un servidor central hacia
servidores o clientes locales transmite los costos de ese proceso
hacia computadoras más pequeñas y por tanto, más baratas.
• Mejora en el rendimiento de la red:
• Las arquitecturas cliente/servidor eliminan la necesidad de mover
grandes bloques de información por la red hacia los ordenadores
personales o estaciones de trabajo para su proceso. Los servidores
controlan los datos, procesan peticiones y después transfieren sólo
los datos requeridos a la máquina cliente. Entonces, la máquina
cliente presenta los datos al usuario mediante interfaces amigables.
Todo esto reduce el tráfico de la red, lo que facilita que pueda
soportar un mayor número de usuarios.
• Tanto el cliente como el servidor pueden escalarse para ajustarse a
las necesidades de las aplicaciones. Las UCPs utilizadas en los
respectivos equipos pueden dimensionarse a partir de las
aplicaciones y el tiempo de respuesta que se requiera.
• La existencia de varias UCPs proporciona una red más confiable:
un error en uno de los equipos no significa necesariamente que el
sistema deje de funcionar.
• En una arquitectura como ésta, los clientes y los servidores son
independientes entre si con lo que pueden renovarse para aumentar
sus funciones y capacidad de forma independiente, sin afectar al
resto del sistema.
• La arquitectura de los sistemas cliente/servidor permite el uso de
computadoras especializadas (servidores de base de datos,
estaciones de trabajo para CAD, etc.).

230
• Permite centralizar el control de sistemas que estaban
descentralizados, como por ejemplo la gestión de computadoras
personales que antes estuvieron aislados.

Desventajas
• Hay una alta complejidad tecnológica al tener que integrar una gran
variedad de productos.
• Requiere un fuerte rediseño de todos los elementos involucrados
en los sistemas de información (modelos de datos, procesos,
interfaces, comunicaciones, almacenamiento de datos, etc.).
Además, en la actualidad existen pocas herramientas que ayuden a
determinar la mejor forma de dividir las aplicaciones entre la parte
cliente y la parte servidor.
• Es más difícil asegurar un elevado grado de seguridad en una red
de clientes y servidores que en un sistema con un único servidor
centralizado.
• A veces, los problemas de congestión de la red pueden degradar el
rendimiento del sistema por debajo de lo que se obtendría con una
única máquina (arquitectura centralizada). También la interfaz
gráfica de usuario puede a veces hacer más lento el funcionamiento
de la aplicación.
• El quinto nivel de esta arquitectura (bases de datos distribuidas) es
técnicamente muy complejo y en la actualidad hay muy pocas que
garanticen un funcionamiento totalmente eficiente.

Fases de implantación
• Fase de Iniciación
Esta etapa se centra sobre todo en la distribución física de los
componentes entre plataformas. Los dos tipos de plataforma son:
• Una plataforma cliente para la presentación (generalmente una
computadora de escritorio).

231
• Una plataforma servidora (como por ejemplo el servidor de una
base de datos relacional) para la ejecución de procesos y la gestión
de los datos.
Un ejemplo sería el de una herramienta de consulta que reside en
una computadora personal a modo de cliente y que genera
peticiones de datos que van a través de la red hasta el servidor de
base de datos. Estas peticiones se procesan, dando como resultado
un conjunto de datos que se devuelven al cliente.
En esta fase pueden surgir los siguientes problemas:
• Cómo repartir la lógica de la aplicación entre las plataformas cliente
y servidor de la mejor forma posible.
• Cómo gestionar la arquitectura para que permita que cualquier
cliente se conecte con cualquier servidor.

• Fase de Proliferación
La segunda etapa de una arquitectura cliente/servidor se caracteriza
por la proliferación de plataformas clientes y servidoras. Ahora, el
entorno para la interacción entre clientes y servidores se hace
mucho más complejo. Puede hacerse una distinción entre:
• Datos de servidores a los que se accede a través de una red de
área media (WAN).
• Datos a los que se accede a través de una red de área local (LAN).
Los mecanismos de conexión son muy variados y suelen ser
incompatibles. En esta fase los problemas que se pueden encontrar
son:
• La gestión de accesos se convierte en crítica y compleja debido a
la estructura del organismo donde se está implantando la
arquitectura. El mercado ofrece algunas soluciones que mejoran la
interoperabilidad y que se basan en conexiones modulares que
utilizan entre otros:
• Drivers en la parte cliente
• Pasarelas (gateways) a bases de datos
• Especificaciones de protocolos cliente/servidor, etc.

232
• Los requisitos de actualización de datos pasan a formar parte de
los requisitos solicitados al sistema cliente/servidor. Ahora no sólo se
consultan datos, sino que se envían peticiones para actualizar,
insertar y borrar datos.

• Fase de Control
En esta fase se consolidan los caminos de acceso desde una
plataforma cliente particular a una plataforma servidora particular.
Los conceptos en los que se debe poner especial énfasis son los
siguientes:
• Transparencia en la ubicación. Significa que la aplicación cliente no
necesita saber nada acerca de la ubicación (física o lógica) de los
datos o los procesos. La ubicación de los recursos debe estar
gestionada por servidores y estar representada en las plataformas
adecuadas de forma que se facilite su uso por parte de las
plataformas cliente.
• Gestión de copias. El sistema se debe configurar de forma que se
permita copiar la información (datos o procesos) de los servidores.
• Especialización de los equipos servidores en servidores de bases
de datos o en servidores de aplicaciones. Los servidores de bases
de datos continúan ofreciendo servicios orientados a datos a través
de llamadas SQL o a través de procedimientos almacenados. En
cualquier caso, los servicios se orientan a mantener la integridad de
los datos. Por otro lado, los servidores de aplicaciones se centran en
los procesos implementando partes de la lógica de la aplicación en
la parte servidora.

• Fase de Integración
Esta etapa se caracteriza por la función en conjunto con las que
funcionan la gestión de accesos, la gestión de copias y la gestión de
recursos. La gestión de la información se debe realizar de forma que
se pueda entregar la información controlada por los servidores que
contienen los datos a las plataformas clientes que los requieran. El

233
concepto en que se basa este tipo de gestión es la distinción entre
dos tipos de datos: datos de operación y datos de información. Para
ajustarse a los posibles cambios en los procesos, los datos de
operación varían continuamente mientras que los datos de
información son invariables porque son de naturaleza histórica y se
obtienen tomando muestras en el tiempo de los datos de operación.
• Fase de Madurez
Esta es la etapa final de una arquitectura cliente/servidor. Se
caracteriza por una visión más flexible de las plataformas físicas del
sistema que se contemplan como una única unidad lógica. Este
estado también se caracteriza porque la tecnología cliente/servidor
se ha generalizado en la empresa. Ya no es un problema saber qué
componentes se distribuyen en qué plataformas, porque los recursos
se pueden redistribuir para equilibrar la carga de trabajo y para
compartir los recursos de información. Lo fundamental aquí es saber
quién ofrece qué servicios. Para ello es necesario distinguir qué tipo
de servicios y recursos se necesitan y conocer las características de
esta arquitectura basada en servicios.
En la fase de integración veíamos que se produce una distinción
entre datos de operación y datos de información histórica. Por el
contrario, en un entorno de operación cliente/servidor que se
encuentre en la fase de madurez, lo interesante es distinguir entre
dos nuevos términos: organismo y grupo de trabajo. Esta distinción
se establece basándose en sus diferencias organizativas. El grupo
de trabajo es el entorno en el que grupos organizados de personas
se centran en tareas específicas de la actividad del organismo al que
pertenecen. Estos equipos de personas requieren información propia
y reglas de trabajo particulares, que pueden ser diferentes de las de
la organización.
Una arquitectura basada en servicios es la que se contempla como
una colección de consumidores de servicios poco relacionados entre
sí y los productores de dichos servicios. La utilización de este tipo de
arquitectura permite pensar en nuevos retos de diseño:

234
• Desarrollo de componentes reutilizables entre distintas aplicaciones
y distintos grupos de trabajo.
• Desarrollo de aplicaciones distribuidas.
• Gestión del desarrollo de aplicaciones entre distintos equipos, etc.
Los sistemas Cliente-Servidor utilizan varios tipos de servidores los
cuales son:
• Servidor de transacciones: también llamados sistemas servidores
de consultas, proporcionan una interfaz a través de la cual los
clientes consultan a la base de datos. Se pueden usar con SQL o
procedimientos almacenados.
• Servidor de datos: permiten que los clientes puedan interactuar con
los servidores realizando peticiones de lectura o modificación de
datos en unidades tales como archivos o páginas.

Servidor de Transacciones
Estos servidores se ocupan de la interacción con los Clientes,
liberando al servidor de datos de esa actividad.
El servidor de transacciones se encarga de mantener un alto
rendimiento, disponibilidad e integridad de datos. Asimismo, se
asegura que ninguna computadora tenga demasiado o muy poco
que hacer.
Cuando un servidor de transacciones ve que a una computadora se
le ha dado demasiado trabajo, automáticamente divide el trabajo
entre todas las computadoras disponibles, haciendo que las mismas
compartan recursos para evitar que alguna de las máquinas se
colapse.
Cuando actualiza bases de datos, el servidor de transacciones
también ejecuta lo que se conoce como el manejo de estados. Esto
quiere decir que si el servidor de transacciones percibe que una
computadora no puede completar una transacción, hace que el
software abandone el trabajo y regrese a su estado original sin que
ocurra corrupción de datos.

235
Se basa en distintas normas, como pueda ser la ODBC4. Utiliza SQL
para la comunicación con los clientes y ofrece la ejecución de
procedimientos remotos.
Son una parte que le es propia a los servidores de datos
centralizados.

Servidor de datos
Estos no son necesariamente servidores de bases de datos
relacionales, pueden ser servidores de archivos, servidores de
directorios, de objetos, etc.
Tienen una comunicación directa con los clientes, de forma que el
cliente debe tener todas las funcionalidades del sistema servidor.
Sus características son:
• Envio de páginas o elementos.
• Bloqueo: gestionado por el servidor.
• Cache de datos: agiliza el envió de datos muy comunes.
• Cache de bloqueos.
• Open DataBase Connectivity (ODBC)
• Costo de comunicación

Sistemas Paralelos
El concepto de paralelismo supone la introducción de varios
procesadores para resolver un problema. Sabemos que un
procesador es diez veces más potente que un procesador de
potencia normal y es mucho más caro que diez procesadores de
potencia normal. Por ello, si paralelizamos nuestro programa es
decir, dividimos la carga computacional entre varios procesadores
distintos, vamos a obtener una mejora en la relación entre costo y
rendimiento. Con menos inversión en hardware estamos obteniendo
mucha más potencia computacional.
Los sistemas paralelos mejoran la velocidad de procesamiento y
Entradas\Salidas mediante la utilización de UCP y discos en
paralelo.

236
Las arquitecturas de sistemas paralelos varían entre dos extremos:
• No compartir nada.- Cada procesador tiene acceso exclusivo a su
memoria principal y a sus unidades de disco.
• Memoria compartida.- Cualquier procesador tiene acceso a
cualquier módulo de memoria o unidad de disco a través de una
interconexión rápida.
• Un punto intermedio son los discos compartidos - donde cualquier
procesador tiene acceso a cualquier unidad de disco a través de la
interconexión, pero solo tiene acceso exclusivo a su memoria
principal.
• Jerárquico- Es un híbrido de las anteriores.
También se le llama grano grueso (varias computadoras
independientes) y grano fino (varias computadoras integrados al
mismo sistema).
Cuando trabajamos con paralelismo debemos tener muy en cuenta
que se trabaja con recursos dependientes entre si, lo deseable es
que sean recursos independientes que permitan la ganancia de
velocidad lineal.

Ganancia de ampliabilidad
Es la capacidad para procesar tareas mas largas en el mismo tiempo
mediante un incremento de los recursos.
Existen dos tipos de ampliabilidad:
1. Ampliabilidad por lotes:
a. Aumentar el tamaño de la base de datos, y las tareas son trabajos
más largos, cuyos tiempos de ejecución dependen del tamaño de la
base de datos (Ej.: recorrido secuencial)
b. El problema es el tamaño.
2. Ampliabilidad de transacciones:
a. Aumenta la velocidad a la que se envían las peticiones a la base
de datos, y el tamaño crece proporcionalmente a la tasa de
transacción.
(Ej.: reservar una butaca en el cine: mas butaca, mas reservas)

237
b. Se adapta muy bien a la ejecución paralela, ya que las
transacciones se ejecutan de forma concurrente.
c. Las transacciones duran lo mismo, por lo que es factible un
paralelismo lineal.

Procesamiento de consultas y optimización


La optimización de consultas paralelas toma ventaja del paralelismo
intra operación y del paralelismo Inter. Operación.
Paralelismo intra operación.- Esta consiste en ejecutar una
operación en varios nodos de una maquina con varios procesadores.
Paralelismo Inter. Operación.- Ocurre cuando dos o mas
operaciones son ejecutadas en paralelo.
Paralelismo Independiente.- Ocurre cuando las operaciones se
ejecutan al mismo tiempo o en orden arbitrario. El paralelismo
independiente es posible solo cuando las operaciones no involucran
los mismos datos.

Problemas del paralelismo


• Costo inicial:
El inicio de un único proceso lleva asociado un costo inicial. En una
operación paralela compuesta por miles de procesos, el tiempo de
inicio puede ser mayor que el de procesamiento.
• Interferencia:
Problema en el ascenso a recursos compartidos, que traen consigo
Bloqueos.
Dado que rara vez se puede dividir una tarea en pasos iguales, es
difícil que se consiga un aumento del rendimiento lineal.

Redes de Interconexión de Arquitecturas Paralelas


Entre las interconexiones de arquitecturas paralelas tenemos las
siguientes:

238
• Bus: todos los componentes del sistema pueden enviar o recibir
datos de un único bus de comunicaciones. El bus solo puede
gestionar la comunicación de un elemento en un momento dado.
• Malla: los componentes se organizan como nodos de una retícula.
Se utiliza el paso de mensajes.
• Hipercubo: sistema de conexión n-dimensional basado en la
representación binaria de los componentes. Es un sistema de altas
prestaciones y mas eficiente que el de malla.

SISTEMAS DISTRIBUIDOS
En un sistema de datos distribuidos, la información se almacena en
varias computadoras estas computadoras están conectadas por
redes de comunicación de alta velocidad o líneas telefónicas. Por lo
que pueden realizar transacciones globales, según tenga que
acceder solo a sus datos o a los datos almacenados en las bases de
datos distribuidas.
Objetivo primordial de los sistemas distribuidos es el
compartimiento fácil y eficiente de los recursos entre múltiples
usuarios. Por esto, no se les debe confundir con los sistemas
paralelos, cuyo propósito es acelerar la ejecución de un cierto
programa en un único ordenador (normalmente aplicaciones
científicas), y están compuestos por múltiples procesadores que
suelen compartir memoria y reloj.
Un sistema distribuido puede verse como un sistema formado por
varias computadoras haciendo algo conjuntamente, de lo que se
desprenden tres características inmediatas:
-Compuesto por múltiples computadoras. Un sistema distribuido
está compuesto de más de un sistema independiente, cada uno con
una o más CPU.s, memoria local, memoria secundaria (discos) y, en
general, conexiones con periféricos de acceso inmediato (online).
-Hay interconexión entre ellos. Parece claro que si varias
computadoras distintas van a colaborar en la realización de tareas,

239
deben comunicarse y sincronizarse entre ellas, por lo que debe
haber alguna línea o red de interconexión.
-Tienen un estado compartido. Si las computadoras realizan un
trabajo conjunto, deben mantener un estado compartido, es decir,
todas las computadoras tienen la misma visión del estado del
sistema distribuido: tablas, bases de datos del sistema, de
servidores, etc.

Como distribuir la información?


• Se deben seguir razonamientos lógicos al respecto, como puede
ser la utilización, la dispersión geográfica de las computadoras, las
líneas de comunicación entre ellas, su potencia, etc.
La arquitectura de sistemas distribuidos cuenta con:
• Compartimiento de datos: los datos de una ubicación pueden ser
accedidos por otro usuario de otra ubicación en cualquier momento.
• Autonomía: cada ubicación tiene un cierto grado de control sobre
los datos que tiene almacenados.
• Disponibilidad: si una de las computadoras del sistemas distribuido
de la base de datos falla, el resto puede seguir funcionando.

Ventajas de un sistema distribuido:


• Permite compartir recursos
• Apertura
• Concurrencia
• Escalabilidad
• Tolerancia de fallas
• Transparencia

Desventajas de un sistema distribuido:


• Complejidad
• Seguridad
• Manejabilidad
• Impredecibilidad

240
Problemas de los sistemas distribuidos:
- Mayor costo de desarrollo del software: al tener que reunir una
serie de características especiales.
- Mayor probabilidad de errores: como las computadoras operan en
paralelo, es más difícil asegurar la corrección de los algoritmos.
- Mayor sobrecarga de procesamiento: el intercambio de mensajes y
el cómputo adicional necesario para conseguir la coordinación entre
las distintas computadoras constituyen una forma especial de
sobrecarga.

Redes de comunicación utilizadas:


- En la interconexión de los sistemas distribuidos y cliente servidor,
se utilizan las redes de comunicación entre computadoras.
- 11LAN: son redes de pequeño tamaño (T<2km) y debajo costo
utilizadas en edificios.
- 12MAN: Redes de fibra, de tamaño inferior a 10-20km, se utilizan
para unir distintas sucursales de una entidad, son las más utilizadas
en sistemas distribuidos de alto rendimiento.
- 13WAN: Redes Globales que abarcan grandes áreas. Suelen
basarse en esquemas punto a punto, con routers y gateways para
dar acceso a las mismas. No se suele tener conexiones directas.
11 LAN: Local Area Network.
12 MAN: Metropolitan area network.
13 WAM: Wide Area Network
Este último punto se ve en detalle en la materia REDES.

Al terminar este trabajo de arquitectura de sistemas de bases de


datos hemos logrado entender y analizar en gran parte su estructura
física, lógica, y funcional.
Al hablar de arquitecturas centralizadas pudimos observar que se
trabaja con un solo sistema informático y no interactúa con ningún

241
otro, estos sistemas abarcan un solo puesto de trabajo y muchos
puestos de trabajo.
Las arquitecturas centralizadas no suelen ofrecer soluciones
excesivamente avanzadas en la gestión de bases de datos.
El advenimiento de los sistemas de gestión de bases de datos
relaciónales (RDBMS), Relational Database Management System
fue, realmente, la tecnología clave que hizo posible la arquitectura
informática cliente-servidor. El RDBMS servia como almacén
centralizado para los datos de la organización. El RDBMS estaba
diseñado para gestionar el acceso multiusuario a un conjunto
compartido de datos. Toda la gestión de bloqueos y conexiones es
llevada a cabo por el RDBMS, que también se encarga de la
seguridad. El lenguaje SQL (Structured Query Language), fue
creado como lenguaje universal de programación para solicitar datos
específicos a un RDBMS.
La arquitectura cliente-servidor fue realmente una combinación de
las mejores funciones del entorno basado en host y del entorno de
red de área local basado en PC. Esta arquitectura utiliza la potencia
de la PC para obtener los datos, junto con el complicado
procesamiento relativo a la lógica de negocio que añade valor a
dichos datos. El RDBMS proporciona un área de almacenamiento
centralizada para los datos. La arquitectura cliente-servidor puede
tomar muchas formas, dependiendo de cómo se elija, separar los
niveles de presentación, lógica de negocio y datos.
Las bases de datos distribuidas y paralelas han permitido que los
sistemas de base de datos puedan crecer considerablemente en la
cantidad de información que manejan, ya que permiten sistemas
integrados con múltiples computadoras, las cuales pueden estar
distribuidas en distintas partes del mundo y cada una tener los
recursos suficientes para contener y manejar por si sola grandes
cantidades de información. El empleo de sistemas paralelos y
distribuidos nos permite también dividir las consultas para que sean
realizadas a una mayor velocidad por distintas máquinas o

242
procesadores, incrementando enormemente el rendimiento del
sistema de base de datos.
Sin embargo, no obstante las ventajas que presenta la distribución
de la información y el empleo de sistemas paralelos para manejarla,
estos esquemas presentan algunos inconvenientes, a tener en
cuenta, que deben ser manejados adecuadamente, tales como las
decisiones de la distribución física de la información; de que manera
será fragmentada, si existirán copias de los fragmentos en distintas
localidades, de que manera se va a manejar la posibilidad de
modificaciones concurrentes de la misma información, como se
controlarán las actualizaciones de la información duplicada para
mantener la consistencia, como se manejará la posibilidad de que,
debido a fallas en la comunicación, el sistema quede dividido en dos
o más sub-redes fragmentadas y otros problemas más.

243
AUTOEVALUACION

FORMACIÓN DE ANALISTAS DE SISTEMAS INFORMÁTICOS


BASES DE DATOS.
Examen Final
Calificación: ……………

Apellido y Nombre: ………………………………………………………

D.N.I: ………………………………………………………………………

Fecha: ……………………………. Nº de Hojas: …………

Consideraciones Generales
 Intente responder en forma completa y sintética a lo
solicitado.
 Se estima un máximo de 2 (dos) horas reloj para su
realización.
 El examen se realizará sin material de apoyo o consulta.
 Se recomienda la lectura completa del examen antes de
comenzar a responder.
 No se considerarán los borradores.
Calificación
 Se califica el examen de 1 (uno) a 10 (diez).
 Se aprueba con un puntaje mínimo de 4 (cuatro) puntos
 Deben responderse todas las preguntas, es decir, no se
puede aprobar el examen con alguna pregunta sin responder
aunque con las resueltas se llegara a la calificación de 4
(cuatro) o más puntos.
 En cada pregunta se indica la puntuación de la misma entre
paréntesis.
Criterios de evaluación
 Correcta interpretación de los enunciados.
 Pertinencia de las respuestas.

244
 Aplicación de conceptos teóricos y prácticos trabajados.
 Coherencia en la respuesta de los enunciados.
 Comprensión de los núcleos esenciales de los contenidos.
 Elección y aplicación correcta de las sentencias SQL para el
punto 1 y 2.
 Correcta aplicación de la técnica de Normalización para el
punto 3.
 Correcta selección y conexión de los elementos del DER para
el punto 4

1) (2 puntos)
Dadas las siguientes estructuras de datos:

Profesores: Nro_Profesor + Apellido + Nombre + Tipo_Documento +


Nro_Documento

Materias: Cod_Materia + Nombre_Materia + Año + Carga_Horaria

Cursos: Nro_Profesor + Cod_Materia + Dia + Horario

a)_ Crear mediante sentencias SQL las tres tablas incluyendo las
claves Prymary-Key y Foreign-Key.

b)_ Crear un índice para la tabla Materias por Nombre_Mateia.

2) (2 puntos)
Considerando las tablas del punto anterior y utilizando sentencias
SQL

a)_ Insertar un registro en cada una de las tres tablas.

b)_ Seleccionar el apellido y Nombre de aquellos profesores que


dictan mas de una materia.

245
3) (3 puntos)
Dada la siguiente estructura aplicar las tres formas normales.

FACTURA: @#factura + #cliente + nombre_cliente + fecha +


#articulo + nombre_articulo + cantidad_articulo + precio_unitario +
precio_por_cantidad + precio_total.

4) (3 puntos)

Dado el siguiente enunciado construir el Diagrama Entidad


Relación, y el Diccionario de Datos Asociado.

Alquiler de películas.
Un negocio barrial se ocupa del alquiler de películas en dos formatos
dvd o vhs,
Existe una nomina de clientes donde se encuentran almacenados
todos sus datos, y la lista de las películas disponibles para alquilar,
con todos sus datos como ser titulo, director, calificación, actores,
genero, etc.
Cuando un cliente alquila una película debe quedar registrada la
fecha en la que se entrego la película, la fecha de devolución el
monto del alquiler y si abono o no.
Las películas son pedidas a proveedores externos, cuando se
solicita una película a un proveedor se debe confeccionar una orden
de compra, con los datos de la película, el proveedor y la cantidad
de películas compradas, junto con la fecha.

RESOLUCION AUTOEVALUACION

1) a)
CREATE TABLE profesores
(nro_profesor NUMBER(5) NOT NULL,

246
apellido CHAR(30) NOT NULL,
nombre CHAR(35) NOT NULL,
tipo_documento CHAR(3) NOT NULL,
nro_documento NUMBER(8) NOT NULL
UNIQUE (tipo_documento, nro_documento),
PRIMARY KEY (nro_profesor);

CREATE TABLE materias


(cod_materia NUMBER(5) NOT NULL,
nombre_materia CHAR(30) NOT NULL,
año NUMBER(4),
carga_horaria NUMBER(2)
PRIMARY KEY (cod_materia);

CREATE TABLE cursos


(nro_profesor NUMBER(5) NOT NULL,
cod_materia NUMBER(5) NOT NULL,
dia CHAR(30),
horario CHAR(30)
PRIMARY KEY (nro_profesor, cod_materia )
FOREIGN KEY (nro_profesor) REFERENCES
profesores (nro_profesor))
FOREIGN KEY (cod_materia) REFERENCES
materias (cod_materia));

b)_ CREATE INDEX nom_materias


ON materias(nombre_materia);

2)_ a) INSERT INTO profesores


(nro_profesor, apellido, nombre, tipo_documento, nro_docuento)
VALUES
(1001, “Lombardero”, “Daniel”, “DNI”, 21.987.889);

247
INSERT INTO materias
(cod_materia, nombre_materia, año, carga_horario)
VALUES
(6, “Programacion II”, 2, 8);

INSERT INTO cursos


(nro_profesor, cod_materia, dia, horario)
VALUES
(1001, 6, “Viernes”,”10 a 12hs”);

b)_
SELECT apellido, nombre, count (*)
FROM profesores p, cursos c
WHERE p.nro_profesor = c.nro_profesor
GROUP_BY apellido, nombre
HAVING count(*) > 1;

3)_ FACTURA: @#factura + #cliente + nombre_cliente + fecha +


{#articulo + nombre_articulo + cantidad_articulo + precio_unitario +
precio_por_cantidad} + precio_total.

Primera Forma Normal.


FACTURA_CABECERA: @#factura + #cliente + nombre_cliente +
fecha + precio_total.

FACTURA_DETALLE: @#factura + @#articulo + nombre_articulo +


cantidad_articulo + precio_unitario + precio_por_cantidad
Segunda Forma Normal

FACTURA_CABECERA: @#factura + #cliente + nombre_cliente +


fecha + precio_total.

248
FACTURA_DETALLE: @#factura + @#articulo + cantidad_articulo +
precio_por_cantidad

ARTICULOS: @·#articulo + nombre_articulo + precio_unitario

Tercera Forma Normal

FACTURA_CABECERA: @#factura + #cliente + fecha

FACTURA_DETALLE: @#factura + @#articulo + cantidad_articulo

ARTICULOS: @·#articulo + nombre_articulo + precio_unitario

CLIENTES: @#cliente + nombre_cliente

4)_

249
Diccionario de Datos

CLIENTES: @Nro_cliente + Apellido + Nombre + Fecha_Nacimiento


+ Domicilio + Codigo_Postal + Localidad + Telefono + email + sexo +
Tipo_Documento + Numero_Documento.

250
PELICULAS: @Cod_Pelicula + Titulo + Director + Calificación +
Actores + Genero + Año

PROVEEDOR_EXTERNO: @Nro_Proveedor + Razon_Social +


Direccion + Localidad + Codigo_Postal + Telefono + email

ALQUILER: Nro_cliente + Cod_Pelicula + Fecha_Alquiler +


Fecha_Entrega + Monto + Pago?

ORDEN_COMPRA: @Cod_Pelicula + @Nro_Proveedor + Fecha +


Cantidad_Peliculas.

251
GLOSARIO
Administrador de Bases de Datos: encargado de asegurar la
disponibilidad, confidencialidad y la integridad de los datos.

ANSI: American Nacional Standard Institute es una organización


privada, no lucrativa, que administra y coordina la estandarización
voluntaria y el sistema de conformidad a los estándares, en los
EEUU.

Backup: Copia de seguridad, se realiza para prevenir una posible


pérdida de información

Bit: Abreviatura de binary digit (dígito binario). El bit es la unidad


más pequeña de almacenamiento en un sistema binario dentro en
una computadora.

Byte: Unidad de información utilizada en las computadoras, cada


byte está compuesto por 8 bits.

CAD: Autodesk AutoCAD es un programa de diseño asistido por


computadora (CAD "Computer Aided Design"; en inglés, Diseño
Asistido por Computadora) para dibujo en 2D y 3D.

Carácter: Número, letra o símbolo en la computadora conformado


por un byte, se lo conoce en inglés como carácter.

Comando: Instrucción que un usuario da al sistema operativo para


realizar una tarea.

Consistencia: Duración, estabilidad, solidez.

DBA: Database Administrador (Administrador de bases de datos)

Efectivo: Capacidad de lograr el efecto que se desea o se espera.

252
Eficiente: Capacidad para lograr un fin empleando los mejores
medios posibles.

Eficacia no siempre es sinónimo de eficiencia.

Emular: Imitar las acciones de otro procurando igualarlas e incluso


excederlas

Esquema: Representación gráfica o simbólica de cosas materiales o


inmateriales.

Gateway: Una puerta de enlace, un nodo en una red informática,


que sirve de punto de acceso a otra red.

Un dispositivo dedicado a intercomunicar sistemas de protocolos


incompatibles.

Inconsistencia: Falta de consistencia.

Interface: En software una interface de usuario es la parte del


programa que permite el flujo de información entre varias
aplicaciones o entre el propio programa y el usuario

LAN: Local Area Network (Red de Area Local). Una red local es la
interconexión de varias computadoras y periféricos. Su extensión
está fisicamente limitada a un edificio. Su aplicación más utilizada es
la interconexión de computadoras en oficinas, fábricas, etc. Para
poder compartir recursos e intercambiar datos y aplicaciones.

Metodología: es un conjunto de procedimientos, técnicas y ayudas


a la documentación para el desarrollo de un producto software.

Proliferar: Reproducirse en formas similares. Multiplicarse


abundantemente.

253
Red de Area Local: véase LAN.

Server: véase Servidor.

Servidor: Computadora central de un sistema de red que provee


servicios y programas a otras computadoras conectadas.
En Internet este término se usa para designar a aquellos sistemas
que proporcionan información a los usuarios de la red.

SGBD: Sistema de Gestión de Bases de Datos.

Sistema Operativo: Programa que administra los demás programas


en una computadora.

SQL: Structured Query Language (Lenguaje Estructurado de


Consulta).

Tangible: Que se puede tocar.

UCP: Unidad donde se ejecutan las instrucciones de los programas


y se controla el funcionamiento de los distintos componentes del
ordenador.

Unívocamente: de manera única.

WAN: Wide Area Network: Red de Area Ancha. Una red


generalmente construida con líneas en serie de distancias de más
de un kilómetro.

254
BIBLIOGRAFÍA DEL ESPACIO CURRICULAR
Cuadra Dolores. Desarrollo de Bases de Datos: Casos
Prácticos desde el Análisis a la Implementación. Editorial: Alfaomega
Grupo Editor, 2013.

Coronel Carlos; Morris Steven Rob Peter. Base de Datos:


Diseño, Implementación y Administración. 9º ed. Editorial: Cengage
Learning, 2011

Elmasri Ramez; Navathe Shamkant. Sistemas de Bases de


Datos: Conceptos Fundamentales. 5ª ed. México: Addison Wesley
Longman de México, 2007

Ramakrishnan Raghu; Gehrke Johannes. Sistemas de


Gestión de Bases de Datos. Mc Graw-Hill, 2007.

Piattini Mario G. et al. Tecnología y Diseño de Bases de


Datos. Alfaomega Grupo Editor, 2006.

Silberschatz Abraham. Fundamentos de Bases de Datos. 5ª


ed. Mc Graw-Hill, 2006.

255

Vous aimerez peut-être aussi