Está en la página 1de 258

/.S.S.O.

- Tcncas Frgramacn J
1
Introduccion
El presente modulo tiene como objetivo acompaar al alumno en el
aprendizaje de los contenidos planteados para Tecnicas de Programacion I,
que pertenece al Area de Programacion y se cursa en el 3 Cuatrimestre de la
Carrera de Analista de Sistemas de Computacion, en el ISSD.
Necesito contarles que no es Iacil conIeccionar un modulo, un material
escrito, que resuma los contenidos tratados, desarrollados e investigados por
proIesionales reconocidos internacionalmente, como son los autores de la
bibliograIia tomada como base para armar este modulo.
Por ejemplo: el Seor C. J. Date, autor del libro 'Introduccion a los Sistemas
de Bases de Datos, es un especialista en Sistemas de Bases de Datos
Relacionales, que comenzo a trabajar con la empresa IBM en 1967, Iue
encargado del diseo del lenguaje UDL (Lenguaje de Bases de Datos
UniIicado). Es conIerencista, escritor de numerosas obras y asesor
internacional, como resumen de un Irondoso Curriculum Vitae.
Los autores de La Guia LAN Times de SQL, obra muy clara y amena,
tambien utilizada en este trabajo, son James R. GroII y Paul N. Weinberg. El
primero trabajo en Hewlett-Packard, co-Iundador y Presidente de la Network
Innovations Corporation, desarrollador de soItware de red basado en SQL,
conIerencista y autor de articulos tecnicos sobre UNIX y SQL. Mientras que
Paul Weinberg es Vicepresidente de la Network Innovations Corporation,
trabajo en Bell Laboratories, Plexus Computers y Hewlett-Packard, entre
otras cosas.
El resto de los autores no tienen menos antecedentes que los nombrados.
En este modulo intento presentarles parte de un interesante mundo tecnico y
tecnologico, el de las bases de datos. Es un panorama que esta respaldado en
la bibliograIia, basica y de consulta, citada en el Programa que encontraran
en paginas siguientes. Asi mismo les sugiero no dejen de acceder a las
Iuentes, a los libros, porque alli encontraran ampliaciones y relaciones que
quizas no llegue a mostrarles.
Las bases de datos son interesantes y necesarias por si mismas, estudien
estos temas no solo para aprobar la materia y proIundicen todo lo que
puedan, lo que el tiempo les permita.
/SSO - Tcncas Frgramacn J
2
Esquema de la asignatura
Unidad I
Sistemas de Gestion de Bases de Datos
Contenidos.
Evolucion de las BD
Conceptos Ventajas Componentes
Lenguajes DDL-DML
Arquitectura
Tecnicas de acceso
Unidad II
Modelos de datos
Diseo de BD
Contenidos.
Modelos Relacional y Orientado a Objetos
Modelo Relacional
Normalizacion
Dep. Euncional
Eormas Normales
Unidad III
Lenguaje SQL
Contenidos.
Consultas
Subconsultas
Actualizacion de datos
Transacciones
Estructura de la BD
Seguridad
Simples
Multitablas
Sumarias
Insercion
Eliminacion
Actualizacion
Creacion de BD
Cambio de estruct.
Eliminacion de arch
/.S.S.O. - Tcncas Frgramacn J
3
Unidad IV
Introduccion al entorno visual (SGBD)
Contenidos.
Manejo basico del entorno
Creacion de tablas y manipulacion de
datos.
Administrador de proyectos
Reglas de Integridad ReIerencial
Eunciones basicas
para poder
Programar luego
Unidad V
Programacion Visual
Contenidos.
Objetos basicos de la programacion
orientada a objetos. Eormularios.
DeIinicion de la interIaz del usuario.
Realizacion de programas tipo ABM.
Consulta de datos. Acceso a traves de SQL
/SSO - Tcncas Frgramacn J
4
Programa
Asignatura: TECNICAS DE PROGRAMACION I
Ao lectivo: 2004.
Horas semanales: 6 (seis).
rea: PROGRAMACION
Objetivos:
Brindar al alumno los conocimientos Teoricos y Practicos de Bases de
Datos, como una Herramienta de Almacenamiento de Datos para el planteo
de soluciones inIormaticas a problemas de almacenamiento, seguridad y
administracion de datos dentro de una organizacion.
Ademas lo introducira en la Programacion Orientada a Objetos en un
entorno visual. (ERONT-END)
Lograr que el alumno conozca los conceptos basicos de Sistemas de Bases
de Datos (BACK-END), diseo de las bases de datos, conceptos
relacionados a la manipulacion de los datos y aplicacion del SQL como
herramienta de acceso (lectura/escritura/consulta).
Con respecto a los Modelos de Datos, se hara hincapie en el Modelo
Orientado a Registros y particularmente en los conceptos asociados al
Modelo Relacional.
UNIDAD I: Sistemas de Gestin de Bases de Datos
Contenidos:
Evolucion en el Almacenamiento de Datos. Bases de Datos: Conceptos,
caracteristicas, ventajas, mercado actual. Independencia de Datos.
Componentes de un sistema de bases de datos.
Estructura Global de un Sistema de BD.
Componentes. Usuarios del SGBD: Roles y Eunciones. Administrador de
Bases de Datos: Iunciones.
Lenguajes: DDL y DML
Arquitectura de los SGBD: Nivel Externo, Conceptual e Interno.
Nivel Interno: Acceso a la Base de Datos.
Indices: concepto, Iormas de utilizacion, clasiIicacion. Arboles B.
UNIDAD II: Modelos de datos y Diseo de Bases
de Datos
Contenidos:
Modelos de datos. Modelos Logicos basados en Objetos: Caracteristicas.
Modelo Relacional: Estructura de datos relacional. Conceptos. Dominios.
Relaciones.
Reglas de Integridad Relacional: Claves y Reglas.
/.S.S.O. - Tcncas Frgramacn J
5
Introduccion al Diseo de Bases de Datos. Concepto y Iinalidad de la
Normalizacion. Dependencia Euncional. Tipos de Dependencias.
Descomposicion. Eormas Normales: 1 EN, 2 EN y 3 EN.
Ejercitacion Practica.
UNIDAD III - Lenguaje de consultas de datos
Contenidos:
Introduccion al SQL, caracteristicas del estandar, arquitecturas. Ventajas y
desventajas del SQL estandar.
Estructura de una Base de Datos: Creacion de una Base de Datos.
Actualizacion de Datos: Inserciones, eliminaciones, modiIicaciones.
Consultas: Simples, Multitablas y Sumarias.
Subconsultas: Aplicacion, condiciones de busqueda. Integridad de Datos:
aplicacion de las Reglas de Integridad.
Procesamiento de Transacciones: concepto y sentencias.
Ejercitacion Practica
UNIDAD IV - Introduccin al Entorno Visual
Contenidos:
Introduccion al entorno de Programacion Visual, ingreso, personalizacion.
Creacion y utilizacion de tablas.
Tipos de datos, Iorma de almacenamiento y manejo eIiciente. Operadores.
Eunciones.
Tipos de indices utilizados, deIinicion y utilizacion. Trabajo con varias
tablas simultaneas.
Administrador de Proyectos.
Diseador de Bases de Datos
Reglas de Integridad ReIerencial
UNIDAD V - Programacin Visual
Contenidos:
Introduccion al lenguaje de programacion Visual, ingreso, personalizacion.
Creacion y utilizacion de tablas.
DeIinicion de datos a utilizar en el sistema. DeIinicion de la interIaz visual
Utilizacion de Eormularios. Principales objetos del lenguaje. DeIinicion y Iorma de
uso. (botones de comandos, etiquetas, campos, casillas de veriIicacion y seleccion,
listas y grillas)
Creacion de aplicaciones visuales del tipo ABM y Consultas de datos.
Acceso a datos utilizando SQL.
Utilizacion de multiples Iormularios. Interaccion.
Reportes basicos
Bibliografa
Bsica:
/SSO - Tcncas Frgramacn J
6
T DATE, C.J. - Introduccion a los Sistemas de Bases de Datos - Volumen 1
- Quinta Edicion -Edit. ADDISON WESLEY IBEROAMERICANA.
T GROEE, James R.- WEINBERG, Paul N. Guia LAN Times de SQL
Edit. OSBORNE/MCGRAW HILL.
T Bazian y otros (1997) Jisual Fox Pro 3 Unleashed. EE.UU: Sams
Publishing.
T Les Pinter (1994) Foxpro Para Windows. Espaa: McGraw Hill.
T MicrosoIt Corporation (1995) Jisual Fox 3.0, Manuales. EE.UU:
MicrosoIt Corporation.
T MicrosoIt Corporation (1997) Manual del Programador Visual EoxPro
6.0
ConsuIta:
T ADORACION DE MIGUEL PIATTINI, Mario Eundamentos y
modelos de Bases de Datos 2 Edicion Ed. AlIaomega.
T KORTH - Eundamentos de Bases de Datos.
T ELMASRI - Sistemas de Bases de Datos.
/.S.S.O. - Tcncas Frgramacn J
7
Sugerencias de abordaje
El planteo de la asignatura esta claramente Iragmentada pero relacionada, y
con distintas actividades que dependen del contenido propuesto. En la
Unidad I la atencion del alumno debe dirigirse al estudio de los conceptos y
desarrollos teoricos, en la II se plantea ejercitacion pero por escrito sin la PC,
en la unidad III brinda sentencias SQL a ser ejercitadas en la computadora.
Las unidades IV y V se desarrollaran en Iorma practica usando un Sistema
Gestor de Bases de Datos.
La Unidad I es eminentemente teorica, por ello se sugiere consultar el
material de dicha asignatura y acceder a la bibliograIia cuando lo crean
conveniente. Ademas, es aconsejable que el alumno resuelva la guia
planteada para autoevaluacion, al Iin de la unidad, y consulte a su docente
permanentemente, durante la clase o en el horario de tutoria, para evitar la
acumulacion de dudas.
La Unidad II, al contrario de la anterior, plantea un minimo de contenidos
teoricos con el Iin de aIirmar y uniIicar conceptos, para concluir la misma
con una serie de ejercicios de diseo de bases de datos. En esta unidad, la
ejercitacion de la tecnica de normalizacion es el eje central y por ello el
alumno deberia seguir los ejercicios propuestos por el docente, en clase y en
horarios extra aulicos. Hay muchos programadores que se dedican a
construir programas, para solucionar problemas, pero sin tener en cuenta la
importancia del diseo.
La Unidad III describe el lenguaje SQL y el resto es practica de los
comandos. No deben olvidar que este lenguaje esta embebido o incluido en
todos los lenguajes de programacion que permiten manipular y deIinir datos
de una base de datos relacional. La ejercitacion puede llevarse a cabo en un
sistema de gestion de bases de datos relacionales como Oracle, SQL Server,
visual Iox u otros, sin importar la plataIorma, pudiendo ser en entorno
Windows, UNIX, Linux, etc. En deIinitiva, lo importante es que el alumno
ejercite las sentencias con la tecnologia que posea.
/SSO - Tcncas Frgramacn J
8
En la unidad IV hacemos una introduccion a la herramienta de programacion
que vamos a utilizar para probar y aplicar lo visto anteriormente.
Por ultimo en la unidad V vamos a aplicar las Iormas de acceso a datos
estudiadas. Se desarrollaran modulos para acceder a los datos utilizando la
programacion orientada a objetos.
/.S.S.O. - Tcncas Frgramacn J
9
Indice
Unidad 1: Introduccin a las Bases de Datos 13
Evolucion del almacenamiento 13
Bases de Datos 15
Componentes 16
Estructura de un Sistema de Bases de Datos 18
Niveles de Abstraccion 21
Tecnicas de Almacenamiento y Acceso 24
Indexacion 24
Tipos de Indices 26
Ejercitacion 30
Unidad 2: Modelos de Datos y diseo de Bases de Datos 31
Modelo de Datos 31
Introduccion al Diseo de Bases de Datos 42
Normalizacion 42
Dependencias Iuncionales 43
Eormas Normales 45
Ejercitacion 58
Unidad 3: Lenguaje SQL 75
Introduccion 75
Caracteristicas de estandar 76
ClasiIicacion de los comandos 80
Consulta de Datos 82
Condiciones de Busqueda 85
Consultas Multitabla 91
Eunciones de Columna 93
Consultas Agrupadas 94
Ejercitacion 100
Subconsultas 105
Ejercitacion 110
Actualizacion de Datos 112
ModiIicacion de Datos 114
Eliminacion de Datos 116
Reglas de Integridad en SQL 118
Unidad 4: Introduccin al Cestor de Bases de Datos 133
Introduccion al entorno 133
Creacion de Tablas 136
Ejercitacion 140
Comandos de conIiguracion 142
Eunciones 143
Operadores 146
Indices estructurales 152
Trabajando con varias Tablas 157
Administrador de Proyectos 161
Diseador de Bases de Datos 165
Validacion de ingreso e datos 170
/SSO - Tcncas Frgramacn J
10
Reglas de Integridad ReIerencial 173
Ejercitacion 179
Unidad 5: Introduccin a la Programacin 183
Estructuras de Programacion 184
Programacion Orientada a Objetos 189
Clases y Objetos 189
Eventos y Metodos 189
Generador de Eormularios 189
Entorno de Datos 190
Estableciendo propiedades 190
DeIinicion de Variables 192
Inclusion de objetos al Iormulario 193
Relacionar Tablas 203
Ejercitacion 206
ModiIicar y dar de baja 206
Agregando nuevos registros 209
Cuadros combinados (combos) 214
Ejercitacion 119
Conexion otros Iormularios 220
Objetos para realizar consultas a datos 221
La grilla 221
Eiltrado de datos 226
Listas (list) 228
Casillas de VeriIicacion y Grupo de Opciones 229
Casillas de VeriIicacion 229
Grupo de Opciones (OptionGroup) 230
Paginas o Solapas 233
Paginas (PageErame) 233
Ejercitacion 240
InIormes 242
InIormes Avanzados 243
Listado de varias tablas relacionadas 246
Calculos dentro de los inIormes 248
Titulo y resumen 253
Resumen Integracion 255
Ejercitacion 256
/.S.S.O. - Tcncas Frgramacn J
11
SsImas GsIn
Bass OaIs
Evolucion en el almacenamiento de datos
Siempre es conveniente tomar conciencia que el surgimiento de las
tecnologias actuales se debieron a todos los cambios que se Iueron
sucediendo en: los medios de almacenamiento, los sistemas de archivos y
los lenguajes de programacion. Junto a esos cambios proIundos y tan
importantes siempre hubo gente de sistemas o de inIormatica, que necesito
capacitarse para mantenerse en el medio laboral.
Desde los grandes archivos de papeles y carpetas en las empresas,
avanzando hacia el almacenamiento limitado y de proceso lento, como
complicado, de las tarjetas perIoradas -que pudimos ver Iuncionando en
grandes Centros de Computos que procesaban la inIormacion de sus clientes
hasta los primeros aos de la decada del 80-, pasando por los sistemas de
almacenamiento con lenguajes de programacion no estructurados en
minicomputadoras de las grandes organizaciones, sin olvidar esos equipos
antecesores de la actual PC, que contaban con 128 Kb de RAM y discos tan
limitados que no nos permitian avisorar esta tan avanzada realidad
inIormatica en la que vivimos, donde todos tenemos a mano algun disco de
capacidad superior a 1 Gb y soItware creados para los mas especiIicos
requerimientos, potenciada por los medios de comunicacion y de
telecomunicaciones.
U
n
o
/SSO - Tcncas Frgramacn J
12
En todos esos aos pasados los Analistas de Sistemas debian disear sus
sistemas sin olvidar las limitaciones de hardware y de soItware, mientras
que los Programadores debian incluir, en miles de lineas de programas,
todos los controles necesarios para evitar el almacenamiento erroneo de los
tan valiosos datos que los clientes dejaban a su disposicion. A ese estado,
en que los datos almacenados pueden dar lugar a la produccion de
inIormacion erronea o incorrecta, se le llama inconsistencia.
Pero... cuando un conjunto de archivos puede estar en estado
inconsistente?
1-Como en todas las situaciones laborales, el trabajo en el area de sistemas
necesita de un trabajo en equipo y bajo la coordinacion de algun
responsable. De lo contrario podia darse lo que en muchas empresas
sucedia, y me atrevo a decir que aun sucede, por ejemplo: si en el ISSD se
crea un sistema inIormatico para la gestion academica, con archivos de
datos reIerentes a las materias que se dictan, archivos asociados a los
alumnos y al estado en cada materia, etc., pero por el otro lado y con el paso
del tiempo la administracion cree conveniente llevar un control de cuotas
pagadas por los alumnos y solicita la generacion de un sistema para tal Iin,
puede suceder en esa situacion que los programadores no utilicen, cosa que
no seria lo mas inteligente, los archivos del sistema academico de alumnos y
por lo tanto crean nuevos archivos, independientes de los existentes,
llegando a tener datos repetidos o tecnicamente llamados datos
redundantes.
La consecuencia directa de esto, aparte de la perdida de espacio en los
medios de almacenamiento, es la inconsistencia.
Supongamos que, ante la existencia de duplicacion en ciertos datos, como
los propios de los alumnos apellido, nombres, numero de documento,
direccion, etc.-, se actualiza la direccion por un simple cambio de domicilio
y la propagacion de dicha actualizacion solo se realiza sobre el archivo de
alumnos del sistema academico; cuando se necesiten las direcciones de los
alumnos para enviar alguna comunicacion escrita a cual direccion se
envia? a la almacenada en el sistema de alumnos o al administrativo?.
Este es un caso que, aunque muy simple, nos muestra las consecuencias de
la redundancia de datos, e inclusive podemos hacernos una idea de lo
peligroso que podria ser esto en un sistema bancario u otro sistema
inIormatico.
Por la importancia que tiene el diseo de los almacenamientos, en la vida de
los sistemas de inIormacion, es que en la unidad II trataremos el tema de
normalizacion como tecnica para el diseo de los archivos.
2- Otro causante de la inconsistencia de datos es el acceso de varios
usuarios al mismo archivo, en el mismo momento, lo que en terminologia
tecnica se denomina acceso concurrente, obliga a mantener el control de
dichos accesos, mediante programas u otros mecanismos.
Comentario
Es conveniente diIerenciar el
termino dato del vocablo
inIormacion. Los datos se
almacenan y una vez
procesados se transIorman
en inIormacion. La
inIormacion disminuye
incertidumbre y permite
tomar decisiones.
/.S.S.O. - Tcncas Frgramacn J
13
La posibilidad de compartir cuentas bancarias entre distintas aplicaciones de
un banco, nos hace pensar en situaciones de actualizacion que pueden dar
resultados no previsibles.
Podemos suponer el caso de que un cajero ingrese el deposito de un cheque
de tercero a una cuenta y en el mismo instante otro cajero este atendiendo al
titular de dicha cuenta, que en ese momento esta solicitando una extraccion
de Iondos. En ese momento... cual es el monto exacto de la cuenta?. Este
tipo de ejemplo no puede ser pensado como una situacion caprichosa, estas
posibles coincidencias existen y generan grandes problemas si no son
tenidas en cuenta. Es mas, hay gente que conociendo esta Ialencia, de
algunos sistemas de inIormacion, ha podido aprovechar para estaIar a
determinadas organizaciones.
Los programas tenian controles de seguridad, para asegurar que en los
sistemas ingresaran y pudieran extraer inIormacion solo las personas
autorizadas, y por medio de claves acceder a las opciones necesarias. Por
ejemplo, un empleado que se desempea como cajero de un banco necesita
conocer la direccion y teleIono de los clientes?. Eso no seria conveniente,
por ello el programador implementaba las categorias de usuarios que le
brindaba el analista de sistemas.
Pero seguimos hablando de que los programadores debian incluir en sus
trabajos todos estos controles.
Todos estos inconvenientes de los sistemas tradicionales de archivos Iueron
dejando un vacio que se encargaron de cubrir los Sistemas de Bases de
Datos.
Bases de datos
Actualmente no se escucha en nuestro medio otra manera de almacenar
inIormacion que no sea a traves de bases de datos, con Internet o no.
Entendemos por base de datos al conjunto de datos almacenados en un
sistema inIormatico, evitando redundancias y por lo tanto inconsistencia,
reIerentes a una organizacion determinada y que permiten obtener, a traves
de ciertos procesos o aplicaciones, la inIormacion necesaria para la toma de
decisiones.
Un sistema de bases de datos es un conjunto de componentes
interrelacionados que permiten: almacenamiento de grandes volumenes de
datos, el mantenimiento de ellos y la obtencion de inIormacion necesaria en
distintos niveles de una organizacion.
/SSO - Tcncas Frgramacn J
14
Componentes de un sistema de bases de datos
Como componentes podemos citar:
Hardware
Todos los componentes Iisicos que conocemos y consideramos necesarios
en todo sistema inIormatico, como son los discos, los periIericos de
entrada/salida, memoria, microprocesador, placas de red, etc.
Debemos tener en cuenta que se puede trabajar con bases de datos en
equipos de grandes dimensiones y capacidades, tambien en PCs e inclusive
en las notebooks.
Actualmente es imposible pensar en un verdadero sistema de bases de datos
con computadoras trabajando en modalidad monousuaria, ya que los
sistemas multiusuarios son de mayor aprovechamiento en las
organizaciones.
Datos
Los datos a ser almacenados en una base de datos no signiIica que
naturalmente esten en Iorma deseable.
Por ello, deben primeramente ser analizados mediante metodologias que
permiten disminuir la redundancia y por lo tanto la inconsistencia, logrando
de esa manera integrar todos los datos necesarios en el momento del diseo
e intentando prevenir situaciones para un Iuturo no muy lejano.
Ademas, debemos tener en cuenta que seran totalmente compartidos entre
cierta cantidad de usuarios, dependiendo de la importancia y la magnitud de
la organizacion a la que hacen reIerencia.
Con Irecuencia existe una sola base de datos en cada empresa, pero cada
usuario puede verla distinta, debido a las distintas aplicaciones que pueden
utilizarse, segun el puesto de trabajo del usuario. En deIinitiva, el usuario
debe poder trabajar como si los datos Iueran de el y estuvieran ubicados en
el disco de su propia computadora.
Software
Cuando se trabaja con bases de datos, el usuario puede utilizar las
aplicaciones o programas que visualiza en su monitor, de esa manera puede
acceder a los resultados que busca. Estas aplicaciones conIorman el Eront
End o seccion Irontal del sistema.
Pero no son esos programas los que acceden a la base de datos, sino que hay
un conjunto de programas que administran o gestionan las solicitudes de
datos. A ese conjunto, que es el soItware de mayor importancia, se le
Glosario
DBMS: son siglas que
corresponden a database
management system, es decir
Sistema de Administracion o
Gestion de Bases de Datos.
/.S.S.O. - Tcncas Frgramacn J
15
denomina Sistema de Gestion de Bases de Datos (SGBD) o DBMS, e
inIormalmente se le dice Motor de Bases de Datos (Back End o Seccion
posterior). Ademas existen algunas herramientas como los generadores de
Iormularios, de inIormes y, los ya nombrados, programas de aplicaciones.
El Dr. C. J. Date dice que '... una de las funciones generales del SGBD es
distanciar a los usuarios de la base de datos de detalles al nivel del
equipo`. El SGBD brinda, de esa manera, una abstraccion de la base de
datos muy alejada de lo que realmente hay almacenado en un disco de la
computadora.
Usuarios
Es necesario clasiIicar a los distintos usuarios, que utilizan un sistema de
bases de datos, teniendo en cuenta la interaccion de cada uno de ellos con el
sistema.
En este punto la bibliograIia que consultemos puede presentar distintas
clasiIicaciones, pero seguramente que distinguen a:
Usuario final o ingenuo. es el que simplemente interactua con el sistema
mediante aplicaciones, teniendo asi una vision parcial de la base de datos.
Cuentan con interIaces o aplicaciones que le Iacilitan la obtencion de
inIormacion o cuentan con herramientas de consulta, llamadas query, que de
manera muy simple le permiten hacer una solicitud de informacion no
planeada, basados en una necesidad que surge en el momento, con solo:
elegir el archivo de donde obtener datos, indicar condiciones,
ordenamientos y la interIaz va conIormando una sentencia de SQL. Al
Iinalizar el usuario obtendra lo que buscaba... si eligio correctamente las
opciones. No conoce nada de la Iorma en que estan organizados los datos y
tampoco tiene la posibilidad de construir programas de aplicaciones, solo
las utiliza.
Usuarios sofisticados. pueden conocer sentencias de un lenguaje
como SQL, para poder solicitar inIormacion que las aplicaciones no le
brindan, debiendo conocer algunas estructuras de datos.
Usuarios especiali:ados. manejan herramientas para el tratamiento de
imagenes, sonidos, videos, etc., ademas de trabajar con la base de datos.
No es una Iorma exacta de clasiIicarlos, pero en algunas organizaciones
es conveniente agruparlos segun sus capacidades, para delegarles
determinadas tareas.
Programador. este usuario crea los programas o aplicaciones que,
siendo utilizados por el usuario Iinal, requieren datos almacenados en la
base de datos. Puede utilizar cualquier lenguaje de programacion. Sus
Glosario
SQL: son siglas que
corresponden a Structured
Query Languaje -lenguaje
estructurado de consultas-.
Es un lenguaje inIormatico
que permite no solo
consultar, sino tambien
actualizar e interaccionar
con la base de datos. Este
lenguaje es motivo de la
ultima unidad de la
asignatura.
/SSO - Tcncas Frgramacn J
16
peticiones extraccion, insercion, eliminacion, modiIicacion, etc.- son
interpretadas y ejecutadas por el SGBD.
En los programas de aplicacion se tienen en cuenta todas las solicitudes
planeadas en el momento del analisis del sistema completo.
Administrador de la base de datos o DBA. es el tecnico responsable del
control centralizado de la base de datos, a diIerencia de los sistemas
tradicionales de archivos que, por lo general, no tenian un responsable.
El DBA debe:
S Determinar los almacenamientos a mantener y deIinir la estructura de
cada uno para que albergue a los datos.
S DeIinir los sistemas de respaldo o backup para los datos,
determinando en que medios de almacenamiento se hace el backup,
cada cuanto tiempo, etc. Todo esto dependera directamente de los
volumenes de datos y de la empresa.
S Brindar derechos de acceso y permiso de lectura/actualizacion a los
distintos usuarios de la base de datos, brindando de esta manera
seguridad a los datos.
S Indicar al SGBD las reglas especiIicas de la organizacion, como por
ejemplo: si la base de datos pertenece a una entidad bancaria, signiIica
que el DBA debe educar al SGBD para que este controle que nunca
una cuenta en plazo Iijo posea montos inIeriores a los montos minimos
deIinidos por la entidad.
S Receptar inquietudes y requerimientos de los usuarios, respecto a sus
necesidades de inIormacion.
S Asegurar la capacitacion tecnica de los usuarios del sistema de base
de datos.
S DeIinir que cuidados seguira el SGBD cuando mas de un usuario
desee modiIicar ciertos datos, esto para evitar un estado indeseable de
inconsistencia.
S Controlar permanentemente el rendimiento o perIormance del
sistema, planeando los ajustes que hagan Ialta.
S Responder a los cambios de requerimientos de la organizacion.
Conviene aclarar que en el diseo del sistema puede participar, dependiendo
de la organizacion de la empresa, una persona o un grupo de personas que
no son exactamente usuarios y por lo tanto no pueden ser considerados
dentro de la clasiIicacion planteada.
Esta persona suele denominarse el Administrador de Datos (DA) y es el
responsable de:
' Determinar que datos se almacenaran y en que estructuras, conociendo
las necesidades de la empresa.
' Analizar y Iijar los niveles de seguridad entre los usuarios, segun las
Iunciones y cargos de los mismos.
' Buscar las estructuras Iisicas mas convenientes para el rendimiento del
sistema, rendimiento en tiempo y en consumo de recursos.
Glosario
DBA: son siglas que
corresponden a database
administrator. Se indican
estas siglas porque es la
manera en que se los nombra
en las empresas.
Glosario
DA: siglas de data
administrator. Con estas
siglas es la manera en que se
los nombra en algunos
ambientes.
/.S.S.O. - Tcncas Frgramacn J
17
Por lo expuesto, podemos ubicar al DA en un nivel del tipo gerencial,
aunque en algunas empresas determinados proIesionales cumplen Iunciones
de DBA, DA y hasta de Programadores de aplicaciones...
Siempre depende del valor que la empresa le asigne a sus datos y a la
inIormacion que manejan... Los empresarios normalmente no realizan un
analisis de costo/beneIicio de la inIormacion y la inversion en el Centro de
Computos, desde la calidad del hardware hasta los recursos humanos a
emplear.
Estructura Global de un Sistema de BD
En la siguiente Iigura se puede visualizar una estructura basica, sin
demasiados detalles, donde interaccionan los componentes del Sistema de
Bases de Datos.
En la Iigura, estan agregados ciertos elementos que a continuacion se
deIinen:
DML: es el lenguaje de manipulacion de datos (Data Manipulation
Language). Las solicitudes de los usuarios Iinales estan escritas en este
lenguaje, permite de esa manera consultar datos, insertar nuevos datos,
modiIicarlos o eliminarlos. Los programas de aplicaciones utilizan
sentencias de este lenguaje, por eso en el graIico pueden verse unidos.
DDL: es el lenguaje de deIinicion de datos (Data DeIinition Language). Con
este lenguaje trabaja el DBA, deIiniendo o modiIicando la estructura de los
almacenamientos u objetos de la base de datos, creando una base de datos,
modiIicando las estructuras o eliminando objetos.
Cdigo objeto de programas: este codigo surge de la compilacion de
sentencias del lenguaje DML. El programador genera el programa Iuente, se
produce la compilacion y el usuario Iinal utilizara el codigo deIinitivo para
obtener inIormacion del sistema.
/SSO - Tcncas Frgramacn J
18
Compilador de DML: detecta errores de sintaxis en los comandos y
participa en la generacion del codigo objeto, a partir del programa Iuente.
Compilador de DDL: interpreta y ejecuta las sentencias que el DBA le
envia. Trabaja con el diccionario de datos incluyendo nuevos
almacenamientos, modiIicando o eliminando objetos existentes. Tambien el
DBA crea indices para el acceso a los datos.
Intrprete de consultas: traduce las consultas realizadas por un usuario
soIisticado, que conoce por ejemplo SQL, en ordenes de bajo nivel para que
las ejecute el gestor de bases de datos. Estas consultas surgen cuando se
necesita inIormacion que no se puede obtener mediante los programas de
aplicaciones, normalmente con el tiempo se incorporan a los programas.
Cestor de bases de datos: como puede visualizarse en la Eigura 1, este
modulo de programa, del SGBD, esta relacionado a los siguientes
elementos: codigo objeto, interprete de consultas, indices y diccionario de
datos. Esto se debe a que es el intermediario entre la base de datos
almacenada Iisicamente y los modulos de programas, es el que controla y
brinda: los accesos de los usuarios, la seguridad deIinida por el DBA en el
diccionario de datos, sin olvidarse de los accesos concurrentes de mas de un
usuario.
Archivos de datos. son los que en deIinitiva almacenan los datos de las
bases de datos. Junto al diccionario de datos y los indices conIorman las
estructuras de los datos que estan en los medios de almacenamiento.
Diccionario de datos: es un conjunto de datos que hacen reIerencia a las
estructuras de los archivos de datos, donde el DBA almacena su diseo, por
ello el diccionario puede considerarse como una base de datos no de los
usuarios sino del sistema SGBD. Algunos autores dicen que el diccionario
almacena metadatos respecto a la estructura de la base de datos o
deIiniciones de otros objetos del sistema.
Cuando ustedes utilizan una sentencia como CREATE, crean un objeto en la
base de datos, eso se almacena con la base de datos, como tambien los
niveles de seguridad sobre los almacenamientos.
La sentencia SELECT en SQL que se utiliza para consultar la base de datos,
Iacilita tambien las consultas hacia el diccionario.
Indices: son archivos que permiten un acceso mas rapido a los datos de la
base de datos.
Seran motivo de un estudio mas proIundo en esta misma unidad, cuando
tratemos el tema de Nivel Interno, pero sepan que estos reducen la cantidad
de accesos al disco y como consecuencia se disminuye el tiempo implicado
a la busqueda de los datos.
/.S.S.O. - Tcncas Frgramacn J
19
Niveles de abstraccion
El sistema de bases de datos tiene internamente esta complejidad enunciada
y mucho mas, pero el usuario no se lo imagina.
Esto se debe a que el sistema esconde detalles que deIinitivamente el
usuario no necesita conocer, para acceder a la inIormacion que solicita. En
deIinitiva, signiIica que se le brinda asi, al usuario, una vision abstracta de
la base de datos.
Conceptualmente se puede presentar la arquitectura, de un sistema de bases
de datos, dividida en tres niveles de abstraccion. Esta arquitectura Iue
sugerida por ANSI en 1978, para Iacilitar la portabilidad entre distintas
maquinas y sistemas operativos.
Vamos a plantear un ejemplo con el ISSD y que tiene que ver con la
organizacion de ciertos archivos relacionados a la gestion administrativa de
alumnos, aunque totalmente simpliIicado para que sirva de ejemplo.
Debemos recordar este ejemplo, pues haremos reIerencia a el en cada uno
de los niveles y en el resto de la unidad.
Figura 3: Almacenamientos
Alumnos y Pagos
Almacenamiento Maestro de Alumnos Almacenamiento Pagos
Dato Tipo de dato Tamao Dato Tipo de dato Tamao Decimal
Legajo Caracter 5 Legajo Caracter 5
Apellido Caracter 20 Nrocuota Caracter 20
Nombre Caracter 15 Aopago Numerico 4
EechaNac Date 8 Montopagado Numerico 6 2
Nrotel Caracter 15 EechaPago Date 8
Glosario
ANSI: siglas American
National Standards Institute,
es decir Instituto Nacional
Americano de Normas. Este
es un comite de proIe-
sionales que intenta deIinir
parametros estandares uniIi-
cados internacionalmente.
En el caso del lenguaje SQL
deIine las sentencias y sus
Iormatos para que todos los
productos las incorporen de
igual Iorma.
/SSO - Tcncas Frgramacn J
20
Nivel externo
Como puede verse en la Eigura 2, el nivel externo es el que esta mas
cercano a los usuarios, sean estos usuarios Iinales o programadores de
aplicaciones.
A este nivel tambien se lo denomina Nivel de Vision, depende la
bibliograIia. Esto es porque cada usuario puede llegar a tener una vision
distinta para la misma base de datos.
Las secretarias de administracion pueden recibir un listado con el siguiente
Iormato:
El usuario que recibe este listado no conoce la complejidad que puede tener
el proceso para su obtencion.
No identiIica los almacenamientos que dan lugar a la obtencion de este
listado; pensando quizas, si se detiene a hacerlo, que este listado surge de un
solo almacenamiento y no es asi.
Asi mismo, otros usuarios pueden obtener distintos listados o pantallas de
los mismos almacenamientos, viendo porciones de la base de datos. Quizas
el Gabinete de Psicopedagogia necesita un listado con todos los datos de los
alumnos ingresantes; y asi cada usuario con sus necesidades de inIormacion.
Por ello se dice que podemos tener muchas vistas externas de la base de
datos.
El nivel externo es el mas cercano a los usuarios Iinales o ingenuos y el mas
alejado del almacenamiento real de los datos.
Nivel conceptual
El nivel conceptual es solo uno, no depende de los usuarios. Es una
representacion global del contenido de la base de datos, en un nivel de
abstraccion intermedio, donde no solo encontramos las deIiniciones de los
registros, sino tambien la asignacion de niveles de seguridad, reglas de
integridad de los datos almacenados, etc.
Figura 4: Ejemplo de
listado
Listado de alumnos y sus pagos - Ao 2
Legajo Apellido Nombres N de Telfono N de cuota Monto
abonado
Fecha del
pago
A1650 Abraham Anibal 0351-4240398 01 135 12/03/2000
02 135 09/04/2000
03 100 10/05/2000
A1845 Acevedo RodolIo 0351-4789022 01 125 07/03/2000
02 125 10/04/2000
/.S.S.O. - Tcncas Frgramacn J
21
En el ejemplo de la Eigura 3, la base de datos contiene inIormacion acerca
de Alumnos y de sus Pagos. Estas 2 (dos) entidades, una Iisica y otra
abstracta, tienen sus propias estructuras de datos. Se pueden identiIicar tipos
de datos, tamao disponible para almacenar caracteres, datos claves para
identiIicar a los demas y relaciones existentes entre los almacenamientos,
por ejemplo la relacion entre el Maestro de Alumnos y el archivo de Pagos a
traves del dato legajo. Seguramente estaran deIinidos que usuarios pueden
ver contenidos del archivo de Pagos, cuales tendran acceso a los alumnos y
los que tendran una vision integrada de alumnos y pagos.
En este nivel conceptual trabaja el DBA, decidiendo de que manera
almacenara los datos de la organizacion y, por supuesto, utilizando
sentencias del DDL.
Nivel interno
El nivel interno tambien es unico para toda la base de datos, es la manera en
que se representa a la base de datos tal como esta en el almacenamiento
Iisico, que indices utiliza, el espacio reservado, que tecnicas de acceso, que
soporte o dispositivo Iisico la almacena, etc.
En la Eigura 1, el SGBD esta unido con la base de datos, esto no signiIica
que accede directamente a la base de datos almacenada en dispositivos de
acceso directo discos magneticos-, sino que lo hace trabajando con
programas de mas bajo nivel.
Estos programas son el Gestor de Archivos y el Gestor de Disco, pertenecen
al sistema operativo, que comparte los recursos con el SGBD, y estan entre
el SGBD y los medios de almacenamiento.
Cestor de Archivos: es un componente que permite, al SGBD, ver a la base
de datos como un conjunto de archivos y registros almacenados en un medio
Iisico.
Por lo tanto el SGBD no necesita detalles de entrada/salida de paginas, solo
analizara los datos contenidos en los registros de archivos y asi responder a
las demandas de los usuarios, todo esto gracias a que el gestor de archivos
se encarga de administrar los registros almacenados.
Como el Gestor de Archivos tiene como Iuncion dicha administracion de
registros almacenados, el SGBD puede solicitarle al Gestor de Archivos
que:
S lea un registro de un archivo;
S agregue un registro nuevo a un archivo;
S elimine un registro del archivo almacenado;
S modiIique el contenido de un registro;
S genere un nuevo archivo de datos,
S elimine un archivo de datos.
/SSO - Tcncas Frgramacn J
22
Nota: Hay SGBD que contienen a su propio Gestor de Archivos, esto es
para optimizar su trabajo.
Un archivo es un conjunto de registros, que se identiIica con un nombre
unico. Los registros se identiIican con un numero tambien unico.
En los almacenamientos Iisicos los archivos se distribuyen en paginas.
Conceptualmente la pagina es la cantidad de datos que pueden leerse, o
grabarse, en un solo acceso al disco, en una sola entrada/salida.
La cantidad de registros que puede contener una pagina depende del tamao
de la pagina y del tamao de los registros almacenados.
Continuando con el ejemplo de los alumnos y sus pagos, el archivo de
alumnos estara Iisicamente en un conjunto de paginas designadas a ese
archivo. Mientras que el archivo de pagos estara en otro conjunto de
paginas.
El Gestor de Archivos, que conoce en que pagina estara cada registro,
solicita al Gestor de Disco que obtenga y le envie la pagina donde el sabe
que se encuentra el registro solicitado por el SGBD.
Puede suceder que la pagina solicitada este ya en memoria principal, en ese
caso no es necesario realizar el acceso al disco, lo cual Iavorece al
rendimiento del sistema. Como ya habran estudiado, el acceso a los discos
es mas lento que acceder a la memoria.
En deIinitiva el Gestor de Archivos ve a la base de datos como a un
conjunto de paginas, eso es lo que el puede gestionar.
Cestor de Disco: es el que conoce la ubicacion Iisica de cada conjunto de
paginas en el medio de almacenamiento, por lo tanto es el que realmente
realiza las operaciones de entrada/salida.
/.S.S.O. - Tcncas Frgramacn J
23
Es el modulo que tiene como Iuncion administrar las paginas almacenadas y
es asi que el Gestor de Archivos se olvida de los detalles de entradas/salidas
Iisicas del disco.
Este modulo puede:
S leer una pagina del disco;
S agregar una pagina en el almacenamiento;
S eliminar una pagina;
S modiIicar una pagina.
GraIicamente podemos imaginar, a una pagina almacenada, como sigue:
El conjunto de paginas puede estar Iormado por paginas que no estan en
Iorma contigua, por ello al numero de pagina 7 le sigue el numero 10. De
esa manera se encadenan las paginas en el almacenamiento, hasta la ultima
del conjunto de paginas del archivo.
Existe una pagina especial que se denomina pagina 0 o pagina indice. Su
denominacion de pagina indice se debe a que es semejante al indice de un
libro, puesto que contiene el numero de pagina con el que comienza cada
conjunto, es el indice de todos los conjuntos de paginas del disco.
Con este contenido de la pagina 0, signiIica que el conjunto de paginas del
almacenamiento Maestro de Alumnos comienza en el numero de pagina 7,
que el conjunto de paginas del almacenamiento Pagos comienza en la
pagina 8 y asi con el resto de los almacenamientos.
Conjunto de
pginas
Nmero de la primera
pgina del conjunto
Maestro de alumnos 7
Pagos 8
... ...
Libres 12
Figura 7: Pgina
/SSO - Tcncas Frgramacn J
24
Las paginas libres de un disco conIorman el conjunto de paginas libres, que
en este ejemplo comenzaria en la pagina numero 12.
De ese conjunto de paginas libres el Gestor de Archivos se provee de
espacios para almacenar nuevos registros o nuevos archivos y cuando se
libera alguna pagina vuelve a ese conjunto.
Resumiendo, el Gestor de Discos es el que ve realmente a la base de datos
almacenada tal cual es, piensen entonces lo lejos que esta de esa realidad un
usuario Iinal y lo poco que conoce de una base de datos, solo tiene una vista
muy pequea de ella.
Nivel Interno:
Tecnicas de almacenamiento y de acceso
Considero importante que conozcan, aunque sea minimamente, el acceso a
una base de datos, incluyendo una tecnica de acceso como es la indexacion.
Indexacin
Esta tecnica de gran diIusion busca un acceso mas agil a los archivos de
datos almacenados en la base de datos, disminuyendo considerablemente la
cantidad de accesos o E/S al medio magnetico.
Cuando necesitamos buscar rapidamente un alumno, en el Maestro de
Alumnos, se acude a indexar el archivo de datos por el legajo del alumno o
por el apellido, con una orden especiIica.
Esa orden ejecutada lo que hace es generar un nuevo archivo, llamado
archivo indice, asociado al archivo de datos, almacenado en el disco y hasta
en el mismo directorio del archivo de datos. El archivo indice creado tendra
2 (dos) partes:
1. Clave de indexacion: es una columna Iormada por cada valor del dato
por el que se indexa. No contiene todas las columnas, en consecuencia
siempre es de menor tamao que el archivo de datos, en el
almacenamiento Iisico.
2. El identificador de registros o RID: es simplemente un puntero hacia
el registro en el archivo de datos, que contiene el valor reIerenciado.
Un archivo de datos puede tener la cantidad de archivos indices asociados
que se necesiten, no existe una cantidad limite.
/.S.S.O. - Tcncas Frgramacn J
25
El SGBD debe asegurar que los archivos indices esten permanentemente
actualizados, es decir que concuerden totalmente con los archivos de datos.
Los archivos indices estan siempre preparados a que un programa de
aplicacion los active, en el momento que eso se produce simula que el
archivo de datos se ordena segun su propio orden y permitira acceder en
Iorma directa por el dato de indexacion. Muchos programadores creen
erroneamente que el archivo de datos cambia su orden. El archivo de datos
tiene el orden segun como Iueron ingresados o dados de alta sus registros.
Formas de utilizar los ndices
Los archivos indices permiten 2 (dos) Iormas de utilizacion, que dependera
de la situacion en la que se los acceda:
1. Acceso directo. busca un valor indicado en el archivo indice y si lo
encuentra, a traves del RID, seala al registro en el archivo de datos.
Por ejemplo si necesitamos los datos del alumno cuyo legajo es: A0103.
2. Acceso secuencial. es muy util cuando deseamos obtener un listado
ordenado por un dato o consultar datos en un intervalo determinado. Por
ejemplo, si nos solicitan un listado de alumnos ordenados por apellido.
En ese caso el archivo indice por apellido sera recorrido desde el
comienzo hasta el Iin y a medida que se recorre se accedera al archivo
de datos, pero con el orden Iijado por el indice. El indice tambien esta
en disco, por ello se levantan las paginas que lo contienen y luego se
buscan los registros de datos. Tambien puede suceder que, por ejemplo,
de ese listado solo nos interesan los alumnos cuyos apellidos esten
comprendidos en el intervalo de los que comienzan con la letra 'D y
hasta el apellido 'Moreno.
/SSO - Tcncas Frgramacn J
26
Indices por claves de indexacin compuesta
Hay situaciones en las que necesitamos indexar por 2 (dos) claves de
indexacion, o datos, a la vez, es lo que se denomina Indice por claves de
indexacion compuesta.
Por ejemplo, para obtener el listado de pagos, que vimos al comienzo de la
unidad, en la Eigura 4 y lo recordamos a continuacion, el programa de
aplicacion deberia:
Listado de alumnos y sus pagos - Ao 2
Legajo Apellido Nombres N de Telfono N de cuota Monto
abonado
Fecha del
pago
A1650 Abraham Anibal 0351-4240398 01 135 12/03/2000
02 135 09/04/2000
03 100 10/05/2000
A1845 Acevedo RodolIo 0351-4789022 01 125 07/03/2000
02 125 10/04/2000
1. Recorrer el archivo de Pagos, mientras el ao de la Iecha sea 2000 y
hasta el Iinal del archivo. En el listado se puede notar un ordenamiento
por numero de legajo, por casualidad tambien por apellido.
2. Acceder al almacenamiento, a traves del numero de legajo, Maestro de
Alumnos, para obtener apellido, nombres y teleIono.
3. Cuando el legajo Iue leido por primera vez en el Maestro de Alumnos,
imprimir sus datos personales.
4. Del almacenamiento Pagos imprimir, ordenados por numero de cuota, el
numero de cuota, el monto abonado y la Iecha de pago, de cada una de
las cuotas abonadas en ese ao.
En esa breve descripcion del proceso, podran notar un ordenamiento por
legajo y despues otro por numero de cuota.
En ese caso podemos utilizar un indice compuesto, creando un indice por
legajo y cuota en ese orden- del almacenamiento de Pagos.
En este caso mencionado, el acceso a Pagos Iue secuencial, pero eso no
quita la posibilidad de utilizar ese mismo indice compuesto para un acceso
directo.
Tipos de ndices
Los indices se clasiIican en indices densos e indices no densos.
Indices densos: son los que ejempliIicamos en la Iigura 7. Como pueden
ver en ese graIico, por cada registro del archivo Maestro de Alumnos hay un
Comentario
Puedes obtener este listado
comenzando el recorrido por
el almacenamiento Maestro de
Alumnos?... Respuesta: Si, por
que no todos seguimos la
misma logica...
/.S.S.O. - Tcncas Frgramacn J
27
registro en el Archivo indice por legajo y tambien uno por cada uno en el
Archivo indice por apellido. Por ello, en esa Iigura, el Maestro de Alumnos
contiene 5 (cinco) registros, al igual que los archivos indices.
Por esto el archivo indice denso se deIine como un archivo indice que
contiene tantas entradas como las tiene el archivo de datos al que hace
reIerencia.
De esto podemos deducir que el crecimiento del archivo indice es
directamente proporcional al crecimiento del archivo de datos y en
consecuencia el rendimiento del indice se degrada o disminuye a medida
que crece.
Indices no densos: en los indices densos los apuntadores del archivo indice
sealan a registros en el archivo de datos.
La propuesta de los archivos indices no densos es otra.
Por lo visto anteriormente pregunto:
' cuantos registros contiene una pagina?
' que beneIicios nos brindaria el sistema si agrupamos al archivo
Maestro de alumnos por el legajo como en la Eigura 5- y generamos un
indice que apunte a las paginas?
Ese es el basamento de los archivos indices no densos, el beneIicio que
brindan es el tamao que tienen en el almacenamiento Iisico, respecto a los
densos. No tiene un apuntador por cada registro de datos, sino un apuntador
por cada pagina del archivo de datos, que siempre contiene mas de un
registro.
Como pueden apreciar en la Eigura 10, se ejempliIico con una pagina que
contiene solo 6 (seis) registros del Archivo Maestro de Alumnos y el
archivo indice no denso tiene como primera entrada un registro con el
numero de legajo A0106, que es justamente el ultimo de la pagina 8. La
segunda entrada del indice contiene al legajo A0115 y el apuntador seala a
la pagina 9, eso implica que A0115 sera el ultimo registro de esa pagina 9.
Suponemos en este ejemplo que la pagina 8 es la primera del conjunto de
paginas del archivo Maestro de Alumnos.
/SSO - Tcncas Frgramacn J
28
Esa es la Iorma en que se generan los indices no densos, tienen una entrada
por cada pagina.
Si el sistema necesita los datos del alumno cuyo legajo es A0103, buscara
en el archivo indice la pagina donde la clave de indexacion es mayor o igual
que A0103. En nuestro ejemplo, la segunda entrada es la que cumple esa
condicion y a la vez apunta a la pagina 8. El Gestor de disco realiza una
operacion de lectura en el medio de almacenamiento, levanta la pagina 8 y
se la entrega al Gestor de Archivos, que revisa la pagina, pero ya no en
disco, buscando el registro que corresponde al legajo buscado, y si existe se
lo entrega al SGBD.
Para veriIicar la existencia de un valor en un archivo de datos, solamente
con el archivo indice denso se puede veriIicar, sin acceder al archivo de
datos. En cambio, con el indice no denso eso es imposible, porque al
apuntar paginas necesariamente se debe acceder al archivo de datos y
veriIicar en el mismo la existencia de un valor.
Arboles B: esta clase o estructura de indices es la que mas se utiliza en los
sistemas de bases de datos, por el desempeo que oIrecen.
Ya hemos mencionado el problema que acarrea el crecimiento del archivo
de datos indexado, que no es mas ni menos que el crecimiento paralelo del o
de los archivos indices y por lo tanto la degradacion del sistema, en cuanto a
tiempo de proceso o perIormance.
Los arboles B oIrecen una solucion a este inconveniente, planteando una
estructura de datos basada en 3 (tres) conceptos: registros de datos
propiamente dichos del Archivo Indexado; nivel de indice hacia los
registros o tambien llamado Conjunto Secuencia; y nivel de indice de
indices o Conjunto Indice.
De que se trata todo esto?. Simplemente de organizar una estructura en
arbol invertido, donde el nivel de las hojas esta compuesto por los datos
almacenados y el nivel de la raiz del arbol es un indice de otros indices.
Comentario
Algunos autores llaman
Arbol B a la combinacion
del Conjunto Indice y el
Conjunto Secuencia.
/.S.S.O. - Tcncas Frgramacn J
29
GraIicamente seria algo asi:
El conjunto secuencia es de un solo nivel, apunta directamente a los datos
almacenados, y puede ser un archivo indice no denso o denso, segun si el
archivo indexado esta agrupado o no respectivamente; el conjunto secuencia
de la Iigura es denso.
El conjunto indice debe ser no denso y tiene estructura de arbol, por ello se
lo suele denominar indice multinivel. Trata al conjunto secuencia como a un
archivo almacenado comun. Su nodo superior o raiz esta Iormado por un
solo nodo y es por alli donde comienza la busqueda.
Si, por ejemplo, buscamos el alumno de legajo A0104 el proceso seria:
1. En el nodo superior hay 3 (tres) apuntadores y 2 (dos) valores: A0105
A1285.
2. Los valores buscados siguen la siguiente logica:
valor A0105 apuntados por el puntero izquierdo del nodo raiz
valor ~ A0105 y valor A1285 apuntados por puntero central
valor ~ A0105 apuntados por puntero derecho del nodo raiz
Segun esto el A0104, buscado en el ejemplo, nos llevara por el
puntero izquierdo al nivel siguiente.
3. Los valores A0099 y A0102 obligan a seguir por el nodo derecho del
segundo nivel del conjunto indice, porque A0104 es mayor que A0102.
Biblioteca
Para ampliar este tema,
aclarar o consultar
algoritmos de busqueda,
puedes solicitar en biblioteca
el libro Introduccion a los
Sistemas de Bases de Datos
C.J.Date.
/SSO - Tcncas Frgramacn J
30
4. Ya en el conjunto secuencia, se lleva a memoria la pagina que contiene
los valores A0103-A0104-A0105.
5. Encontrado el apuntador, se accede al Archivo indexado para leer el
resto de los datos.
Ejercicios de autoevaluacion
1- Cuantos archivos indices no densos pueden crearse
para un archivo de datos?... JustiIica tu respuesta.
2- Segun el Archivo de Materias del Plan de Estudios
que se plantea a continuacion, esquematiza o graIica un
archivo indice denso por descripcion.
Archivo Materias
Codigo Descrip
M1 MATEMATICA I
IT1 INGLES TECNICO I
ECT1 EILOSOEIA DE LA CIENCIA Y DE LA TECNICA I
PL PROGRAMACION LOGICA
SPD1 SISTEMAS DE PROCESAMIENTO DE DATOS I
M2 MATEMATICA II
IT2 INGLES TECNICO II
ECT2 EILOSOEIA DE LA CIENCIA Y DE LA TECNICA II
P1 PROGRAMACION I
SPD2 SISTEMAS DE PROCESAMIENTO DE DATOS II
M3 MATEMATICA III
EDP1 ETICA Y DEONTOLOGIA PROEESIONAL I
SPD3 SISTEMAS DE PROCESAMIENTO DE DATOS III
LGI1 LENGUAJES GENERADORES DE INEORMES I
P2 PROGRAMACION II
EDP2 ETICA Y DEONTOLOGIA PROEESIONAL II
LGI2 LENGUAJES GENERADORES DE INEORMES II
TP TECNICAS DE PROGRAMACION
PC PROGRAMACION CIENTIEICA
SA1 SISTEMAS ADMINISTRATIVOS I
MINI MINICOMPUTADORAS
MA1 MATEMATICA APLICADA I
SA2 SISTEMAS ADMINISTRATIVOS II
MA2 MATEMATICA APLICADA II
SA3 SISTEMAS ADMINISTRATIVOS III
SEMI SEMINARIO
/.S.S.O. - Tcncas Frgramacn J
31
D
o
s
MIs OaIs
Osn Bass OaIs
Modelos de Datos
Para comenzar, y en relacion con lo tratado en la Unidad I, diremos que los
datos que se almacenan en las bases de datos provienen del mundo real o
realidad de una empresa u organizacion.
Esos datos a almacenar se pueden deIinir a nivel conceptual, describiendo
globalmente el conjunto de datos, sin pensar en el equipamiento o el SGBD
a utilizar. Esas herramientas o instrumentos que permiten esa descripcion de
los datos son modelos conceptuales, son modelos de analisis y no de
implementacion.
Existen tambien los modelos convencionales o logicos que son soportados
por los SGBD. Segun en que SGBD se trabaje son los conceptos que se
utilizan, por ejemplo: en el modelo de datos relacional se habla de tablas o
relaciones, atributos, etc.; pero en un modelo orientado a objetos los
conceptos pueden ser: encapsulamiento, clases, objetos, metodo, etc.
En deIinitiva el Modelo de Datos es el instrumento que, Iormado por un
conjunto de herramientas, permite: deIinir y describir los datos, las
relaciones entre ellos, el signiIicado de los datos y las restricciones que
provienen de la realidad.
/SSO - Tcncas Frgramacn J
32
Cuando decimos que un archivo de alumnos posee numero de documento,
legajo, apellido, nombres, codigo postal, etc., estamos describiendo o
deIiniendo la estructura global, el esquema de la base de datos.
En cambio, cuando especiIicamos que existe un almacenamiento de
ciudades que contiene un codigo de provincia a la que pertenece, estamos
determinando las relaciones existentes entre los datos.
Si bien es muy conocido y diIundido el modelo de datos relacional, no Iue
ni es el unico. A continuacion analizaremos brevemente otras opciones.
ClasiIicacion de los modelos de datos
Para tener un panorama general, creo conveniente adherir a una
clasiIicacion, entre todas las existentes, y elijo la propuesta por el autor
KORTH, en su libro Eundamentos de Bases de Datos, que podemos
esquematizar de la siguiente manera:
Modelo fsico de datos
Son modelos que actualmente no existen en el mercado; se utilizaban para
describir datos en el nivel de abstraccion mas bajo, en el nivel interno.
Modelos de Datos
Lgicos basados
en objetos
Modelo entidad
relacin
Modelo orientado
a objetos
Lgicos basados
en registros
Modelo
jerrquico
Modelo de red
Modelo relacional
Fsicos de datos
/.S.S.O. - Tcncas Frgramacn J
33
Modelos lgicos basados en objetos
Estos modelos proporcionan capacidad de estructuracion muy Ilexible y se
conocen varios modelos dentro de este grupo, pero los mas importantes y
conocidos son los nombrados en el esquema anterior.
El Modelo Entidad/Relacin podemos decir que se basa en conceptos
como entidades y relaciones entre ellas, conceptos que luego se utilizan el
modelo relacional.
Entendemos por entidad a un objeto que existe en el mundo real y se
distingue de otros. Por ejemplo: Anibal Abraham, alumno cuyo numero de
legajo es A1650, es una entidad. Al conjunto de entidades de ese tipo se le
llamara conjunto de entidades alumnos. Los valores de los atributos,
permiten la distincion de una entidad con otra, por ejemplo, no todas las
entidades tendran legajo A1650.
Este modelo entidad/relacion se utiliza y sera tratado seguramente en
materias relacionadas al analisis de sistemas, porque permite aplicar el
diagrama de entidad/relacion y analizar el tipo de relacion existente entre las
entidades.
Con ese diagrama podemos representar al conjunto de relaciones Examenes
que une a las entidades Alumnos y Materias. El conjunto Examenes tiene
atributos propios y descriptivos, que son Eecha y Nota de cada examen de
los alumnos en las distintas materias. Los atributos Legajo, Nombres,
Apellido y DNI pertenecen al conjunto de entidades Alumnos. Materias
tiene tambien sus propios atributos: Codigo y Descripcion.
Como las lineas que unen a Alumnos con Materias no tienen direccion,
signiIica que las relaciones Examenes son muchas a muchas, es decir que un
alumno puede rendir muchas materias y una materia puede ser rendida por
Examenes
Alumnos Materias
Eecha Nota
Apellido
Legajo
Nombres
DNI
Codigo
Descripcion
Figura 15: Diagrama
Entidad/Relacin
/SSO - Tcncas Frgramacn J
34
muchos alumnos. Las relaciones tambien pueden ser una a muchas, muchas
a una y una a una.
Para Iinalizar podemos decir que, modelada una empresa con un diagrama
de este tipo, el esquema puede llevarse a un conjunto de tablas en un
Modelo de Datos Relacional u otro.
Respecto al Modelo Orientado a Objetos podemos adelantar que es la
tecnologia mas prometedora en SGBD.
Esta basado en el paradigma de la programacion orientada a objetos y el
primer intento de un SGBD Orientado a Objetos se hizo en el ao 1986,
pero actualmente es muy diIicil que las bases de datos relacionales
instaladas se migren rapidamente a esta nueva IilosoIia de trabajo. Las
empresas no desean arriesgar la continuidad operativa, ademas la
capacitacion de los diseadores y del personal de sistemas en general es otro
obstaculo porque no hay muchas personas dedicadas a este tema.
Este modelo surge en el mercado por las deIiciencias remarcadas en el
modelo relacional, como por ejemplo la Ialta de Ilexibilidad de la estructura
de datos y la aparicion de nuevas aplicaciones, como: bases de datos
multimediales con sonidos, imagenes y videos.
Modelos lgicos basados en registros
Este modelo recibe la denominacion debido a que los datos se almacenan en
registros de Iormato Iijo, con un numero estable de campos o atributos.
Los Modelos de red y jerrquico ya son parte de la historia. En ambos
casos los datos se representaban a traves de registros y las relaciones
mediante enlaces o punteros.
Modelo Relacional
Cuando, en 1970, el Dr. E. E. Ted Codd, investigador de la empresa IBM,
publico el articulo titulado 'Un modelo relacional de datos para grandes
bancos de datos compartidos, perIilo una teoria matematica para almacenar
y manipular datos. En ese momento se planteo basicamente los siguientes
objetivos:
' Independencia Iisica
' Independencia logica
' UniIormidad
' Sencillez
Los 2 (dos) primeros conceptos Iueron tratados en la Unidad I, restaria
deIinir UniIormidad y Sencillez.
/.S.S.O. - Tcncas Frgramacn J
35
Uniformidad es entendida como la posibilidad de almacenar todos los datos
y las relaciones entre ellos en estructuras logicas o tablas. De esa manera se
logra la sencille: en la comprension y manipulacion de datos por parte del
usuario.
Desde ese momento las investigaciones se dedicaron a proIundizar este
modelo y es asi que la empresa Oracle obtiene en 1979 el primer Sistema de
Gestion de Bases de Datos Relacional, luego aparece el producto Ingres y
en 1983 IBM anuncia su producto DB2. Es de destacar que IBM comenzo
con el proyecto y el Dr. Codd pertenecia a la empresa, pero asi mismo,
como habran podido notar, no Iue IBM quien salio primero al mercado.
En el proximo punto intentaremos revisar algunos conceptos que ya
conocen de la asignatura Lenguajes Generadores de InIormes I, solo los
deIinimos o ampliamos en algunos terminos o conceptos, para comenzar
posteriormente el diseo de bases de datos.
Estructura deI modeIo reIacionaI
En el modelo relacional se distinguen conceptos tales como: relacion, tupla,
atributo, cardinalidad, grado, dominio y claves.
Relacin: como este modelo tiene una Iuerte base matematica, el termino
relacion es una especie abstracta de objeto, donde Codd lo deIine como el
producto cartesiano de los dominios.
Ese objeto implementado concretamente es lo que se denomina tabla.
InIormalmente se los utiliza como sinonimos, por ello no sera problema que
durante el cursado de la materia llamemos tabla o relacion a la estructura
tabular que almacena a los datos, si debemos tener en cuenta que no son
exactamente lo mismo.
Clasificacin de las relaciones: Las relaciones se clasiIican en:
bases, vistas, instantaneas, temporales, resultados intermedios y resultados
de consultas.
Las relaciones bases son las tablas que normalmente utilizamos y que
almacenan Iisicamente a los datos, son autonomas y tienen un nombre unico
en la base de datos. Estas tablas reIlejan la realidad de la organizacion.
Las vistas, en cambio, no son autonomas sino que derivan de otras
relaciones, brindan seguridad porque es lo que podemos mostrarles a los
usuarios Iinales ingenuos. Tambien se las denomina relaciones virtuales
porque no se almacenan. Pueden deIinirse en terminos de una consulta a una
o mas relaciones bases.
Las relaciones instantaneas, conocidas tambien como snapshot, son
derivadas, se almacenan a diIerencia de las vistas y tienen un nombre.
Pueden deIinirse como el resultado de una consulta. Cuando cambian los
datos en las tablas, las instantaneas no se actualizan automaticamente ni las
puede actualizar el usuario porque son relaciones de solo lectura, pero se
/SSO - Tcncas Frgramacn J
36
reIrescan o se renuevan sus datos cada cierto tiempo que se deIine con su
creacion.
Las relaciones temporales tienen nombre, pueden ser derivadas o no, pero
se eliminan automaticamente, sin una accion explicita de borrado, tienen
existencia durante una transaccion o una sesion de trabajo.
Los resultados intermedios son una relacion sin nombre, son resultados de
alguna expresion que esta incluida en otra expresion, es decir que se da en
expresiones anidadas. Veremos puntualmente estos tipos de relaciones en
las subconsultas de SQL.
Los resultados de consultas tambien son relaciones con estructura tabular,
con nombre o no, y no se almacenan. Tambien veremos varios ejemplos en
SQL.
Propiedades de las relaciones:
' No existen tuplas repetidas.
' Las tuplas, no estan ordenadas de arriba hacia abajo o viceversa.
' Los atributos no estan ordenados, de izquierda a derecha o viceversa. En
las tablas se incluyen determinados ordenamientos cuando se
implementan, pero normalmente depende de la Iorma de trabajo del
diseador.
' Todos los valores de los atributos son atomicos, quiere decir que en la
interseccion de una Iila y una columna hay un dato, no una estructura de
datos.
Tupla: es la denominacion de las Iilas de la tabla, lo que algunos llaman
registros, lo que representa a cada entidad almacenada. En otros tipos de
archivos vale el termino registro, en las bases de datos relacionales
utilizaremos el termino tupla. El conjunto de tuplas conIorma el cuerpo de
la tabla.
Atributo: son las columnas que Iorman a una tabla, los elementos que
distinguen a las entidades. Aunque algunos tambien los denominan campos,
no es lo correcto en este modelo.
Cardinalidad: es el numero de tuplas de una tabla, por lo tanto varia con el
tiempo a traves de inserciones y eliminaciones de tuplas.
Grado: se le llama al numero de atributos o columnas de una tabla. Este no
cambia con el tiempo. Pero entonces ... que sucede cuando agregamos una
columna de una tabla?. Las instrucciones ModiIy Structure, de Eox, y Alter
Table, del SQL, permiten esa tarea, pero se entiende que al agregar una
columna no cambia el grado n de la tabla, sino mas bien se entiende como la
creacion de una nueva tabla de grado n1 a partir de una tabla de grado n.
Dominio: es el conjunto de valores posibles de un atributo. El mismo esta
Iormado por valores homogeneos, son todos del mismo tipo, y atomicos, es
decir que no se pueden dividir sin perder su semantica o signiIicado.
/.S.S.O. - Tcncas Frgramacn J
37
Por ejemplo, el dominio del dato Descripcion de las Provincias de la
Republica Argentina puede estar Iormado por valores como: Cordoba,
Buenos Aires, Santa Ee, Jujuy, etc.; si descomponemos o dividimos el valor
Cordoba en las letras 'C, 'o, 'r, ... se pierde el signiIicado.
Los dominios tienen un nombre, un tipo de dato y permiten que el SGBD
controle los valores posibles de cada dato en la base de datos, sin tener la
necesidad de incorporar lineas de programas que controlen la validez de los
datos.
En el ejemplo de las provincias, los dominios son simples y tambien existen
los dominios compuestos. En la base de datos podemos almacenar una Iecha
como dominio compuesto y tambien contar con 3 (tres) dominios simples
para dia, mes y ao; podemos considerar los dominios simples apellido y
otro del nombre, o como dominio compuesto a Apellido y Nombres. Ante
esta situacion, personalmente me quedo con la separacion en dos dominios
simples de Apellido y otro del Nombre.
Claves: antes de tratar las claves es conveniente recordar una de las
propiedades de las relaciones, citadas anteriormente, que plantea que en las
relaciones No existen tuplas repetidas.
De ello podemos deducir que debe haber al menos un atributo o
combinacion de ellos que conIormen un identiIicador de las tuplas en una
tabla, para que no se produzcan repeticiones.
Recordando los tipos de claves que existen, podemos distinguir las
Candidatas, Primarias, Alternas y las Eoraneas.
Las Claves Candidatas que son un atributo o agrupacion de ellos, deben
cumplir 2 (dos) propiedades inalterables en el tiempo: Unicidad y
Minimalidad. La unicidad se reIiere a que en un momento dado no pueden
existir dos tuplas con el mismo valor en la clave candidata. La segunda
propiedad, minimalidad, indica que si la clave candidata es compuesta por
dos o mas atributos en ningun momento sera posible eliminar alguno de
ellos sin destruir la propiedad de unicidad.
Por ejemplo, en el almacenamiento Pagos,utilizado en la Unidad I, no
podemos elegir como clave candidata solo al Legajo porque un alumno
puede, y seguramente sera asi, abonar mas de una cuota.
Figura 18: Almacenamiento
Pagos
Almacenamiento Pagos
Dato Tipo de dato Tamao Decimal
Legajo Caracter 5
Nrocuota Caracter 20
Aopago Numerico 4
Montopagado Numerico 6 2
EechaPago Date 8
/SSO - Tcncas Frgramacn J
38
La composicion de Legajo y Nrocuota tambien es insuIiciente, porque
puede suceder que el alumno pague la cuota 1 de 1999 y la cuota 1 del ao
2000. De esa manera la presentacion de legajo A0100 y cuota 1, puede
repetirse.
Una solucion seria elegir como clave candidata a Legajo Nrocuota
Aopago, bajo el supuesto que el alumno abona siempre la cuota completa,
de lo contrario seria necesario incluir tambien la Eecha del Pago en la clave
compuesta.
Hasta este momento estabamos analizando la propiedad de Unicidad. La
Minimalidad se piensa con la clave candidata ya elegida y es cuestion de
analizar si podemos quitar algun atributo de la clave candidata sin eliminar
la unicidad de la composicion seleccionada.
Por ejemplo, si quitamos el legajo de esa seleccion seguramente se repetira
NrocuotaAo, porque muchos alumnos abonan esa cuota de ese ao y
ademas no sera posible saber que alumno pago la cuota, de lo contrario si
eliminamos el nrocuota de la clave, se repite LegajoAo, porque el
alumno en un ao paga 10 cuotas.
Es posible que algunos almacenamientos contengan, aunque es poco comun,
mas de una clave candidata. Por ejemplo los alumnos pueden identiIicarse
por TipodocumentoNrodocumento o simplemente por Legajo.
De esas claves candidatas el diseador debe optar por una, lo hara segun su
experiencia, segun el ambiente donde se implementara el sistema, o
simplemente por su punto de vista o criterio.
Pero en deIinitiva la clave candidata elegida se denomina Clave Primaria y
las otras se denominan Claves Alternas o Alternativas, segun la bibliograIia.
Resta identiIicar a las tan importantes Claves Foraneas o Afenas, que son
las que permiten las relaciones entre los almacenamientos. En otros modelos
se utilizaban punteros para relacionar mas de un almacenamiento, en el
Modelo Relacional se logra a traves de este tipo de claves.
Una clave ajena es un atributo o combinacion de atributos de una relacion o
tabla T
1
que es clave primaria en otra relacion o tabla T
2
. En T
1
, este
atributo, o estos atributos, puede Iormar o no parte de la clave primaria.
DeIinitivamente el valor de la clave ajena representa una reIerencia a una
tabla, donde se encuentra el valor correspondiente a una clave primaria.
Por ejemplo:
a) En el Almacenamiento Pagos, el dato Legajo es una clave ajena o
Ioranea que reIerencia a la tabla Maestro de Alumnos. En este ultimo
/.S.S.O. - Tcncas Frgramacn J
39
almacenamiento, el dato Legajo es clave primaria y, en Pagos, Iorma
parte de la clave primaria.
b) Pero si en el Maestro de Alumnos existiera un dato Codigo Postal,
que reIerencia a una tabla Ciudades, en Ciudades seria clave primaria
y en el Maestro de Alumnos no Iorma parte de la clave primaria.
La tabla que contiene a la clave ajena se denomina tabla reIerencial y a la
que contiene la clave primaria se la llama tabla reIerida u objetivo.
Para graIicar o representar esta situacion se suele utilizar el diagrama:
En este diagrama reIerencial, el Maestro de Alumnos se ve claramente que
es Tabla ReIerida por Pagos y al mismo tiempo ReIerencial a Ciudades, a
traves de las claves ajenas que rotulan dichas reIencias (Legajo Codigo
Postal).
Para Iinalizar, debemos aclarar que los valores de la clave ajena y de la
clave primaria deben ser deIinidos sobre el mismo dominio.
Reglas de Integridad relacional
Los datos almacenados en las estructuras deIinidas anteriormente provienen
de la realidad de la organizacion y la realidad misma impone restricciones o
reglas que limitan a los datos.
Por ejemplo:
' En una entidad bancaria se Iijan montos minimos para las cajas de
ahorro y otros minimos para los plazos Iijos. Pero no todos los bancos
tienen los mismos montos minimos y tampoco los intereses a ganar.
Puede ser que algun banco puede Iijar un minimo para plazo Iijo de
$1.000,00 y otro un minimo de $5.000,00.
' En una empresa de produccion los stock de las piezas tienen posibles
valores minimos y maximos, la cantidad de los pedidos tienen otros
limites;
' En el ISSD las notas de los parciales y examenes no pueden ser
inIeriores a 0 (cero) ni superiores a 10 (diez), ademas en los examenes
los valores deben ser enteros. Actualmente los legajos deben tener la
Iorma Lnnnn, donde L es una letra (A presencial S semipresencial E
Cruz del Eje) y nnnn es un numero entero de 4 (cuatro) digitos. En otras
instituciones se utiliza un legajo solo numerico o simplemente se
identiIican con el DNI.
Legajo Codigo Postal
Pagos Maestro de Alumnos Ciudades
Figura 19:
Diagrama referencial
/SSO - Tcncas Frgramacn J
40
Estas son las reglas especificas o comerciales, porque dependen de la
organizacion en la que se desarrolla el sistema inIormatico y de la tabla
donde se encuentra el dato.
Ademas de estas reglas, existen 2 (dos) que no dependen de las
organizaciones, sino que se aplican a todas las bases de datos relacionales.
Estas reglas se denominan Reglas Generales de Integridad.
Regla de integridad de las entidades: Esta regla se reIiere a los valores de
los atributos elegidos como claves primarias y explicita que ninguno de los
componentes de la clave primaria de una tabla puede aceptar valores nulos.
El termino nulo hace alusion a los valores desconocidos, a inIormacion que
Ialta a la hora de ingresarlos a la base de datos.
En un sistema de base de datos relacional se pueden deIinir algunos datos
para que acepten valores nulos y otros para que no los acepten. Por ello,
todos los atributos que Iorman la clave primaria deben deIinirse sin la
posibilidad de almacenar valores nulos
Por ejemplo: el legajo de un alumno no puede desconocerse, porque de lo
contrario no podremos identiIicarlo. El teleIono de un alumno o el promedio
obtenido en el nivel medio pueden ser datos desconocidos por un pariente,
que lo inscribe en el ISSD, aunque en otro momento pueda ser completado.
Regla de integridad referencial: Aqui las claves que tienen importancia
son las ajenas o Ioraneas y dice que la base de datos no debe contener
valores de clave afena sin concordancia con los valores de claves
primarias.
En situaciones muy particulares las claves ajenas pueden aceptar valores
nulos, puede ser por ejemplo antes de comenzar las clases, cuando los
alumnos ingresantes no han sido asignados a ninguna materia, aula o
comision. En ese caso se conoce el legajo del alumno pero no a que curso
corresponde.
El diseador debera prestar atencion a las situaciones que se pueden
plantear para que el SGBD mantenga la integridad reIerencial.
Conocidas esas situaciones el DBA debe deIinir las reglas en la base de
datos, para que el SGBD nunca deje pasar una situacion anomala.
Para ejempliIicar, porque este tema sera proIundizado en la Unidad III,
podemos analizar el sistema de alumnos del ISSD. Que debe hacer el
SGBD cuando el usuario desea eliminar un alumno? ...
a) Debe eliminar toda su situacion academica, borrando regula-
ridades, examenes, cuotas, etc.?
/.S.S.O. - Tcncas Frgramacn J
41
b) no permitir la eliminacion de ese tipo de entidades?.
Una situacion semejante se plantea cuando se desea modiIicar el contenido
de la clave primaria.
Por ejemplo, Telecom, no hace mucho tiempo, debio alterar todos los
numeros teleIonicos del pais, e inclusive los codigos de area, agrego un 4 al
comienzo del numero teleIonico y un 3 en el codigo de area. Asi el ISSD
quedo con codigo 0351 y numero 4252606.
Otro ejemplo es el codigo postal que esta en plena actualizacion, el ISSD
paso de 5000 a X5000AES... la terminacion del codigo postal parece de la
competencia pero es el que nos toco. Que se hace en estos casos?...
seguramente aplicaron actualizacion en cascada hacia todas las tablas que
hacian reIerencia a esos datos, porque de lo contrario surgen terribles
inconvenientes.
Todas esas situaciones deben ser tenidas en cuenta por el DA y DBA, para
no ser sorprendidos por un imprevisto.
/SSO - Tcncas Frgramacn J
42
Introduccion al Diseo de Bases de Datos
El siguiente desarrollo no intenta brindar una receta a seguir, es simplemente
una explicacion de la teoria y la aplicacion en un grupo de ejercicios, en la
busqueda de brindar un panorama de la diIicil tarea de deIinir la estructura
de la base de datos.
Considero que el titulo lo dice todo, es una introduccion al diseo. Un diseo
que se aprende en la practica, en el ejercicio y se optimiza con el tiempo.
Se busca, con el diseo, responder a las necesidades de datos de un sistema.
Esas necesidades se plantean en algunas etapas del Analisis de Sistemas y
con el diseo logico se cumple otra etapa. Pero sin olvidar que la tarea de
programacion y el Iuncionamiento posterior del sistema de inIormacion,
dependen en gran medida de lo que se logre en este paso.
En el diseo no interesa la Iorma en que se utilizaran, por ello se dice que el
diseo logico es independiente de las aplicaciones, e inclusive la
organizacion de los datos es deseable que responda tanto a necesidades
actuales como Iuturas.
La estructura logica que se logre debe ser tambien independiente del SGBD
en que se implemente, independiente del lenguaje de programacion,
independiente del sistema operativo, independiente del modelo de datos, etc.
La metodologia a tratar en esta unidad se denomina Normalizacion y aclaro
que no es la unica que existe, pero si la mas usada o conocida.
Normalizacin
Asi se llama esta metodologia basada en un proceso de descomposiciones
sucesivas, sin perdida de inIormacion, para lograr estructuras de
almacenamientos en Iorma deseable. Es decir que dada una relacion R,
vamos reduciendo de manera sistematica esa relacion a un conjunto de
relaciones mas pequeas.
Los objetivos generales de la normalizacion pueden ser resumidos en:
N Eliminar ciertos tipos de redundancias.
N Evitar anomalias en las actualizaciones de datos.
N Obtener un diseo que represente al mundo real, de una manera Iacil
de entender y permita el crecimiento Iuturo.
N SimpliIicar la aplicacion de las reglas de integridad.
En las estructuras obtenidas se reduce la redundancia de datos, y por
consiguiente la inconsistencia que producen actualizaciones anomalas. La
redundancia es reducida, quizas no eliminada, porque el diseador debe
hacer un analisis de sus datos y determinar cuando le conviene mantener
cierta redundancia.
Comentario
La aplicacion de las reglas, si
bien son una guia en el proceso
de normalizacion, no siempre
nos llevan a identicos
resultados, porque no hay
criterios totalmente objetivos
para elegir entre distintas
alternativas de descomposicion,
depende del diseador.
/.S.S.O. - Tcncas Frgramacn J
43
Esto creo que se podra aclarar durante el desarrollo de la unidad, pero desde
ya quiero que quede claro que en algunas situaciones la redundancia es
decidida, no es un error como algunos pueden pensarlo, eso si: debe ser
conocida y controlada para que no sea daina.
Otro punto importante es que durante el proceso de descomposicion nunca se
debe perder inIormacion, por lo tanto siempre es posible hacer un paso atras.
Este procedimiento sigue un conjunto de reglas o restricciones que se llaman
Eormas Normales, asi mismo no es una tarea simple, al contrario es
compleja. En una base de datos reducida puede ser sencillo pero no asi
cuando es una base de datos de importante dimension.
Las Eormas Normales (NE: Normal Eorm) que se conocen son 6 (seis) pero
practicamente se usan solo 3 (tres) y que se llaman: Primera (1NE), Segunda
(2NE) y Tercera Eorma Normal (3NE). Las otras deIinidas son la Eorma
Normal Boyce/Codd (BCNE), que Iue una redeIinicion de la 3NE; la 4NE y
la 5NE.
Estas Iormas normales se basan en un par de deIiniciones que hacen
reIerencia a la dependencia Iuncional de los datos.
Dependencia funcional
Este tipo de deIiniciones es el que generalmente no nos gusta, pero no se
olviden de que el modelo surge de una base matematica y por ello tienen este
aspecto.
Intentare algunos ejemplos para mejorar la relacion alumno-contenido.
En el ISSD dado un numero de documento existe solo un apellido asociado o
que depende de el.
Es decir, hay una relacion uno a uno entre un documento y un apellido, por
lo tanto si les pido el apellido del alumno cuyo DNI es 25023998, no debera
haber ninguna conIusion. Ese DNI tambien tiene asociado un nombre, etc.
o lo que es lo mismo:
En una relacion R un atributo B depende funcionalmente del atributo A,
de la misma relacion R, si v solo si un solo valor de B esta asociado a
cada valor de A, en todo momento.
R.A R.B
R.A determina funcionalmente a R.B
Alumno.DNI Alumno.Apellido
Alumno.DNI Alumno.Nombre
Alumno.DNI Alumno.(Apellido, Nombre)
Biblioteca
En el libro Introduccion a los
Sistemas de Bases de Datos de
C.J.Date - 5ta. Edicion,
capitulo 21, estan deIinidas y
ejempliIicadas las Eormas
Normales: BCNE, 4NE y 5NE;
aunque por lo general no se
aplican.
/SSO - Tcncas Frgramacn J
44
Asi como lo anterior se deduce directamente, no podemos decir lo mismo de
la relacion entre un documento y una nota obtenida.
No existe una unica nota para un alumno, como tampoco una nota depende
solamente del documento, hay otros datos para determinar una nota de un
alumno.
Esa ultima situacion necesita de otra deIinicion que es la correspondiente a
Dependencia Euncional Completa.
Dependencia funcional completa
En esta deIinicion, se supone que A es un atributo compuesto
Por ejemplo:
Podemos decir que la nota de un alumno depende simultaneamente de la
composicion de los atributos: DNI del alumno, codigo de la materia rendida
y en que turno de examen Iue rendida.
Asi si buscamos, por ejemplo, el resultado de un examen del alumno cuyo
DNI es 26065780, codigo de materia AED1 y en el turno 45 (marzo 2004)
obtendremos una unica nota, no habra conIusion y sera posible encontrarla.
Es una dependencia Iuncional completa, porque del conjunto de atributos
Iormado por Legajo, CodMateria y TurnoExamen depende cada nota
obtenida.
Si intentamos conIormar un subconjunto con CodMateria y TurnoExamen
sera imposible determinar una nota, porque no sabemos a que alumno se
reIiere.
Una situacion semejante se produce si decimos que la nota depende del
subconjunto DNI y CodMateria, eso no es posible porque un alumno puede
rendir varias veces la materia y de esa manera no identiIicamos el turno del
examen.
Alumno.DNI Alumno.Nota
Examen.(DNI, CodMateria, TurnoExamen) Examen.Nota
En una relacion R un atributo B es por completo dependiente
funcionalmente del atributo A, de la misma relacion R, si v solo si
depende funcionalmente de A v no depende funcionalmente de un
subconfunto de A.
/.S.S.O. - Tcncas Frgramacn J
45
Diagrama de dependencias funcionales
Este tipo de diagramas sirve para graIicar o esquematizar dependencias entre
los datos de un sistema de inIormacion.
Para lograr este diagrama y poder analizar las dependencias entre los datos,
es necesario conocer el signiIicado de los mismos.
De los ejemplos tratados durante esta unidad, podemos obtener el siguiente
diagrama, donde observaremos que las Ilechas comienzan en las claves
candidatas y apuntan a los datos dependientes.
En estas dependencias Iuncionales se nombran 3 (tres) relaciones: Alumnos,
Materias y Examenes, en ese orden.
Ahora estamos en condiciones de comenzar a deIinir las reglas o Iormas
normales a las que se someten las relaciones, para lograr un buen diseo.
DNI
DNI
CodMateria
Turno
Apellido
Nombres
Direccion
Eecha Nacimiento
Nota
CodMateria
Descripcion
Cuatrimestre
Ao
Figura 2: Diagrama de
Dependencias Funcionales
/SSO - Tcncas Frgramacn J
46
Primera Forma NormaI (1NF)
En la practica, la interpretacion de esta deIinicion de la 1NE suele guiarnos
a pensar en dos caracteristicas de los almacenamientos:
a) que en la interseccion de una Iila con una columna debe haber un
unico valor, nunca una estructura compleja;
b) que los atributos deben contener valores simples.
Para ejempliIicar la interpretacion se me ocurre mencionar un tipico caso de
Iacturacion o emision de recibos. Esa Iacturacion, sea en una empresa de
ventas de productos o servicios, tiene similares rasgos.
Por ello, planteo el caso de la emision de recibos en el ISSD, donde un
alumno abona una cuota o mas en el mismo momento.
El recibo contiene:
N numero de recibo, que si bien es preimpreso debe almacenarse para
mantener en Iorma persistente el pago y poder controlar las cajas
diarias;
N nombres y apellido del alumno;
N direccion, codigo postal y ciudad del alumno;
N Iecha de pago;
N numero de cuota que abona, un renglon del recibo por cuota abonada;
N ao de la cuota que paga, puede pagar cuotas de distintos aos;
N monto de cada cuota abonada;
N total abonado, en numeros y letras.
Una relacion esta en primera forma normal si v solo si todos los
dominios simples contienen valores atomicos.
Comentario
El termino atomico hace
reIerencia a la imposibilidad
de division de un dominio, es
decir del conjunto de valores
posibles de un atributo.
/.S.S.O. - Tcncas Frgramacn J
47
Al total abonado en letras seguramente lo obtendremos de algun proceso o
procedimiento ya programado, por lo cual no lo almacenamos.
Entonces, lo primero que podemos hacer intuitivamente es armar una tabla
con todos los datos mencionados, con la siguiente estructura:
numero
recibo
nombres
apellido
direccion Codigo
ciudad
ciudad Iecha
pago
Numero
cuota
ao
cuota
monto
cuota
total
abonado
Es decir que si la alumna Celeste Toledo paga la cuota 1 del ao 2003, cuyo
importe es $135.-, se almacenara una tupla con el contenido:
B0002-
00001054
Celeste
Toledo
Colon
348
1 Cordo
ba
10/04/20
03
01 2003 135 135
Seguramente ya habran notado alguna anormalidad en la estructura, pero
antes de criticarla voy a plantear otro pago, para que se visualice lo que
busco.
El siguiente alumno que abona es Jose Eunes, quien esta atrasado en sus
pagos y desea abonar 3 (tres) cuotas a la vez: las cuotas 09 y 10 del ao
2002, por $105 cada una, junto a la cuota 1 del ao 2003, de $135.
Esto implica agregar a la tabla una Iila para el alumno Eunes:
B0002-
00001054
Celeste
Toledo
Av. Colon
348
1 Cordoba 10/04/2003 01 2003 135 135
B0002- Jose Ayacucho 1 Cordoba 13/04/2003 09 2002 105 345
00001055 Eunes 155 10 2002 105
01 2003 135
Los invito a analizar la 1NE... Estan con sombra los valores de los atributos
cuyos dominios no son atomicos. No se puede almacenar mas de un valor en
un atributo, eso seria almacenar una estructura en la interseccion de Iila y
columna. Hasta aqui la interpretacion a).
Pero la interpretacion b) nos hace mirar el atributo nombres y apellido. En
dicho atributo se almacenan valores del dominio de los nombres y del
dominio de los apellidos. Eso se soluciona dividiendo el contenido en 2
(dos) atributos: nombres apellido.
Esta ultima posibilidad se aplica tambien cuando almacenamos la direccion
de una persona -alumno, cliente, proveedor, etc.-.
Es muy comun ver, en algunos sistemas, que el atributo se llama direccion y
contiene: calle numero barrio etc. Quien solucionara una busqueda de
los clientes del barrio 'Alberdi?...
/SSO - Tcncas Frgramacn J
48
No quedara otra que analizar las cadenas de caracteres almacenadas,
testeando si Alberdi se encuentra o no en cada tupla, con la consiguiente
degradacion del sistema. Por ello, es conveniente distribuir ese tipo de
contenidos en distintos atributos.
Personalmente adhiero a las 2 (dos) interpretaciones planteadas para lograr
la 1NE.
Entonces descomponemos la estructura en Cabecera y Cuerpo del recibo, y
solucionamos asi los multiples valores que asumen algunos atributos y
dividimos el atributo nombres y apellido.
Cabecera del recibo
numero de
recibo
apellido nombres Callenro
codigo
ciudad
ciudad
fecha de
pago
total
abonado
B0002-
00001054
Toledo Celeste Av. Colon 348 1 Cordoba 10/04/2003
135
B0002-
00001055
Eunes Jose
Ayacucho 155
1 Cordoba 13/04/2003
345
Cuerpo o detalle del recibo
numero de recibo numero cuota ao de cuota
monto de cuota
B0002-00001054 01 2003
135
B0002-00001055
09 2002 105
B0002-00001055
10 2002 105
B0002-00001055
01 2003 135
El proceso de descomposicion producido en el ejemplo es una constante en
la normalizacion, es algo que distigue al procedimiento, pero tampoco es
cuestion de descomponer y dividir estructuras sin sentido. No por tener
inIinidad de tablas signiIica que el sistema este bien normalizado.
Piensen que este recibo, como todos los comprobantes en general -recibos,
Iacturas, notas, etc.- , esta compuesto por dos partes: una cabecera y un
cuerpo.
En la cabecera distinguimos los datos que aparecen una sola vez en el
Iormulario impreso, es el caso del numero de recibo, datos del alumno,
Iecha de emision y el total del comprobante.
El cuerpo esta Iormado por el detalle del recibo, donde Iiguran el numero de
cuota, el ao de la cuota y el monto de la misma.
Una Iactura impresa, por ejemplo, tiene en el detalle:
N Codigo del articulo vendido
N Descripcion del articulo
N Precio unitario
N Importe por articulo
/.S.S.O. - Tcncas Frgramacn J
49
En la cabecera tiene:
N Numero del comprobante, preimpreso o no
N Eecha de la Iactura
N Numero de cliente
N Datos personales del cliente apellido, nombres, direccion, numero de
CUIT
N Condicion de venta contado, tarjeta, etc.
N Datos del vendedor
Pero la Primera Eorma Normal es imposible que nos deje los
almacenamientos en estado realmente deseables, es solo el primer paso,
porque por ejemplo se mantiene la redundancia.
Segunda Forma NormaI (2NF)
Continuando con el ejemplo, en la cabecera del recibo tenemos numero de
recibo, que identiIica al comprobante, apellido del alumno, nombres del
alumno, direccion del alumno... Es decir todavia existen en el
almacenamiento datos que no son del recibo, sino que pertenecen al alumno.
Si trazamos un diagrama de dependencias, respecto a la entidad alumno:
Lo graIicado signiIica que dado un numero de legajo obtendremos un solo
alumno, con un apellido de manera inequivoca. Por ejemplo, en el ISSD si
le piden a la secretaria el apellido del 21056896, no habra equivocacion. Lo
mismo sucede con el resto de los datos.
Una relacion esta en segunda forma normal si v solo si esta en 1NF v
todos los atributos no clave dependen por completo de la clave primaria.
DNI
Apellido
Nombres
CalleNro
Codigo ciudad
Ciudad
Glosario
Denominamos atributo no
clave a aquellos que no son
clave primaria y tampoco
Iorman parte de ella.
/SSO - Tcncas Frgramacn J
50
Estas dependencias nos obligan a aplicar una nueva descomposicion, ahora
de la estructura de la cabecera del recibo:
a) retiramos los datos del alumno de la cabecera del recibo y los
reemplazamos solo por el dato legajo;
b) conIormamos la tabla Alumnos, con los datos quitados en el punto
anterior, tambien con el legajo, para mantener las relaciones de
datos.
Las tablas hasta el momento son:
Cabecera del recibo
Numero de recibo
DNI fecha de pago
total
abonado
B0002- 00001054
26030257
10/04/2003
135
B0002- 00001055
25648989
13/04/2003
345
Cuerpo o detalle del recibo sin modificacion-
numero de recibo numero cuota ao de cuota
monto de cuota
B0002-00001054 01 2003
135
B0002-00001055
09 2002 105
B0002-00001055
10 2002 105
B0002-00001055
01 2003 135
Alumnos
DNI
apellido nombres Callenro codigo ciudad ciudad
26030257
Toledo Celeste Av. Colon 348
1 Cordoba
25648989
Eunes Jose
Ayacucho 155
1
Cordoba
Aplicada la 2NE podemos observar alguna repeticion de datos a medida que
se ingresen nuevos alumnos, por ejemplo, el contenido del dato Ciudad
repite la palabra 'Cordoba. Es decir, todavia los almacenamientos no estan
en un estado deIinitivo. El ejemplo es Cordoba, como en la extension del
ISSD en Cruz del Eje podra ser la repeticion del contenido 'Cruz del Eje,
'Dean Eunes en la Sede Dean Eunes, etc.
Para evitar este tipo de situaciones surgio la 3NE.
Tercer Forma NormaI (3NF)
Si bien la dependencia:
Una relacion esta en tercera forma normal si v solo si esta en 2NF v
todos los atributos no clave dependen de manera no transitiva de la
clave primaria.
DNI
Codigo ciudad
Ciudad
/.S.S.O. - Tcncas Frgramacn J
51
parece clara, porque podemos pensar que a cada legajo le corresponde un
codigo postal y una sola ciudad, pero tambien podemos ver las
dependencias de la siguiente manera:
En este diagrama observamos que la ciudad es dependiente del codigo de
ciudad, es decir que a cada codigo de ciudad le corresponde una ciudad o
localidad.
El mantener la ciudad dentro del almacenamiento Alumnos seria no
eliminar la dependencia transitiva entre DNI y Ciudad, porque en deIinitiva
dado un DNI le corresponde un codigo de ciudad y de este ultimo depende
la ciudad.
Por otro lado, observen el dato Total abonado, en la tabla Cabecera del
recibo... Algunos diseadores nunca almacenan datos que pueden obtenerse
a traves de un calculo, como en este caso seria sumar los importes de cada
cuota abonada.
Considero mas conveniente, analizar cada situacion antes de decidir
almacenar o no un dato, no es un tan terrible almacenar un dato calculable.
EspeciIicamente en esta situacion no seria necesario almacenarlo, porque
una sumatoria de valores almacenados en el Cuerpo o detalle del recibo no
implica tiempo importante de proceso ni un calculo complicado, tampoco
los valores pueden ser modiIicados y, por lo tanto, se puede volver a
calcular el total al mes o al ao de la emision del recibo.
Los almacenamientos quedan, despues de analizar esta 3NE, con la
siguiente estructura:
Cabecera del recibo
numero de recibo
DNI fecha de pago
B0002- 00001054
26030257
10/04/2003
B0002- 00001055
25648989
13/04/2003
Cuerpo o detalle del recibo sin modificacion-
numero de recibo numero cuota ao de cuota
monto de cuota
B0002-00001054 01 2003
135
B0002-00001055
09 2002 105
B0002-00001055
10 2002 105
B0002-00001055
01 2003 135
DNI
Codigo ciudad
Ciudad
/SSO - Tcncas Frgramacn J
52
Alumnos
DNI
Apellido Nombres Callenro
codigo
ciudad
26030257
Toledo Celeste Av. Colon 348
1
25648989
Eunes Jose
Ayacucho 155
1
Ciudades
Codigo ciudad ciudad
1 Cordoba
Este tipo de solucion permite agregar una tabla de proIesores, donde la
ciudad en la que vive cada proIesor es una relacion a la tabla existente
Ciudades, es decir que se puede aprovechar la tabla ya creada.
Pueden asistir, al ISSD, alumnos de localidades de otras provincias?... Por
supuesto... Entonces es tarea de ustedes incluir datos de las provincias en las
estructuras creadas.
Ejercicio resuelto
La empresa Modas S.A. desea gestionar sus ventas a traves
de un sistema inIormatizado.
Entre otras cosas, la impresion de sus Iacturas es uno de
los temas a solucionar.
Modas S.A. cuenta con sucursales distribuidas en todo el pais, en la
impresion pueden observar los datos de uno de los puntos de venta.
Comentario
Realiza el agregado de las
provincias y consulta, al
proIesor, para saber si el
cambio que propones es
valido.
/.S.S.O. - Tcncas Frgramacn J
53
Para comenzar a trabajar es conveniente identiIicar todos los datos del
Iormulario y armar una lista de ellos sin repeticion, como sigue a
continuacion.
Descripcion empresa
Descripcion sucursal
Direccion de la sucursal
Local de sucursal
Codigo postal de la sucursal
Ciudad de la sucursal
Provincia de la sucursal
TeleIono sucursal
Condicion IVA de la empresa
Tipo Iactura
Numero de Iactura
Eecha de Iactura
CUIT empresa
Numero Ingresos Brutos de la empresa
Eecha inicio actividad de la sucursal
Apellido y Nombres del cliente
Condicion IVA cliente
Domicilio cliente
CUIT cliente
Condicion de venta de la Iactura
Nombres y apellido del vendedor
Codigo del articulo
Cantidad del articulo
Descripcion del articulo
Precio unitario del articulo
Importe por articulo
Total de la Iactura
Podran observar que utilice nombres largos para cada dato y que algunos no
Iueron incluidos porque son datos pre-impresos y que no son necesarios
para almacenar, es el caso de la leyenda reIerida a los cambios y el pie de la
Iactura, que brinda inIormacion legal de la impresion del Iormulario.
En la lista obtenida, podemos identiIicar algunas entidades como:
N empresa
N sucursal
N clientes
N vendedores
N articulos
N encabezado de Iactura
N cuerpo o detalle de Iactura
Con ese conocimiento previo, comenzamos a analizar que datos pertenecen
a cada entidad para determinar las dependencias Iuncionales entre ellos.
Relacin
Recordemos que en el
comienzo de la unidad, en el
Modelo de Entidad/Relacion,
deIiniamos entidad como un
objeto que existe en el mundo
real y se distingue de otros.
Mientras que los valores de los
atributos, de las entidades,
permiten distinguir una de otra.
/SSO - Tcncas Frgramacn J
54
Por ejemplo, podemos detectar los datos de la empresa, que podemos
cuestionarnos si se almacenan o no, porque en la Iactura estan preimpresos.
Pero tambien podemos tener en cuenta que hay listados en los cuales es
conveniente incluir los datos de la empresa y de la sucursal, mas si tenemos
en cuenta que los datos numero de CUIT, Ingresos Brutos, etc. no son de la
sucursal sino de la empresa.
Si analizamos los datos de la entidad cliente: Apellido y Nombres,
Condicion IVA, Domicilio y CUIT, podemos observar como, en la
impresion del ejemplo, el CUIT del cliente esta vacio. Esta vacio porque si
la compra no es importante normalmente el cliente es consumidor Iinal y el
CUIT pierde relevancia; podra ser importante en el caso de que el cliente es
una empresa y compra ropa para uniIormes de su personal. Mi intencion en
deIinitiva es demostrarles que el CUIT del cliente, en este ejercicio, no es
un identiIicador, porque en la mayoria de los casos se desconoce. El
apellido, el nombre, etc. pueden repetirse, por lo tanto tampoco sirven a la
hora de analizar dependencias. DeIinitivamente se debe crear un dato
artiIicial y que no Iigura en el listado, por ejemplo algo comun es contar con
un numero de cliente.
A partir del numero de cliente podemos plantear las dependencias de datos
de esa entidad, analizando: dado un numero de cliente que datos le
corresponden.
A estas dependencias las pueden trabajar aislando las entidades que detecten
como hice con el conjunto de entidades cliente o simplemente en la lista de
datos, que se obtuvo al principio, marcar todas las relaciones existentes.
Veamos a continuacion como puede quedar el diagrama de dependencias
Iuncionales, trabajando con el listado completo de datos.
Numero de
cliente
Apellido
Nombres
Condicion IVA
CalleNro
CUIT
/.S.S.O. - Tcncas Frgramacn J
55
Descripcion empresa
Descripcion sucursal
Calle y nro de la sucursal
Nmero de sucursal
Local de sucursal
Codigo postal de la sucursal
Cdigo de ciudad
Ciudad de la sucursal
Cdigo de provincia
Descripcion de la Provincia
TeleIono sucursal
Condicion IVA de la empresa
Tipo Iactura
Numero de Iactura
Eecha de Iactura
CUIT empresa
Numero Ingresos Brutos de la empresa
Eecha inicio actividad de la sucursal
CUIT cliente
Apellido del cliente
Nombres del cliente
Condicion IVA cliente
CalleNro
Nmero de cliente
Condicion de venta de la Iactura
DNI del vendedor
Nombres del vendedor
Apellido del vendedor
Codigo del articulo
Cantidad del articulo
Descripcion del articulo
Precio unitario del articulo
Stock del artculo
Importe por articulo
Total de la Iactura
Nota:
N En cursiva y resaltados estan los datos agregados.
Advertencia
Para trabajar con la lista
completa de datos es
necesario ser prolijo, porque
de lo contrario se pierde
claridad y llevara a
conIusiones.
/SSO - Tcncas Frgramacn J
56
N En menor tamao los datos que no se almacenan, porque se pueden
obtener mediante algun proceso de calculo o relaciones entre
almacenamientos.
N Se trabajo con distintos tipos de linea y grosor para Iacilitar el
seguimiento de las dependencias.
De estas dependencias se obtienen las estructuras, siguiendo las lineas
trazadas y teniendo en cuenta que:
Asi se obtienen las siguientes tablas para este ejercicio:
EMPRESA CIUDADES
` CUIT empresa ` Codigo ciudad
Descripcion empresa Ciudad
Condicion IVA empresa Codigo de provincia
Nro de ingresos brutos
SUCURSAL PROVINCIA
` Numero de sucursal ` Codigo de provincia
Descripcion de sucursal Descripcion de la Provincia
CalleNro
CodigoCiudad
CodigoPostal
CLIENTES VENDEDORES
` Numero de cliente ` DNI del vendedor
CUIT cliente Nombres del vendedor
Apellido cliente Apellido del vendedor
Nombres cliente
Condicion IVA
CalleNro
ARTICULOS ENC. FACTURA
` Codigo del articulo ` Tipo Iactura
Descripcion del articulo ` Numero de Iactura
Precio unitario Eecha de Iactura
Stock del articulo Numero de cliente
Condicion de venta
DNI del vendedor
CUERPO FACTURA
` Tipo Iactura
` Numero de Iactura
` Codigo del articulo
Cantidad del articulo
N Los datos sealados con son los datos dependientes
N Los datos sealados con son los datos de los cuales dependen
los otros y que, al conIormar las tablas, seran elegidas como claves
primarias.
/.S.S.O. - Tcncas Frgramacn J
57
Precio unitario del articulo
Consideraciones:
N Como no se almaceno el Total de la Eactura, es necesario tener como
reconstruir ese total despues de un tiempo de emitida la Iactura. Por esto
es que se preIirio almacenar el precio unitario tambien en el Cuerpo de
la Eactura, es redundante pero con un objetivo: permitir mantener los
precios historicos por las dudas que se produzcan cambios de precios...
situacion muy comun en nuestro pais.
N Si hubieramos almacenado el Total de Eactura no seria imprescindible
mantener el precio unitario en el Cuerpo de la Eactura.
N El dato stock del articulo se agrego porque, si bien no aparece en la
Iactura, seguramente lo necesitan los vendedores para saber si les queda
existencia del articulo antes de venderlo o para que los responsables de
compras conozcan las necesidades de cada sucursal.
N Hay empresas que identiIican a sus clientes con un codigo. Se puede
incluir un codigo de cliente o numero, como en el ejemplo, y que sea
clave en lugar del CUIT (Clave Unica de IdentiIicacion Tributaria)?...
Si, se puede, aunque el CUIT es un numero unico de los clientes y el
codigo de cliente es un dato artiIicial. Si no importa el tamao del dato a
almacenar y se trata, por ejemplo, de una empresa mayorista, el CUIT
del cliente o el documento del vendedor son datos realmente
identiIicatorios. Si el codigo de cliente esta muy aIerrado a la cultura de
la empresa, sera conveniente mantenerlo, porque seguramente todos lo
saben e inclusive el cliente.
N No hay recetas exactas en este proceso, esto es simplemente una guia y
seguramente a Uds. se les ocurriran soluciones que pueden ser tenidas
en cuenta.
/SSO - Tcncas Frgramacn J
58
Ejercitacion
A continuacion se incluyen ejercicios seleccionados, en
orden creciente de complejidad y con distintas
solicitudes.
Es imprescindible que los resuelvas para lograr el
aIianciamiento del proceso, incluyendo en tu trabajo el
analisis de dependencias Iuncionales, para evitar el trabajo intuitivo en el
diseo.
Con el tiempo, quizas no utilices el diagrama de dependencias, pero en este
momento es importante para adquirir habilidad en el manejo de los datos y
sus relaciones.
1.- IdentiIica y asigna nombres a las entidades a tener en cuenta en una
Ierreteria, sin incorporar datos.
2.- Cuales seran las entidades en un bar?. Todas las entidades deben tener
la correspondiente denominacion y los datos contenidos en cada una.
3.- A continuacion se presentan un conjunto de datos, que pertenecen a
distintas entidades.
a) Obtiene el diagrama de dependencias correspondiente.
b) Realiza un listado de las entidades obtenidas.
c) Asigna un nombre a cada entidad.
d) Seala las relaciones existentes entre las entidades.
4.- En el siguiente conjunto de datos:
e) GraIica el diagrama de dependencias de datos.
I) Registra las entidades obtenidas.
g) Asigna un nombre a cada entidad.
h) Establece las relaciones existentes entre las entidades.
Cancin Codigo de autor Precio CD
Nombre autor Cdigo de gnero Cdigo de cliente
4 4Mh14J1h4JIII14 Posicin en el CD
Descripcion genero Apellido de autor Apellido cliente
E-mail cliente Cd|go C0 Historia autor
Fecha grabacion CD NcmLre: c|ienIe
/.S.S.O. - Tcncas Frgramacn J
59
i) Marca las claves primarias con PK, las claves Ioraneas con EK y las
alternas con AK.
5.- El ISSD necesita obtener el siguiente listado; realiza el diagrama de
dependencias Iuncionales y luego disea las tablas necesarias para
responder a dicha demanda.
.- El siguiente es el listado de la Iarmacia Roger Martin, que inIorma los
datos de proveedores para cada medicamento y los precios que oIrecen.
Obtiene el diagrama de dependencias Iuncionales y luego registra el
resultado en las tablas necesarias para emitir este listado.
Es importante tener en cuenta que un medicamento puede ser provisto por
varios proveedores y que un proveedor provee varios medicamentos.
-Denominacin del medicamento:
Cdigo de medicamento:
Precio sugerido de venta
Proveedor nombre
Precio oIrecido
TeleIono
Direccion
Proveedor nombre
Precio oIrecido
TeleIono
Direccion
Numero de Iactura Codigo de pelicula Apellido socio
Ttulo pelcula Fecha de devolucin Monto factura
Id1II14J14I1h IMhM4444444Apellido actriz principal Fecha
prstamo
Cofegoro peIcuIo Numero de socio
Direccin socio 0escr|pc|r pe|icu|a
Descripcion categoria /pe||icc ccIcr 8arr|o soc|o
Apellido y Nombres del alumno: Jose Eunes
DNI del Alumno: 20.605.834
Materia aprobada Nota Fecha
Ingles Tecnico I 7 10/03/2000
Matematica I 5 15/03/2000
...
/SSO - Tcncas Frgramacn J
60
-Denominacin del medicamento:
Cdigo de medicamento:
Precio sugerido de venta
Proveedor nombre
Precio oIrecido
TeleIono
Direccion
Proveedor nombre
Precio oIrecido
TeleIono
Direccion
7.- En el Restaurante Apetit, de nuestra ciudad, actualmente se mantiene la
inIormacion en papeles, pero sus dueos observaron que los volumenes de
clientes y de movimiento han crecido y por ello desean inIormatizarlo,
agilizando de esta manera la gestion de la inIormacion.
Los datos relevados hasta el momento son los siguientes:
N Mozo: necesitan nombres y apellido, direccion, porcentaje de comision,
Iecha de ingreso, categoria actual y el historial de los premios recibidos por
su trabajo. En el historial se contempla Iecha, motivo y monto del incentivo.
N Eacturas emitidas: tipo y numero de Iactura, Iecha, apellido y nombres
del cliente, mozo que atendio, numero de mesa y los detalles de
consumicion, como descripcion de los articulos, precio y cantidad de cada
uno, como tambien el monto total abonado.
Los dueos aclararon que los porcentajes de comision son segun la
categoria del empleado, en el momento de la liquidacion mensual.
Los mozos no tienen asignadas mesas Iijas, a una mesa la comienza a
atender el mozo que este desocupado y de alli en mas no hay cambios.
La tarea en este ejercicio es:
N Realiza el listado de datos.
N Obtiene las dependencias Iuncionales existentes.
N Disea los almacenamientos necesarios para administrar estos datos.
N Indica grado y cardinalidad de cada tabla obtenida.
8.- A continuacion se presentan dos almacenamientos de situaciones
distintas, con ellos debes:
N Indicar que Ialencias encuentras en cada uno, respecto a la
normalizacion.
N Explica las justiIicaciones de tus aseveraciones.
N Realiza una presentacion mejorada de las tablas.
N Seala, en las tablas mejoradas, las claves primarias con PK, las Ioraneas
con EK y las alternas con AK.
Advertencia
Estos ejercicios no se basan en
un relevamiento de datos, como
se debe hacer en la realidad,
pero ayudaran al aprendizaje de
los contenidos.
Asi mismo, puedes plantear tus
propios supuestos y agregar
datos que quizas se omiten a
proposito o no, aunque el
ejercicio no lo explicite.
/.S.S.O. - Tcncas Frgramacn J
61
Clientes
Cursos
Numcur nomcur aula Fechinicio Dniprof Nomprof
019 Operador de PC 115 11/05/99 14987987 Eernandez Angel
023 DactilograIia 103 13/05/99 16645454 Luna Juarez Ana
027 Programador 104 15/05/99 14987987 Eernandez Angel
9.- Dadas las siguientes tablas del Video Club EXIN, indica cuales listados
no pueden emitirse y modiIica las tablas, para poder obtenerlos.
SOCIOS (nrosoc, nombre, domicilio, barrio, teleIono)
CA1ECORIAS (codcateg, descripcion)
PELICULAS (codpelic, nombre, precio)
FAC1URAS (nroIact, Iecha)
DE1ALLE FAC1URA (nroIact, codpelic, precio)
a) Listar el total de lo Iacturado en enero de 1999.
b) Listar el nombre de los socios que alquilaron "Shakespeare
Apasionado".
c) Listar las peliculas de categoria "A" y que Iueron alquiladas en marzo
del ao 2000.
d) Listar los codigos de peliculas y la cantidad de veces que Iue alquilada,
cada una, en enero del ao 1999.
1.-Una oIicina, de la empresa comercial Tudor S.A., registra los
movimientos de articulos de todas las oIicinas.
Los articulos pueden ser: lapiceras, resmas de papel A4, resmas de papel
oIicio, carpetas colgantes, cartuchos para impresoras, etc.; todos insumos
necesarios para las tareas de cada area.
Semanalmente la oIicina de suministros emite un listado general de stock,
resaltando los articulos debajo del stock minimo, para posteriormente
eIectuar las ordenes de compra.
Al Iinal de cada mes, la oIicina envia al resto un resumen mensual de
movimientos eIectuados por cada una de ellas.
Cada articulo puede ser provisto por mas de un proveedor y un proveedor
provee muchos articulos. Asi mismo, cada proveedor asigna el precio a sus
articulos, por ello no hay un solo precio.
numcli nomcli direccin telpart cuit dni
054641 Juan Hernandez Peru 557 4233567 33-12132111-4 12132111
033165 Ana Murua Rivadeo 235 4332145 20-15465908-3 15465908
066411 Pedro Torres Colon 417 4654654 21-16654998-4 16654998
/SSO - Tcncas Frgramacn J
62
En un dia puede haber varios movimientos iguales por articulo y de una
misma oIicina.
Listado general de stock:
N codigo de articulo
N descripcion de articulo
N stock actual
N apellido y nombres, o razon social, de los posibles proveedores
N stock minimo
Resumen mensual de movimientos:
N codigo de oIicina
N denominacion de la oIicina
N apellido y nombres del encargado de la oIicina
N tipo de movimiento -entrega o devolucion-
N codigo de articulo
N descripcion del articulo
N cantidad
N Iecha de movimiento
N cantidad total mensual por articulo -entregados y devueltos-
Nota: las oIicinas normalmente piden articulos, pero puede haber
devoluciones, por ejemplo: cuando el articulo esta daado de Iabrica o
cuando la oIicina de suministros le solicita un sobrante para darselo a otra
oIicina que lo necesita con urgencia.
Con esta breve descripcion de la situacion, debes disear los
almacenamientos, marcando las claves primarias en cada tabla.
11.-En la Inmobiliaria Juarez & Asoc. administran los ediIicios de varias
empresas constructoras.
Algunas oIicinas estan alquiladas y otras no.
Para administrar la inIormacion cuentan con la siguiente Base de Datos:
EMPRESAS (nro.empresa, nombre, teleIono, direccion)
EDIFICIOS (codigo ediIicio, denominacion, direccion)
OFICINAS (codediI, piso, nrooIic, dnipropietario)
PROPIETARIOS (dnipropietario, nombre, TE, direccion)
INQUILINOS (dniinqui, nombre, TE, direccion)
Cuales de las siguientes consultas no pueden ser obtenidas con esta Base
de Datos?.
a) Listar los ediIicios que pertenecen a cada empresa.
b) Listar la cantidad de oIicinas de cada ediIicio.
c) Listar los propietarios que tengan varias oIicinas.
d) Listar los inquilinos de cada empresa.
e) Listar las oIicinas que alquila cada inquilino.
ModiIica las tablas, de tal manera que puedan responder a las consultas.
/.S.S.O. - Tcncas Frgramacn J
63
12.-Indica si esta tabla, de transportes alimenticios, se encuentra
normalizada, justiIica tu punto de vista y presenta, si es necesario, la tabla
mejorada.
13.-Dada la siguiente base de datos universitaria, indica cuales de los
listados no pueden ser emitidos y realiza las modiIicaciones para poder
emitirlos.
*FACULTADES (codIac, nomIac, direccion, teleIono)
*CARRERAS (codcarrera, codIac, nombre, cantaos, direccion, teleIono)
*MATERIAS (codmat, nommateria, aopertenece)
*PROFESORES (dniproI, nomproI, direccion, teleIono, titulo)
*ALUMNOS (dnial, nombre, Iechanac, direccion, teleIono)
*PROFxMATER (dniproI, codmat, turno)
*ALUMxMATER (dnial, aocursa, notal, Iechal, nota2, Iecha2, notaI,
IechaI)
Los listados que se necesitan son:
- Los proIesores de la Eacultad de Medicina.
- La cantidad de alumnos en la Eacultad de Arquitectura.
- Los alumnos que estan aplazados en la carrera de Martillero Publico.
- Los alumnos del proIesor Martin Gomez.
- Las carreras de la Eacultad de Medicina.
- Las direcciones de los alumnos de la Eacultad de Medicina.
Debes tener en cuenta lo siguiente:
N Una Iacultad tiene muchas carreras -una carrera pertenece a una sola
Iacultad.
N Una carrera tiene muchas materias- una materia pertenece a una sola
carrera.
N Un proIesor puede dar clases en muchas materias, incluso de diIerentes
Iacultades.
N Una materia es dictada por un solo proIesor.
N Un alumno se puede anotar en todas las carreras que quiera.
N Un alumno no puede anotarse en una misma materia dos veces en el
mismo ao, ya que todas las materias son anuales.
14.-Disea los almacenamientos normalizados para poder emitir la Iactura
de servicio teleIonico, teniendo en cuenta que:
N Un cliente puede tener a su cargo varios teleIonos
N Un teleIono pertenece a un solo cliente.
N Se emite una Iactura para cada teleIono.
N Los barrios estan codiIicados y agrupados por zonas.
nropatente DNI nombre codigo descrip precio cant transp.
ABT893 15469888 Leo Lamas p54 pescado 1.51 5000
TXV054 12054332 Juan Valdes p54 pescado 1.51 1005
TEX894 15469888 Leo Lamas k90 tomates 0.47 2900
/SSO - Tcncas Frgramacn J
64
N Las Iechas desde y hasta, el valor del pulso y la Iecha de vencimiento
dependen del bimestre.
N Las categorias indican si se trata de un teleIono para casa de Iamilia,
industria, comercio, organismo publico, etc. y segun eso hay distintos
porcentajes de descuento en el total Iacturado.
FACTURA
15.-En el Hotel Internacional, ubicado en una hermosa localidad a la orilla
del mar, completan manualmente, cuando se desocupa una habitacion, el
siguiente resumen.
Nro. de Habitacin: Descripcion de Categoria:
Ubicacion: Cantidad de camas:
Precio por plaza
N Adultos:
N Nios:
Pasajeros de la Habitacin:
DNI Apellido v Nombres Edad Fecha/Ingreso Fecha/Egreso
-------- ------------------------ ---- ------------- -----------
-------- ------------------------ ---- ------------- -----------
Servicios:
Fecha Descr. Servicio Precio Unitario Cantidad Importe
-------- -------------------- ---------- ------ ---------
-------- -------------------- ---------- ------ ---------
1O1AL: ---------
Consumiciones:
Fecha Descr. Articulo Precio Unitario Cantidad Importe
-------- ------------------- ---------- ------ ---------
-------- ------------------- ---------- ------ ---------
1O1AL: ---------
TOTAL A PAGAR: $ ..............
Numero de Iactura: Eecha de emision:
Numero de TeleIono: Eecha de Instalacion:
Apellido y nombres del Cliente:
Direccion: Barrio:
Zona: Codigo postal:
Localidad: Provincia:
Codigo de categoria: Descripcion de Categoria:
Numero de Bimestre: Desde: / / Hasta: / /
Valor del pulso del Bimestre: Eecha de Vencimiento:
Estado Actual del Medidor:
Estado Anterior del Medidor: Total de pulsos consumidos:
TOTAL A PAGAR: $.........
DETALLE DE LLAMADAS EN EL BIMESTRE
LOCALES LARGA DISTANCIA
Numero Iecha hora pulsos Numero Iecha hora pulsos
--------- ------- ------- -------- ---------- ------- ------- ---------
--------- ------- ------- -------- ---------- ------- ------- ---------
/.S.S.O. - Tcncas Frgramacn J
65
Consideraciones:
N Una habitacion puede tener varios pasajeros, pero un pasajero pertenece
a una habitacion a la vez.
N Por cada habitacion se tienen en cuenta los servicios a los que acceden
sus ocupantes, por ejemplo: el lavado de ropa, la utilizacion de toallones
para playa, sombrillas, reposeras, etc. Cada servicio tiene un costo
diIerente, el lavado de una camisa tiene un costo distinto al del lavado
de un pantalon corto, el alquiler diario de la sombrilla es distinto al de la
reposera, etc.
N Las consumiciones que se hacen Iuera o dentro de la habitacion se
cargan tambien a la habitacion, por ejemplo: desayuno en la habitacion,
gaseosa, cerveza, champaa, etc.
N Los precios de las plazas dependen de la categoria de la habitacion.
Esta realidad debe ser llevada a una estructura de tablas, como para
responder a las necesidades del listado resumen por computadora.
1.-Una empresa de la ciudad de Cordoba que Iabrica sus propios productos
necesita inIormatizar su control de stock y compra de piezas.
Debemos tener en cuenta que:
N Cada producto puede estar conIormado por distintas piezas y de cada
pieza una cantidad que depende del producto Iinal.
N Las piezas son compradas a distintos proveedores, porque cada uno
oIrece distintos precios.
N Por ello, habra que almacenar apellido, nombres, direccion, teleIono,
localidad, provincia de cada proveedor y los precios de las piezas que
puede proveer.
N De los productos se registraran las descripciones, el precio de venta, el
stock actual, las piezas que lo conIorman y la cantidad de cada una de
ellas.
N De las piezas tambien se lleva un stock, junto a la descripcion, precio de
compra, los datos del ultimo proveedor a quien se le compro y en que
Iecha.
17.-Una sindicato, con sede en la ciudad de Cordoba, cuenta con un gran
numero de aIiliados, los cuales pueden pertenecer a una o a varias empresas
a la vez.
De cada aIiliado se debe contar con sus datos personales como numero de
documento, apellido, nombres, domicilio, codigo postal, ciudad, provincia,
teleIono, sexo, estado civil, los datos de la/s empresa/s en la/s que trabaja, la
Iecha de ingreso en cada empresa y la categoria de su cargo actual.
Cada empresa envia un resumen mensual, que se debe ingresar al sistema
del sindicato, donde indica el monto aportado por cada aIiliado, la Iecha del
deposito a cuenta del sindicato, mes y ao del aporte. Puede suceder que el
/SSO - Tcncas Frgramacn J
66
mes y ao del aporte no sean los mismos que el ao y el mes de la Iecha del
deposito, por ejemplo cuando la empresa se retrasa en los aportes.
Los aIiliados pueden tener Iamiliares a su cargo, por ello se deben
almacenar sus nombres, apellidos, Iechas de nacimiento y tipo de parentesco
(esposo/a, hijo/a, madre, padre, etc.). Un Iamiliar puede estar a cargo de
solo un aIiliado al sindicato.
Con esos datos, debes:
N Obtener el diagrama de dependencias.
N Lograr las tablas normalizadas.
N Indicar las claves primarias.
18.-La Academia Santo Domingo desea implementar Seminarios de
Capacitacion durante una semana completa. Por ese motivo necesita un
sistema para controlar la asistencia, contar con datos de los participantes y
empresas, para enviarles en el Iuturo invitaciones a nuevos eventos.
Habra 3 hoteles a disposicion, con un salon cada uno y que trabajaran en 3
turnos |maana 8 a 12:00 hs., tarde 14:00 a 18:00 hs. y noche 18:30 a 22:30
hs.|. Los salones de los hoteles tienen distintas capacidades, lo que Iijara el
cupo de los seminarios.
El sistema debe contar con datos de:
S Asistentes: apellido y nombres, tipo y numero de documento, direccion,
codigo postal, localidad, provincia, teleIono y empresa en la que trabaja.
S Empresas: razon social, direccion, codigo postal, localidad, provincia,
teleIono y ramo |comercial, produccion, educacion, servicios publicos,
etc.|.
S Docentes: apellido y nombres, direccion, codigo postal, localidad,
provincia y teleIono.
S Seminario: titulo, hotel en que se dicta, horario, Iecha, costo, cupo,
proIesor a cargo, lista de los asistentes y cantidad de asistentes.
Consideraciones:
N Habra asistentes que pueden trabajar en mas de una empresa.
N Un asistente puede participar en mas de un seminario.
N Cada docente puede dictar mas de un seminario.
N Algunos seminarios se dictaran mas de una vez durante la semana, no
en el mismo dia, en el mismo hotel o no, en distintos horarios, puede
cambiar el proIesor, pero el precio no se modiIica.
Disea los almacenamientos necesarios y marca las claves primarias para
este nuevo sistema.
19.-La Direccion de Emergencias Sociales del Gobierno de la Provincia de
Cordoba provee modulos de ayuda a personas de muy escasos recursos o en
situaciones de emergencia de la provincia (inundaciones, incendios, etc.).
/.S.S.O. - Tcncas Frgramacn J
67
En este momento, esta direccion, desea inIormatizar el manejo de los datos
de: las personas beneIiciadas, los articulos que entrega, los empleados y las
entregas realizadas.
De los beneIiciarios titulares almacenaran: numero de documento, apellido,
nombres, sexo, edad, domicilio, localidad y provincia. Tambien desean
registrar los datos de cada hijo: nombres, edad y sexo; el domicilio,
localidad y provincia suponemos que son los mismos que los del titular.
Los articulos (azucar, caIe, leche, Irazadas, colchon, almohada, etc.) que
proveen deberan registrarse con el stock de cada uno y su unidad de medida.
Pero esos bienes se entregan en modulos predeIinidos. Por ejemplo, un
modulo predeIinido, llamado 'Modulo basico, esta Iormado por: 3 Kg de
azucar, 2 Kg de yerba mate, 1 Kg de caIe, 2 lts. de agua mineral, 1 Kg de
leche en polvo y 1 Irazada. Cada modulo debe identiIicarse, almacenarse
con los articulos que lo conIorman y la cantidad de cada uno.
Cada vez que se haga una entrega se deben registrar los datos del
beneIiciario titular, el modulo que se le entrega, la Iecha, numero de entrega
correlativo, el apellido y nombres del empleado que controlo la entrega.
De los empleados se registran solo apellido, nombres y teleIono particular.
Consideraciones.
' Un beneIiciario en una misma entrega no puede recibir 2 modulos
distintos.
' Puedes agregar datos que no se mencionan y quizas sean
imprescindibles para las relaciones.
' No hace Ialta incluir el diagrama de dependencias Iuncionales.
Se solicita obtener las tablas normalizadas para cumplir con las necesidades
de inIormacion de la direccion.
2.-La empresa TROEEOS CORDOBA S.A. se dedica al armado y venta
mayorista de troIeos deportivos (solo armados por ellos).
Se desean registrar y controlar tanto los componentes o piezas que se
utilizan en el armado como los troIeos que se venden.
De los componentes o piezas es importante registrar la descripcion, el
material con el que Iue Iabricado |aluminio, plastico, cobre, bronce, oro,
plata, etc.|, el stock actual, el stock minimo, medida, unidad de medida |kg,
cm, gr, etc.|, el costo y los datos del ultimo proveedor al que se le compro
dicho componente.
De los troIeos armados se debe almacenar la descripcion, stock actual,
medida, componentes que lo conIorman y cantidad de cada componente por
troIeo |por ej.: 1 tapa, 4 columnas, 1 base, 2 estatuillas del deporte tenis,
etc.|, costo del troIeo, precio de venta y deportes para los que Iue armado
|Iutbol, basket, volley, tenis, boxeo, rugby, etc.|.
/SSO - Tcncas Frgramacn J
68
Por ejemplo las medallas o copas pueden utilizarse para premio de varios
deportes.
Cabe aclarar que un proveedor puede venderle a TROEEOS CORDOBA
distintos componentes y que la empresa puede comprar una pieza a varios
proveedores segun los tiempos de entrega o los precios. El sistema debe
poder mostrar a que proveedores se les puede comprar una pieza y los datos
minimos para contactarlo |razon social, direccion, localidad, codigo postal,
provincia|.
Debemos considerar que una pieza puede Iormar parte de distintos troIeos,
piensen por ejemplo en una columna o una base de troIeo.
Se desean registrar tambien las ventas de troIeos que realiza la empresa con
numero de Iactura, Iecha, los datos del cliente |nombre y apellido,
domicilio, localidad, codigo postal, provincia y teleIono|, descripcion de los
troIeos vendidos, medida, cantidad, precio unitario, total de la Iactura y
datos del vendedor |nombre y apellido|.
En la Iactura se aplica un porcentaje de descuento que depende de la
categoria asignada a cada cliente, segun las compras mensuales que realiza.
21.-Una cadena de Iarmacias de la ciudad de Cordoba desea implementar un
sistema de inIormacion, almacenando sus productos, sus proveedores y
pudiendo imprimir sus tickets a los clientes.
La Iarmacia trabaja con varios proveedores, de ciudades distintas, por ello
debemos almacenar las direcciones, teleIonos, codigos postales y ciudades
de donde son cada uno.
Cada producto que vende la Iarmacia tendra su precio de venta, su
descripcion, su stock real y minimo, el tipo de producto |perIumeria,
medicamentos alopaticos, medicamento homeopatico, jugueteria, etc.|, pero
los proveedores de cada producto pueden ser varios. Debemos tambien tener
el precio que cada proveedor tiene para los productos, es decir las listas de
precios.
Cada sucursal de esta cadena de Iarmacias tiene su numero |1..n|, direccion,
teleIono y un encargado. De dicho encargado se debe tener por los menos el
nombre y apellido, CUIL, Iecha de nacimiento, sexo, direccion y el numero
de celular que la Iarmacia le abona mensualmente. Ademas, el dueo de la
Iarmacia desea tener, de cada encargado, los nombres y Iechas de
base
/.S.S.O. - Tcncas Frgramacn J
69
nacimiento del conyuge y de los hijos, para enviar en los cumpleaos de
ellos un presente.
De los clientes no se almacenan los datos, porque la venta es solo minorista,
y en el ticket no es necesario que Iiguren.
En el ticket tenemos el numero correlativo |1..n| (por sucursal), la Iecha, la
direccion de la sucursal, los articulos vendidos, las cantidades por articulo,
el precio, los importes (cantidad*precio) y el total a cobrar.
22.-En la Clinica San Roque, del interior de la Provincia de Cordoba, se
trabaja actualmente con registracion manual de las novedades diarias.
En un primer momento desean inIormatizar por lo menos el ingreso de los
pacientes, por ello se pide estructurar las tablas para cumplir dicho objetivo.
Para cada paciente se tienen en cuenta los siguientes datos:
N numero de Historia Clinica
N grupo y Iactor sanguineo
N dni paciente
N apellido y nombre del paciente
N direccion del paciente
N codigo postal y ciudad
N provincia
N dni del responsable
N direccion y teleIono del responsable
N codigo y descripcion de la Obra Social
N Sistema de Emergencias Medicas que posee descripcion, teleIono,
direccion-
N medico de cabecera:
matricula
apellido y nombres
direccion y teleIono
En cada ingreso de pacientes se registra:
N Iecha de ingreso
N numeros de piso, sala y cama asignada
N descripcion de la causa del ingreso
N codigo, descripcion y Iecha del diagnostico
N tratamiento: codigo, descripcion, Iecha de comienzo y Iin del mismo.
N medicamentos a suministrar en cada momento, incluyendo la cantidad,
que segun el medicamento puede ser: en pildoras, centimetros cubicos,
etc., Iecha y hora.
N medico que indica el tratamiento matricula, apellido y nombres-
Consideraciones:
N El responsable del paciente seguramente sera un pariente o la persona
que el paciente indique, si esta consciente al momento de ingresar.
N El medico de cabecera puede o no ser el mismo que lo esta atendiendo
al paciente en su ingreso a la Clinica.
/SSO - Tcncas Frgramacn J
70
N En un ingreso el paciente puede comenzar con un tratamiento y segun
su avance asignar otro. Por ello, necesitan las Iechas de comienzo y Iin
estipuladas por los proIesionales.
Disear los almacenamientos normalizados para administrar estos datos.
23.-El gimnasio Hercules, de la ciudad de Cordoba, cuenta con varias
sucursales, que brindan los mismos servicios.
Los encargados desean mantener, en un sistema inIormatico, un registro de
las actividades realizadas por los clientes, proIesores y especialistas en
nutricion.
Caractersticas:
N De cada cliente se debe almacenar: nombre, apellido, numero de
documento, direccion, teleIono, edad, peso, altura, estado civil, dietas
asignadas por el nutricionista y los problemas Iisicos, 1 o mas,
detectados en la revisacion inicial.
N Muchos clientes pueden compartir los mismos problemas Iisicos
(pinzamiento de disco, hernia de disco, pie plano, etc.).
N Una misma dieta puede ser comun a varios clientes, pero en el mismo
momento un cliente no puede tener mas de una dieta.
N De cada especialista en nutricion se almacena: nombre, apellido,
numero de documento, teleIono, edad, matricula proIesional y sucursal
del gimnasio en la que trabaja, solo una.
N Los clientes, sin costo adicional, solo tienen derecho a una consulta
mensual con el especialista en nutricion. Por cada consulta, se registra el
nombre del nutricionista, la dieta asignada al cliente, la Iecha de
comienzo y la Iecha de Iin de la dieta.
N Los clientes no abonan inscripcion. Pagan una cuota mensual por
actividad que desarrollan (karate, gimnasia aerobica, yudo, pesas, etc.).
N Cada actividad tiene su costo.
N Un cliente puede desarrollar mas de una actividad.
N Se lleva un registro de asistencia. Los clientes pueden concurrir a
cualquier sucursal. Se registra Iecha y actividad que desempeo,
proIesor encargado del curso y sucursal donde asistio.
N Los proIesores no son nutricionistas y pueden desempearse solo en un
tipo de gimnasia.
N De los proIesores se registra nombre, apellido, numero de documento,
teleIono, edad, titulo y tipo de gimnasia que ensea.
N Un proIesor puede dar clases en cualquier sucursal, pero solo del tipo de
gimnasia que le compete.
Se solicita:
' Diagrama las Dependencias Euncionales de los datos.
' Obtiene las tablas normalizadas.
/.S.S.O. - Tcncas Frgramacn J
71
24.-La Compaia de Seguros Sigmun necesita registrar los vehiculos
asegurados por sus clientes y realizar asi el seguimiento de sus cuotas
pagadas.
Debes tener en cuenta que a menudo un cliente posee mas de un vehiculo
asegurado en la misma compaia.
Los datos que le interesan a la compaia son:
N Numero de poliza (correlativo desde el 1); Eecha de vigencia desde y
Eecha de vigencia hasta de cada seguro contratado.
N Tipo y Numero de documento del cliente; Nombre, Domicilio, Ciudad y
Provincia del Cliente, Numero de CUIT y condicion Irente al IVA.
N Tipo de vehiculo asegurado (Automovil, Camion, Motocicleta, etc.);
Marca/Modelo (Eord Eiesta, Renault Laguna, Eiat Palio, Honda Civic,
etc.); Ao (..., 1990, 1991, etc.); Numero de patente (BDA107, CDE291,
etc.); Numero de chasis (7AZBBB477TX830332, etc.); Numero de
motor (UVC831179, etc.); Tipo de cobertura (se describe a
continuacion) y Monto de cuota mensual.
A modo de ejemplo, se citan a continuacion algunos tipos de cobertura:
Cobertura 1. Responsabilidad civil por lesiones y/o muerte y daos a cosas
de terceros no transportados y por lesiones y/o muerte unicamente de
terceros transportados. Perdida total por accidente, incendio y robo o hurto.
Cobertura 2. Responsabilidad civil por lesiones y/o muerte y daos a cosas
de terceros no transportados y por lesiones y/o muerte unicamente de
terceros transportados. Perdida total y parcial por incendio y robo o hurto;
perdida total por accidente. Eranquicia minima por incendio parcial.
Cobertura 3. Responsabilidad civil por lesiones y/o muerte y daos a cosas
de terceros no transportados y por lesiones y/o muerte unicamente de
terceros transportados. Perdida total y parcial por accidente, incendio y robo
o hurto. Eranquicia minima por accidente e incendio parcial.
Existen estandares como los siguientes:
Cobertura Tipo Vehculo Marca/Mod Ao Cant.ctas. Monto cta.
Cobertura 4 Automovil Eiat Palio 1997 11 $54-
Cobertura 3 Automovil VW Gol 1998 11 $57-
Cobertura 6 Automovil Eiat Siena 1997 11 $173-
El monto de la cuota se asigna despues de que el servicio tecnico analiza el
estado del vehiculo, teniendo en cuenta tambien el valor del vehiculo en el
mercado, ao, etc.
Cuando un cliente contrata un seguro se deben generar automaticamente las
cuotas numeradas correlativamente y las Iechas de pago previstas, del 1 al
10 de cada mes. Para renovar el seguro, el cliente no puede deber ninguna
cuota del vehiculo.
El sistema debe grabar la Iecha de pago de cada cuota y donde la abono,
porque puede ser en las oIicinas de la compaia o en el banco, actualmente
/SSO - Tcncas Frgramacn J
72
Sigmun permite el pago en cualquier sucursal del Banco de la Nacion
Argentina.
Se solicita:
N Obtener las tablas normalizadas, en 3EN.
N Marcar todas las claves primarias.
25.-Si todavia creen que han manejado pocos datos, aqui les dejo como
ultimo ejercicio un parcial que presente a mis alumnos en el ao 1998.
Actualmente deben recordarlo y a mi tambien (espero que bien).
En el ISSD se desea implementar un Sistema de Gestion de Biblioteca.
Una bibliotecaria registro los datos de todos los libros que se poseen,
incluyendo:
N un numero de inventario por libro, correlativo a partir del numero 1
N titulo del libro
N temas o disciplinas que trata cada libroprogramacion, algebra, analisis
matematico, estadistica, sistema operativo, etc.-
N autor cada libro puede tener mas de un autor-
N ao de publicacion
N idioma en que esta escrito castellano, ingles, aleman, etc-
N editorial una por libro-
N edicion primera, segunda, etc.-
N Iecha de ingreso del libro a la biblioteca
N libreria donde Iue comprado
N precio de compra
De los autores solo se cuenta con:
N pais de origen
N apellido y nombres
Por ejemplo, un caso real es el libro 'Matematicas 2 Bachillerato que
tiene las siguientes caracteristicas:
N Editorial McGraw-Hill, de Espaa;
N escrito por 3 autores: Lorenzo Abellanas Rapun, Juan C. Garcia Arribas
y Celia Martinez Ontalba;
N trata contenidos de 3 temas o disciplinas: matrices de la algebra
(contenido: matrices), de analisis matematico (contenidos: derivadas e
integrales) y de geometria (geometria en el espacio, curvas y
superIicies).
No todos los libros son comprados, ya que alumnos y proIesores realizaron
donaciones. En esta situacion no se conocen: la libreria donde Iue comprado
y su precio, pero si se considera necesario saber quien Iue el donante del
material.
De la editorial es importante almacenar:
N denominacion
N pais
N direccion e-mail
/.S.S.O. - Tcncas Frgramacn J
73
De la libreria es necesario almacenar:
N denominacion o razon social
N direccion
N codigo postal
N localidad
N provincia
N teleIono
N direccion e-mail
N nombre de una persona de contacto.
Respecto a los prestamos es necesario almacenar;
N libro que se cede en prestamo
N datos del usuario que lo retira
N Iecha del prestamo
N Iecha de devolucion prevista -debera ser calculada en el momento del
prestamo-
N Iecha de devolucion real se cargara cuando el libro es devuelto, no
siempre es igual a la Iecha prevista-
De los usuarios de la Biblioteca debemos tener en cuenta por lo menos los
siguientes datos:
N tipo de documento
N numero de documento
N apellido y nombres
N domicilio
N localidad
N codigo postal
N provincia
N teleIono
SALIDA 1
LIS1ADO DE LIBROS DONADOS
Titulo Autores Ingreso Temas o disciplinas Idioma Donacion
Manual usuario DOS MicrosoIt 03/10/96 Sistema Operativo Espaol Mancini
Sistemas de B. de D. Ramez Elmasri
Shamkant Navathe
02/06/98 Bases de Datos Espaol Gleser
....................... ................... .............. ............................. .............. ..............
SALIDA 2:
LIS1ADO DE DEUDORES DE LIBROS AL 5/1/99
Usuario 1ipo usuario 1tulo del libro Prstamo Prevista Das
Avalos, Jose Alumno Programacion Orient. a Obf. 22/09/99 24/09/99 11
Torre: Ana Docente Introduccion a la Progr. 25/09/99 28/09/99 7
............. .......... .............................................. .............. .......... ......
Consideraciones:
N Un alumno puede retirar mas de un libro por dia.
/SSO - Tcncas Frgramacn J
74
N Si de un mismo libro hay mas de un ejemplar, cada ejemplar sera
tratado como otro libro ya que tiene asignado su propio numero de
inventario.
N En un mismo libro pueden tratarse contenidos de mas de un tema o
disciplina.
N No deben olvidar que cada autor puede tener escritos mas de un libro.
Segn el planteo de esta situacin, se pide:
Diagrama de dependencias de todos los datos
Tablas normalizadas -hasta 3ra. Eorma Normal-
Descripcion de los procesos necesarios para obtener SALIDA 1 y
SALIDA 2, con los datos de las tablas obtenidas.
Nota: se solicita escribir todos los supuestos que tengan en cuenta en el
analisis de datos realizado.
/.S.S.O. - Tcncas Frgramacn J
75
Lngua/ SQL
Introduccion
En 1970 el Dr. Codd habia deIinido el Modelo de Datos Relacional, tras lo
cual se desencadenaron investigaciones para lograr la implementacion real
del modelo en un RDBMS.
Es asi que, en 1975, IBM obtiene y muestra un prototipo de un RDBMS y
es el resultado de un proyecto llamado System/R. Pero este proyecto no solo
logra eso, sino tambien un lenguaje para extraer o consultar datos de la base
de datos y Iue llamado SEQUEL.
Ese lenguaje Iue renombrado como SQL o Lenguaje Estructurado de
Consultas y, mientras IBM continuaba las investigaciones, un grupo de
ingenieros de CaliIornia advirtio el gran mercado que se abria para el
modelo relacional y para SQL. En 1977 Iorman la compaia Relational
SoItware Inc., que lanza en 1979 el producto Oracle, dando lugar, con el
tiempo, al cambio de denominacion de la compaia como Oracle
Corporation. Esta empresa, y el producto en si mismo, tiene gran parte del
mercado actual en bases de datos.
Como habran advertido Oracle se adelanto al producto Iinal de IBM, aunque
tambien en esa carrera aparecio el producto Ingres, presentado en 1981,
desarrollado este por un grupo de docentes de la Universidad de CaliIornia,
que conIorman deIinitivamente, en 1989, Ingres Corporation.
T
r
e
s
/SSO - Tcncas Frgramacn J
76
No crean que IBM quedo con las manos vacias o sin obtener un producto
determinado, porque en 1981 el proyecto System /R anuncia el SQL/DS y lo
entrega en 1982. Pero como producto conocido en el mercado, de IBM,
podemos mencionar el DB2 Database 2-, que comenzo a comercializarse
en 1985, siempre ejecutando el SQL como Iorma de acceso a la base de
datos, y que actualmente esta siendo muy diIundido e implementado.
Retomando el punto de partida, podemos detectar en las denominaciones
SEQUEL y SQL, la palabra Query consulta, lo cual determina un
momento del lenguaje, porque comenzo siendo solo de consulta, pero
actualmente podemos, a traves de SQL, tambien realizar:
N creacion de tablas y la propia base de datos,
N asignacion de reglas de integridad,
N modiIicacion de la estructura de los almacenamientos,
N eliminacion de tablas,
N insercion o eliminacion de tuplas,
N modiIicacion del contenido de las tablas,
N asignacion de seguridad a la base de datos,
N gestion de transacciones,
N etc.
Dentro de este conjunto de acciones posibles se encuentran sentencias
pertenecientes a los lenguajes DDL Lenguaje de DeIinicion de Datos- y
DML Lenguaje de Manipulacion de Datos-, e inclusive hay autores que
mencionan al DCL o lenguaje de control de datos, y bajo este ultimo
conjunto agrupan las sentencias para asignar seguridad que brinda el SQL.
Caracteristicas del estandar
Antes de comenzar a mencionar las caracteristicas, vamos a entender que
signiIica que SQL es un estandar.
Un diccionario deIine a la palabra estandar como 'tipo, modelo, patron y
estandarizar es sinonimo de tipiIicar o ajustar a un modelo. Mas
especiIicamente, la Enciclopedia Encarta dice:
'Estndar, en informatica, confunto de especificaciones tecnicas
utili:adas para unificar el desarrollo de hardware o de software. Los
estandares de computadoras se desarrollan tradicionalmente de dos
maneras. Una de ellas, la menos formal, tiene lugar cuando una
compaia desarrolla un producto o una filosofia en solitario v
consigue convertir el concepto en un estandar por la popularidad de la
idea o por las imitaciones fabricadas por los competidores. Cuando el
diseo se ha extendido tanto que alefarse de la norma puede causar
problemas de compatibilidad o limitaciones comerciales, se considera
que existe un estandar de facto, como en el caso de los aparatos de
Relacin
La clasiIicacion de los
lenguajes DDL y DML Iue
mencionada en la Unidad I,
cuando tratamos la Estructura
Global del DBMS.
Glosario
SEQUEL: Structured English
Query Languaje, que signiIica
Lenguaje Estructurado de
Consultas en Ingles.
Glosario
RDBMS: Relational DataBase
Management System. Es decir
Sistema de Gestion de Base de
Datos Relacional.
Relacin
Esta reIerencia historica del
Modelo Relacional se mencio-
no en la Unidad II y la pueden
ampliar en el libro Aplique
SQL de los autores GroII y
Weinberg.
/.S.S.O. - Tcncas Frgramacn J
77
modem Haves v los equipos personales IBM. Otra forma mas ortodoxa
de crear un estandar es la redaccion de las especificaciones por un
grupo de expertos o un comite. Esta redaccion se hace despues de
llevar a cabo un estudio exhaustivo de los metodos existentes, las
propuestas v las tendencias o desarrollos tecnologicos. Los estndares
propuestos son ratificados o aprobados ms tarde por una
organizacin reconocida y se utilizan en productos basados en el
estndar, que a su vez tienen ms peso especfico en el mercado.
Existe un gran numero de estandares de este tipo. Entre ellos se
encuentran el confunto de caracteres ASCII, el RS-232-C estandar, la
interfa: SCSI v los lenguafes de programacion estandar ANSI, como C
v FORTRAN.`
Resalte una parte de la deIinicion porque el SQL Iue reconocido por las
organizaciones: ANSI, ISO, el grupo de vendedores europeos X/OPEN y
SQL Access Group.
Esto determina la gran aceptacion del lenguaje en el mercado inIormatico
actual, porque los lenguajes de programacion que necesitan acceder a una
base de datos relacional deben incluir o embeber las sentencias de SQL. Los
mas arriesgados, como los autores GroII y Weinberg, dicen que: 'ningun
nuevo producto de base de datos puede tener exito si no oIrece SQL.
Al hablar del estandar SQL siempre se hace reIerencia a lo trabajado por
ANSI/ISO, que conIormo un comite, incluyendo representantes de las
compaias que comercializaban bases de datos y por lo tanto SQL. Con ese
comite se obtuvo, en 1989, el estandar SQL1 o tambien llamado SQL89.
Este resultado no era mas que un conjunto de sentencias acordadas que,
escritas en menos de 100 paginas, se penso para evitar incompatibilidad
entre los productos que utilizaran SQL. Todas las compaias debian disear
sus productos comerciales ajustandose a el.
La inIluencia del estandar SQL1 se Iue debilitando con el tiempo, porque
tenia deIiciencias importantes que cada empresa comenzo a mejorar para
que su producto tuviera aceptacion en el mercado. Por ejemplo: manejaba
solo 4 (cuatro) tipos de datos: cadena de caracteres de longitud Iija, enteros,
decimales y numeros en coma Ilotante. Esa, como otras situaciones,
hicieron que, ya desactualizado el SQL1, ANSI continuara trabajando hasta
lograr el estandar SQL2 en el ao 1992.
Este ultimo estandar nombrado, el SQL2, Iue escrito en casi 600 paginas, lo
que muestra la ampliacion respecto al SQL1.
Actualmente ya hay bibliograIia que trata el SQL3, es decir que la intencion
de la estandarizacion continua, pero tambien es cierto que la portabilidad, de
las aplicaciones de un DBMS a otro, es realmente un mito.
Algunas caracteristicas del SQL, que incluyen ventajas y desventajas, que le
dieron lugar en el mercado, son:
N Las sentencias SQL son Irases en ingles de Iacil entendimiento y
aprendizaje, inclusive usuarios no expertos podran utilizarlo para la
/SSO - Tcncas Frgramacn J
78
obtencion de inIormacion que no esta disponible a traves de las
opciones del menu de su sistema.
N Es un lenguaje para las bases de datos relacionales, esto es importante
porque aun dicho modelo se mantiene como el mas importante.
N El DBA utiliza al SQL para deIinir la estructura de la base de datos
como para controlar el acceso de los usuarios.
N Con SQL se puede trabajar con bases de datos distribuidas.
N Puede ser utilizado en un sistema monousuario o multiusuario, e
inclusive en minicomputadoras, PCs o notebook.
N Permite trabajar en Iorma interactiva, escribir la sentencia y obtener el
resultado, pero tambien las sentencias pueden ser incluidas en los
programas. Por ejemplo: en lenguajes como Visual Eox, Visual Basic,
Java, Delphi, etc. cuentan con la posibilidad de aprovechar las
sentencias SQL ya que lo tienen embebido.
N La generacion de vistas, utilizando SQL, sirve para brindar seguridad a
la base de datos almacenada y responder a las necesidades de
inIormacion de los distintos usuarios.
N Cabe aclarar que el SQL no es un lenguaje completo de programacion,
ya que el conjunto de sentencias es limitado pero realmente potente para
manipular la base de datos.
N Puede ser implementado en distintas arquitecturas, como
cliente/servidor, para compartir la base de datos en una red.
N Si bien se mejoro la actualidad de los tipos de datos del SQL al SQL2,
aun surgen algunos que las compaias incluyen en sus productos debido
a las demandas cambiantes de la realidad, como pueden ser los objetos
en aplicaciones multimediales o necesidades impuestas por el diseo de
las paginas Web.
N Pueden surgir diIerencias semanticas entre las distintas
implementaciones de SQL.
N Hay diIerencias, entre los dialectos de SQL de un producto a otro, por
ejemplo en la organizacion de las tablas del sistema que se denomina
catalogo o diccionario de datos.
En ese caso, para que lo conceptualicen, el diccionario mantiene
inIormacion acerca de la estructura de la base de datos que el DBMS utiliza
en Iorma permanente. A continuacion podran observar que sucede cuando el
usuario necesita inIormacion del sistema:
/.S.S.O. - Tcncas Frgramacn J
79
El diccionario de datos contiene inIormacion inherente a:
N Tablas: identiIicacion de cada tabla de la base de datos, incluyendo el
nombre, su dueo o propietario, el numero de columnas, Iecha y hora de
creacion, cardinalidad, cantidad de paginas que utiliza, etc.
N Columnas: mantiene inIormacion de cada columna de la base de datos,
en cuanto a nombre de la tabla a la que pertenece, nombre de la
columna, tipo de dato, longitud, si acepta valores nulos o no, posicion
dentro de la tabla, etc.
N Usuarios: tiene datos de los usuarios que tienen derechos dentro de la
base de datos, por ejemplo: nombre, contrasea, etc.
N Vistas: contiene una descripcion de las vistas deIinidas en la base de
datos, incluyendo: nombre de la vista, propietario, consulta que deIine a
la vista, etc.
N Privilegios: son los derechos asignados a los usuarios, donde Iiguran:
usuario que otorgo el derecho, usuario que recibio el privilegio, Iecha y
hora de la asignacion, objeto sobre los cuales se aplican los derechos,
etc.
Usuario
DBMS
Solicitud
con SQL
Devolucion de
inIormacion
Base de Datos
Figura 21: acceso
a la BD a travs
de SQL
S.O.
/SSO - Tcncas Frgramacn J
80
Con todo esto, si el usuario solicita inIormacion que proviene de 2 (dos)
tablas de la base de datos, el DBMS debe:
N VeriIicar que existan las tablas mencionadas en la consulta, accediendo
a las tablas del diccionario de datos.
N Controlar que el usuario tenga permiso para leer dichas tablas,
inIormacion que tambien esta en el diccionario.
N Comprobar la existencia de los atributos.
N VeriIicar la validez de los tipos de datos utilizados.
N Resolver la consulta.
N Devolver el resultado al usuario.
Obviamente si alguno de los pasos tiene alguna anomalia, el DBMS
devuelve el error correspondiente para que sea mostrado al usuario
directamente o interpretado por la aplicacion que incluye la orden.
Toda esa inIormacion se almacena en tablas que son del sistema, pero que
pueden ser accedidas por algunos usuarios que conocen el lenguaje, por
ejemplo para consultar que tablas contiene la base de datos.
Consideraciones generales
Clasificacin de los comandos SQL
Los comandos del SQL estandar que se presentan a continuacion son los
que se describiran en este modulo y por lo tanto en la asignatura, pero no
son los unicos. Ademas, a estos se pueden agregar los propios de cada
dialecto de SQL.
Comando Descripcin Lenguaje
SELECT Recuperacion o extraccion de datos de la BD
Recuparacion
INSERT Insercion de tuplas nuevas en la BD
UPDATE Actualizacion de tuplas almacenadas
DML
DELETE Eliminacion de tuplas existentes
CREATE Creacion de nuevos objetos en la BD
ALTER ModiIicacion de estructuras de la BD
DDL
DROP Eliminacion de objetos de la BD
COMMIT ConIirmacion de eIectos de la transaccion
Transaccion
ROLLBACK Anulacion de eIectos de la transaccion
GRANT Asignacion de derechos a usuarios
DCL
REVOKE Eliminacion de derechos de usuarios
Nombres en SQL
Los objetos de la base de datos se identiIican con nombres, siendo esos
objetos: tablas, atributos, usuarios, procedimientos, etc.
El SQL estandar ANSI/ISO especiIica que los nombres deben comenzar con
una letra y tener como maximo 18 caracteres, sin incluir espacios ni
caracteres especiales. Por ejemplo: Oracle admite hasta 30 caracteres en los
/.S.S.O. - Tcncas Frgramacn J
81
nombres. Por lo tanto, para mantener la portabilidad de las aplicaciones
entre distintos productos es conveniente trabajar con nombres signiIicativos
pero breves y sin caracteres especiales.
N Los nombres de tablas se pueden cualiIicar, para cuando la tabla
pertenece a otro usuario y se hace indicando el nombre del propietario.
Obviamente que un usuario que desea utilizar una tabla, que no es
propia, debe contar con el permiso correspondiente. Por ejemplo:
FIDEL.CUENTAS
Es una tabla cualiIicada, donde EIDEL es el nombre del usuario
propietario y CUENTAS es el nombre de la tabla.
N Los atributos tambien pueden ser cualiIicados, indicando el nombre de
la tabla a la que pertenece y hasta a que usuario pertenece la tabla. Por
ejemplo:
FIDEL.CUENTAS.SALDO
SALDO sera el atributo que pertenece a la tabla CUENTAS del usuario
EIDEL.
Valores NULL
Los valores desconocidos o Ialtantes en la base de datos asumen valor
NULL. Por ejemplo, cuando se da el alta de un nuevo empleado puede ser
que no se conozca su titulo del secundario, mientras eso sea asi en el
atributo que almacena los titulos de secundario puede asumir valor NULL.
Pero este valor podra ser almacenado en un atributo, si al deIinir la tabla ha
sido tenida en cuenta la posibilidad, ya que un atributo deIinido como NOT
NULL no podra nunca asumir dicho valor.
Tipos de datos
Los tipos de datos iniciales en SQL Iueron solo 4 (cuatro) durante la
existencia del SQL1:
N CHAR: cadena de caracteres de longitud Iija.
N INTEGER: numeros enteros.
N NUMERIC o DECIMAL: para almacenar numeros decimales.
N ELOAT: numeros en coma Ilotante, para almacenar numeros
cientiIicos.
Con el tiempo y principalmente en el estandar SQL2, se incorporaron los
tipos de datos:
N VARCHAR: cadenas de caracteres de longitud variable.
N DATE: tipo de dato Iecha.
N TIME: para almacenar la hora.
/SSO - Tcncas Frgramacn J
82
N TIMESTAMP: para almacenar Iecha y hora.
N LONG: para datos alIanumericos de gran longitud, por ejemplo 2 Gb.
N BIT: cadenas de bits.
Estos datos y otros mas pueden encontrarse en algunos productos actuales,
estos son los mas comunes.
Pero es necesario aclarar que, aunque el estandar Iue ampliado en este
aspecto, hay actualmente diIerencias marcadas entre los productos
comerciales.
Cadena de caracteres
El estandar determina que una constante de tipo caracter debe ir encerrada
entre comillas simples, pero hay productos que las reconocen entre comillas
dobles.
Para evitar inconvenientes de portabilidad de aplicaciones entre productos,
conviene trabajar con comillas simples. Por ejemplo: 'Instituto Superior
Santo Domingo'
Consultas de datos
El comando de SQL que se utiliza para extraer o consultar datos de la base
de datos es SELECT y es el mas complejo y completo de todos.
Inicialmente tendremos en cuenta la siguiente sintaxis de la sentencia:
Figura 22: parte de la
sintaxis de la sentencia
SELEC1.
atributo
,
`
atributo
,
OR
AND
WHERE
SELECT
ALL
DISTINCT
FROM tabla
,
condicin de bsqueda
ORDER BY
ASC
DESC
Relacin
Recordemos que los resultados
de consultas tambien son
relaciones con estructura
tabular, con nombre o no, y no
se almacenan.
/.S.S.O. - Tcncas Frgramacn J
83
En esta Eigura 22, podemos ver el orden, que debe respetarse, de las clau
sulas dentro del comando SELECT y describiremos sinteticamente las
clausulas que la conIorman en la Iigura:
N ALL y DISTINCT son clausulas que tienen eIecto totalmente contrario.
Mientras ALL permitira ver todas las Iilas, incluidas las repetidas, la
clausula DISTINCT elimina las Iilas duplicadas. El eIecto es sobre las
Iilas de la relacion resultado de la consulta.
N La clausula EROM permite especiIicar una o mas tablas, de las cuales
se desean obtener los datos.
N Con WHERE se explicitan las condiciones a cumplir por los valores de
los atributos. Cuando no se cumplen las condiciones las Iilas no Iiguran
en la relacion resultante.
N La clausula ORDER BY ordenara el resultado obtenido, por uno o mas
atributos.
De estas clausulas las unicas obligatorias al momento de realizar una
consulta son: SELECT y EROM. El resto puede omitirse si no tenemos
necesidad de utilizarlas.
A continuacion trabajaremos sobre los dos tipos de consultas mas generales,
las cuales son: simples y multitablas.
/SSO - Tcncas Frgramacn J
84
EjempliIicaremos los 2 tipos de consultas, tomando como base el ejercicio
resuelto de normalizacion, en la unidad II.
EMPRESA CIUDADES
PK CUIT PK CodCiud
Descrip Ciudad
CondIVA Codprov
Nroing
SUCURSAL PROVINCIA
PK Nrosuc PK Codprov
Descrip Descrip
Calle
Numero
CodCiud
CLIENTES VENDEDORES
PK Nrocli PK DNI
CUIT Nombres
Apellido Apellido
Nombres
CondIVA
Calle
Nrodir
CodCiud
ARTICULOS ENCFACTURA
PK Codart PK TipoIac
Descrip PK NroIac
Precio EechIac
Stock Nrocli
Condvta
DNIvend
CUERPOFACT
PK TipoIac
PK NroIac
PK Codart
Cantidad
Precio
Consultas simples
Las consultas simples recuperan datos de solo una tabla, son las mas
simples y de menor uso; solo serviran para introducirnos en el tema. En la
practica es poco Iactible trabajar con una sola tabla.
Ejemplo 1: si necesitamos extraer, de la base de datos, los nombres y
apellidos de todos los clientes, la solicitud al DBMS sera:
/.S.S.O. - Tcncas Frgramacn J
85
SELECT apellido,nombres
FROM clientes
El resultado sera una relacion de grado 2 (dos columnas) y con tantas Iilas
como clientes haya en dicha tabla.
En esta situacion no hubo condiciones ni ordenamientos, por lo tanto no
aparecen ni WHERE ni ORDER BY.
En el resultado es Iactible que aparezcan Iilas repetidas, porque puede haber
mas de un cliente con el mismo apellido y nombres.
Ejemplo 2: podemos requerir los codigos y descripciones de los articulos
que estan con stock en cero.
SELECT codart, descrip
FROM articulos
WHERE stock 0
Pueden ver que el atributo stock no aparece en la lista de atributos
seleccionados y si Iigura en la condicion del WHERE.
El DBMS devolvera solo las Iilas de la tabla articulos que cumplan la
condicion expresada.
Ejemplo 3: podemos necesitar mostrar las descripciones de los articulos,
con los precios incrementados en un 10.
SELECT descrip, precio`1.10
FROM articulos
En la lista de seleccion se pueden, como en este ejemplo, incorporar
columnas calculadas con Iormulas escritas por el usuario o utilizar las
Iunciones que deIine el SQL estandar. A estas ultimas las trataremos
algunas paginas mas adelante.
Condiciones de bsqueda en consuItas
En el WHERE pueden utilizarse 5 (cinco) condiciones de busqueda, algunas
pueden ser mas utilizadas que otras, pero es importante tenerlas en cuenta
para resolver necesidades de datos.
Los tests utilizados en consultas simples y multitablas, como en otras
instrucciones son:
a) Comparacion
b) Rango
c) Pertenencia a conjunto
d) Correspondencia con patron
e) Valor nulo
Comentario
Las mayusculas en la orden,
como SELECT, o en las
clausulas, como WHERE, no
necesitan estar escritas en
mayusculas. Lo mismo sucede
en el caso de los atributos
nombrados. No hay
sensibilidad respecto a
minusculas o mayusculas en
s y .
/SSO - Tcncas Frgramacn J
86
DeIiniremos a continuacion cada uno de estos tests:
N 1est de comparacin: en el ejemplo 2 Iue utilizado el signo igual ()
para obtener solo articulos que cumplian una condicion. Los otros signos
que se pueden aprovechar son:
menor
mayor ~
distinto ~ o NOT
menor o igual
mayor o igual ~
En la expresion de comparacion, pueden enIrentarse atributos con: una
constante, otro atributo, Iormula matematica o una variable.
Por ejemplo, las siguientes ordenes se realizan sobre las tablas planteadas y
son validas en este tipo de test:
Ejemplo 4:
SELECT codart,descrip,precio
FROM articulos
WHERE precio > 0
Ejemplo 5:
SELECT tipofac,nrofac
FROM encfactura
WHERE fechfac < '01-1UL-03'
En esta ultima condicion hay una comparacion de Iechas que normalmente
se escribe de manera distinta entre los productos comerciales con SQL.
Recuerden que el tipo de dato Iecha se incorporo con el tiempo al estandar,
por ello hay diIerencias. Esa comparacion planteada Iuncionaria en Oracle,
pero el SQL de Eox no la reconoceria, habria que trabajar con Iunciones o
sintaxis propia de ese producto CTOD, Iechas entre }, etc.-.
Tambien pueden incorporar mas de una condicion en el WHERE, por
ejemplo si necesitamos la descripcion de todos los articulos que tienen
precios desde $5.- y hasta $15.-. En situaciones como esta, debemos trabajar
con los operadores logicos ya conocidos: OR, AND y la negacion con NOT.
Ejemplo 6:
SELECT descrip
FROM articulos
WHERE precio > 5
AND precio < 15
N 1est de rango: este test veriIica si el valor de un dato se encuentra entre
dos valores especiIicados, incluyendo los valores que coinciden con los
extremos del rango deIinido.
Comentario
La escritura de la sentencia
SELECT renglon por renglon,
es decir en una linea el
SELECT, en otra EROM y en
otra WHERE, no son
exigencias del estandar ni de
los productos en particular.
Considero que esa Iorma de
escritura brinda claridad y
Iacilita la lectura e
interpretacion de lo escrito.
Podria estar todo escrito en un
i o l
/.S.S.O. - Tcncas Frgramacn J
87
Este rango permite el uso de la clausula BETWEEN y, si nos basamos en el
ejemplo 6, que solicitaba descripcion de todos los articulos que tienen
precios desde $5.- y hasta $15.-, la escritura de la orden quedaria:
Ejemplo 7:
SELECT descrip
FROM articulos
WHERE precio BETWEEN 5 AND 15
EL eIecto de la orden utilizada en el ejemplo 6 es totalmente equivalente a
esta ultima.
Tambien se puede incorporar la negacion del BETWEEN, anteponiendo el
NOT a la clausula.
Ejemplo 8:
SELECT descrip
FROM articulos
WHERE precio NOT BETWEEN 5 AND 15
Si bien los ejemplos dentro de este test son numericos, no signiIica que solo
puedan trabajar con ese tipo de dato, ya que lo siguiente, con caracteres, es
valido, lo mismo sucederia con Iechas.
Ejemplo 9:
SELECT descrip
FROM articulos
WHERE descrip BETWEEN 'B ' AND 'CA'
Las Iilas que resultaran seleccionada, segun la sentencia del ejemplo 9,
seran las que tienen articulos con descripciones superiores a B mayuscula y
hasta la CA. La valoracion estara determinada por el codigo de secuencia de
cotejo con el que se trabaja en el equipo. Por ejemplo: en las PCs
trabajamos con el codigo ASCII y en equipos mainIrame con codigo
EBCDIC. De ello dependera el resultado obtenido.
Ejemplo 10:
SELECT tipofact,nrofac
FROM encfactura
WHERE fechfac BETWEEN '15-FEB-99' AND '15-MAR-99'
N 1est de pertenencia a conjunto: este test veriIica que el valor de un
atributo o expresion coincida con alguno de los valores expresados en la
lista encerrada entre parentesis.
La clausula utilizada es IN y tambien puede ser negada con NOT.
Ejemplo 11:
SELECT apellido,nombres,calle,nrodir
FROM clientes
WHERE nrocli IN ('058','165', '099','197','017','277','450')
Advertencia
Podran observar que al Iinal de
cada linea no agrego caracter
alguno.
Esto se debe a que, en el modo
interactivo, los productos traba-
jan de manera distinta.
Por ejemplo: en Oracle se debe
agregar un punto y coma (;)
despues del ultimo caracter de
la ultima linea del comando y
en las otras solo presionar
Enter.
El Enter al Iinal de cada linea
en el ambiente de Eox
interactivo, tiene el eIecto
contrario al de Oracle.
/SSO - Tcncas Frgramacn J
88
Ya habran observado que los valores incluidos en la lista no mantienen
orden alguno, ademas hemos supuesto que el dato nrocli es del tipo caracter
y por ello esta expresados entre comillas simples.
A esta sentencia la pueden reemplazar por comparaciones con signo , pero
eso implicaria una sentencia mas extensa que la escrita.
Ejemplo 12:
SELECT nrocli,apellido,nombres,calle,nrodir
FROM clientes
WHERE codciud NOT IN (5,51,52,59,54)
En este ejemplo 12, suponemos que el codciud es numerico y los valores de
los codigos no son correlativos, porque si no utilizariamos un test de rango.
Esta orden listara los clientes que no vivan en esas ciudades.
N 1est de correspondencia con patrn: recupera las Iilas que incluyan en
cierto atributo, del tipo caracter, una cadena especiIicada.
Trabaja con la clausula LIKE, que puede ser negada con NOT, y la cadena
debe ser encerrada con comillas.
Ademas, en la escritura de la sentencia, incluye los siguientes comodines:
Signo de porcentaje ( ): como lo hace el sistema operativo DOS con el
asterisco ( * ), la secuencia de caracteres posteriores a el puede ser
cualquiera, pero en SQL escribir 'AL' tiene eIecto, como lo veran en el
ejemplo 15.
Guin bajo ( _ ): el signo equivalente en el DOS es el signo de pregunta
(?), porque el caracter que puede ser cualquiera es exactamente donde esta
ubicado el guion bajo ( ).
Ejemplo 13:
SELECT nrocli,apellido,nombres
FROM clientes
WHERE apellido LIKE 'AL'
El resultado estara Iormado por los clientes cuyo apellido comienza con las
letras AL, por ejemplo: ALONSO, ALCAZAR, ALMIRON, etc.
Ejemplo 14:
SELECT nrocli,apellido,nombres
FROM clientes
WHERE apellido LIKE 'AL'
El resultado estara Iormado por los clientes cuyo apellido contiene a las
letras AL, sin importar el lugar, por ejemplo: ALONSO, GALINDEZ,
ALCAZAR, ALMIRON, CASAL, BERNAL, JUVENAL, VITALE, etc.
Ejemplo 15:
Advertencia
Los literales de comparacion
son sensibles a las mayusculas
y minusculas.
No es lo mismo buscar
apellidos que comiencen con
'AL' que buscar con 'al' o 'Al'.
/.S.S.O. - Tcncas Frgramacn J
89
SELECT nrocli,apellido,nombres
FROM clientes
WHERE apellido LIKE 'AL'
Con esta orden obtendremos los clientes cuyo apellido termina con AL.
Como ejemplos: BERNAL, JUVENAL, etc.
Ejemplo 16:
SELECT nrocli,apellido,nombres
FROM clientes
WHERE apellido LIKE 'AL_A'
Por ejemplo, obtendremos los clientes de apellido ALTAMIRANO,
ALIAGA, etc.
N 1est de valor nulo: solo selecciona las Iilas que almacenan valor NULL
(desconocido) en el atributo indicado o los que no son NULL, si en este
ultimo caso la condicion es NOT NULL.
Ejemplo 17:
SELECT apellido,nombres
FROM clientes
WHERE condiva IS NULL
Obtendremos los clientes de los cuales aun se desconoce la condicion ante
el IVA, por ejemplo con un cliente nuevo que no presento su constancia.
No es incluida en el test de comparacion porque NULL no es un valor
comparable, es solo una indicacion de que el valor es desconocido.
Ejemplo 18:
SELECT apellido,nombres
FROM clientes
WHERE calle IS NOT NULL
En la relacion resultante apareceran las Iilas de los clientes de los cuales se
conoce la calle en la que vive.
Ordenamiento
En cualquiera de los ejemplos era posible ordenar el resultado por uno o
mas de los atributos, e inclusive de manera ascendente o descendente.
Para lograr esto debemos incluir la clausula ORDER BY al Iinal de la
sentencia con los atributos del ordenamiento, pudiendo aclarar con ASC el
orden ascendente, que es por deIecto, y con DESC, el orden descendente.
/SSO - Tcncas Frgramacn J
90
Ejemplo 19:
SELECT nrocli,apellido,nombres
FROM clientes
WHERE apellido LIKE 'A'
ORDER BY apellido,nombres
El listado de los clientes aparecera ordenado por apellido y si hay repeticion
de apellido ordenara por el nombre.
Como por deIecto el ordenamiento es ascendente, no es necesario indicar
ASC al Iinal de la orden. En caso de querer ordenar el resultado por dos
atributos en orden descendente y por otro ascendente, se debe colocar la
clausula DESC a la derecha de los dos primeros, como en el ejemplo 20.
Ejemplo 20:
SELECT tipofac,nrofac,codart
FROM cuerpofact
ORDER BY tipofac DESC,nrofac DESC,codart
Si bien no es una exigencia de los productos ni del SQL estandar, es
conveniente incluir en la lista de seleccion del SELECT los atributos citados
en la clausula ORDER BY. De esa manera podremos observar la lista
ordenada por datos que si aparecen en el resultado.
Cuando en la lista de seleccion se incluyen columnas calculadas y se desea
ordenar por alguna de ellas, como dichas columnas no tienen nombre de
atributo, se debe agregar los numeros de las columnas que nos interesan.
Ejemplo 21:
SELECT tipofac,nrofac,codart,(cantidad`precio)
FROM cuerpofact
ORDER BY tipofac,nrofac,4
En este ejemplo, vemos que la columna calculada (cantidad*precio) ocupa
la 4 columna de la lista de seleccion, por ello en el ordenamiento se agrego
el numero 4.
El numero de columna tambien puede reemplazar a un atributo en la
clausula ORDER BY, pero quita claridad a la lectura de la sentencia y no es
util.
En el resultado del ejemplo 21, la columna calculada aparecera con un
encabezamiento poco claro para el usuario. Para mejorar este aspecto se
utilizan los alias de columnas, que se pueden interpretar como un titulo para
la columna. Simplemente se agrega la clausula AS en la lista de seleccion.
Segun esto podemos escribir la sentencia de la siguiente manera:
SELECT tipoIac,nroIac,codart,(cantidad*precio) AS monto
EROM cuerpoIact
ORDER BY tipoIac,nroIac,4
/.S.S.O. - Tcncas Frgramacn J
91
Consultas multitabla
Estas consultas recuperan datos de mas de una tabla. Son realmente utiles y
muy simples de trabajar.
Planteamos la necesidad de obtener un listado, ordenado por tipo y numero
de Iactura, que contenga:
N Tipo de Iactura
N Numero de Iactura
N Eecha de la Iactura
N Apellido del cliente
N Nombres del cliente
N Apellido del vendedor
Estos datos estan dispersos en tres de las tablas: ENCEACTURA,
CLIENTES y VENDEDORES.
Para obtener este listado, en otros lenguajes, se deberia trabajar con indices
e incluir algun ciclo para recorrer las tablas.
Con SQL solo debemos igualar las claves Ioraneas de una tabla con las
claves primarias, reIerenciadas por las Ioraneas. Esto se hace en la clausula
WHERE y se llama emparejamiento de tablas.
Es decir que si los datos surgen de 3 (tres) tablas, como es el ejemplo,
deberia haber por lo menos 2 (dos) igualdades, para emparejar, en la
clausula WHERE. Si la cantidad de tablas es 'n, debemos incluir, por lo
menos, 'n 1 igualdades en el emparejamiento de las tablas.
CLIENTES VENDEDORES
PK Nrocli PK DNI
CUIT Nombres
Apellido Apellido
Nombres
CondIVA ENCFACTURA
Calle TipoIac
Nrodir
PK
NroIac
CodCiud EechIac
Nrocli
Condvta
DNIvend
Antes de escribir la sentencia correspondiente, es conveniente aclarar que
puede suceder que los datos que necesitamos tengan nombres repetidos en
las tablas involucradas, en la consulta, y esto presenta ambigedad para el
DBMS, porque no sabra de donde tomar el dato, y nos devolvera un error.
Para resolver este inconveniente, que en el ejemplo se presenta con el
numero de cliente (nrocli), que esta en las tablas CLIENTES y
/SSO - Tcncas Frgramacn J
92
ENCEACTURA, y con el atributo apellido, que esta en las tablas
CLIENTES y VENDEDORES, se deberan cualiIicar los nombres de los
atributos con el nombre de la tabla.
Siempre es aconsejable cualiIicar todos los datos de la consulta, para
mejorar la perIormance del sistema y brindar mayor claridad.
Veamos una posible resolucion de la necesidad planteada.
Ejemplo 22:
1 SELECT encfactura.tipofac, encfactura.nrofac, encfactura.fechfac,
2 clientes.apellido, clientes.nombres, vendedores.apellido
3 FROM encfactura, clientes, vendedores
4 WHERE encfactura.nrocli clientes.nrocli AND
5 encfactura.DNIvend vendedores.DNI
6 ORDER BY encfactura.tipofac, encfactura.nrofac
Descripcion de la sentencia.
N Lineas 1-2. la lista de seleccion con todos los atributos cualificados.
N Linea 3. indicacion de todas las tablas que se necesitan.
N Lineas 4-5. emparefamiento de claves primarias (PK) v foraneas (FK).
N Linea 6. ordenamiento del resultado.
Recuerden que la escritura con mayuscula y minuscula es indistinta, tanto
en las ordenes, sentencias y atributos.
A la sentencia escrita en el ejemplo 22, la podemos reducir en escritura, de
hecho es lo que se hace en la practica, incluyendo alias de tablas. El alias de
una tabla es como un sobrenombre que se le asigna temporalmente al
objeto, obviamente de menor cantidad de caracteres que el nombre mismo.
Asignemos los siguientes alias a las tablas:
TABLA ALIAS
encIactura E
clientes C
vendedores V
Con esos alias, la sentencia del ejemplo 22 queda:
SELECT e.tipoIac, e.nroIac, e.IechIac, c.apellido, c.nombres, v.apellido
EROM encIactura e, clientes c, vendedores v
WHERE e.nrocli c.nrocli AND e.DNIvend v.DNI
ORDER BY e.tipoIac, e.nroIac
Ejemplo 23:
1 SELECT c.tipofac, c.nrofac, c.codart, a.descrip, c.candidad
2 FROM cuerpofact c, articulos a
3 WHERE c.codart a.codart AND c.cantidad > 10
4 ORDER BY c.tipofac, c.nrofac
Advertencia
La omision de alguna igualdad
entre PK y EK nos puede llevar
a resultados no esperados,
seguramente con mayor
cantidad de Iilas de las que
corresponderian.
Es lo que se llama producto
cartesiano, donde la cantidad
de Iilas de una consulta
multitabla de: tabla A
(cardinalidad: 50) y tabla B
(cardinalidad 100), nos dara por
resultado una relacion de 50 x
100 5000 Iilas.
/.S.S.O. - Tcncas Frgramacn J
93
Descripcion de la sentencia.
N Linea 1. la lista de seleccion con todos los atributos cualificados.
N Linea 2. indicacion de las tablas que se necesitan, con sus respectivos
alias.
N Linea 3. emparefamiento de claves primarias (PK) v foraneas (FK).
N Linea 4. ordenamiento del resultado.
Eunciones de columna
El SQL estandar plantea una serie de Iunciones que pueden incluirse en la
lista de seleccion, para responder a distintas necesidades.
Las Iunciones son:
N SUM (expresion) calcula la suma de la expresion.
N AVG (expresion) calcula el promedio de la expresion.
N COUNT (columna) cuenta el numero de valores de la columna.
N COUNT (*) cuenta el numero de Iilas de la relacion.
N MIN (expresion) obtiene el minimo valor de la expresion.
N MAX (expresion) obtiene el maximo valor de la expresion.
Consideraciones a tener en cuenta en el uso de las Iunciones:
N La Iuncion SUM( ) acepta solo valores numericos: enteros, decimales,
coma Ilotante o monetario. El resultado sera del mismo tipo que el dato
utilizado como argumento.
N Los datos de la expresion de la Iuncion AVG( ) tambien deben ser
numericos, pero el resultado no siempre es del mismo tipo. Por ejemplo: si
la columna o expresion sobre la que trabaja es del tipo numerico entero, el
resultado puede ser un numero decimal, porque la Iuncion realiza una
division al obtener el promedio.
N La Iuncion COUNT( ) no tiene limitaciones en el tipo de dato y siempre
devuelve un valor numerico entero. Si bien la Iuncion COUNT( ) es una
sola, tiene diIerente resultado si entre los parentesis lleva una columna o si
colocamos un * . La diIerencia se presenta en el tratamiento del valor
NULL, porque si el NULL esta en la columna que esta entre los parentesis
del COUNT es ignorado por la Iuncion y si utilizamos el COUNT(*) cuenta
todas las Iilas y el NULL no inIluye. Resumiendo: al nombrar una columna
o atributo en el COUNT podemos encontrarnos con un numero menor en el
resultado, porque ignora los valores NULL.
N Las Iunciones MIN( ) y MAX( ) trabajan con tipos de dato caracter,
Iecha y numericos, el resultado es del mismo tipo que la expresion. El
codigo ASCII determinara el valor para distinguir cuales son los minimos o
maximos, en el ambiente de las PCs, el codigo EBCDIC hace lo propio en
equipos mainIrame.
Los productos comerciales, que incluyen SQL, agregan sus propias
Iunciones. Por ejemplo, Oracle ademas de las Iunciones del SQL estandar
/SSO - Tcncas Frgramacn J
94
tiene una serie de Iunciones, de las cuales podemos ejempliIicar con
algunas:
N Numricas
ABS(n): valor absoluto de n
COS(n): coseno de n
LOG(n): logaritmo natural de n
MOD(m,n): modulo de la division de m por n
ROUND(n,m): redondeo a m decimales de n
SIN(n): seno de n
SQRT(n): raiz cuadrada de n
TAN(n): tangente de n
N Funciones para cadenas y que retornan valor carcter
CHR(n): caracter correspondiente a n
LOWER(cadena): retorna en minusculas la cadena
LTRIM(cadena): quita espacios en blanco a la izquierda de la cadena
RTRIM(cadena): quita espacios en blanco a la derecha de la cadena.
SUBSTR(cadena,m,n): retorna de la cadena desde m, n caracteres
UPPER(cadena): retorna mayusculas de la cadena
N Funciones para cadenas que retornan valor numrico
ASC(char): retorna valor decimal del caracter
LEN(cadena): cantidad de caracteres en la cadena
Todas las Iunciones se pueden agregar en la lista de seleccion de la clausula
SELECT de la siguiente manera:
Ejemplo 24:
SELECT SUM(c.cantidad`c.precio)
FROM cuerpofact c
La instruccion del ejemplo 24 obtendra la sumatoria de la multiplicacion de
cantidad por precio, es decir todo lo vendido y registrado en el cuerpo de la
Iactura.
Ejemplo 25:
SELECT AVG(a.precio) AS promedio
FROM articulos a
WHERE a.descrip LIKE 'AZU'
Esta ultima sentencia mostrara el promedio de todos los precios de los
articulos que contengan la cadena AZU en la descripcion.
Recuerda que el AS cambia la cabecera de la columna resultante para
claridad del usuario.
Consultas agrupadas
Comentario
En algunos productos, como
Oracle, la clausula AS no es
obligatoria para asignarle un
alias a la columna, puedes
solamente dejar un espacio en
blanco entre la expresion y su
alias.
/.S.S.O. - Tcncas Frgramacn J
95
Estas consultas, tambien llamadas resumen, tienen gran importancia porque
trabajan conjuntamente con las Iunciones de columnas y nos permiten, por
ejemplo, obtener:
N Promedio de notas de cada alumno del ISSD.
N Monto total abonado por alumno en cada ao.
N Cantidad de alumnos que provienen de cada provincia.
N Monto total Iacturado por dia.
En una empresa comercial podremos calcular:
N Cantidad de Iacturas logradas por vendedor en cada dia del ao.
N Monto Iacturado por cada sucursal en cada ao trabajado.
N Cantidad de Iacturas por cliente.
N Promedio de los montos Iacturados por mes.
N Monto minimo o maximo Iacturado en un periodo de tiempo.
N Cantidad de unidades vendidas durante un periodo de los distintos
productos que se venden en la empresa.
Si bien son ejemplos de distinta naturaleza, intento mostrarles la potencia
que tendra una sentencia en la obtencion de inIormacion.
Para escribir una consulta resumen debemos conocer la sintaxis completa
del comando SELECT, que es la siguiente:
Figura 23: sintaxis
completa de la
sentencia SELEC1.
atributo
,
`
atributo
,
OR
AND
WHERE
SELECT
ALL
DISTINCT
FROM tabla
,
condicin de bsqueda
GROUP BY
HAVING condicin del grupo
,
ASC
DESC
ORDER BY
atributo
,
/SSO - Tcncas Frgramacn J
96
Las clausulas agregadas son: GROUP BY y HAVING. Como no son obliga
torias en el SELECT, no aparecieron en la primera presentacion de la
sintaxis, pero si agregan Iuncionalidad y potencia a las consultas.
Clusula GROUP BY
La clausula GROUP BY es la que permite indicar por que atributo o
atributos se realiza el agrupamiento.
Cuando el DBMS debe procesar una consulta, con la clausula GROUP BY
presente, sabe que tiene que dividir al conjunto de Iilas en grupos segun los
atributos especiIicados y generar una Iila de resultados correspondiente a
cada grupo distinto.
Por ejemplo:
N Para obtener el promedio de notas por alumno, el agrupamiento debera
realizarse por el identiIicador de los alumnos, que posiblemente sea el
legajo o el numero de documento. De esta manera obtendremos una Iila
para cada alumno de las tablas especiIicadas.
N El monto total abonado por alumno en cada ao necesitara un
agrupamiento por legajo y tambien por ao.
N La cantidad de alumnos por provincia se obtendra seguramente
agrupando por codigo de provincia.
N El monto total Iacturado por dia sera una sumatoria de importes
agrupados por Iecha de Iacturacion.
N La cantidad de Iacturas logradas por vendedor en cada dia del ao nos
obligara a agrupar por codigo de vendedor o DNI y tambien por Iecha.
El agrupamiento nos permite seguir trabajando con multiples tablas,
ordenamiento y condiciones que hemos tratado hasta ahora.
EjempliIicaremos a continuacion distintas situaciones para que vean como
se escribe, pero lo importante es darse cuenta de la logica del agrupamiento.
Por ejemplo: si la empresa necesita conocer en cuantas ventas participo cada
vendedor, debemos contar en cuantos encabezamientos de Iactura aparece el
DNI de cada uno de ellos. Para contar usamos la Iuncion COUNT( ) y el
agrupamiento debe realizarse por el identiIicador del vendedor. Ademas, la
consulta sera simple, con una tabla, porque todo esta en ENCEACTURA.
DeIinitivamente la instruccion SQL seria la siguiente:
Ejemplo 26:
SELECT e.DNIvend, COUNT(e.DNIvend) AS cantidad
FROM encfactura e
GROUP BY e.DNIvend
/.S.S.O. - Tcncas Frgramacn J
97
No se incluyo ordenamiento alguno, por lo que el resultado sera 2 (dos)
columnas con datos y tendran la apariencia siguiente:
DNIVEND CANTIDAD
20.602.346 54
17.369.457 24
21.659.032 4
15.694.201 42
19.230.897 48
16.314.104 5
Este resultado nos muestra que la empresa tiene 6 (seis) vendedores que
estan representados uno en cada Iila y la cantidad de ventas de los mismos.
Ejemplo 27:
SELECT c.tipofac, c.nrofac,SUM(c.cantidad`c.precio) AS monto
FROM cuerpofact c
WHERE c.tipofac 'B'
GROUP BY c.tipofac, c.nrofac
ORDER BY c.tipofac, c.nrofac
Esta sentencia, escrita en el ejemplo 26, tiene multiples columnas de
agrupacion, mas exactamente 2 (dos) columnas, y nos permitira obtener el
monto resultante en cada Iactura de tipo 'B', porque el agrupamiento es por
tipo y numero de Iactura, ordenando el resultado por Iactura.
La condicion en el WHERE, que las Iacturas sean de tipo 'B', hace que no
todas las Iilas de la tabla cuerpoIact sean tenidas en cuenta en el
agrupamiento, porque las que no son de tipo 'B' son desechadas y no seran
agrupadas.
Ejemplo 28:
SELECT e.nrocli, c.apellido, c.nombres,COUNT(e.nrocli) AS cantidad
FROM encfactura e, clientes c
GROUP BY e.nrocli,c.apellido,c.nombres
ORDER BY c.apellido,c.nombres
El resultado sera el listado de los clientes numero, apellido y nombres- con
las cantidades de Iacturas que se emitieron a nombre de cada uno de ellos.
En el GROUP BY se incluyeron las columnas de agrupacion: e.nrocli,
c.apellido y c.nombres, excepto las columnas con Iunciones, aunque el
agrupamiento realmente se realiza por el numero de cliente e.nrocli (que es
la clave primaria).
Esto se debe a la exigencia del SQL, ya que todas las columnas
seleccionadas en el SELECT deben aparecer como columnas de agrupacion,
aunque sea redundante. Les parece ilogico? A mi tambien pero es una
exigencia, de lo contrario obtendremos un mensaje de error, de parte del
DBMS.
/SSO - Tcncas Frgramacn J
98
Ahora, si esa consulta Iuera asi:
SELECT e.nrocli, e.fechfac, c.apellido, c.nombres,COUNT(e.nrocli) AS
cantidad
FROM encfactura e, clientes c
GROUP BY e.nrocli, e.fechfac,c.apellido,c.nombres
ORDER BY c.apellido,c.nombres
El resultado es muy distinto, porque la Iecha de Iactura agregada si inIluye.
Obtendrian la cantidad de Iacturas emitidas a nombre de un cliente, pero por
Iecha (por dia).
Clusula HAVING
Esta clausula acompaa al GROUP BY. Se utiliza para condicionar grupos
que no cumplan determinada condicion.
Asi como la clausula WHERE Iiltra Iilas, HAVING Iiltra grupos resultantes
de la clausula GROUP BY.
Si recordamos el ejemplo 26, se solicitaba la cantidad de Iacturas en las que
participo cada vendedor. La sentencia para ello era:
SELECT e.DNIvend, COUNT(e.DNIvend) AS cantidad
FROM encfactura e
GROUP BY e.DNIvend
De esta sentencia obteniamos una relacion resultante de 6 (seis) Iilas, una
para cada vendedor de la empresa:
DNIVEND CANTIDAD
---------------------------------
20.602.346 54
17.369.457 24
21.659.032 4
15.694.201 42
19.230.897 48
16.314.104 5
Pero si deseamos restringir un poco el resultado, prestando atencion solo a
aquellos vendedores que realizaron mas de 25 ventas, necesariamente
debemos recurrir a la clausula HAVING. La clausula WHERE no sirve para
cumplir lo solicitado porque nunca podemos incluir en ella una Iuncion de
columna como COUNT( ), ademas hasta el momento de la aplicacion del
WHERE el DBMS no obtuvo los resultados del GROUP BY.
Ejemplo 29:
SELECT e.DNIvend, COUNT(e.DNIvend) AS cantidad
FROM encfactura e
GROUP BY e.DNIvend
HAVING COUNT(e.DNIvend) > 25
/.S.S.O. - Tcncas Frgramacn J
99
DNIVEND CANTIDAD
---------------------------------
20.602.346 54
15.694.201 42
19.230.897 48
A esa condicion, del HAVING, solo la cumplen los 3 (tres) grupos, es decir
esos vendedores realizaron mas de 25 ventas.
Consideraciones en el uso de la clausula HAVING:
N En HAVING aparecera siempre una o mas Iunciones de columna, de lo
contrario estaria mal utilizado.
N En la practica, el HAVING aparece con GROUP BY, es muy extrao
aplicar HAVING sin agrupamiento. En el ultimo caso, sin GROUP BY,
la restriccion del HAVING se aplicaria a la unica Iila resultante de la
consulta.
N Las condiciones de busqueda a utilizar en el HAVING son todas las
vistas hasta el momento Test de comparacion, Test de pertenencia a
conjunto, Test de rango BETWEEN, Test de valor NULL y
correspondencia con patron LIKE-.
N Tambien podran utilizarse las condiciones de busqueda que se plantean
en el siguiente tema: subconsultas.
/SSO - Tcncas Frgramacn J
100
Ejercicios propuestos
Volvemos a trabajar con las tablas siguientes:
EMPRESA CIUDADES
PK CUIT PK CodCiud
Descrip Ciudad
CondIVA Codprov
Nroing
SUCURSAL PROVINCIA
PK Nrosuc PK Codprov
Descrip Descrip
Calle
Numero
CodCiud
CLIENTES VENDEDORES
PK Nrocli PK DNI
CUIT Nombres
Apellido Apellido
Nombres
CondIVA
Calle
Nrodir
CodCiud
ARTICULOS ENCFACTURA
PK Codart PK TipoIac
Descrip PK NroIac
Precio EechIac
Stock Nrocli
Condvta
DNIvend
CUERPOFACT
PK TipoIac
PK NroIac
PK Codart
Cantidad
Precio
1- Obtener la cantidad de Iacturas emitidas por Iecha, mostrando la Iecha y
la cantidad solicitada.
Comentario
Visual Eox presenta la Iuncion
DATE( ) para conocer la Iecha
actual del sistema y otros
productos utilizan distintas
Iunciones para el mismo
objetivo.
En Oracle para conocer la Iecha
del sistema tenemos SYSDATE
y en DB2 es CURRENT
/.S.S.O. - Tcncas Frgramacn J
101
2- Mostrar la descripcion de las ciudades, la descripcion de las provincias
a las que pertenecen y la cantidad de sucursales de la empresa en cada una
de las ciudades.
3- Obtener el menor stock actual, dentro de la tabla articulos.
4- Mostrar el promedio de precios de los articulos que tienen un stock
superior a 5 unidades.
5- Obtener la cantidad de unidades vendidas en las Iacturas de tipo 'A'.
6- Visualizar la cantidad de unidades vendidas de cada articulo, en las
Iacturas de tipo 'A', incluyendo la descripcion del articulo y el precio.
Ordenar el resultado por la cantidad calculada.
7- Listar los numeros de Iactura, Iecha, apellido del cliente y del vendedor
de todas las Iacturas con condicion de venta 'contado y del dia anterior a la
Iecha actual.
8- Mostrar las descripciones de los articulos vendidos, de las Iacturas
realizadas durante agosto del presente ao. La condicion es que el vendedor
de dichas Iacturas sea el Sr. Erancisco Sosa.
9- Obtener los nombres y apellidos de los clientes que viven en la
provincia de 'Cordoba y que el apellido termine en 'IAN. Ordenar el
resultado por apellido y nombres.
10- Cuantos clientes de otras provincias han realizado compras durante el
corriente ao?. Escriban la sentencia para obtener dicho numero.
Comentario
En algunos productos, como
DB2, podran encontrar las
Iunciones de Visual Eox para
extraer ao y mes de una Iecha,
respectivamente YEAR (Iecha)
y MONTH (Iecha).
/SSO - Tcncas Frgramacn J
102
Ejercicios de autoevaluacion - Consultas
Antes de seguir conociendo caracteristicas y comandos
SQL, les propongo, porque lo creo muy importante,
resolver este ejercicio de 'TASAS DE SERVICIO A
LA PROPIEDAD.
En el intento integrar los contenidos trabajados hasta el
momento, incluyendo enunciados para resolver con consultas simples,
multitablas, consultas resumen, Iunciones de columnas, etc.
A continuacion presento las estructuras de las tablas, el posible contenido de
las mismas y los enunciados.
Para la resolucion es conveniente, bajo el producto con SQL que desees, o
que el docente aconseje, realizar los siguientes pasos: crear las tablas,
ingresar los datos y luego ejecutar las instrucciones para cumplir con las
necesidades.
Te sugiero que no te quedes con lo escrito en papel, sobre el ensayo en la
PC podras corregir errores o reunir dudas para aclarar con el docente.
Estructuras de las tablas:
CONTRIBUYENTES INMUEBLES
#Nrocontri #Nrocatast
Nombre Ubicacion
Domicilio Zona
Codloc Tipo
Barrio Nrocontri
Contenido de las tablas:
CONTRIBUYENTES
NRO_CON APELLIDO DOMICILIO COD_LOC BARRIO
001 Minetti La Calera 5100 La Calera
002 Gamma S.A S. Juan 523. 5000 Alta Cordoba
003 Alvarez Baigorri 152 5000 Alta Cordoba
004 Juarez Colon 1500 5000 Centro
005 Eunes Rivadavia 471 5149 Centro
VENCIMIENTOS
#Nrocuota
Iecha1v
Iecha2v
DEUDAS
#Nrocatast
#Nrocuota
Importe
Eechapago
LOCALIDADES
#Codloc
Nombreloc
Codprov
/.S.S.O. - Tcncas Frgramacn J
103
INMUEBLES
NRO_CATAST UBICACIN ZONA TIPO NRO_CONTRI
001 Olavarria 158 A01 B 001
002 Catamarca 358 B04 E 001
003 Cochabamba 547 A01 B 004
004 Potosi 4587 B03 E 002
005 Caseros 457 B04 B 005
006 Caseros 156 A01 E 005
007 Charcas 258 A02 B 002
008 Charcas 460 A02 E 002
DEUDAS
NRO_CATAST NRO_CUOTA IMPORTE FECHA_PAGO
001 98/01 150 01/01/98
001 98/02 170 31/01/99
001 98/03 160 01/06/98
002 98/01 25 15/01/98
002 98/02 15 01/04/98
002 98/03 23 01/03/99
003 99/01 250 15/01/99
003 99/02 260 15/02/99
004 99/01 14 01/03/99
004 98/02 23 01/04/99
001 98/04 160
005 98/03 77 02/01/98
007 99/07 30 30/09/99
007 99/11 50 30/12/99
008 99/01 110 01/01/99
002 99/05 170
LOCALIDADES
COD_LOC NOMBRE_LOC
5000 Cordoba
5100 La Calera
5200 Malagueo
5149 Cruz del Eje
5300 Los Cocos
VENCIMIENTOS
NRO_CUOTA FECHA_1_V FECHA_2_V
99/01 01/01/99 01/02/99
99/02 01/02/99 01/03/99
99/03 01/03/99 01/04/99
99/04 01/04/99 01/05/99
Necesidades a resolver:
1.- Donde estan ubicados los inmuebles del contribuyente 002?.
2.- Seleccionar todas las Iilas y columnas de la tabla CONTRIBUYENTES.
3.- Seleccionar 2 columnas a eleccion de la tabla INMUEBLES.
4.- Mostrar los nombres de los contribuyentes que viven en Alta Cordoba.
/SSO - Tcncas Frgramacn J
104
5.- Cuantos inmuebles tiene la Zona A01?.
.- Determinar el total de la deuda del inmueble cuyo Nro. catastral es 002.
7.- Determinar la cantidad de Iilas en la tabla DEUDAS.
8.- Mostrar las deudas cuyo importe sea mayor a $25 y menor a $170.
9.- Mostrar los numeros de cuotas cuyo valor supere los $110.
1.-De los importes de la tabla DEUDAS seleccionar el mayor, el menor y
el promedio.
11.-Mostrar los numeros catastrales y los numeros de cuotas de los que se
pagaron en 1999, ordenado por numero de cuota en Iorma descendente.
12.-Mostrar la suma de los importes que se abonaron en el `99.
13.-Cuales son los numeros de contribuyente cuyos inmuebles estan en la
zona B03 y que son del tipo B?.
14.-Cual es el promedio de los impuestos que paga el inmueble cuyo
numero catastral es 007?.
15.-Cuantas cuotas lleva pagadas el inmueble cuyo numero catastral es
003?.
1.-Mostrar la tabla DEUDAS, ordenada por numero Catastral ascendente e
importe descendente (en Iorma simultanea).
17.-Mostrar 'sin repetir los distintos numeros catastrales registrados en la
tabla DEUDAS.
18.-Cual es el total de lo pagado en la tabla DEUDAS?.
19.-Listar el numero de cuota y el 10 de su importe de aquellas que se
pagaron en el ao 1999, ordenado el resultado por numero de cuota.
2.-Mostrar las Iechas de pago de los inmuebles con numero Catastral 001,
003,007 y 008.
21.-Seleccionar nombre y direccion de los contribuyentes de inmuebles en
la zona A01.
22.-Cual es el importe promedio de las cuotas pagadas de cada inmueble?.
23.-Listar numero catastral y ubicacion de los inmuebles que son poseidos
por contribuyentes que viven en la ciudad de 'Cruz del Eje.
24.-Listar el numero catastral de cada uno de los inmuebles de tipo
'Baldio(tipo 'B), el domicilio y ciudad de su propietario, ordenado
por Localidad y Domicilio del contribuyente.
25.-Seleccionar todos los datos de los inmuebles que deben abonar en la
cuota '99/01 un importe superior a $56 y menor que $100.
/.S.S.O. - Tcncas Frgramacn J
105
2.-Listar los nombres y direccion de los contribuyentes y numero catastral
de las propiedades de aquellos contribuyentes que adeudan alguna cuota
de alguno de los inmuebles (Iecha de pago en blanco).
27.-Seleccionar: numero catastral, nombre de propietario y Iecha de pago de
aquellos inmuebles que abonaron la cuota '99/01 con mas de dos dias
de retraso despues del 2do vencimiento.
28.-Mostrar el promedio de los importes de la cuota 99/03 para los
inmuebles de la zona B04.
29.-Listar los numeros catastrales y ubicacion de los inmuebles del
contribuyente 'Minetti, Juan en los que paga, para la cuota '99/02,
mas de $105.
3.-Cual es el total de las cuotas pagas para todos sus inmuebles en el ao
1999 por el contribuyente 'Gamma S.A.?.
Subconsultas
Una subconsulta es una consulta que se escribe dentro del WHERE o del
HAVING de otra consulta, segun se quiera condicionar a las Iilas de la tabla
o a los grupos resultantes de la consulta principal.
Una caracteristica importante de las subconsultas es que el resultado que
devuelven es utilizado para las comparaciones internas de la consulta
principal.
Por ejemplo, en solicitudes como las siguientes, pueden ser utiles:
N Obtener los datos del alumno del ISSD que tiene mejor promedio en
examenes Iinales.
N Mostrar los datos del alumno mas joven del ISSD.
N Quienes son los alumnos que ya aprobaron todas las asignaturas de la
carrera de Analista Programador?.
N Listar los alumnos que aun no rindieron materias en el corriente ao.
N Mostrar el apellido de los alumnos ingresantes que se inscribieron en la
ultima Iecha permitida.
Actualmente, hay usuarios de bases de datos que preIieren prescindir de las
subconsultas, debiendo para ello realizar 2 (dos) consultas. Con la primera
generan los resultados y los guardan en una relacion temporal, con la
segunda comparan datos contra dicha relacion temporal. La decision de no
trabajar con subconsultas se basa en la demora que puede producir una
orden de ese tipo.
Al trabajar con subconsultas, debemos tener en cuenta las siguientes
consideraciones:
/SSO - Tcncas Frgramacn J
106
N Siempre deben escribirse entre parentesis.
N No podemos incluir la clausula ORDER BY dentro de ellas.
N Tampoco se puede incluir la sentencia UNION dentro de la subconsulta.
N La subconsulta siempre debe estar a la derecha de la expresion, excepto
en el Test de Existencia donde no hay expresion.
N Puede haber mas de una subconsulta en una misma consulta, es cuestion
de utilizar correctamente los operadores OR y AND.
N Una subconsulta puede incluir en su WHERE o HAVING a otra
subconsulta y asi sucesivamente. El SQL estandar no Iija limites para el
anidamiento de subconsultas, pero incrementa la complejidad de
comprension y, lo que es peor, consume mas tiempo.
Observemos la sintaxis de una consulta que contiene una subconsulta.
Figura 24: sintaxis de
la sentencia SELEC1
con subconsultas.
consulta principal WHERE test de subconsulta
HAVING
atributo
,
`
atributo
,
OR
AND
WHERE
( SELECT
ALL
DISTINCT
FROM tabla
,
condicin de bsqueda
GROUP BY
HAVING condicin del grupo
,
)
/.S.S.O. - Tcncas Frgramacn J
107
Condiciones de bsqueda en subconsuItas
Asi como en las consultas podemos trabajar con determinados test, que
estaban agrupados bajo el titulo 'Condiciones de busqueda en consultas, en
las subconsultas debemos utilizar los siguientes:
a) Comparacion
b) Pertenencia a conjunto
c) CuantiIicados
d) Existencia
Vean que los tests de valor NULL y el de rango BETWEEN, no pueden ser
utilizados en subconsultas, pero se agregan el de existencia y los
cuantiIicados.
DeIiniremos a continuacion cada uno de estos tests:
N 1est de comparacin: los signos que se pueden aprovechar, como en las
consultas, son:
igual
menor
mayor ~
distinto ~ o NOT
menor o igual
mayor o igual ~
La condicion para utilizar este test es que la subconsulta devuelva una sola
Iila y una columna, de lo contrario marcara error.
Por ejemplo, la siguiente subconsulta es valida en este test:
Ejemplo 30:
SELECT codart,descrip,precio
FROM articulos
WHERE descrip LIKE 'CUCH' AND
precio > (SELECT AVG(precio)
FROM articulos)
En la subconsulta estamos seguros que devuelve una Iila, el promedio, y una
columna, porque el AVG es la unica columna seleccionada.
Como resultado mostrara los datos de los articulos que comiencen la
descripcion con las letras 'CUCH y que ademas posean un precio superior
al promedio de todos los precios de la tabla articulos.
Como notaran, en la consulta principal y su subconsulta, trabajan con la
misma tabla. Tambien se podrian incluir alias de tablas en uno o en los dos
SELECT. El resultado seria el mismo.
N 1est de pertenencia a conjunto: al igual que en las consultas, la clausula
a utilizar es IN y podemos incluir su negacion NOT IN.
/SSO - Tcncas Frgramacn J
108
Permite comprobar si un valor de dato de la consulta es igual a algun valor
en la columna de resultado de la subconsulta.
La condicion para utilizar este test es que la subconsulta devuelva una sola
columna, mientras que el numero de Iilas puede ser cualquiera.
Ejemplo 31:
SELECT a.codart,a.descrip,a.precio
FROM articulos a
WHERE a.codart NOT IN (SELECT c.codart
FROM cuerpofact c)
En la subconsulta seran seleccionados todos los codigos de articulos que
han sido vendidos o Iacturados en algun momento. La consulta principal
buscara, en la tabla articulos, los codigos que no esten en el resultado de la
subconsulta.
El trabajo se realiza teniendo en cuenta una tabla en la consulta principal y
otra en la subconsulta.
En el proximo ejemplo vamos a agregar una tabla mas y algunas
condiciones.
Ejemplo 32:
1 SELECT v.apellido,v.nombres
2 FROM vendedores v
3 WHERE v.dni NOT IN (SELECT e.dnivend
4 FROM encfactura e, clientes c
5 WHERE e.nrocli c.nrocli AND
6 UPPER(c.apellido) 'ALVAREZ' AND
7 e.fechfac > '01-SEP-99')
8 ORDER BY v.apellido, v.nombres
Descripcion de la sentencia.
N Lineas 1-2. Seleccionamos apellido v nombres de los vendedores.
N Linea 3. Condicion de que el DNI del vendedor no este en el confunto
de DNI resultado de la subconsulta.
N Linea 4. Especificacion de 2 (dos) tablas para que trabafe la
subconsulta.
N Linea 5. Emparefamiento de las tablas de la subconsulta
N Linea 6. Jerifica que el apellido en mavusculas, por la funcion
UPPER( ), sea 'ALJAREZ`.
N Linea 7. En la subconsulta solo seran tenidas en cuenta las ventas
reali:adas despues del 1 de setiembre de 1999.
N Linea 8. Ordena el resultado de la consulta, no de la subconsulta, por
el apellido v nombres del vendedor.
El resultado de la sentencia, del ejemplo 32, estara Iormado por el apellido y
nombres de los vendedores que no le han vendido al cliente Alvarez despues
del 1 de setiembre de 1999. Dicho resultado aparecera ordenado por
apellido y nombres.
/.S.S.O. - Tcncas Frgramacn J
109
Notaran que la resolucion tiene 2 (dos) partes claramente identiIicables:
N La subconsulta que obtiene un conjunto de Iilas de los DNI de
vendedores que si le vendieron a Alvarez.
N La consulta que se encarga de veriIicar cuales son los DNI de
vendedores que no estan en el conjunto obtenido en la subconsulta.
N 1est cuantificado: este permite el uso de 2 (dos) clausulas, que son ANY
y ALL, conjuntamente con los operadores del test de comparacion ( , , ~,
~ o NOT , , ~ ).
Tanto ANY como ALL exigen que la subconsulta devuelva una sola
columna, mientras que el numero de Iilas puede ser cualquiera.
Las siguientes subconsultas son validas en este test:
Ejemplo 33: (con ANY-algn)
SELECT c.codciud,c.ciudad,p.descrip
FROM provincia p, ciudades c
WHERE c.codprov p.codprov AND
c.codciud ANY (SELECT cl.codciud
FROM clientes cl)
Esta consulta mostrara el codigo de ciudad, descripcion de la ciudad y la
descripcion de la provincia a la que pertenece la ciudad, pero solo de
aquellas ciudades donde vive por lo menos un cliente de la empresa.
Ejemplo 34: (con ALL-todos)
SELECT a.descrip,a.precio
FROM articulo a
WHERE a.stock0 AND
a.precio > ALL (SELECT c.precio
FROM cuerpofact c)
Esta orden visualizara las descripciones y precios de los articulos con stock
en cero, mientras el precio sea superior a todos los precios de los articulos
vendidos.
N 1est de existencia: en el la clausula a utilizar es EXISTS y podemos
incluir su negacion NOT EXISTS.
La subconsulta puede devolver muchas Iilas y muchas columnas, a
diIerencia de los restantes test en subconsultas, porque lo que interesa es
saber si la subconsulta devuelve algo sin importar el valor que entregue.
Por ejemplo, si necesitamos listar la descripcion de los articulos que alguna
vez se vendieron en cantidades superiores a 10 unidades, la orden necesaria
seria:
/SSO - Tcncas Frgramacn J
110
Ejemplo 35:
SELECT a.codart,a.descrip,a.precio
FROM articulos a
WHERE EXISTS (SELECT `
FROM cuerpofact c
WHERE c.codart a.codart AND
cantidad > 10)
En esta orden podran observar que dentro de la subconsulta participa un
atributo de la consulta principal, es el caso de a.codart. A esa situacion se la
conoce en la bibliograIia como 'reIerencia externa, donde el DBMS
ejecutara la subconsulta tantas veces como articulos distintos haya en la
consulta principal. Obviamente que ese trabajo permanente, que debe
realizar el DBMS, hace que el sistema destine demasiados recursos a la
consulta y baje el rendimiento general. Piensen en tablas que superan el
millon de tuplas y asi se imaginaran lo que les digo.
Ademas, en la lista de seleccion, Iigura solo el asterisco, es decir que
selecciona todas las columnas de la tabla CUERPOEACT, aspecto
absolutamente distinto al resto de los tests.
Otra diIerencia, respecto de los otros tests, es que no debe especiIicarse
atributo alguno, tampoco un operador, antes de la palabra EXISTS o NOT
EXISTS.
Ejercicios de autoevaluacion Consultas
y Subconsultas
La guarderia 'El Remolon maneja inIormacion sobre los
alumnos, los docentes, los padres de los alumnos, los
cuidados que requieren los chicos y los pagos de las
cuotas por parte de los padres.
Un padre puede tener mas de un hijo en la guarderia y
debe pagar una cuota por cada uno de ellos.
Un alumno puede necesitar mas de un cuidado (por ej. una comida especial,
un remedio a cierta hora, etc.).
La estructura de las tablas es la siguiente (PK Clave Primaria, EK Clave
Eoranea).
/.S.S.O. - Tcncas Frgramacn J
111
Alumnos
PK DNIAlu
Nombre
Apellido
EecNac
DNIPad EK
EechaIng
EechaEgr
Padres
PK DNIPad
Nombre
Apellido
Domicilio
Barrio
TeleIono
Deuda
PagosEfectuados
PK DNIAlu EK
PK Ao
PK Mes
Importe
EechPag
CuidadosxAlumno
PK DNIAlu EK
PK CodCui EK
EecIni
EecEin
Erecuen
Hora
Cuidados
PK CodCui
Descrip
Docentes
PK DNIDoc
Nombre
Apellido
Domici
TeleIono
Salas
PK Color
DNIDoc EK
PK Ao
AlumnosxSala
PK Color EK
PK DNIAlu EK
PK Ao
PROBLEMAS
1.- Mostrar nombre y apellido de los alumnos, junto a todas las
descripciones de los cuidados que se deben tener con cada uno de
ellos. Ordenar el resultado por apellido.
2.- Mostrar los apellidos y nombres de los docentes que trabajaron en
la sala ROSA.
3.- Obtener los apellidos y nombres de los alumnos cuyos padres
tienen deuda superior a $100.-
4.- Determinar el monto total pagado por cada padre en el transcurso
del corriente ao, mostrando tambien todos los datos del padre.
5.- Mostrar los datos del ultimo nio/a (nombre, apellido, Iecha de
nacimiento) que ingreso a la Guarderia, con el teleIono del padre.
.- Mostrar apellido, nombre de los alumnos que duraron por lo
menos 180 dias en la Guarderia.
7.- Listar los alumnos (apellido, nombre y Iecha de ingreso) que
hayan pagado mas de 10 cuotas en el ao 1998.
8.- Obtener el color de las salas que tengan entre 15 y 20 alumnos.
9.- Listar apellido y nombres de los docentes que tienen mas de 20
alumnos en el ao1999.
1.-Obtener los numeros de documento y nombres de los alumnos,
cuyo apellido comience con AB.
/SSO - Tcncas Frgramacn J
112
Actualizacion de datos
Como lenguaje de manipulacion que es SQL, brinda la posibilidad de
actualizar los datos almacenados en la base de datos.
Cuando decimos actualizar datos, hacemos reIerencia a las tareas de:
N Insertar o agregar tuplas en las tablas.
N ModiIicar valores de atributos almacenados.
N Eliminar tuplas existentes en las tablas.
El DBMS antes de ejecutar alguna de las ordenes de actualizacion debera
revisar las reglas de integridad, para mantener permanentemente la
integridad de la base de datos.
Insercin de tuplas
El lenguaje SQL permite la insercion de nuevas tuplas en las tablas, a traves
de la sentencia INSERT, la cual posee la siguiente sintaxis:
La insercion puede hacerse de 2 (dos) maneras minimamente: de a una Iila
por orden o lo que se llama insercion multiIilas.
A continuacion deIiniremos y ejempliIicaremos ambas Iormas de trabajo.
Insercin de una tupIa
Cuando es necesario agregar una nueva entidad persona, articulo, etc.- se
utiliza la sentencia INSERT de la siguiente manera:
Figura 25: sintaxis de
la sentencia INSER1.
( atributo )
,
INSERT INTO nombre-tabla
VALUES (
constante
variable
NULL
,
)
consulta
/.S.S.O. - Tcncas Frgramacn J
113
Ejemplo 36:
INSERT INTO articulos (codart,descrip,precio,stock)
VALUES ('1032890', 'Cinto cuero 95 cm.',26.90,7)
La instruccion anterior supone que:
N Por lo menos en la tabla articulos, existen los atributos para el codigo,
descripcion, precio y stock de cada item. A cada una de esas columnas
se le asigna el valor indicado entre parentesis de la clausula VALUES.
N Tambien entendemos que los tipos de datos deIinidos en la estructura
soportan los valores insertados.
N Ademas, el codigo de articulo no existe, de lo contrario el DBMS lo
debe rechazar.
Otra insercion, en la misma tabla, puede ser la siguiente:
Ejemplo 37:
INSERT INTO articulos (codart,descrip,precio)
VALUES ('3956007', 'Camisa microfibra',37.40)
La situacion es distinta, porque un atributo, el stock, no Iue nombrado en la
lista de atributos y tampoco se especiIico la cantidad de camisas. Por lo
tanto, el stock asumira valor desconocido NULL para ese articulo.
Esa es una manera de especiIicar un valor NULL, pero tambien es posible
expresar el valor NULL de manera explicita como se muestra en el ejemplo
38.
Ejemplo 38:
INSERT INTO clientes
VALUES (457,'20-17980341-3','Gaitn','Walter',NULL,
'Repblica de Siria 824',5000)
La condicion de IVA es lo que no se conoce del nuevo cliente y veran que el
valor NULL no va entre comillas de ningun tipo.
Otro detalle de la orden del ejemplo anterior, es que no se nombraron los
atributos de la tabla CLIENTES. Ante esa orden, el DBMS asume que
deseamos ingresar valores a todos los atributos y si no asignamos
explicitamente el valor a alguno de ellos nos rechazara la orden, con el
mensaje de error correspondiente.
Insercin de mItipIes tupIas
Este tipo de Iorma de trabajo se utiliza normalmente cuando deseamos
copiar el contenido de una tabla en otra o armar con datos de distintas tablas
una Iila en otra tabla.
La sentencia INSERT no lleva la clausula VALUES y es necesario escribir
la consulta teniendo en cuenta estas restricciones:
N La consulta no puede estar ordenada, con la clausula ORDER BY.
Relacin
EOX aconseja el uso de la
sentencia INSERT de SQL,
para asegurar la integridad de la
base de datos. A eso lo pueden
ver en el HELP del producto.
/SSO - Tcncas Frgramacn J
114
N La consulta debe entregar valores para cada atributo citado en el
INSERT o para la tabla completa, si no hay especiIicacion de los
atributos.
N Los tipos de datos de la consulta deben ser compatibles con la tabla
destino.
Por ejemplo, deseamos copiar las Iilas de la tabla encabezado de Iactura
(ENCEACTURA) a una tabla que contendra un historico.
Ejemplo 39:
INSERT INTO historico
SELECT `
FROM encfactura
WHERE fechfac < '01-1AN-90'
Esta insercion no sabemos cuantas tuplas agregara en la tabla HISTORICO.
Seran todas las que cumplan la condicion especiIicada en el WHERE de la
consulta, Iacturas anteriores al 1 de enero de 1990.
Productos, como Oracle, presentan una opcion para trabajar con variables
especiIicadas entre los parentesis del VALUES; pero el SQL estandar no
Iija caracteristicas para esa manera de trabajar.
Modificacin de datos
La dinamica de una base de datos obliga a la permanente modiIicacion de
valores almacenados. Por ello SQL oIrece la sentencia UPDATE para lograr
tal objetivo.
La clausula SET Iija los valores para los atributos y WHERE condiciona
cuales seran las Iilas involucradas en el proceso.
Figura 2: sintaxis de
la sentencia UPDA1E.
SE1 atributo expresin
UPDATE nombre-tabla
,
WHERE condicin de bsqueda
OR
AND
Relacin
En EOX, la insercion multiIila
es posible lograrla con la orden
APPEND EROM tabla y con
las condiciones necesarias en la
clausula EOR.
/.S.S.O. - Tcncas Frgramacn J
115
Es importante aclarar que el DBMS modiIicara el contenido de la tabla si el
usuario tiene el derecho correspondiente.
La instruccion UPDATE permite modiIicar uno o mas atributos a la vez,
como tambien una o mas Iilas en la misma sentencia.
Modificacin de una tupIa
Para asegurar la actualizacion de una sola Iila en la base de datos, sera
necesario incluir en la condicion, a la clave primaria de la tabla a modiIicar
o algun otro dato unico.
Ejemplo 40:
UPDATE articulos
SET precio 39.85, stock 3
WHERE codart '3956007'
Actualizara los valores de dos atributos, pero de una misma Iila, la del
articulo cuyo codigo es 3956007.
Modificacin de ms de una tupIa
En la clausula WHERE pueden aparecer una o mas condiciones y esas
condiciones pueden escribirse con cualquiera de las condiciones de
busqueda estudiadas en las consultas.
De esa manera podemos lograr la modiIicacion de mas de una Iila, ademas
de la posibilidad de cambiar uno o mas atributos.
Ejemplo 41:
UPDATE articulos
SET stock stock - 1
WHERE codart IN ('3956007', '2543170','3907482','3951487')
El stock sera reducido en una unidad, de los articulos cuyos codigos estan
indicados en la condicion con pertenencia a conjunto.
Modificacin de todas Ias tupIas
La clausula WHERE no debe aparecer en la sentencia UPDATE, de la
siguiente manera:
Ejemplo 42:
UPDATE articulos
SET precio precio ` 1.15
Todos los precios de los articulos se incrementaran en un 15, no hay
condicion para este proceso.
/SSO - Tcncas Frgramacn J
116
Modificacin con consuIta
Una posible condicion en WHERE, puede basarse en el resultado de una
consulta.
Por ejemplo:
Ejemplo 43:
UPDATE articulos
SET precio precio ` 0.95
WHERE codart IN (SELECT DISTINCT codart
FROM cuerpofact
WHERE cantidad > 5)
Esta orden disminuira el precio en un 5, para todos los articulos que estan
presentes en la columna que entrega la consulta.
Por su lado, la consulta devuelve, de la tabla CUERPOEACT, los codigos
de articulo que han sido vendidos con cantidades superiores a 5 unidades.
La clausula DISTINCT asegura que los codigos en la consulta no esten
repetidos, porque de lo contrario se modiIicaria varias veces el precio de un
mismo articulo.
Eliminacin de tuplas
Cuando una entidad no es necesaria en el mundo real, debe ser eliminada de
la tabla que la contiene. Por ello el borrado de Iilas es posible con SQL y se
logra usando la orden DELETE.
Como en todas las sentencias SQL, el usuario podra eliminar tuplas si tiene
privilegios para ello de lo contrario el DBMS devuelve error.
Figura 27: sintaxis de
la sentencia DELE1E.
WHERE condicin de bsqueda
DELETE FROM nombre-tabla
OR
AND
/.S.S.O. - Tcncas Frgramacn J
117
EIiminacin de una tupIa
Para suprimir una sola Iila en la base de datos, como en la modiIicacion,
sera necesario incluir en la condicion, a la clave primaria de la tabla u otro
dato con valor unico.
Ejemplo 44:
DELETE FROM clientes
WHERE cuit '20-17980341-3'
La sentencia eliminara la Iila que contiene al cliente cuyo numero de CUIT
es el citado en la condicion.
EIiminacin de ms de una tupIa
La supresion de mas de una Iila en la base de datos, se logra utilizando
correctamente la clausula WHERE.
Por ejemplo, para eliminar las tuplas de las Iacturas de tipo 'B' deberiamos
borrarlas en el encabezamiento y en el cuerpo de las Iacturas. El lenguaje
SQL, trabajando conjuntamente con el DBMS, permite la posibilidad de
eliminar en el encabezamiento y que las Iilas del cuerpo sean borradas
automaticamente. Detallaremos este proceso unas paginas mas adelante.
Ejemplo 45:
DELETE FROM encfactura
WHERE tipofac 'B'
EIiminacin de todas Ias tupIas
Cuando no especiIicamos la clausula WHERE, el DBMS asume que
deseamos suprimir todas las Iilas de la tabla citada en el EROM.
Ejemplo 46:
DELETE FROM vendedores
Si bien es delicada la aplicacion de esta sentencia, porque intenta borrar
todos los vendedores, el DBMS brinda la oportunidad de deshacer este tipo
de cambios en la base de datos y todas las posibles acciones que surgen al
utilizar el lenguaje DML.
A este tema lo trataremos junto al concepto de transacciones.
EIiminacin de tupIas con consuIta
La eliminacion de Iilas se puede realizar segun los valores que devuelve una
subconsulta.
/SSO - Tcncas Frgramacn J
118
Ejemplo 47:
DELETE FROM encfactura
WHERE EXISTS
(SELECT FROM historico
WHERE htipofac tipofac
AND hnrofac nrofac)
La consulta planteada realiza una reIerencia externa hacia la tabla
ENCEACTURA citada en el EROM de la orden DELETE.
Es decir que, si existen algunas Iacturas ya almacenadas en la tabla
HISTORICO, seran eliminadas en la tabla ENCEACTURA.
Reglas de integridad en SQL
Las reglas de integridad del modelo relacional ya Iueron deIinidas y
ejempliIicadas en la Unidad II, solo recordaremos la clasiIicacion:
N Reglas comerciales o especficas: dependen de cada organizacion.
N Reglas generales de integridad:
S De las entidades. ningun componente de la clave primaria puede
asumir valor desconocido, NULL en SQL.
S Referencial. mantener la concordancia de valores de clave Ioranea y
clave primaria reIerenciada.
El SQL estandar, y tambien los productos comerciales, permite deIinir estas
reglas en el momento de crear la base de datos y que hacer en la situacion de
que una aplicacion o usuario intente violar una de las reglas generales o las
reglas comerciales. De esta manera, el DBMS conoce o esta 'educado para
responder ante situaciones anomalas.
A continuacion analizaremos posibles intentos que se presentan en el uso de
las sentencias de actualizacion de datos lenguaje DDL- y que el DBMS
debe controlar:
ControIes en insercin de tupIas
La insercion de tuplas debe ser controlada porque puede producir
inconvenientes, aunque ese control dependera en gran medida del diseo de
la base de datos que realizaron los proIesionales de la empresa.
Si el modelo Iue correctamente diseado implica que el DBMS controlara:
N Duplicacion de valor de la clave primaria. por deIinicion de la
propiedad teorica y en los productos, la clave primaria nunca debe
repetirse. Desde 1988 SQL, a partir de la implementacion del tema en
DB2, especiIica que al declarar la clave primaria en una tabla, el DBMS
controla que no se duplique. Eso brinda tranquilidad al DBA y al DA
porque saben que bajo ninguna circunstancia esa regla sera violada.
/.S.S.O. - Tcncas Frgramacn J
119
Obviamente que los programadores de aplicaciones tambien son
Iavorecidos ya que es un control menos a incluir en los codigos.
N Jalor desconocido para la clave primaria. la regla de integridad de las
entidades, especiIica que nunca puede ser desconocido el valor de clave
primaria. Desde la creacion y deIinicion de la tablas, el DBMS veriIica
que nunca un atributo de la clave primaria sea NULL.
N Asignar valor duplicado a atributo unico. un atributo puede ser
deIinido como unico en la tabla, aunque el mismo no sea clave primaria.
Por ejemplo: si en la tabla ALUMNOS la clave primaria es el LEGAJO,
el DBA puede deIinir como unico al dato numero de documento. Ello
asegura que ante cualquier intento de duplicar el numero, el DBMS
devolvera un error.
N Jalor NULL en atributos definidos NOT NULL. el apellido y los
nombres de un alumno no pueden ser desconocidos, aunque no es clave
primaria. Las implementaciones de SQL tienen en cuenta esta
posibilidad para que el DBA pueda deIinir la restriccion y que el DBMS
asegure el cumplimiento.
N Agregar valor de clave foranea sin concordancia. este posible intento
de violar la regla de integridad reIerencial sera rechazado por el DBMS.
No es necesario que el programador controle: la venta de un articulo
que no Iigura en la tabla ARTICULOS, vender mercaderia a un cliente
que no existe o que un alumno intente rendir una materia inexistente en
el plan de estudios. Esta caracteristica brinda beneIicios a los DBMS
relacionales ante otros sistemas de gestion de datos.
N Insertar un valor fuera del dominio definido. si la tabla es creada con
chequeos de valores de cada atributo y con un tipo de dato especiIico,
no sera Iactible que el DBMS deje pasar una insercion con valores Iuera
de esas caracteristicas. Por ejemplo: en las tarjetas de credito existe un
limite de credito, si el atributo que almacenara el limite es deIinido para
que acepte solo valores superiores a $100.- e inIeriores a $500.-, el
DBMS aceptara inserciones de valores en ese rango y, por supuesto,
debe ser numerico.
ControIes en modificacin de vaIores
En las modiIicaciones tambien puede haber intentos de violar las reglas
deIinidas en la base de datos y que, si el diseo esta bien logrado, el DBMS
debera encargarse de rechazar.
Con la sentencia UPDATE pueden presentarse casos muy semejantes a los
de insercion de tuplas, algunos de ellos son:
N Duplicacion de valor de la clave primaria. no sera posible duplicar el
valor de clave primaria en la modiIicacion de valores. Realmente se
debe analizar si en una aplicacion puede permitir el cambio del valor de
/SSO - Tcncas Frgramacn J
120
alguno de los atributos de la clave primaria. Si es permitido estaremos
seguros que el DBMS no dejara pasar una duplicacion.
N Jalor desconocido para la clave primaria. en la actualizacion, el
DBMS tambien veriIica que nunca un atributo de la clave primaria sea
NULL, es decir que mantendra la regla de integridad de las entidades.
N Cambiar por valor duplicado a atributo unico. el atributo deIinido
como unico en la tabla, debera mantener esa caracteristica ante
cualquier intento de alterarla.
N Jalor NULL en atributos definidos NOT NULL. si un atributo contiene
un valor permitido y alguna aplicacion intenta cambiarlo por NULL,
cuando la columna Iue deIinida NOT NULL, el DBMS asegurara el
cumplimiento de la restriccion.
N Cambiar valor de clave foranea. cuando alguna aplicacion intente
modiIicar un valor de clave Ioranea, lo primero que debe hacer el
DBMS es veriIicar que el nuevo valor haga reIerencia a un valor de
clave primaria existente en la tabla reIerenciada. Si eso no se cumple, la
clave Ioranea debe ser NULL, no hay otra opcion.
N Cambiar el valor de un atributo fuera del dominio definido. si el limite
de credito de la tarjeta contiene un valor valido y existe el intento de
cambiarlo por un valor Iuera de rango deIinido o con un tipo de dato
incorrecto, el DBMS debe indicar el error y abortar la actualizacion.
N Alterar el valor de clave primaria referenciada. que debe hacer el
DBMS ante el pedido de cambiar el numero de legajo de un alumno que
posee materias rendidas y cuotas abonadas?. Seria muy peligroso que se
haga el cambio del legajo, ya que las claves ajenas de las tablas que
contienen examenes y cuotas quedarian huerIanas, sin concordancia con
clave primaria. Para evitar situaciones indeseables como estas, el DBA
con el DA deben deIinir que acciones debe seguir el DBMS ante un
intento de ese tipo.
ControI en eIiminacin de tupIas
La orden DELETE tambien puede presentar una situacion delicada, muy
parecida a la ultima de las modiIicaciones, que es:
N Eliminar una tupla que es referenciada por claves foraneas. si es
eliminado un cliente o un articulo reIerenciado por la tabla de Iacturas,
se puede producir un estado con Ialta de integridad de datos y perdida
posible de inIormacion. En esta situacion, el DBMS tambien debe
saber que hacer ante el pedido de borrado de tuplas padres que tienen
hijos.
/.S.S.O. - Tcncas Frgramacn J
121
Procesamiento de transacciones
Cuando en la empresa hay una venta, se desencadenan ciertas acciones
sobre los archivos de datos, por ejemplo:
N ModiIicar el stock de los articulos, segun las cantidades vendidas de
cada uno en el pedido en cuestion.
N Actualizar el monto total Iacturado por el vendedor, para posteriormente
calcular las comisiones de ventas.
N Registrar la venta con: numero de cliente, Iecha de la venta, etc.
Estas acciones deben realizarse todas a la vez, no puede ser llevada a cabo
una y las otras no. Si modiIico el stock no puedo dejar de realizar el resto de
las acciones, de lo contrario el estado de la base de datos quedaria
indeseable.
A eso se le llama transaccion, que podemos deIinir como: secuencia de
sentencias SQL que deben Iormar una unidad de trabajo y ejecutarse
completamente para no caer en inconsistencia de datos.
El compromiso que asume el DBMS es 'todo o nada, signiIica que se
ejecutan todas las sentencias que conIorman la transaccion o no se ejecuta
ninguna.
Una transaccion puede no ser ejecutada completamente cuando se produce:
N Ealla del hardware
N Corte de energia en el equipamiento
N Error en la aplicacion
N Error en las acciones del usuario
N Interbloqueo o deadlock entre transacciones
Sentencia COMMIT
Cuando deseamos que los cambios sean trasladados deIinitivamente a la
base de datos, debemos utilizar la sentencia COMMIT.
La sentencia COMMIT es ejecutada cuando no hubo problemas durante la
transaccion y consideramos que todo esta correcto.
SigniIica que si hubo inserciones, eliminaciones y modiIicaciones, los
cambios producidos seran almacenados en Iorma persistente en la base de
datos. Por lo tanto, todas las sentencias de actualizacion de datos vistas
hasta el momento INSERT, DELETE, UPDATE- deben ser conIirmadas
para que realmente tengan eIecto.
Mientras el usuario no ejecute esta orden, el resto de los usuarios no
percibiran las modiIicaciones producidas.
Por supuesto que, una vez ejecutada COMMIT, si queremos volver la base
de datos a un estado anterior a la transaccion ejecutada y conIirmada, no nos
queda otra salida que recurrir a los respaldos o backup de los datos.
Glosario
Un interbloqueo o deadlock es
una situacion controlable en un
sistema multiusuario, con
accesos concurrentes, donde
mas de una transaccion queda
en espera de datos que estan
siendo utilizados por otras
transacciones. Las
transacciones mantienen
bloqueados ciertos datos, que
otras necesitan, hasta que
a r u
/SSO - Tcncas Frgramacn J
122
Esta es una sentencia incluida en el SQL estandar y en los productos
comerciales, ya que brinda importantes beneIicios.
Sentencia ROLLBACK
Ahora bien, para conIirmar los cambios utilizamos COMMIT. Cuando
necesitamos volver atras una transaccion necesitamos usar la sentencia
ROLLBACK.
Esta orden le indica al DBMS que descarte todos los cambios producidos
por la transaccion.
Puede suceder que la gerencia nos solicite incrementar todos los precios de
los articulos en un 5. Escribimos las ordenes necesarias y ejecutamos la
transaccion. Sin darnos cuenta, la transaccion se ejecuto con un error en el
calculo. Es imprescindible entonces volver atras todo con ROLLBACK y
comenzar de nuevo. Cambiamos la orden en la transaccion y volvemos a
ejecutar.
Hasta que no haya un COMMIT podemos hacer ROLLBACK las veces que
necesitemos; no hay limite.
Cuando se produce un corte de luz o una Ialla en el hardware, seguramente
no alcanzamos a escribir el COMMIT. Por lo tanto, hay un ROLLBACK
implicito ya que, solucionado el problema Iisico, nos permite encontrar a la
base de datos en el estado anterior al comienzo de la ejecucion de la
transaccion.
Para lograr este mecanismo, los DBMS mantienen copias de las tuplas
modiIicadas en el registro de transacciones. Cuando es ejecutado el
ROLLBACK toma de dichos registros el estado anterior de las tuplas y
restaura la base de datos.
Esta Iorma de trabajar agrega demora en el procesamiento, porque el DBMS
debe dedicar algun tiempo para mantener el registro de transacciones, pero
las ventajas minimizan tal eIecto.
Puntos de guarda
Algunos productos, como Sybase, SQL Server y Oracle, trabajan con puntos
de guarda que son estados intermedios de la transaccion. Es decir que
ejecutada cierta parte de la transaccion podemos almacenar, bajo un nombre
cualquiera, el estado de la base de datos hasta ese momento.
De esta manera, si algo Ialla o cometemos un error, despues del punto de
guarda, podemos hacer un ROLLBACK a ese punto y no volver al principio
necesariamente. El objetivo es no perder todo el tiempo invertido sino
aprovechar lo que ya hizo parte de la transaccion.
/.S.S.O. - Tcncas Frgramacn J
123
El SQL estandar no especiIica este tipo de estrategias; por ello cada
producto lo implementa a su gusto.
Por ejemplo, Oracle incluye las sentencias:
N SAVEPOINT nombre
N ROLLBACK TO SAVEPOINT nombre
Sybase utiliza:
N SAVE TRANSACTION nombre
N ROLLBACK TRANSACTION nombre
Ademas, Sybase indica el comienzo de una transaccion con BEGIN
TRANSACTION y con COMMIT TRANSACTION indica el Iinal con
exito. La implementacion de comienzo y Iin, hace que toda instruccion que
este Iuera de la transaccion sea autoconIirmada, es decir que se ejecuta y los
cambios van a la base de datos sin hacer COMMIT. Son cambios deIinitivos
y no se pueden deshacer.
En los otros productos una transaccion comienza con la sentencia
inmediatamente posterior a la ejecucion del COMMIT.
Seguridad con SQL
Cada usuario de la base de datos es identiIicado por un nombre, id-usuario,
y tiene su clave personal o contrasea. Eso Iorma parte de la seguridad del
sistema.
Ademas, existe la seguridad respecto a la base de datos y, por ello, el
lenguaje SQL proporciona las sentencias necesarias para que el DBA
implemente un esquema de seguridad a los datos, en un sistema
multiusuario. Esto responde a la preocupacion que debe haber, en una
organizacion, por sus datos.
Los objetos que normalmente reciben proteccion son las tablas y las vistas,
pero no son los unicos, pues los procedimientos almacenados y espacios
Iisicos de tablas tambien pueden protegerse.
Con los usuarios es muy comun que se conIormen grupos, que tienen
necesidades muy semejantes. El grupo puede tener un solo id-usuario para
todos los usuarios, lo cual es simple pero el DBMS no distingue quien esta
trabajando; o asignar distintos id-usuario, lo que permite la distincion pero
es mas lento y tedioso.
Una vez decidido esto, el DBA asigna privilegios, que no son mas que
derechos a ejecutar sentencias SQL sobre objetos de la base de datos.
Por su parte, el DBA tendra los siguientes privilegios:
N Creacion de usuarios.
/SSO - Tcncas Frgramacn J
124
N Eliminacion de usuarios.
N Resguardo de tablas.
N Etc.
El estandar SQL1 especiIica cuatro privilegios para tablas
N SELECT: con este privilegio el usuario puede consultar la tabla o vista
que se le autoriza.
N INSERT: el usuario podra agregar nuevas tuplas a la tabla o vista.
N DELETE: el usuario puede nombrar la tabla o vista en la clausula
EROM de la eliminacion.
N UPDATE: en este privilegio el usuario puede actualizar o modiIicar una
tabla o vista, o puede tener la restriccion de actualizar determinadas
columnas.
El usuario que crea una tabla se hace acreedor automaticamente de todos los
privilegios sobre dicha tabla.
Ademas, de estos privilegios, los DBMS incluyen otros como: ALTER,
INDEX, EXECUTE, etc., para que los usuarios puedan alterar la deIinicion
de una tabla, crear un archivo indice y ejecutar procedimientos
almacenados en la base de datos.
Asignacin de privilegios
La sentencia de SQL para ceder derechos es GRANT y posee la siguiente
sintaxis:
Figura 31: sintaxis de
la sentencia CRAN1.
GRANT SELECT
INSERT
DELETE
UPDATE
( nombre de columna )
,
,
ALL PRIVILEGES
ON tabla TO id-usuario
PUBLIC WITH GRANT OPTION
/.S.S.O. - Tcncas Frgramacn J
125
La sintaxis del estandar es implementada en algunos productos con el
agregado de la posibilidad de incluir una lista de usuarios, para asignar mas
derechos a la vez.
Ejemplo 60:
GRANT SELECT
ON clientes
TO usuario1
Con esa sentencia, el usuario1, solo podra extraer datos, o solo lectura, de la
tabla clientes.
Ejemplo 61:
GRANT SELECT,INSERT,DELETE
ON clientes
TO usuario2
El usuario2, segun la sentencia, podra extraer, insertar y eliminar tuplas de
la tabla clientes.
Ejemplo 62:
GRANT ALL PRIVILEGES
ON clientes
TO gerente
El usuario cuyo id-usuario es gerente tendra todos los privilegios asignados.
Ejemplo 63:
GRANT SELECT
ON ciudades
TO PUBLIC
La sentencia, del ejemplo 63, brinda a todos los usuarios la posibilidad de
consultar la tabla ciudades.
Ejemplo 64:
GRANT UPDATE (calle,nmero,codciud)
ON sucursal
TO usuario3
El usuario3 podra actualizar o modiIicar solo los atributos calle, numero y
codigo de ciudad de la tabla sucursal.
El propietario de una tabla puede conceder derechos a otros usuarios no
solamente de realizar ciertas acciones, sino tambien de que el usuario pueda
dar derechos a otros mas.
Ejemplo 65:
GRANT SELECT
ON articulos
TO gerente
WITH GRANT OPTION
/SSO - Tcncas Frgramacn J
126
El gerente recibe el derecho de consultar la tabla articulos, pero a la vez el
puede asignar el mismo derecho a otro usuario. Eso se logra con la
incorporacion de la clausula WITH GRANT OPTION.
Retiro de privilegios
Con la sentencia REVOKE un usuario puede quitar o retirar privilegios a
otros usuarios.
La sintaxis de REVOKE es la siguiente:
Con esta sentencia se pueden retirar todos o algunos derechos, a todos o a
algunos usuarios y, como podran observar, a mas de una tabla a la vez.
Ejemplo 66:
REVOKE DELETE,UPDATE
ON articulos
FROM gerente
Esta sentencia retira los derechos de eliminar Iilas y modiIicar datos de la
tabla articulos, al usuario cuyo id-usuario es gerente.
Figura 32: sintaxis de
la sentencia REJOKE.
REVOKE SELECT
INSERT
DELETE
UPDATE
,
ALL PRIVILEGES
ON tabla FROM id-usuario
, PUBLIC
,
/.S.S.O. - Tcncas Frgramacn J
127
Ejemplo 67:
REVOKE ALL PRIVILEGES
ON cuerpofac
FROM usuario1, usuario2
Retira todos los privilegios a los usuarios 1 y 2, sobre la tabla del cuerpo de
la Iactura.
Ejemplo 68:
REVOKE DELETE
ON articulos,clientes
FROM PUBLIC
Quita el privilegio de eliminar Iilas, a todos los usuarios de la base de datos
y el resto de los derechos de los usuarios no se alteran.
Ejemplo 69:
REVOKE ALL PRIVILEGES
ON articulos, clientes
FROM PUBLIC
Esta combinacion de clausulas permite quitar todos los privilegios a todos
los usuarios de la base de datos, pero solo sobre las tablas de articulos y de
clientes.
Ejercicios de autoevaluacion
Resuelve en el equipo cada ejercicio, con las sentencias
necesarias para cumplir lo solicitado.
ES1RUC1URAS DE LAS 1ABLAS
CHOFERES COLECTIV
DNICHOEER Numeric 8 NROCOL Numeric 2
APECHOE Character 15 MARCA Character 10
NOMCHOE Character 20 ASIENTOS Numeric 2
TELEEONO Character 12
DESTINOS
CODDES Numeric 2
DESTINO Character 20
PRECIO Numeric 6 2
EXCURSIO VENTAS
NROEXC Numeric 3 TICKET Numeric 4
EECEXC Date 8 NROEXC Numeric 3
HOREXC Character 5 NROASIENTO Numeric 2
COL Numeric 2 APECLI Character 10
DES Numeric 2 NOMCLIENTE Character 15
/SSO - Tcncas Frgramacn J
128
DNICHOEER1 Numeric 8 MON Numeric 6 2
DNICHOEER2 Numeric 8
/.S.S.O. - Tcncas Frgramacn J
129
CON1ENIDO DE LAS 1ABLAS
TABLA: COLECTIV
NROCOL MARCA ASIENTOS
3 MERCEDES B 45
2 EORD 42
1 MERCEDES B 50
5 DODGE 42
4 EORD 45
TABLA: CHOFERES
DNICHOEER APECHOE NOMCHOE TELEEONO
14625543 GARCIA ADOLEO MIGUEL 03543-427355
17980877 GODOY HUMBERTO JOSE 0351-4267001
16727882 LOZANO NELSON 0351-4917804
17727882 EERRARO JOSE LUIS 03543-426709
15092187 AHUMADA CARLOS EERNANDO 0351-4780972
15672881 PEREZ JULIAN 03514217943
13090877 DIAZ ROGER JOSE 0351-4728971
14115707 ANTUN EDER HUBERTO 03543-423787
TABLA: DESTINOS
CODDES DESTINO PRECIO
2 CATARATAS DEL IGUAZU 280,00
3 CAPILLA DEL MONTE 107,00
1 TREN DE LAS NUBES 255,00
4 TERMAS DE RIO HONDO 175,00
10 DIQUE LA QUEBRADA 45,00
9 ICHO CRUZ 57,00
8 DIQUE CRUZ DEL EJE 95,00
6 TORRES - BRASIL 310,00
7 MAR DEL PLATA 355,00
5 ELORIANOPOLIS 395,00
TABLA: EXCURSIO
NROEXC EECEXC HOREXC COL DES DNICHOEER1 DNICHOEER2
3 27/11/99 18:00 2 10 14625543 17980877
2 25/11/99 10:00 1 8 16727882 15092187
1 10/12/99 09:00 3 5 15672881 14625543
5 27/12/99 10:00 1 6 13090877 14625543
7 29/12/99 09:00 2 5 16727882 17980877
6 30/12/99 08:30 1 4 15092187 15672881
8 15/12/99 10:00 5 3 14625543 15672881
9 17/12/99 08:30 3 2 13090877 14115707
/SSO - Tcncas Frgramacn J
130
TABLA: VENTAS
TICKET NROEXC NROASIENTO APECLI NOMCLIENTE MON
17 1 3 PEREZ ALINA 255,00
15 2 1 ATTO JOSE ALBERTO 275,00
14 1 1 BOERO MAGDALENA 240,45
16 2 5 EUNES DIANA 280,00
13 3 3 MORENO ELENA 107,00
11 1 5 JUSTO JOSE MARIA 255,00
12 2 2 DURI MARIO 280,00
10 1 4 MONTI MARIA SOL 255,00
9 2 10 PONCE MONICA 280,00
8 1 7 MORA ANALIA 240,45
6 1 10 CORRAL MAXIMILIANO 255,00
7 1 13 EUNES JORGE 245,00
4 2 12 ALBA GABRIELA 275,00
5 3 15 LOPEZ GLADYS 107,00
3 1 14 OLIVO CLAUDIA 250,60
2 2 21 ALANIZ ALEREDO 275,00
1 1 17 REMO JAVIER 245,00
18 3 7 ROMERO ANA 107,00
19 5 2 GOI IGNACIO 390,00
1- Mostrar los apellidos y nombres de los pasajeros, monto abonado, precio
de la excursion de los que abonaron menos del precio que le corresponde a
la excursion, ordenados por apellido.
2- Mostrar el numero de excursion, descripcion del destino, numero y marca
de los colectivos de cada excursion y el total recaudado hasta el momento
por cada excursion.
3- Obtener el precio promedio de las excursiones que se realizaran en el mes
de diciembre del corriente ao.
4- Mostrar descripcion del destino, apellidos del choIer a cargo o conductor
(choIer1) Iecha de salida y precio de las excursiones, incluyendo la cantidad
de asientos que aun quedan disponibles en el colectivo asignado y la
cantidad de dias que todavia Ialtan para salir.
5- Obtener el numero de excursion, la descripcion del destino, Iecha y hora
de salida de la excursion que, a la Iecha, tiene vendidos mas asientos.
6- Listar los datos del choIer que tiene asignado mas de un viaje como
conductor (choIer1).
7- Insertar una venta, con los siguientes datos: numero de ticket 20, la
excursion vendida es al Dique de Cruz del Eje, numero de asiento 07 y el
cliente es Bruno Archilla.
8- Mostrar los datos de las excursiones para las cuales aun no se vendieron
asientos, ordenados por Iecha de salida
9- Crear la tabla OEERTAS, con la misma estructura de DESTINOS, y
copiar en ella todos los destinos con precio menor a $100.-
10- Eliminar de la tabla DESTINOS todas las Iilas copiadas a OEERTAS.
/.S.S.O. - Tcncas Frgramacn J
131
Ejercicios de autoevaluacion en PC
Resuelvan en la computadora cada ejercicio, trasladando a
esta misma hoja la sentencia necesaria para cumplir lo
solicitado.
La biblioteca presta los libros por 2 dias, despues de esos
dias se consideran devoluciones con retraso.
Deben tener en cuenta que en esta biblioteca se asignan legajos a quienes
pueden retirar libros.
PERSONAS
LEGAJO NOMBRE APELLIDO CODCIU
A0089 JULIAN CRESPO 5000
S0003 FRANCISCO FRESNO 5147
A0092 JOSE ALBERTO OYOLA 5000
A0190 MARIA JOSE LEGUIZAMON 5000
A0890 MARIO CESAR ALVAREZ 5147
S0082 IGNACIO GONZALEZ 5049
A0129 ANA BELEN ARGUELLO 5000
S0019 ANA JUSTO 5700
A0201 LUCAS ALBARRACIN 5000
AUTOR
CODIGO APENOM
07 RAMEZ ELMASRI
08 SHAMKANT NAVATHE
09 HENRY KORTH
10 ABRAHAM SILBERSCHATZ
11 JOYANES AGUILAR
12 GARCIA BADELL
13 SHELDON
14 C. J. DATE
16 PAUL WEINBERG
15 JAMES GROFF
EDITORIA
CODEDIT DESCRIP
07 ADDISON
10 MC GRAW
PROVINCI
CODIGO DESCRIP
04 BUENOS AIRES
03 CORDOBA
LOCALIDAD
CODIGO LOCALIDAD CODPROV
5147 VILLA ALLENDE 03
5001 CORDOBA - B AYACUCHO 03
5000 CORDOBA CAPITAL 03
5049 CRUZ DEL EJE BEACH 03
5700 BUENOS AIRES 04
/SSO - Tcncas Frgramacn J
132
LIBROS
CODLIBRO TITULO CODEDIT FECCOM
496 SISTEMAS DE BASES DE DATOS 07 02/06/98
111 FUNDAMENTOS DE BASES DE DATOS 10 10/09/99
419 PROGRAMACION O. A OBJETO 10 01/09/97
093 PROGRAMACION EN TURBO PASCAL 10 02/10/98
279 FOX PRO 2.5 10 05/31/97
110 NOVELL NETWARE 386 10 09/15/98
115 SISTEMAS DE BASES DE DATOS 07 03/15/98
117 APLIQUE SQL 10 10/04/99
PRESTAMO
LEGAJO CODLIBRO FECPRESTA FECDEVOL
S0003 496 15/03/1999 17/03/1999
A0129 111 29/03/1999 31/03/1999
A0092 110 01/04/1999 01/08/1999
S0082 419 03/04/1999 05/06/1999
S0003 093 23/06/1999 25/06/1999
S0003 279 25/06/1999 27/07/1999
A0089 496 30/06/1999 02/07/1999
S0003 110 05/10/1999 06/10/1999
A0201 117 23/10/1999 25/10/1999
S0003 093 12/10/1999 13/10/1999
A0092 115 01/12/1999 03/12/1999
S0019 496 04/12/1999 06/12/1999
S0019 279 05/02/2000 08/02/2000
A0190 111 10/03/2000 13/03/2000
A0089 110 26/03/2000 29/03/2000
A0092 093 03/04/2000 05/04/2000
A0129 279 16/04/2000 22/04/2000
AUTORXLIBRO
CODLIBRO CODAUTOR
496 07
496 08
419 11
111 09
111 10
279 12
110 13
115 14
117 15
117 16
Punto 1- Mostrar los titulos de los libros comprados en el ao 99, con la
descripcion de la editorial, ordenados por titulo.
Punto 2- Obtener los legajos, nombres y apellidos, junto a Iecha de
prestamo y devolucion, de los libros prestados durante el ao 2000 y que
Iueron devueltos sin retraso. Ordenar el listado por apellido y nombres.
Punto 3- Mostrar legajo, apellido y la cantidad de libros retirados por cada
persona en el ao 1999.
Punto 4- Mostrar todos los datos del libro que se presto ultimo.
/.S.S.O. - Tcncas Frgramacn J
133
Punto 5- Obtener los legajos, apellidos y descripcion de la provincia de los
que retiraron libros de la biblioteca durante 1999, ordenados por legajos en
Iorma descendente.
Punto 6- Mostrar titulo, descripcion de la editorial y Iecha de compra de los
libros que no Iueron prestados durante el ao 2000.
Punto 7- Mostrar cuantos libros pertenecen a cada editorial, incluyendo
codigo y descripcion de la editorial.
Punto 8- Obtener la cantidad de personas por localidad, incluir la
descripcion de la localidad.
Punto 9- Listar todos los datos de las personas y la cantidad de libros que
retiro cada una durante el primer semestre del ao 2000, pero solo cuando la
cantidad sea superior a 1.
Punto 10- Mostrar los legajos, apellidos, nombres y descripcion de la
localidad de quienes son de la provincia de Cordoba, ordenando el resultado
por localidad.
/SSO - Tcncas Frgramacn J
134
/.S.S.O. - Tcncas Frgramacn J
135
Introduccion al Entorno de Visual EoxPro
En esta seccion estudiaremos el sistema gestor de bases de datos
relacionarles, Visual EoxPro. Este soItware tiene la particularidad de tener
un entorno donde podemos conIigurarlo, crear tablas, bases de datos,
relaciones, darle ordenes y realizar consultas entre otras cosas sin tener que
programar.
Para ingresar al programa utilizaremos el icono caracteristico del
'Zorro que suele estar en el escritorio, de lo contrario debemos buscarlo
dentro del menu inicio MicrosoIt Visual EoxPro.
Una vez que ingresamos al gestor, veremos la pantalla de trabajo
que cuenta con: la barra de menues el area de respuesta del sistema, la barra
de estado y la ventana de comandos. Eigura 12.
C
u
a
t
r
o
/SSO - Tcncas Frgramacn J
136
Pantalla Principal de Visual FoxPro
La barra de menu se utiliza para realizar las acciones mas comunes
de administracion de datos, ademas de las opciones de apertura y cierre de
los distintos programas, tablas y archivos complementarios que iremos
desarrollando en esta unidad.
La barra de botones es totalmente conIigurable y permite realizar
las acciones mas usadas adentro del sistema de una Iorma agil y rapida.
El area de respuesta del sistema, como su nombre lo indica, sirve
para ver y controlar listados de datos, contenido de variables, nombres de
atributos, estructuras de tablas entre otras cosas, dependiendo de las ordenes
que le impartamos.
La ventana de comandos es el lugar donde podemos tipear las
ordenes que queremos que ejecute el sistema. Sera el lugar de donde mas
vamos a trabajar en esta unidad, a pesar de que los comandos que podemos
tipear en dicha ventana, se encuentren en la barra de menu.
En este momento del curso es conveniente tipear los comandos
para que se vayan Iamiliarizando con ellos y la sintaxis propia del sistema.
Eigura
12
/.S.S.O. - Tcncas Frgramacn J
137
La barra de estado nos indica, entre otras cosas: la base de datos
que esta abierta, la tabla en la cual estamos posicionados, la cantidad de
registros de esa tabla y en numero de registro donde se encuentra el
puntero.
El primer comando que podemos probar en este momento es:
Dir
Este comando es similar al Dir del DOS, pero aqui solo muestra las
tablas que se encuentran en el directorio de trabajo por deIecto.
Par escribir los comandos debemos pararnos (con un clic del mouse
o con Ctl E2) en la ventana de comando, tipear el comando y presionar
enter. Luego el sistema nos respondera mostrando las tablas almacenadas en
el directorio, el tamao y la cantidad de registros que posee cada una.
A pesar de que este comando solo muestra las tablas, podemos
utilizar el asterisco como comodin para poder ver todos los tipos de
archivos.
Dir *.*
Dir *.bat
Dir *.exe
Otro comando que podemos probar es:
Eigura 13
/SSO - Tcncas Frgramacn J
138
Clear
Este comando borra la pantalla
Los comandos ejecutados van quedando escritos en la ventana de
comandos. Cada vez que tipeamos uno, el cursor pasa a la proxima linea en
espera del proximo comando.
Otro comando muy importante es uno que esta dentro de los de
conIiguracion del ambiente y permite decirle al sistema en que directorio
queremos que trabaje.
Set Default to directorio~
Set Default to c:\Iox\practicas
Es muy importante que, antes de comenzar a trabajar en un nuevo
sistema, destinemos un nuevo directorio o carpeta para almacenar los
archivos. Luego de ingresar al gestor, lo primero que debo hacer es ejecutar
este comando para establecer el directorio por deIecto en el cual grabara y
buscara los archivos. (La carpeta debe existir previamente)
Para salir de Visual EoxPro debemos ejecutar el comando:
Quit
Trabajando con las Tablas
Tanto hemos hablado de las tablas en este modulo que ya deben
estar ansiosos de trabajar realmente con ellas. Para crear una tabla debemos
haber decidido previamente la entidad y los atributos a almacenar de ella.
Eigura
Idea
Para ejecutar un
comando que ya Iue tipeado
en la ventana de comandos,
vasta con subir el cursor hasta
el y hacer enter en esa linea.
La mayoria de los comandos
se pueden ejecutar tipeando
l te l s i s t o
Revisar
Regresar al ejercicio
de los alumnos en pagina 18 y
revisar la estructura de los
datos y los tipos de datos.
/.S.S.O. - Tcncas Frgramacn J
139
Para nuestro primer ejercicio practico utilizaremos la tabla alumno, una
estructura muy comun para todos.
El comando para crear una tabla es:
Create nombredelatabla~
Create alumno
Es este momento aparecera una ventana de dialogo donde se debe
deIinir la estructura de la tabla.
Debemos colocar los nombres elegidos para cada atributo, el tipo de
datos que se almacenara y el ancho medido en bytes.
Tenemos que tener cuidado de pasar de atributo en atributo con un
clic del mouse o con la tecla Tab, ya que si presionamos enter, el lenguaje
toma como que ya terminamos de deIinir la tabla y sale de la ventana.
Tan pronto como Iinalizamos con todos los atributos, presionamos
aceptar e inmediatamente aparece otra ventana preguntando si queremos
introducir datos ahora o no.
Si respondemos aIirmativamente, aparece otra ventana donde nos
permite realizar el alta de datos (Iigura 16). Si respondemos que no, se
cierran las ventanas y regresa el cursor a la ventana de comandos.
Eigura 15
/SSO - Tcncas Frgramacn J
140
En la ventana de la Iigura 16, se realiza la carga de los registros con
inIormacion.
En la barra de estados aparecio el nombre de la tabla, la cantidad de
registros, el registro donde estamos parados y la tabla que esta abierta.
Ademas, dice que ha sido abierta en modo exclusivo (signiIica que ningun
otro usuario puede acceder a ella, en caso de estar trabajando en red).
Luego de que Iinalizamos de cargar los datos, presionamos CtrlW
para grabar hasta el ultimo registro, luego la tecla escape para cerrar la
ventana y regresar el control a la ventana de comandos.
Pero si contestamos que no deseamos cargar datos luego de Iinalizar
la deIinicion de la tabla, no hay inconveniente para agregar los datos,
simplemente debemos ejecutar el comando que abre la ventana de carga y
modiIicacion de datos.
El comando es:
Append
Con este comando aparece la misma ventana que vemos en la Iigura
anterior.
Eigura 16
/.S.S.O. - Tcncas Frgramacn J
141
Si queremos ver los datos cargados en la tabla que esta abierta en
este momento, existe un comando que nos muestra la tabla en Iorma de
grilla, ademas, permite modiIicar los datos cargados y agregar registros en
blanco para que a continuacion se le carguen datos.
El comando es:
Browse
Dentro de la ventana del Browse podemos movernos entre los
campos y registros para ver y modiIicar los valores cargados. Si deseamos
agregar nuevos registros, tambien podemos hacerlo desde esta ventana,
primero tenemos que agregar un registro en blanco y luego cargar los datos
en el. Para agregar presionamos Ctrl Y o desde la barra de menu en la
opcion Tabla Aadir Nuevo Registro.
Si cometimos un error al crear la estructura de la tabla, o si
deseamos modiIicar, borrar o agregar un nuevo atributo a la tabla, existe un
comando para realizarlo:
Modify Structure
Cuando ejecutados este comando aparece la ventana de dialogo que
nos permite modiIicar la estructura de la tabla.
Para abrir una tabla utilizamos el comando:
Eigura 17
Advertencia
Noten que los
comandos Browse, Append,
ModiIy Structure y otros que
estudiaremos de este tipo, no
llevan como argumento el
nombre de una tabla. Esto
signiIica que este grupo de
comandos actua directamente
sobre la tabla que este abierta
en ese momento, por lo que hay
que tener la precaucion de
abrirla previamente. Como
a s r a
/SSO - Tcncas Frgramacn J
142
Use nombredelatabla~
Use alumno
Podemos cerrar solamente la tabla que estamos utilizando con el
comando:
Use
Para cerrar las tablas y todos los archivos que pudieran estar
abiertos en ese momento utilizamos el comando:
Close All
Ejercitacion en la Computadora
Ejercicio N 1
El primer ejercicio que realizaran sera llevar a la computadora el
ejemplo de la tabla de alumno. Para esto seguiran los pasos que a
continuacion se detallan:
1. Crear una carpeta nueva donde se almacenan los datos del siguiente
ejercicio. Colocarle como nombre Alu1
2. Ingresar a Visual Eox Pro
3. DeIinir la carpeta de trabajo por deIecto. Set Default to c:\Alu1
4. Crear la tabla alumno con la estructura que utilizamos en el ejemplo.
Create Alumno. (Si ya existiera esta tabla en el directorio por que la
crearon con anterioridad, colocarle otro nombre como: Alumno2)
5. Cargarle al menos cinco alumnos a la tabla. Recuerden que esto lo
pueden hacer inmediatamente despues de deIinir la estructura, o si se les
paso esta oportunidad, desde la ventana de comandos ejecutar el
comando Append
6. Salir del comando Append con CtrlW
7. Ver los datos en Iorma de grilla. Browse
8. Estando dentro del browse agregar dos nuevos registros. CtrlY
9. Salir del browse con CtrlW o con Escape (si presionan escape graba
hasta el ultimo registro modiIicado y no graba el que se este
modiIicando en ese momento).
10. ModiIicar la estructura de la tabla agregandole el atributo Sexo -
Caracter de Longitud 1. El comando a utilizar es Modify Structure
Comentario
Si cuando ejecutan los
comandos aparentemente no
sucede nada, signiIica que se
ejecutaron bien; de lo contrario
les aparecera un mensaje de
error.
En e a e a es
/.S.S.O. - Tcncas Frgramacn J
143
11. Ver la tabla con el comando Browse y agregar el sexo correspondiente
(M o E) a cada uno de los registros ya cargados.
12. Cerrar todo y salir de Eox. Close All y Quit
13. Entrar nuevamente y repetir los pasos N 2
14. Poner en uso la tabla alumno. Use Alumno
15. Repetir los pasos 7, 8, 9 y 12.
Si revisan luego la carpeta encontraran un archivo llamado
Alumno.dbf. La extension .dbf signiIica que es una tabla.
Otros Comandos
N Display Structure
Permite ver la estructura de la tabla que esta en uso en ese
momento, con sus atributos, tipos y la longitud de cada uno.
N ?
Muestra por pantallas el resultado de una operacion, contenidos de
variables, constantes, valores de campos o atributos, etcetera.
? 57
? 'Mensajes
? alumno.apellido
N Skip
Mueve el puntero al proximo registro, siempre y cuando no este en
el Iinal de la tabla.
Skip 1
Retrocede el puntero en 1 posicion.
Skip 3
Mueve el puntero 3 registros. Obviamente que en lugar del numero
3 puede ir cualquier numero entero.
N Go top
Mueve el puntero al primer registro
SigniIica que muestre de la
tabla alumno, el campo apellido.
Obviamente mostrara los datos del
registro donde se encuentra el
puntero. Esto Iuncionara si la tabla
alumno esta abierta.
/SSO - Tcncas Frgramacn J
144
N Go Bottom
Mueve el puntero al ultimo registro
N Go n~
Mueve el puntero al registro n
N Locate For ExpresionLogica~
Busca secuencialmente en la tabla el primer registro que coincide
con la expresion logica especiIicada. Si encuentra una coincidencia detiene
el puntero en dicho registro, de lo contrario el puntero va a parar al Iinal de
la tabla Ej.
Locate For alumno.apellido 'Moreno
Opciones del comando Browse
Podemos establecer una especie de Iiltro para que el comando solo
muestre los registros que cumplen una determinada condicion. Ej:
Browse For alumno.sexo M
Browse For alumno.dni ~ 20000000
Tambien podemos ver solamente los atributos que nos interesan de
una tabla. Ej.
Browse Field alumno.apellido, alumno.nomnre, alumno.sexo
Se pueden combinar las dos opciones:
Browse Field alumno.apellido, alumno.nombre For alumno.sexo E
Comandos de ConIiguracion del
Ambiente y Eunciones
El primer comando de conIiguracion del ambiente que estudiamos
es el Set DeIaul to, ahora explicaremos algunos mas.
EspeciIico la lista de campos a
Condicion de
/.S.S.O. - Tcncas Frgramacn J
145
N Set Century on,oII
Permite ver el ao de la Iecha con 2 o 4 digitos.
N Set Date MDY , DMY , YMD
Permite modiIicar la Iorma en que se ve la Iecha. Ej.
ConIiguracion Eormato
MDY mm/dd/aa
DMY dd/mm/aa
YMD aa/mm/dd
Eunciones
Introduccin General
Las Iunciones en EoxPro llevan al Iinal parentesis que pueden o no
llevar argumentos.
N Date()
Devuelve la Iecha actual del sistema, que esta controlada por el sistema
operativo. Si queremos ver la Iecha podemos hacer:
? Date()
N Found()
Regresa el resultado de la ultima busqueda Verdadero (.T.) o Ialso
(.E.). Es la Iuncion ideal para preguntar si la busqueda realizada con el
Locate tuvo exito. Ej.:
Go top
Locate for alumno.dni 22345432
? found()
No tiene argumentos dentro del
Busca si algun contenido del atributo
dni en la tabla coincide con
22345432
Pregunta si la busqueda tuvo exito
Mueve el puntero al inicio de la tabla
/SSO - Tcncas Frgramacn J
146
El resultado de la busqueda sera impreso en el area de respuesta
contra el margen izquierdo. Veran .T. si lo encuentra o .E. si no lo hace.
Si a continuacion hacen un Browse, podran apreciar que el puntero
esta parado en el registro donde se encontro la primera coincidencia. (Si es
que hubiese).
N Space (n)
Se utiliza, generalmente, para asignar n espacios a una variable de
tipo caracter. Ej.:
TeleIono Space(15)
Proximamente se explicara con detenimiento la asignacion de datos
y tipos de datos
Tipos de Datos
Todos los datos de Visual Eox Pro tienen un determinado tipo: una
descripcion de los valores permisibles, el intervalo y tamao de dichos
valores.
Las variables y matrices almacenan un subconjunto de los tipos de
datos disponibles de Visual Eox Pro. Existen otros tipos de datos
adicionales solo para los campos de una tabla.
Tipos de datos de Visual Fox Pro
Tipo de datos Descripcion Tamao Intervalo
Caracter Cualquier texto. 1 byte por
caracter hasta
254
Cualquier caracter
Moneda Importes monetarios. 8 bytes - 922337203685477,5808
hasta
922337203685477,5807
Eecha Datos cronologicos
que constan de mes,
ao y Iecha.
8 bytes 01/01/100 hasta 31/12/9999
EechaHora Datos cronologicos
que constan de mes,
ao, Iecha y hora.
8 bytes 01/01/100 hasta
31/12/9999, y 00:00:00
A.M. hasta 11:59:59 p.m.
Logico Valor booleano de
verdadero o Ialso.
1 byte Verdadero .(T.) o Ealso
(.E.)
/.S.S.O. - Tcncas Frgramacn J
147
Numerico Enteros o Iracciones. 8 bytes en
memoria; 1 a 20
bytes en tabla
- ,9999999999E19 hasta
,9999999999E20
Estos datos seran los que mas vamos a utilizar en este curso pero a
continuacion enumeramos la lista que completa los tipos de datos que
podemos utilizar. Obviamente no es necesario que se los aprendan a
todos ni mucho menos de memoria, ya que se encuentran a disposicion
del programador en la ayuda del programa
Tipos de campos que se pueden definir solamente en las tablas
Tipo de
campo
Descripcion Tamao Intervalo
Doble Numero de signo
Ilotante de doble
precision.
8 bytes /-4,94065645841247E-
324 hasta /-
1,79769313486232E308
Elotante Igual que Numerico. 8 bytes en memoria; 1
a 20 bytes en tabla
-,9999999999E19 hasta
,9999999999E20
General ReIerencia a un
objeto OLE.
4 bytes en tabla Limitado por la memoria
disponible
Entero Valores enteros 4 bytes -2147483647 hasta
2147483646
Memo ReIerencia a un
bloque de datos.
4 bytes en tabla Limitado por la memoria
disponible
Caracter
(Binario)
Cualquier dato de
caracteres que desee
mantener sin
cambiar de tabla de
codigos.
1 byte por caracter
hasta 254
Cualquier caracter
Memo
(Binario)
Cualquier dato de
campo memo que
desee mantener sin
cambiar de tabla de
codigos.
4 bytes en tabla Limitado por la memoria
disponible
/SSO - Tcncas Frgramacn J
148
DeIinicion y Asignacion de Tipos de
Datos a Variables
Para deIinir una variable en Visual EoxPro debemos hacerlo
asignandoles un valor. De esta Iorma toma el nuevo valor y se autodeIine
con el tipo del valor asignado. Los nombres de las variables pueden ser
asignados en minuscula o mayuscula, ya que no distingue entre ambas.
Personalmente preIiero que utilicen una letra signiIicativa antes de
cada variable para que no se conIundan entre una variable y un campo.
Pueden usar: X, M, W o la que ustedes preIieran.
Ejemplos de definicin y asignacin de valores
Xcod 4 DeIinimos una variable llamada xcod del tipo
numerica ya que le asignamos un numero 4.
Xnombre ' ' DeIinimos una variable llamada xnombre del tipo
caracter con 3 espacios.
Xapellido Space(20) DeIinimos una variable llamada xapellido del
tipo caracter, ya que le asignamos 20 espacios
con una Iuncion.
XdireccionMalaga
3454
DeIinimos una variable llamada Xdireccion del
tipo caracter, colocandole un texto entre comillas.
Xtotal 0 Tipo numerica. Valor asignado 0
Xnace Date() Tipo Iecha. Valor asignado la Iecha del sistema.
Xentro } Tipo Iecha. Valor asignado una Iecha en blanco.
Xsalio '15/02/87} Tipo Iecha. Valor asignado 15/02/87. Si la Iecha
Iuera invalida le asigna una Iecha en blanco.
Xvino.T. Tipo Logico. Valor asignado .T.
Xcasado.E. Tipo Logico. Valor asignado .E.
/.S.S.O. - Tcncas Frgramacn J
149
Estas seran los tipos de variables que utilizaremos en el curso para
no complicarnos demasiado en esta primera etapa.
Operadores Logicos
En la siguiente tabla se muestran los operadores logicos por orden
de precedencia.
Operador Descripcion
( ) Subexpresiones de grupo
NOT, ! Logico negacion
AND Y logico
OR O logico inclusivo
Operadores Relacionales
En la siguiente tabla se muestran los operadores relacionales
disponibles.
Operador Accion
Menor que
~ Mayor que
Igual que
~, #, ! No igual que
Menor o igual que
~ Mayor o igual que
Comparacion de cadenas de caracteres
(compara por exactamente igual)
Operadores Numericos
En la tabla siguiente se muestran los operadores numericos por
orden de precedencia.
/SSO - Tcncas Frgramacn J
150
Operador Accion
( ) Subexpresiones de grupo
**, ` Exponenciacion
*, / Multiplicacion y division
Modulo (resto)
, - Adicion y sustraccion
Ejercitacion en la Computadora
Ejercicio N 2
1. Ingresar a Visual EoxPro y asignar el directorio de trabajo por deIecto.
2. Crear la tabla Postales con la siguiente estructura: Codpost numerico
de 5 y Localidad caracter de 30.
3. Ingresar al menos 5 localidades.
4. Mostrar en Iorma de grilla las localidades y los codigos postales
cargados.
5. Mostrar en Iorma de grilla, solamente, las localidades cuyo codpost
sea igual a 5000.
6. Mostrar en Iorma de grilla solamente el atributo localidad
7. Listar la estructura de la tabla.
8. Cerrar las tablas
9. Abrir la tabla alumno
10. Mostrar solamente el apellido y el nombre de los alumnos que poseen el
codigo postal 5000 exclusivamente.
11. Llevar el puntero al primer registro
12. Buscar el apellido 'Morales.
13. Consular si la busqueda Iue exitosa. Si lo Iue, veriIicar que el puntero
este parado en el registro de esa persona. Si no lo Iue, probar con otro
apellido que ustedes tengan cargado.
/.S.S.O. - Tcncas Frgramacn J
151
Resolucin Ejercicio N 2
La siguiente resolucion consta solamente de un listado de comandos
en un orden logico, pero si ustedes cometen algun error, obviamente pueden
combinar y repetir los comandos estudiados hasta poder lograr el objetivo
del ejercicio numero 2.
Si cometen errores de tipeado, Eox le dara el siguiente mensaje de
error. 'El verbo del comando no esta reconocido`. Revisar la sintaxis de
los comandos en el modulo.
Tener en cuenta que deben poseer la tabla abierta antes de ejecutar
comandos que se reIieran a ella, como el Browse o el Locate.
Set Defa to c:\midirectorio
Create Postales
Append
Browse For CodPost 5000
Browse Field Postal.Localidad
Display Structure
Close All
Use Alumno
Browse Field Alumno.Apellido,Alumno.Nombre For Alumno.CodPost 5000
Go Top
Locate For Alumno.Apellido 'Morales
? Found()
(Ver la respuesta de la busqueda en la ventana)
Pueden repetir la busqueda con otros apellidos.
/SSO - Tcncas Frgramacn J
152
Mas Eunciones...
Upper (cadenadecaracteres~)
Devuelve la cadena de caracteres colocada en Mayusculas
Ltrim (cadenadecaracteres~)
Devuelve la expresion de caracteres especiIicada despues de
eliminar los espacios en blanco iniciales.
Rtrim (cadenadecaracteres~)
Devuelve la expresion de caracteres especiIicada con todos los
espacios en blanco Iinales recortados.
Alltrim (cadenadecaracteres~)
Elimina los espacios en blanco iniciales y Iinales de la expresion de
caracteres especiIicada y devuelve la expresion recortada como una cadena
de caracteres.
Val (expresioncaracter~)
Devuelve un valor numerico a partir de una expresion de caracteres
compuesta por numeros.
Str (expresionnumerica~)
Devuelve el caracter equivalente a una expresion numerica
especiIicada. Consultar la ayuda por mas opciones.
CtoD (expresioncaracter~)
Convierte una expresion de caracteres en una expresion tipo Iecha.
DtoC (expresionIecha~)
Convierte una expresion tipo Iecha en una expresion tipo caracter.
Eof ()
Determina si el puntero de registro esta situado o no mas alla del
ultimo registro (al Iinal del archivo) de la tabla actual. Devuelve .T. o .E.
Bof ()
Determina si el puntero de registro esta situado al principio de una
tabla. Devuelve .T. o .E.
Advertencia
A pesar de que en
este momento no vean la
aplicacion directa de las
Iunciones, debemos tenerlas
muy en cuenta ya que las
utilizaremos mucho en la
unidad numero 4 de este
odulo.
/.S.S.O. - Tcncas Frgramacn J
153
Int (expresionnumerica~)
Evalua una expresion numerica y devuelve la parte entera de dicha
expresion.
Len (expresioncaracter~)
Devuelve el numero de caracteres de una expresion
SubStr (expresioncaracter~, numeroposicioninicial~ |,
numerocaracteresdevueltos|)
Devuelve un numero de caracteres especiIicos de una expresion de
caracteres, a partir de una posicion inicial hasta un numero que indicara
los caracteres devueltos. Ej.:
Xvar 'Programacion Estructurada DeIino una variable.
? SubStr (xvar,7,6) Mostrara macion
? SubStr (xvar,1,3) Mostrara Pro.
/SSO - Tcncas Frgramacn J
154
Indices Compuestos Estructurales
Este lenguaje posee varios tipos de indices con sus respectivas
opciones, para este modulo, he seleccionado el tipo de indice mas usado y el
de caracteristicas mas potentes.
Seguramente ya revisaron el tema de indices y recuerdan que tenian
dos grandes Iunciones, la de mostrar los datos ordenados y la de hacer el
acceso directo a ellos cuando queremos realizar una busqueda.
Para crear un indice debemos primero asegurarnos de que la tabla
en cuestion este abierta y saber como se llama el atributo por el cual
queremos hacer el indice.
El comando para crear el archivo indice es:
Index on campo~ Tag nombrede la entrada del indice~
Donde campo~ es el campo o atributo de la tabla o la combinacion
de alguno de ellos como estudiaremos mas adelante.
El nombre de la entrada del indice es el nombre del indice por el
cual nos reIeriremos en adelante.
Ej.:
Crearemos un indice por apellido en la tabla alumno. Para ello
debemos abrir la tabla y luego crear el indice de la siguiente manera:
Index on alumno.apellido Tag Ape
Al ejecutar este comando Eox creara un archivo indice que tiene el
mismo nombre de la tabla con la extension .CDX, dentro de ese archivo
crea lo que llamamos la entrada del indice, es decir que dentro de
ALUMNO.CDX, almacena las entradas de todos los indices compuestos
estructurales que vayamos a hacer sobre la tabla alumnos.
Ahora solo tendremos un archivo extra llamado ALUMNO.CDX
dentro de el una entrada del indice llamado Ape
Que ventafa tienen los archivos indices compuestos?
Los archivos indices compuestos tienen la particularidad de generar
solamente un archivo indice con el nombre de la tabla y, dentro de este,
todas las entradas o nombres de los indices que haremos para la tabla. Por
ejemplo, puedo tener un indice por apellido y otro por dni. El lenguaje
permite elegir por cual de ellos se haran las busquedas o la ordenacion
correspondiente de los datos.
Comentario
Los archivos de indice
compuesto, son solo un archivo
que consta de cualquier cantidad
de etiquetas (entradas de indice)
independientes. Cada etiqueta se
identiIica por su nombre de
etiqueta unico. Los nombres de
etiqueta deben comenzar con una
letra o un subrayado y pueden
constar de cualquier combinacion
de hasta 10 letras, digitos o
subrayados. El numero de
etiquetas de un archivo de indice
compuesto esta limitado
unicamente por la memoria y el
espacio de disco disponibles.
/.S.S.O. - Tcncas Frgramacn J
155
Lo que debemos tener en claro es que una cosa es el archivo indice
v otra los nombres de los indices que se vavan creando sobre la tabla.
Si en segunda instancia, trabajando con el ejemplo anterior,
deseamos crear un indice por el atributo dni de la tabla alumno, debemos
ejecutar nuevamente el comando:
Index on alumno.dni Tag dni
Hasta aqui tenemos la tabla alumno.dbI y un archivo indice
llamado alumno.cdx, con dos entradas de indice dentro de el: Ape y Dni.
Esto signiIica que podemos ver ordenado la tabla alumnos por
apellido o por DNI, igualmente podemos hacer acceso directo por
cualquiera de los dos atributos.
Como hacemos para ver ordenado por apellido o por dni?
En primera instancia cuando abrimos una tabla con el comando use,
tiene el orden con el cual se han ido cargando los registros, es decir, que
podemos ver el orden Iisico de esta.
Ahora bien, si esa tabla tiene un indice asociado como lo tiene la
tabla alumno del presente ejemplo debemos decirle, a traves de un
comando, que deseamos verla ordenada por un indice especiIico, esto lo
hacemos con el siguiente comando:
Set Order to nombredelaentradadelindice~
Set Order to Ape
Si abrimos la tabla alumno, luego ejecutamos este comando, y si
hacemos un Browse, veremos la tabla ordenada por apellido.
Set order to Dni
Si luego ejecutados este comando y hacemos un Browse, veremos la
misma tabla, ahora ordenada por Dni.
Set Order to 0
Regresa la tabla a su estado original, es decir, los registros en el
orden en que se Iueron cargando.
/SSO - Tcncas Frgramacn J
156
Acceso Directo a una Tabla
Como estudiamos antes, el acceso directo, es una Iorma de buscar
un dato dentro de una tabla. Por ejemplo si en la tabla alumno queremos
buscar el apellido 'Moreno, podemos utilizar un grupo de comandos para
acceder directamente a ese registro haciendo la busqueda mucho mas rapida
que una secuencial.
El comando que realiza la busqueda es:
Seek variable o expresion~
Ejemplo:
Use Alumno
Set Order to Ape
xapellido Moreno
Seek xapellido
? Found()
Si la busqueda tuvo exito, en la ventana de respuesta veremos .T.,
sino .E.
Para probar con otro apellido, le daremos otro valor a la variable
apellido, luego ejecutamos el comando Seek y por ultimo la Iuncion
Eound(). Cuando la busqueda sea positiva, podemos ejecutar un Browse y
veremos que el cursor esta en el registro donde se produjo la coincidencia.
xapellido 'Lopez
Seek xapellido
? Found()
Si ahora queremos hacer una busqueda por Dni, debemos cambiar el
orden del indice y repetir los pasos en Iorma similar.
Set Order to Dni
xdni 20587963
Seek xdni
? Found()
- Abro la tabla alumno
- Establezco el orden por apellido
- DeIino una variable y le cargo
un apellido.
- Busco en la tabla.
- Consulto si lo encontro
/.S.S.O. - Tcncas Frgramacn J
157
Ejercitacion en la Computadora
Ejercicio N 3
1. Destinar una nueva carpeta llamada Biblio para este ejercicio.
2. Entrar al gestor y establecer el directorio de trabajo por deIecto.
3. Crear la tabla libros con la siguiente estructura: Nombre C 30, Autor C
20, Anio N 4, Materia C 15, Precio N 7 2 (longitud 7 con 2 decimales).
4. Cargar al menos seis libros.
5. Crear un indice por el nombre del libro.
6. Crear un indice por el autor.
7. Mostrar los datos ordenados por el nombre del libro.
8. Mostrar los datos ordenados por el nombre del autor.
9. Establecer el orden original en la tabla.
10. Realizar una busqueda secuencial por ao 1999 y consultar si tuvo
exito.
11. Repetir tres veces la consigna anterior y cuando la busqueda sea exitosa,
realizar un Browse y corroborar que el puntero este parado en el registro
deseado.
12. Mostrar los libros del ao 1997.
13. Mostrar solamente los nombres de los libros y el autor de la materia
"computacion".
14. Establecer el orden por el nombre del libro
15. Cargar una variable con el nombre de un libro y realizar una busqueda
indexada.
16. VeriIicar el resultado de la busqueda.
17. Establecer el orden por autor.
18. Cargar otra variable con el autor de un libro y realizar una busqueda
indexada.
19. VeriIicar el resultado de la busqueda.
/SSO - Tcncas Frgramacn J
158
20. VeriIicar la posicion del puntero en caso de que la busqueda Iuera
exitosa.
Resolucin Ejercicio N 3
Set defaul to c:\biblio
Create Libros
Append
Index on Nombre Tag Nombre
Index on Autor Tag Autor
Set Order to Nombre
Browse
Set Order to Autor
Browse
Set Order to 0
Go Top
Locate for Libros.Anio 1999
? Found()
Browse
Repetir la busqueda con otros aos.
Browse for Libros.Anio 1997
Browse Field Libros.Nombre, Libros.Autor For Libros.Materia "computacion"
Set Order to Libro
Xnom "Introduccion a Visual Eox"
Seek xnom
? Found()
Browse
Set order to Autor
xautor "MicrosoIt"
/.S.S.O. - Tcncas Frgramacn J
159
Seek xautor
? Found()
Browse
Trabajando con Varias Tablas
Hasta este momento solo trabajamos con una tabla abierta al mismo
tiempo, es decir, que si primero abro alumno y luego libros, inmediatamente
se cierra la tabla alumno.
Obviamente una de las caracteristicas principales del gestor es
trabajar con multiples tablas. Entonces estudiaremos como podemos llevarlo
a cabo.
Eox divide la memoria disponible en areas, que son en principio,
totalmente independientes entre si. Lo que tenemos que hacer es abrir en
cada una de las areas disponibles las tablas que necesitemos esten abiertas
en Iorma conjunta.
Para seleccionar el area donde queremos abrir una tabla utilizamos
el comando:
Select numero de area~
Ejemplo:
Select 1
Use alumno
Select 2
Use libros
Browse
Select 1
Browse
Atencin:
Para que estas ordenes Iuncionen debemos tener las dos tablas en el
directorio de trabajo. Recuerden que es alli donde el gestor buscara las
tablas cuando le sean solicitadas. Si no se encuentran en esa carpeta dara un
mensaje de error. Otra opcion para abrir una tabla que no esta en el
directorio de trabajo es incluir el camino, por ejemplo:
Use c:\biblio\libros
- Selecciono area 1
- Abro alumno
- Selecciono area 2
- Abro Libros
- Veo los libros
- Cambio al area 1
- Veo los alumnos
/SSO - Tcncas Frgramacn J
160
Grfico de las reas en FoxPro
Al seleccionar un area para abrir una tabla debemos estar muy
seguros de que en esa area no haya otra tabla abierta, si lo hubiera, se
cerraria al momento de abrir la nueva.
Para evitar este posible descuido, en vez de utilizar el comando
Select acompaado de un numero, conviene utilizar una opcion especial de
este comando que es la siguiente:
Select 0
Utilizando el comando con la opcion 0, signiIica que debe buscar la
primera area desocupada para posicionarse. De esta Iorma nos
independizamos del numero.
Pero si no se en que numero de area se paro para abrir la tabla
Como hago luego para seleccionar esa area?.
Esta es una buena pregunta, pero para ubicar un area donde se
encuentra una tabla, puedo usar otra opcion del comando select:
Select nombredela tabla~
El comando permite colocar el nombre de la tabla, (que obviamente
ya debe estar abierta), para poder ubicarla y pararse en el area
correspondiente.
Entonces el ejemplo anterior quedaria de la siguiente Iorma:
Area Area
Area Area n~
Tabla 1
Tabla 2
Disponible
Disponible
/.S.S.O. - Tcncas Frgramacn J
161
Select 0
Use alumno
Select 0
Use libros
Browse
Select alumno
Browse
Esta es la Iorma que recomiendo trabajen con varias tablas al mismo
tiempo. Independizandose de los numeros de las areas y cambiando entre
ellas con el nombre de la tabla. Esto lo notaran beneIicioso, cuando trabajen
con muchas tablas y les sea complicado recordar en que numero de area esta
abierta cada una.
Ejercitacion en la Computadora
Ejercicio N 4
1. Abran la tabla libros y modiIiquen su estructura cambiando el atributo
Autor por el atributo CodAutor, numerico de tres.
2. Crear una tabla llamada Autor con la siguiente estructura: Codigo N 3 y
ApeNom C 20.
La idea de esta modificacion es la de economi:ar espacio, sacando el
nombre del autor de la tabla libros v colocando un codigo que hara
referencia a otro codigo en una tabla distinta llamada autor.
3. Cargar al menos tres autores en la tabla autor.
4. Cargar en la tabla libros un codigo de autor en el nuevo atributos,
haciendo reIerencia a los autores cargados previamente (esto es
necesario ya que el nuevo atributo colocado en la tabla libros, aparecera
en blanco).
5. Mostrar las dos tablas en Iorma simultanea como lo muestra la Iigura
18. Ayuda: Luego de hacer el primer Browse, pasamos a la ventana de
- Selecciono un area
disponible.
- Abro alumno.
- Selecciono otra area
disponible.
- Abro Libros.
- Veo los libros.
- Cambio al area donde se
encuentra alumno.
- Veo los alumnos.
/SSO - Tcncas Frgramacn J
162
comandos con un clic del mouse, seleccionamos la otra tabla y hacemos
otro browse
Se pude apreciar las dos tablas abiertas al mismo tiempo.
Posteriormente utilizaremos esto para generar vistas logicas de los datos,
obteniendo inIormacion de varias tablas para mostrar solo una por pantalla.
Eigura
/.S.S.O. - Tcncas Frgramacn J
163
Administrador de Proyectos
El Administrador de Proyectos se utiliza para organizar y
administrar los archivos de un proyecto o del 'sistema`, como se dice en la
jerga. Un proyecto es una coleccion de archivos, datos, documentos y
objetos del lenguaje que se guarda como un archivo con extension app.
Los elementos del administrador de proyectos estan organizados en
una vista en Iorma de esquema que puede expandirse o contraerse. Un signo
"" aparece junto al simbolo del objeto, si tiene uno o mas elementos de ese
tipo en el proyecto. Haciendo clic en el signo se podran ver mas elementos
de la lista. Si hacen clic en el signo "-" se contrae la lista expandida.
Al igual que las barras de herramientas, pueden reducir el
administrador de proyectos si lo arrastran hasta la parte superior de la
pantalla o hacen doble clic en la barra de titulo. Al reducirlo, todas las listas
se contraen automaticamente y solo se muestran las Iichas.
Las Eichas que tiene el administrador son las siguientes:
Las Iichas muestran los elementos agrupados por categorias. Al
contraer el administrador de proyectos, pueden eliminar las Iichas al
arrastrarlas Iuera del Administrador de proyectos. Para volver a colocar una
Iicha, arrastrenla de nuevo a su posicion original o hagan clic en el cuadro
Cerrar. Lista de elementos:
Las listas enumeran los elementos contenidos en el proyecto con
una vista de esquema. A la izquierda de los elementos aparecen los iconos
que identiIican el tipo de elemento.
/SSO - Tcncas Frgramacn J
164
Botones del Administrador de Proyectos
Nuevo
Crea un archivo u objeto nuevo. Este boton hace lo mismo que el
comando Archivo nuevo en el menu Proyecto. El nuevo archivo u objeto
sera del mismo tipo que el elemento actualmente seleccionado.
Nota: Los archivos creados desde el menu Archivo no se incluiran
automaticamente en un proyecto. En cambio los creados con el comando
nuevo del administrador de proyectos, se incluyen automaticamente.
Agregar
Agrega un archivo existente al proyecto. Este boton hace lo mismo
que el comando Agregar archivo del menu Proyecto.
Modificar
Abre el elemento seleccionado en el diseador apropiado. Este
boton hace lo mismo que el comando ModiIicar archivo del menu Proyecto.
Examinar
Abre una tabla en una ventana. Este boton hace lo mismo que el
comando Browse.
Cerrar
Cierra una base de datos abierta. Solo esta disponible cuando
selecciona una tabla. Si la base de datos seleccionada esta cerrada, este
boton cambia a Abrir.
Abrir
Abre una base de datos. Solo esta disponible cuando selecciona una
tabla. Si la base de datos seleccionada ya esta abierta, el boton Abrir se
convierte en Cerrar.
Eliminar
Elimina del proyecto el archivo u objeto seleccionado. Antes
pregunta si solo desea eliminarlo del proyecto o si desea eliminarlo del
proyecto y del disco.
Generar
Genera un proyecto o una aplicacion y tambien puede generar un
ejecutable.
Presentacin preliminar
/.S.S.O. - Tcncas Frgramacn J
165
Muestra el inIorme o etiqueta seleccionado en el modo de
Presentacion preliminar. Este boton solo esta disponible al seleccionar un
inIorme o etiqueta en el administrador de proyectos.
Ejecutar
Ejecuta la consulta, el Iormulario, o el programa seleccionado. Este
boton solo esta disponible al seleccionar una consulta, un Iormulario, un
menu o un programa en el administrador de proyectos. Puede hacer lo
mismo con el comando Ejecutar archivo del menu Proyecto.
Cmo creamos un nuevo proyecto?
Desde la ventana de comando debemos ejecutar:
Create Project nombredelproyecto~
Por ejemplo:
Create Project Iarmacia
Si en cambio el proyecto ya existe y queremos abrirlo para
modiIicarlo o trabajar con el, debemos ejecutar:
Modify Project nombredelproyecto~
Por ejemplo:
Modify Project Iarmacia
Nota:
No olviden determinar el directorio por deIecto de trabajo con el
comando Set DeIaul to ... para que podamos encontrar los archivos que
Iorman parte del trabajo que esten realizando.
Resumiendo...
Con el administrador de proyectos podemos tener una vision
general de todos los componentes que Iorman el sistema y acceder a cada
uno de ellos con la herramienta adecuada solamente haciendo con un 'clic.
Esto nos permite llevar una buena organizacion, sobre todo cuando el
sistema a desarrollar es medianamente grande.
/SSO - Tcncas Frgramacn J
166
Ficha o solapa de datos
Ficha o solapa de cdigo
Aqui podemos incorporar o crear los programas Iuentes estandares
como con los que trabajaban hasta ahora.
Aqui trabajamos con la
base de datos, las tablas
que la componen y el
resto de los
componentes o
posibilidades que
brinda el lenguaje con
respecto al manejo de
datos.
/.S.S.O. - Tcncas Frgramacn J
167
El programa marcado con negrita sera el primer programa que se
ejecutara cuando se realice una aplicacion o el ejecutable. Esto se puede
modiIicar haciendo un clic con el boton derecho del mouse en el programa y
eligiendo del menu contextual o Ilotante que sea o no el primero.
Ficha o solapa de documentos.
En esta Iicha trabajaremos con los Iormularios, principalmente que
son uno de los principales objetivos de esta asignatura y que
desarrollaremos mas adelante.
Ficha de otras
Aqui encontraran entre otras cosas la posibilidad de trabajar con una
herramienta que genera menues y un lugar donde agrupar todos los otros
tipos de archivos que puedan Iormar parte del sistema como archivos de
graIicos, de texto, etc.
Diseador de Bases de Datos
Para crear una Base de Datos, podemos acceder desde el
administrador de proyectos, en la opcion DataBases Nuevo.
O desde la ventana de comandos:
Create DataBase Nombrebasededatos~
Si la base de datos es creada desde la ventana de comando o Iue
creada antes de crear el proyecto, debemos agregarla al administrador de
proyectos desde la opcion DataBases Agregar.
Para modiIicar una base de datos existente desde la ventana de
comandos debemos abrirla y luego modiIicarla:
Open DataBase nombrebasededatos~
Modify DataBase nombrebasededatos~
Si en cambio deseamos modiIicarla desde el administrador de
proyectos, solo debemos seleccionarla y presionar el boton Modificar.
La extension de las bases de datos es .DBC
Ejemplo:
/SSO - Tcncas Frgramacn J
168
Para realizar una aplicacion utilizaremos el ejemplo del video club
disponible en la red del Instituto.
En primer lugar deben conseguir las tablas y guardarlas en una
carpeta, luego crear el proyecto (en este ejemplo le coloque el nombre de
Video).
Luego pueden crear la base de datos desde la ventana de comandos
o desde el administrador de proyectos. Si la realizan de desde la venta de
comandos recordar incorporarla al proyecto (en este ejemplo le coloque el
nombre de DatosVideo). Eigura 4.
Como pueden observar en la Iigura 4, aparece la base de datos
DatosVideo y un simbolo ' a su izquierda, esto quiere decir que tiene mas
componentes dentro de ella.
Para acceder a la base de datos, debemos seleccionarla y presionar
ModiIicar, entonces veran lo siguiente:
Eigura 4
/.S.S.O. - Tcncas Frgramacn J
169
Diseador de Bases de Datos a travs del Administrador de
Proyectos.
La base de datos es el rectangulo gris, que hasta este momento esta
vacia. Tambien acompaa al diseador una barra de herramientas que
permite entre otras cosas, la inclusion y exclusion de tablas a la base de
datos.
El proximo paso es agregar las tablas. Esta tarea la podemos hacer
de dos maneras:
1 utilizando la barra de herramientas con el boton que tiene un
signo '
2 colocando el puntero del mouse dentro del rectangulo de la base
de datos y presionando el boton derecho del mismo, aparece un menu
flotante o menu contextual que muestra las posibles acciones a realizar con
el objeto seleccionado, (deberan acostumbrarse a este tipo de menues ya que
es muy comun en la programacion visual). Eigura 6.
Eigura 5
/SSO - Tcncas Frgramacn J
170
Luego de agregar todas las tablas que Iormaran la base de datos,
podran observar que cada una de las tablas incorporadas adquiere
caracteristicas nuevas y que solamente Iuncionan cuando Iorman parte de
ella, y no cuando son tablas libres como con las que trabajabamos en el
cuatrimestre pasado. Una de las primeras cosas que podran notar es que
cambiara la pantalla de modiIicacion de estructura o el diseador de tablas
agregando nuevas opciones.
Pero para acceder a la estructura de datos de una tabla tambien lo
podemos hacer a traves del menu contextual, que aparece cuando hacemos
un clic con el mouse y presionamos el boton derecho.
Eigura 6
Eigura 7
Opciones del
menu Ilotante
Indicador
de que
tiene
indices y
los nombre
e e
Biblioteca
Les recomiendo que
revisen este tema del
Manual del Programador
de Visual EoxPro, existente
en biblioteca
/.S.S.O. - Tcncas Frgramacn J
171
Con el menu Ilotante es mas sencillo y rapido acceder a las
propiedades de la tabla, o a ver su contenido (equivalente al Browse) entre
otras opciones.
Nueva pantalla para trabajar con la estructura de la tabla:
La Iicha Tabla muestra inIormacion ligeramente diIerente si abren
una tabla de base de datos o una tabla libre. Si estan creando una tabla de
base de datos, la Iicha Campos incluye opciones para la conIiguracion de
reglas de validacion. Si estan creando una tabla libre, la Iicha solo contiene
opciones basicas de nombre, tipo y Iormato de campo.
La Iicha muestra los campos de la tabla en una cuadricula
desplazable. Cada Iila contiene el nombre del campo, el tipo de datos, el
ancho del caracter, el numero de decimales y la compatibilidad con valores
nulos. Pueden hacer clic en la cuadricula para modiIicar un campo.
Opciones de la ficha
Botn para mover
Es el boton de la Ilecha de dos puntas que esta a la izquierda de la
Iila. Una vez que haya introducido dos o mas Iilas, utilicen el boton de
mover para mover una Iila hacia arriba o hacia abajo en la lista. Tambien
indica cual campo esta seleccionado.
Botn Insertar
Inserta un nuevo campo sobre el campo seleccionado.
Eig. 8
Solapa para
acceder a trabajar
con indices
Seal que indica
el campo
seleccionado
Indica que el
indice es
nd
/SSO - Tcncas Frgramacn J
172
Botn Eliminar
Elimina el campo de la tabla.
Validacion de campos
Si estan modiIicando una tabla de base de datos, el grupo de
opciones Propiedades de campo aparece debajo de la cuadricula
desplazable.
Los valores de las propiedades para el campo seleccionado se
especiIican en esta area.
Regla
EspeciIica la regla al nivel de campo para reIorzar la validacion de
datos de entrada.
Ejemplo:
Codigo ~ 0
Nombre ~ ' '
Mensaje
EspeciIica el mensaje de error que se va a presentar si una entrada
inIringe la regla de validacion al nivel de campo. Se escribe entre comillas.
Valor predeterminado
EspeciIica el valor predeterminado para el campo. Es decir, cuando
se genera un registro nuevo, automaticamente se carga con el valor
predeterminado, (puede servir para asignar un codigo postal o una provincia
cuando se supone que la mayoria de los registros cargados pertenecen a
personas del mismo lugar. Por supuesto que el valor predeterminado se
puede modiIicar al momento de la carga si la persona no pertenece a esa
provincia).
Mostrar
EspeciIica las propiedades de Iormato para los datos que se escriben
y presentan en el campo.
Formato
EspeciIica la expresion sobre el uso de mayusculas, el tamao y el
estilo para presentar el campo en la ventana Examinar, en Iormularios o
inIormes.
/.S.S.O. - Tcncas Frgramacn J
173
Por ejemplo, si el campo es caracter y queremos que los datos se
introduzcan en mayusculas, colocamos un signo: ! (exclamacion)
Normalmente los tipos de Iormatos son asignados en los
Iormularios o inIormes, por lo tanto lo explicaremos mejor al llegar a ese
tema.
Mscara de entrada
EspeciIica el Iormato para los valores cuando se escriben en el
campo. Por ejemplo, los numeros de teleIono podrian tener un Iormato
como (999) 999-9999.
Al igual que el Iormato, normalmente se coloca esta propiedad
dentro de los Iormularios.
Ttulo
EspeciIica la etiqueta que aparece para el campo en la ventana
Examinar.
Al igual que las caracteristicas anteriores, normalmente se coloca
esta propiedad dentro de los Iormularios.
Comentario de campo
Proporciona un espacio para escribir notas acerca del campo.
Ejemplo:
Eigura 8
Advertencia
Si colocamos una Regla que
va en contra de los registros
cargados no podremos
activarla. Si establecemos
una regla como que el
codigo debe ser mayor a
cero, cuando agregamos un
registro con append blank, el
codigo tendra valor cero, por
lo tanto NO podremos
agregar registros con esa
/SSO - Tcncas Frgramacn J
174
Eicha de Indices
En esta Iicha podran conIeccionar los indices para la tabla en
cuestion. De esta Iorma podemos reemplazar el comando Index On ... que
aprendieron anteriormente.
Otra nueva particularidad de trabajar los indices desde la Iicha y por
que la tabla pertenece a una base de datos, podran acceder a 4 distintos tipos
de indices como lo vemos en la Iigura 9.
Desde esta Iicha es muy simple administrar los indices de la tabla.
Recuerden que cada tabla puede tener mas de un indice.
Tipos de Indices
Normal
Es el predeterminado y el que usamos hasta ahora. Permite la
duplicacion de la clave, es decir, que dos registros pueden tener el mismo
contenido
ndice principal
Es un indice que nunca permite valores duplicados en los campos o
la expresion especiIicadas. Los indices principales se suelen utilizar dentro
de la tabla principal o "reIerenciada" para establecer integridad reIerencial
en una relacion persistente (tema que desarrollaremos mas adelante). Solo
Nombre del
Tipos de
Campo por el cual
decido hacer el indice
Llama al Generador de
Expresiones donde puedo
elegir el o los campos para
hacer el indice.
Eigura 9
Indica si es
ascendent
e o
/.S.S.O. - Tcncas Frgramacn J
175
puede crear un indice principal para una tabla. El lenguaje devolvera un
error si especiIica un indice principal sobre cualquier campo que ya
contenga datos duplicados.
Indice candidato
En indice que se puede convertir en la clave principal, ya que no
contiene valores nulos ni duplicados. Tiene las mismas caracteristicas que el
principal, pero como principal solo puede haber uno solo, puedo utilizar este
tipo de indice con otros campos.
Indice nico
Tampoco permite duplicacion de claves (o registros con el mismo
valor). No diIiere demasiado del candidato y se incorpora por
compatibilidad con otras aplicaciones.
Ejemplo donde se ven tres tipos de indices:
En la Iigura 10 observaran como el lenguaje identiIica en Iorma
graIica, a cada uno de los tipos de indices.
Reglas de Integridad ReIerencial
Normal
Principal
Candidat
Recuerden que los
indices puede o no
llamarse como los
campos
Eigura 10
/SSO - Tcncas Frgramacn J
176
Integridad ReIerencial (IR)
Las reglas que rigen la coherencia de datos, especiIicamente las
relaciones entre las claves principal y externa de tablas distintas. Visual
EoxPro resuelve la integridad reIerencial mediante reglas a nivel de campo
v a nivel de registro deIinidas por el usuario. El Generador de integridad
reIerencial ayuda a deIinir reglas para controlar como ser insertan,
actualizan o eliminan registros de tablas relacionadas.
Para controlar la IR, es necesario que existan al menos dos tablas
relacionadas, una llamada la tabla principal y otra la secundaria
Las tablas denominadas principales generalmente son las tablas
maestras, es decir, donde se encuentran almacenados los datos reIeridos a
una entidad sin repeticion de clave. Esto signiIica que se puede y de hecho
se debe, crear un indice principal o candidato por los atributos que
identiIicaran a cada registro. Como ejemplo podemos citar al maestro de
empleados, al de alumnos, al de peliculas, de libros, etc.
Las tablas llamadas secundarias o relacionadas son las tablas que
podemos relacionar directamente con las primarias y donde obviamente se
encuentran como atributos de estas las claves, llaves o campos que en las
tablas maestras son clave principal. Por ejemplo: la tabla donde Iiguran las
materias rendidas de los alumnos, la que almacena los libros prestados a los
socios, la que Iigura el alquiler de las peliculas, etc.
El control de IR se realiza entre una tabla que posee un indice
principal o candidato hacia otra que:
1. Posee un indice principal o candidatos. Decimos que es una relacion de
uno a uno, ya que por tener ambas esos tipos de indices obviamente la
clave se repetira solamente una vez.
2. O que posee un indice normal por la clave a relacionar y decimos que es
una relacion de uno a n. Esto se debe a que en la tabla principal Iigura
una sola vez por ser indice principal o candidato y el la relacionada o
secundaria, varias veces por poseer un indice normal.
Como se imaginaran los indices de las tablas en cuestion deben ser
realizados por el mismo atributo. Si hablamos de libros sera el codigo de
libro en la tabla primaria y tambien por codigo de libro en la relacionada. Si
hablamos de alumnos, sera por el legajo en la tabla de alumnos y por legajo
en la tabla materias rendidas. Esta es la unica Iorma que el motor de la base
de datos pueda controlar ambas entidades cuando se produzca una
actualizacion, eliminacion de la clave primaria o insercion de nuevos
registros.
Ejemplos:
Para entender mejor las reglas de integridad enunciaremos algunas
con respecto al ejemplo del video club
Reglas con respecto a la actuali:acion
/.S.S.O. - Tcncas Frgramacn J
177
Cuando se modiIique el codigo de una pelicula en la tabla pelicula,
que se modiIique automaticamente en la tabla alquiler tantas veces como ahi
aparezca (actualizacion en cascada).
Que no permita modiIicar el codigo de la pelicula si es que esta ha
sido alquilada alguna vez, es decir, esta registrada en la tabla alquiler al
menos una vez (restringir la actualizacion)
Reglas con respecto a la eliminacion
Cuando se elimine una pelicula en la tabla pelicula, que se den de
baja todos los registros donde Iigure esa pelicula en la tabla alquiler
(eliminacion en cascada).
Que no permita eliminar una pelicula de la tabla pelicula, si es que
esta ha sido alquilada alguna vez, es decir, que Iigure en la tabla alquiler
(restringir la eliminacion).
Reglas con respecto a la insercion
Que no permita grabar un codigo de pelicula en la tabla alquiler, si
esa pelicula no Iigura en la tabla pelicula (restringir la insercion).
La base de datos del video club con todos los indices generados y
lista para establecer las reglas de IR
Eigura
/SSO - Tcncas Frgramacn J
178
En la Iigura 11 podran apreciar que estan generados todos los
indices, principales o candidatos donde la clave no admite repeticion, y
normales donde el valor de la clave se puede repetir.
Para armar la primera regla de integridad utilizaremos la tabla
pelicula y la tabla alquiler.
Para establecer la relacion debemos tomar con el mouse la etiqueta
del indice de la tabla primaria y arrastrarlo hasta la etiqueta del indice
correspondiente en la tabla secundaria. Si la accion e realiza con exito veran
una linea entre las dos tablas como en la Iigura 12
Hasta aqui la linea solo signiIica que hay una regla de integridad
entre la tabla pelicula (primaria) y alquiler (secundaria) y que es de uno a n.
Pero no tendra ningun eIecto si no la activamos o le decimos que
regla de IR realice especiIicamente. Para ello debemos hacer doble clic en la
linea para entrar el editor de IR. Veremos la siguiente pantalla:
Eigura 12
/.S.S.O. - Tcncas Frgramacn J
179
La pantalla de ModiIicacion de Relacion muestra detalladamente los
mismos datos que el diseador muestra en Iorma graIica. Para programar la
IR todavia debemos presionar el boton e Integridad ReIerencial y
concluiremos a la siguiente pantalla:
Eigura
Eigura 14
/SSO - Tcncas Frgramacn J
180
En la Iigura 14 podran ver que la Iorma de activar o establecer las
reglas de IR no es muy complejo. Deberan leer atentamente la inIormacion
presentada en la solapa de Reglas para la actuali:acion y escoger cual
activar.
Tambien se pueden ignorar las IR, esto signiIica que no tendran
ningun eIecto la relacion entre esas tablas.
De manera similar se presentan las reglas con respecto a la
eliminacion (Iigura 15). Tambien es aconsejable leer atentamente las
opciones de la ventana ya que creo son bastantes claras de interpretar.
Las reglas con respecto a la insercion se reIieren a la insercion o no
de un capo o valor de clave primaria en la tabla hijo, controlando la
existencia de esta clave en la tabla principal.
Por citar un ejemplo, si tengo una relacion entre alumnos y materias
que cursan, si decido restringir la insercion, no podre agregar en la tabla
secundaria un legajo de un alumno que no exista como tal, en la tabla
alumno.
Eigura 15
/.S.S.O. - Tcncas Frgramacn J
181
Las reglas para la insercion son las unicas que tienen que ver o
controlan desde la tabla relacionada hacia la tabla principal.
Ejercicio N1 (RI)
En la base de datos del ejemplo del video club, generar los indices
correspondientes en cada tabla como se establece en la Iigura 11, luego
colocar una regla de IR entre la tabla pelicula y alquiler como se indico
anteriormente.
A partir de esta relacion, colocar de una en una cada regla e ir
probando como Iuncionan.
Como comprobar que funcionan?
En realidad es muy simple y solo necesitamos hacer un browse en la
tabla principal o en la secundaria, depende de que regla estemos por probar
y tratar de modiIicar una clave primaria.
Ejemplo: Si establecimos actualizacion en cascada y modiIicamos la
clave primaria en la tabla padre, deberiamos abrir luego la tabla relacionada
y las claves tendran ahora el nuevo valor. Si en cambio hubiesemos elegido
Eigura 16
/SSO - Tcncas Frgramacn J
182
restringir la actualizacion, no los dejara modiIicar la clave primaria de la
tabla padre (si es que esa clave aparece en la tabla relacionada).
Probar de una en una todas las reglas de IR y comprobar que
Iuncionen.
Ejercicio N 2 (RI)
Si pudieron realizar el ejercicio N 1, ahora estan en condiciones de
agregar otra nueva regla de IR Esta regla puede ser entre socios y alquiler y
debera actuar en Iorma similar a la anterior (Iigura 17). Solo deben tener en
cuenta que cuando esten programando las reglas deben estar posicionados
en la adecuada, ya que se genera un renglon por cada regla que se agrega,
como lo ven al el Iigura 18.
Al establecer dos reglas, el generador de IR muestra los siguientes
datos:
Eigura17
/.S.S.O. - Tcncas Frgramacn J
183
Eigura 18
Indica en cual relacion se
esta trabajando
/SSO - Tcncas Frgramacn J
184
/.S.S.O. - Tcncas Frgramacn J
185
Frgramacn CrnIaa a
C/Is
Comenzando con la Programacion Visual
Introduccion:
Visual EoxPro, a partir de la version 3.0, aade a la programacion
estandar por procedimientos, el concepto de la Programacion Orientada a
Objetos. Esto genera un cambio de perspectiva con respecto a la
programacion estandar. En lugar de pensar en el Ilujo del programa desde la
primera hasta la ultima linea de codigo, se debe pensar en la creacion de:
componentes autocontenidos de una aplicacion que tienen Iuncionalidad
privada ademas de la Iuncionalidad que se puede exponer al usuario.
Las mejoras en el lenguaje orientado a objetos, proporcionan un
mayor control sobre los objetos de las aplicaciones. Asimismo, Iacilitan la
creacion y el mantenimiento de bibliotecas de codigo reutilizable.
Esta Iorma de programar es en gran medida un modo de empaquetar
codigo de manera que se pueda volver a utilizar y mantener mas Iacilmente.
Los paquetes principales se llaman clases.
Antes de entrar de lleno en la programacion veremos las estructuras
de programacion basicas.
C
i
n
c
o
/SSO - Tcncas Frgramacn J
186
Estructuras de Programacion.
Utilizaremos la siguiente convencion para presentar la sintaxis de
los comandos:
~ Se encierran explicaciones sobre tipos de condiciones o variables.
| | Se encierran condiciones o argumentos que son opcionales.
Estructura IF - ELSE - ENDIF
Ejecuta condicionalmente un conjunto de comandos dependiendo
del resultado de una expresion logica.
If condicion logica~
Grupo de comandos && utilizo estos signos parra hacer comentarios
|Else
Grupo de comandos|
Endif
El Else es opcional, si no hay nada que hacer por una respuesta
Ialsa, no se coloca.
Los && se utilizan para hacer un comentario al Iinal de una linea
de programa. Para comentar toda una linea, debo colocar un asterisco (*) al
principio de ella.
Estructura DO CASE - ENDCASE
Ejecuta el primer conjunto de comandos cuya expresion condicional
se evalua como verdadera (.T.).
DO CASE
CASE Expresion1~
/.S.S.O. - Tcncas Frgramacn J
187
Instrucciones
|CASE Expresion2~
Instrucciones
...
CASE Expresion n~
Instrucciones|
|OTHERWISE
Instrucciones|
ENDCASE
Estructura DO WHILE - ENDDO
Ejecuta un conjunto de comandos dentro de un bucle condicional,
siempre y cuando la condicion logica sea verdadera
Argumentos
LOOP
Devuelve el control del programa directamente a la linea del DO
WHILE.
EXIT
TransIiere el control del programa desde el interior del bucle DO
WHILE hasta el primer comando situado detras de ENDDO, es decir
que rompe el ciclo repetitivo
Estructura FOR - ENDFOR
Ejecuta un grupo de comandos o instrucciones un numero concreto
de veces.
DO WHILE Expresion Logica~
Instrucciones
|LOOP|
Instrucciones
|EXIT|
Instrucciones
/SSO - Tcncas Frgramacn J
188
FOR VariableMemoria~ ValorInicial~ TO ValorEinal~ |STEP Incremento|
Instrucciones
ENDFOR
Argumentos
VariableMemoria~
EspeciIica una variable de memoria o un elemento de matriz que
actua como contador. No es necesario que exista la variable de memoria
o elemento de matriz antes de ejecutar EOR ... ENDEOR.
ValorInicial~ TO ValorEinal~
ValorInicial~ es el valor inicial del contador y ValorEinal~ es el
valor Iinal del contador.
STEP Incremento~
Incremento es la cantidad de incremento o decremento del contador.
Si Incremento es negativo, el contador se decrementara. Si omite la
clausula STEP, el contador se incrementara en 1.
Nota: Los valores de ValorInicial~, ValorEinal~ y el
Incremento~ se leen unicamente al inicio. Sin embargo, cambiar el
valor del contador VariableMemoria~ dentro del bucle aIecta al
numero de veces que se ejecutara el bucle.
Si el valor del Incremento es negativo y el valor inicial
ValorInicial~ es mayor que el valor Iinal ValorEinal~, el contador
disminuira cada vez que pase el bucle.
Recorriendo la tabla
Es muy comun que muchas aplicaciones requieran recorrer una
tabla en Iorma secuencial para realizar alguna operacion. Incluso es comun
recorrerla y realizar alguna accion con los atributos dependiendo de una
condicion logica.
Para recorre una tabla podemos hacerlo colocando el comando Skip
dentro de un ciclo repetitivo hasta que Iinalice la tabla, pero existe un
comando que esta especialmente creado para recorrer las tablas y es el
siguiente:
Scan |Eor condicion logica~|
/.S.S.O. - Tcncas Frgramacn J
189
instrucciones
EndScan
Si deseamos recorrer la tabla de principio a Iin todos los registros,
entonces utilizamos el comando Scan sin la clausula Eor; pero si deseamos
que las instrucciones que se encuentran dentro del Scan se ejecuten
solamente si se cumple alguna condicion logica reIerente a algunos de los
atributos de la tabla, utilizamos la clausula Eor.
Ejemplo:
Si deseo mostrar los apellidos de la tabla alumnos, puedo realizar el
siguiente programa:
...
Scan
? alumno.apellido
Endscan
En cambio, si deseo ver los apellidos de los alumnos cuyo codigo
postal es 5000, puedo realizar:
...
Scan Eor alumnos.codpost 5000
? alumnos.apellido
Endscan
La clausula Eor es similar a la estudiada con el comando Browse.
/SSO - Tcncas Frgramacn J
190
Programacion Orientada a Objetos
Ademas de la programacion estandar por procedimientos, podremos
utilizar las caracteristicas que incorpora el diseo orientado a objetos y la
programacion orientada a objetos.
Lo estudiado en las otras materias de la carrera donde aplicaron la
POO, les servira para interpretar la Iorma en la vamos a trabajar desde
ahora.
En este lenguaje podran crear sus aplicaciones orientadas a objetos a
traves de comandos incorporandolos en un archivo de texto al igual que lo
hacen con C o Java. Pero tambien pueden utilizar herramientas que
ayudan a generar entre otras aplicaciones, interIaces graIicas para que el
usuario pueda interactuar con el sistema de inIormacion.
Clases y Objetos
Las clases contienen inIormacion sobre como debe ser la apariencia
y el comportamiento de un objeto, es como un plano o un esquema del
objeto.
Los objetos propiamente dichos, tienen propiedades o atributos, por
ejemplo un color, un tipo de letra o un tamao determinado. Ademas de las
propiedades particulares poseen eventos v metodos.
Eventos y metodos
Cada objeto puede responder a determinadas acciones denominadas
eventos. Cada uno de estos se reIiere a una actividad especiIica y
predeterminada, iniciada por el usuario o el sistema, generalmente por el
usuario.
Algunas de las acciones que desencadenan un evento son un clic, el
movimiento del mouse y la pulsacion de teclas. Tambien puede
desencadenar eventos el sistema, por ejemplo cuando se produce un error.
Los metodos son procedimientos asociados a un objeto a diIerencia
de los procedimientos normales del lenguaje.
Tambien eventos pueden tener metodos asociados. Por ejemplo, si
escribimos un codigo de metodo para el evento Click, ese codigo se
ejecutara cuando se produzca el evento Click de ese determinado objeto.
/.S.S.O. - Tcncas Frgramacn J
191
Tambien pueden existir los metodos independientemente de los eventos,
pero se los debe llamar de Iorma explicita en el codigo.
Generador de Eormularios
El generador de Iormularios en la herramienta que utilizaremos para
aplicar la programacion orientada a objetos.
Para acceder al generador y crear un nuevo Iormulario podemos
ejecutar desde la ventana de comandos:
Create FormnombredelIormulario~
Si en cambio el Iormulario ya existia y queremos modiIicarlo
debemos tipear
Modify FormnombredelIormulario~
Tambien se puede acceder desde el administrador de proyectos en la
opcion Iormularios y presionando el boton nuevo o modiIicar.
Eigura 20
Objeto Iorm. Lo utilizaremos
como objeto contenedor de
otros objetos.
Objetos y controles
disponibles
Ventana de
Propiedades.
/SSO - Tcncas Frgramacn J
192
Cada objeto tiene propiedades particulares y se pueden colocar o
modiIicar desde la ventana de propiedades, para eso primero hay que
seleccionar el objeto con el cual se desea trabar y luego escoger la
propiedad y modiIicarla.
En la ventana de controles de Iormularios encontraremos los objetos
disponibles en este momento para comenzar a trabajar. Para utilizarlos hay
que seleccionarlos con el mouse y luego colocarlos sobre el objeto Eorm.
Ejemplo:
Para comenzar a trabajar plantearemos la realizacion de un modulo
que sirva para ver de una en una las peliculas del video club.
Para hacerlo en Iorma ordenada seguiremos los siguientes pasos:
1. DeIinir con cual o cuales tablas vamos a trabar. En este caso
solo con la tabla peliculas.
2. Colocar la tabla en el entorno de datos. En el entorno de datos
colocaremos todas las tablas y relaciones a utilizar y por deIecto
el sistema abrira las tablas que alli se encuentren, establecera las
relaciones y las cerrara al Iinalizar el Iormulario.
3. DeIinir las variables que utilizaremos en el modulo.
4. Colocar los objetos en el Iormulario y otorgarles las
caracteristicas necesarias a cada uno.
5. DeIinir los metodos y colocarlos dentro de los eventos deseados
para que el modulo actue satisIactoriamente.
6. Probar el Iuncionamiento del modulo y realizar los ajustes
necesarios.
Entorno de datos
En el entorno de datos colocaremos las tablas a utilizar y
deIiniremos las relaciones entre ellas para realizar consultas o acceder a
datos desde una tabla padre a una hijo.
Para acceder a el pueden hacer un clic en el Iormulario con el boton
derecho del mouse y escoger la opcion entorno de datos.
/.S.S.O. - Tcncas Frgramacn J
193
Coloquen la tabla pelicula dentro del entorno de datos, ya que en
este ejemplo solo utilizaremos esa.
Luego deben cerrar la ventana del entorno de datos o minimizarla
para continuar trabajando en el Iormulario.
Estableciendo propiedades
En primer lugar podemos colocarle un titulo al Iormulario, para eso
debemos seleccionarlo y buscar luego la propiedad Caption. Por deIecto en
esta propiedad aparecera Eorm1 que coincide con otra propiedad llamada
Name. Esta ultima se reIiere al nombre del objeto con el cual se le hara
reIerencia, en cambio el Caption el titulo mostrado del objeto.
Eigura
/SSO - Tcncas Frgramacn J
194
DeIinicion de variables
Las variables a deIinir tienen exactamente la misma Iuncion que en
la programacion estructurada y se pueden utilizar para cargar el valor de los
campos de una tabla, para almacenar datos ingresados desde el teclado
utilizando un objeto diseado a tal Iin, realizar calculos etc.
A pesar de que en este ejercicio no modiIicaremos valores de
campos que, puede ser una de las causas para trabajar con variables, las
deIiniremos e utilizaremos para ir introduciendo el tema de las variables y
su tratamiento.
Como seguramente recordaran en la programacion estructurada
deIiniamos las variables casi al comienzo del procedimiento o del modulo
para mantener un orden. Aqui sera exactamente igual, con la diIerencia que
Indica el objeto
seleccionado
Propiedad a
Titulo del Eorm
(propiedad
C ti )
Aqui muestra el nombre
del objeto (propiedad
Name)
Eigura 21-
/.S.S.O. - Tcncas Frgramacn J
195
debemos escoger un evento que se ejecute al inicio del Iormulario para que
deIina las variables antes de ser utilizadas.
Uno de los eventos que podemos utilizar para escribir el metodo es
el evento Init que ocurre cuando se crea un objeto. Si colocamos la
deIinicion de variables alli, se crearan a tiempo para que luego sean usadas.
Para poder escribir la ordena aqui podemos escogerlo de la solapa
de metodos o hacer doble clic en el Iormulario y luego de que aparezca una
pantalla donde se puede escribir el codigo, escoger el metodo desde el
selecto como se ve en la Iigura 22.
Segun la tabla pelicula, las variables que utilizaremos son las que se
ven en la Iigura anterior.
Cuando Iinalizamos podemos salir grabando con CTRL W
Inclusion de objetos al Iormulario
Label (etiquetas)
Ahora estamos en condiciones de comenzar a colocar los objetos
que actuaran en el Iormulario.
Indica el objeto
seleccionado
Indica el evento
seleccionado
Eorma de
reIerenciar a los
objetos.
SigniIica el evento
Eigura
/SSO - Tcncas Frgramacn J
196
En primer lugar necesitaremos objetos que permitan escribir nombre
o leyendas. Para esto utilizaremos los objetos Label.
Estos objetos sirven generalmente para colocar titulos o leyendas en
el Iormulario. Cuando los elegimos y colocamos sobre el Iormulario, por
deIecto tienen el Caption Label1, Label2, etc. segun la cantidad que
coloquemos. Pero al igual que con el Iormulario, podemos cambiar el
Caption de estos objetos.
Tambien podemos cambiar otras propiedades como FontName que
sirve para elegir el tipo de letra que mostrara la propiedad Caption de un
objeto, en este ejemplo del Label.
Podemos cambiar el tamao de la letra desde la propiedad
FontSize, como se ve en la Iigura 24, se eligio un tipo de letra y un tamao
mayor para el titulo del Iormulario.
Eigura 23
Objeto Label
Podemos modiIicar
el tamao y la
posicion de los
objetos hasta
Eigura 23
/.S.S.O. - Tcncas Frgramacn J
197
Otra caracteristica importante que debemos tener en cuenta es que
todas las propiedades o metodos que han sido modiIicados por el
programador, aparecen en con letra negrita.
Cuando agrandamos la letra de los objetos que tienen esta propiedad
como los Label, debemos modiIicar el tamao del objeto con el mouse para
que la letra entre en el. Para no tener que estar haciendo esto cada vez que
modiIiquemos estas caracteristicas, existe una propiedad que hace que el
objeto tome automaticamente el tamao correcto cada vez que se modiIica
la letra o el tamao. Esta propiedad se llama AutoSize y debemos colocarla
en .T. (verdadero).
Text (cuadro de texto)
Continuando con el ejemplo, debemos colocar los objetos que
puedan mostrar el contenido de variables o campos de una tabla. Par eso
utilizaremos los Text que sirven para eso ademas de permitirnos introducir
datos y modiIicarlos.
En este ejemplo utilizaremos los Text para que muestren el valor de
las variables que deberan tener el valor de los campos de la tabla que
estaremos consultando.
Para colocar uno de estos objetos debemos escogerlo desde la barra
de herramientas y colocarlo en el Iormulario, luego se le puede dar el
tamao deseado con el mouse.
Eigura 24
/SSO - Tcncas Frgramacn J
198
Ahora deberan colocar un objeto Text para cada variable o campo
que vayan a mostrar y acomodar los tamaos y posiciones para que queden
bien distribuidos en el Iormulario.
Como le indicamos que deben mostrar?
Para esto debemos buscar la propiedad ControlSource y colocar
alli el nombre de la variable que vincularemos con este objeto. Si no
recuerdan el nombre de las variables, pueden revisar el metodo Init del
Iormulario donde las deIinieron.
Objeto Text
Eigura 25
Eigura 26
/.S.S.O. - Tcncas Frgramacn J
199
Luego de colocar todas las variables en los objetos, podemos
comenzar a colocar los botones con los cuales podremos ver las peliculas.
Command Button (botones de comandos)
Estableceremos para este ejemplo 5 botones:
N Ir al primer registro
N Ir al proximo
N Ir al ultimo registro
N Ir al anterior
N Salir del Iormulario
Al igual que con los otros objetos, colocaremos 5 botones de
comando o command button en el Iormulario, le cambiaremos la propiedad
Caption y estableceremos el tamao como se ve en la Iigura 27
Eigura 27
Objeto
CommandButton
/SSO - Tcncas Frgramacn J
200
Ahora que tenemos todos los objetos que Iormaran parte del modulo
de consulta de peliculas, debemos colocar el codigo donde corresponda para
que Iuncione.
Programar los eventos
Coincidiran que la mayoria del codigo de este ejemplo seguramente
estara en los botones de comandos. Debemos elegir un metodo donde
colocarlo y tratandose de los botones de comando, lo mas comun es que
escojamos el evento Click, que se ejecuta cuando los presionamos con el
mouse.
Para acceder a este evento y programarlo, debemos seleccionar el
boton y escoger el evento desde la ventana de propiedades en la solapa de
metodos o haciendo doble clic sobre el objeto y eligiendo luego el
procedimiento Click desde el selector que aparecera en la esquina superior
derecha de la ventana (revisar Iigura 22).
En primer lugar programaremos el boton Primero. Este boton debe
ir al primer registro de la tabla y mostrar en el Iormulario la pelicula que alli
se encuentra.
Eigura 28
Nombre del objeto. Esta dado por
la propiedad Name
Evento con el cual se esta
trabajando
/.S.S.O. - Tcncas Frgramacn J
201
La ultima linea del codigo del evento o procedimiento Click del
objeto Command1, Thisform.refresh, actualiza los valores de los objetos
comprendidos dentro del Iormulario y tiene que ver con la manera de
reIerenciar a los objetos y propiedades.
Referencias a objetos y propiedades
Para establecer una propiedad o ejecutar un metodo de un objeto,
primero debo saber donde esta contenido para poder hacerlo, por ejemplo:
ObjetoContenedor.Objeto.Propiedad NuevoValorPropiedad
Si quisiera reIrescar el valor de las variables colocadas en la
propiedad ControlSource de un objeto como los Text, deberia realizar lo
siguiente:
ThisIorm.Text1.ReIresh
ThisIorm.Text2.ReIresh
ThisIorm.Text3.ReIresh
ThisIorm.Text4.ReIresh
ThisIorm.Text5.ReIresh
Esto haria reIrescar objeto por objeto los 5 Text que Iorman parte
del Iormulario.
Otra Iorma de reIrescar los valores es hacerlos todos juntos
reIrescando la clase contenedora, que en este ejemplo es el mismo Eorm:
ThisIorm.ReIresh
Cualquiera de las dos Iormas de actualizar los valores, Iuncionaria
bien en este ejemplo.
Continuando con el ejemplo, programaremos el segundo boton
(Siguiente) con el correspondiente codigo. Eigura 29
/SSO - Tcncas Frgramacn J
202
De manera similar programaremos el boton Anterior
Eigura 29
Eigura 30
/.S.S.O. - Tcncas Frgramacn J
203
El boton Ultimo
Y el boton Salir
La propiedad release permite cerrar el Iormulario y Iinalizar su
ejecucion.
Ahora podemos grabarlo y ejecutarlo. Para ejecutarlo pueden hacer
un clic en la barra de herramientas en el signo de admiracion rojo, o desde el
administrador de proyectos seleccionarlo y presionar el boton ejecutar.
Eigura 31
Eigura 32
/SSO - Tcncas Frgramacn J
204
Resumen de Propiedades ms usadas
Propiedad Descripcin
Caption Es el texto mostrado como titulo de un objeto
Name Es el nombre del objeto, es por el cual haremos
reIerencia a el.
ControlSource Se especiIica el origen del dato que esta
relacionado al objeto (variables, campos, etc.)
Enabled EspeciIica si esta activo o no a acciones
realizadas por el usuario
Visible EspeciIica si esta visible u oculto
EontName Se especiIica el tipo de letra que va a mostrar
EontSize EspeciIica el tamao de la Iuente
AutoSize EspeciIica si el tamao de un objeto se adapta a
su contenido
BackColor EspeciIica el color de Iondo
EoreColor Se puede especiIicar el color de la letra
Eormat Se utiliza para dar Iormato de entrada y salida a
los Text. Por ejemplo si colocamos un ! (signo de
exclamacion), los datos se ingresaran en
mayusculas. Ver esta propiedad en la ayuda.
InputMsk EspeciIica como se introducen y como se
muestran los datos. Por ejemplo 99-99999999-9
para ingresar un CUIT.
Resumen Eventos ms usados
Evento Descripcin
Init Se ejecuta cuando se crea un objeto
Click Se ejecuta cuando hacemos un clic con el mouse
sobre un objeto
Valid Se ejecuta antes de salir de un objeto (o perder el
enIoque). Se utiliza mucho para realizar
validaciones de datos de entrada como la Iuncion
Valid utilizada en los Gets del cuatrimestre
Comentario
Llamamos enfoque
cuando un objeto
recibe la atencin del
programa o est
/.S.S.O. - Tcncas Frgramacn J
205
pasado.
GotEocus Ocurre cuando un objeto recibe el enIoque
LostEocus Ocurre cuando un objeto pierde el enIoque
Relacionar Tablas
En un Iormulario podemos mostrar datos que pertenecen a varias
tablas que esten relacionadas entre si.
Para relacionar las tablas, primero deben estar dentro del entorno de
datos y arrastrando el campo de la tabla padre hacia el campo de la tabla
hijo por la cual se desea relacionar, se Iormara una linea entre ambas
signiIicando que estan relacionadas.
Las relaciones establecidas dentro del entorno de datos se realizan
automaticamente cuando se ejecuta el Iormulario, Iacilitando de esta Iorma
la programacion..
Siguiendo con el ejemplo anterior debemos:
1. Incorporar las tablas al entorno de datos
2. Realizar las relaciones
3. Agregar al Iormulario los objetos Text para mostrar nombre del
sello y del tipo de pelicula.
4. Inhabilitar los objetos para que el usuario no los modiIique
accidentalmente.
5. Ejecutarlo ...
(desde la ventana de comandos con Do FormNombredelIorm~
Ejemplo:
Do form conpel
/SSO - Tcncas Frgramacn J
206
Entorno de datos del Iormulario.
Recordar que la relacin se hace desde el campo de la tabla
padre al campo de la tabla hijo que corresponde.
Ahora debemos colocar los Text que mostraran el nombre del sello
y el tipo de pelicula.
Como estos Text solo seran de consulta y necesitamos que se
actualicen al mover la pelicula, podemos colocar como ControlSource
directamente el nombre del campo de la tabla hijo correspondiente. Ademas,
debemos inhabilitarlos para que el usuario no modiIique accidentalmente
los datos de la tabla, ya que si colocamos el campo e la tabla como
ControlSource y lo modiIicamos, es como si estuvieramos en un Browse
modiIicando datos de la tabla.
Una Iorma mas rapida de colocar los text es arrastrarlos desde el
entorno de datos y dejarlos en el Iormulario. Automaticamente se le coloca
el campo como ControlSource.
Eigura
/.S.S.O. - Tcncas Frgramacn J
207
Una vez que estan colocados los nuevos Text y acomodados en el
Iormulario, podemos inhabilitar todos los text ya que solo seran de consulta
por el momento. Para hacer esto debemos seleccionar el objeto, buscar la
propiedad Enabled y colocarla en .E. Luego podran ejecutar el Iormulario y
ver los resultados.
Si prestaron atencion a como Iunciona el Iormulario, notaran que
cuando lo ejecutan comienza mostrando espacios y ceros en los Text que
tienen variables en su ControlSource. Luego de que se mueven, por primera
vez comienza a Iuncionar norma. Esto es por que cuando se ejecuta el
Iormulario las variables se deIinen con ceros, espacios o Iechas en blanco.
Par modiIicar esto y que el Iormulario comience mostrando los
datos del primer registro ni bien este se ejecuta, hay que cargar las variables
con los datos del primer registro luego de deIinirlas como se muestra en la
Iigura 35. Codigo colocado en el Init del Iormulario
Eigura 34
Eigura 35
/SSO - Tcncas Frgramacn J
208
Ejecucion del Iormulario. Noten que los Text estan inhabilitados
Ejercitacion
Trabajar con la propiedad Enabled en verdadero o Ialso para que
cuando lleguen al ultimo registro ya sea con el boton de ir al Ultimo o el de
Siguiente, se desactiven estos para que el usuario no los siga presionando.
Cuando el usuario retroceda o valla al primero se deberan activar
nuevamente. Realizar la misma tarea con los botones Primero y Anterior.
Ayuda:
Para cambiar la propiedad Enabled en tiempo de ejecucion deben
asegurarse de como se llama el objeto a inhabilitar y colocar lo siguiente.
ThisIorm.Nombredelobjeto.Enabled .E.
Ejemplo:
Thisform.Commad1.Enabled .T.
Thisform.Commad3.Enabled .F.
Eigura 36
/.S.S.O. - Tcncas Frgramacn J
209
ModiIicar y dar de Baja
Una vez que esta a punto el Iormulario anterior, podemos utilizar el
mismo Iormulario para modiIicar una pelicula o para darle de baja.
Para esto debemos colocar algunos botones mas en el Iormulario,
programarlos y relacionarlos con el resto.
La idea es que el usuario ubique la pelicula a traves de los botones
de desplazamiento y cuando encuentra una que desea modiIicar, presiona el
boton Modificar y se habilitan los text para que ingrese con el cursor y
modiIique lo que desea. Luego de que esta todo bien, presiona otro boton
para Grabar las modiIicaciones.
Si se arrepiente antes de presionar el boton grabar, colocaremos un
boton Cancelar para cancelar justamente la accion de la modiIicacion.
/SSO - Tcncas Frgramacn J
210
El Iormulario podria quedar con el siguiente aspecto:
Se incorporaron 4 botones nuevos y la programacion del evento
Click de cada uno de ellos, es la siguiente:
Boton ModiIicar
Habilita los text del titulo, el actor, el codigo de sello y el de tipo
para que solo pueda modiIicar esos datos.
Boton Baja
* Activo los Text para que el usuario pueda
* modiIicar el contenido del mismo
thisIorm.text2.enabled.t.
thisIorm.text3.enabled.t.
thisIorm.text4.enabled.t.
thisIorm.text5.enabled.t.
delete
wait windows "Registro Borrado"
Eigura
/.S.S.O. - Tcncas Frgramacn J
211
En el boton de baja solamente marcamos el registro y mostramos un
cartel de registro borrado.
Cuidado! Si tienen alguna regla de integridad que restrinja la
eliminacion, no podran borrar el registro. Recomiendo que la coloquen en
ignorar para poder probar el Iuncionamiento de este ejercicio.
Boton Cancelar
En el boton Cancelar desactivo los Text y cargo nuevamente las
variables con los valores del registro actual.
Boton Grabar
En el boton Grabar, grabo los valores de las variables en los campos
de la tabla y desactivo los text.
Para que el Iormulario Iuncione eIicientemente deberiamos
combinar las activaciones y desactivaciones de los objetos acordes a las
acciones que este realizando el operador, por ejemplo:
N Al presionar el boton de ModiIicar, se inhabilitan todos los
otros excepto Cancelar y Grabar.
* Desactivo Botones
thisIorm.text2.enabled.I.
thisIorm.text3.enabled.I.
thisIorm.text4.enabled.I.
thisIorm.text5.enabled.I.
* Asigno los valores del campo a las
* Variables de trabajo
xcodigopelicula.cod
xnombrepelicula.nombre
xactorpelicula.actor
xcodsellopelicula.codsello
xcodtipopelicula.codtipo
sele pelicula
replace actor with xactor
replace nombre with xnombre
replace codtipo with xcodtipo
replace codsello with xcodsello
* Desactivo botones
thisIorm.text2.enabled.I.
thisIorm.text3.enabled.I.
thisIorm.text4.enabled.I.
thisIorm.text5.enabled.I.
/SSO - Tcncas Frgramacn J
212
N Luego de cancelar o grabar, se deben habilitar los botones de
movimiento y se deberian inhabilitar los de cancelar y grabar
Esta interaccion entre los objetos ayuda a que el usuario no cometa
errores, cuidando de esta Iorma la integridad de los datos.
Agregando Nuevos Registros
A este ejemplo que comienzo con un simple consulta de peliculas,
podriamos cambiarle el titulo a Actualizacion de Peliculas, ya que le hemos
ido incorporando Iunciones de borrado y modiIicado de peliculas. Ahora
vamos a incorporar el alta de nuevos registros.
En primer lugar incorporo un nuevo boton de comando al cual le
colocaremos como Caption: Alta.
El alta de un nuevo registro a una tabla maestra tiene que
considerar varios aspectos como:
N Generar o no, el codigo de la clave primaria en Iorma
automatica.
N Tiene Reglas de Jalidacion en algunos campos? De ser asi
debemos conocerlas para no cometer errores. Por ejemplo que
no este en blanco el nombre de la pelicula. De existir una regla
como esta no podremos usar Append Blank, es su lugar
utilizaremos el comando Insert.
N Si no generamos el codigo en Iorma automatica y tiene indice
principal o candidato, deben saber que es posible que, el usuario
cargue dos codigos iguales. De ser asi el programa dara un error
cuando se quiera grabar.
N En este ejemplo no se aplica, pero de ser una tabla hijo,
debemos revisar si tiene Reglas de Integridad, con respecto a la
insercion.
Que codigo debe ir en el Click del boton Alta?
Para que el usuario pueda cargar nuevos datos debemos limpiar las
variables, habilitar los Text y de esta Iorma permitir que cargue los nuevos
valores. En primera instancia, dejaremos que el usuario coloque el codigo
en Iorma manual y luego estudiaremos como hacerlo en Iorma automatica
para evitar que los repita.
Que pasa si repite el codigo v tenemos clave unica?
Bueno, par resolver esto hay basicamente dos Iormas:
N Inmediatamente despues de escribir el codigo controlar si existe
o no en la tabla como lo haciamos en la programacion
estructurada. Para esto solo hay que buscar un metodo que se
/.S.S.O. - Tcncas Frgramacn J
213
ejecute luego de tipear y conIirmar una dato y colocar las lineas
de codigo necesarias en ese lugar (metodo Valid).
N La otra Iorma es no controlar en el momento y esperar la
instancia de grabar. Si da un error al intentar grabar utilizando
el nuevo comando Insert, el registro no se grabara y habra que
pedirle al usuario que modiIique el codigo que desea ingresar.
En esta oportunidad utilizaremos la primera estrategia ya que creo
puede ser la mas adecuada dando el error justo cuando se carga el nuevo
codigo.
Puedo utili:ar el mismo boton Grabar?
Obviamente si modiIicamos los datos y luego los grabamos, no es lo
mismo que grabar un nuevo registro. La diIerencia radica en que la
modiIicacion se graba sobre el mismo registro y el alta en uno nuevo.
Par poder utilizar el mismo boton grabar, debemos saber cual boton
presiono el usuario previamente para saber que camino tomar. De esta
Iorma si podemos utilizar el mismo boton grabar.
Para saber que boton presiono el usuario, colocaremos una variable
que haga de bandera, ya sea si se presiona Alta o ModiIicar. Preguntando
por el estado de esta bandera sabremos que hacer.
Para deIinir la variable:
Para deIinir una variable que no sera utilizada en el ControlSource
de ningun objeto, como el caso de esta bandera, debemos deIinirla al
comienzo del modulo por ejemplo en el Init del Eormulario y le
otorgaremos el caracter de publica
Por ejemplo:
Public xnuevo
Xnuevo .T.
El Iormulario podria tener el siguiente aspecto
/SSO - Tcncas Frgramacn J
214
Init del Iormulario
Boton ModiIicar
Boton Alta
Para grabar utilizaremos el comando Insert. Recordemos el Iormato:
Insert Into nombretabla~ (campo1,campo2, campo3) Values
(valor1,valor2,valor3)
public xnuevo && deIino la variable que sera bandera
xnuevo .I. && le asigno Ialso
set delete on
xcodigo0
xnombrespace(20)
xactorspace(10)
xcodsello0
xcodtipospace(3)
sele pelicula
set order to codpel && activo el indice por codigo
go top
xcodigopelicula.cod
xnombrepelicula.nombre
xactorpelicula.actor
xcodsellopelicula.codsello
xcodtipopelicula.codtipo
* Activo los Text para que el usuario pueda
* modiIicar el contenido del mismo
thisIorm.text2.enabled.t.
thisIorm.text3.enabled.t.
thisIorm.text4.enabled.t.
thisIorm.text5.enabled.t.
xnuevo.I. && coloca bandera en Ialso
xcodigo0
xnombrespace(20)
xactorspace(10)
xcodsello0
xcodtipospace(3)
* coloco bandera en verdarero
xnuevo.t.
* Activo el Text del codigo para que el usuario solo
* pueda cargar este
thisIorm.reIresh
thisIorm.text1.enabled.t.
/.S.S.O. - Tcncas Frgramacn J
215
Ejemplo:
Insert Into articulos (codigo,descrip) Values (xcod, xdescrip)
Donde codigo y descrip son los campos de la tabla y xcod, xdescrip,
las variables donde se almacenaron los valores de los nuevos campos.
Hay que tener en cuenta que el tipo del primer campo coincida con
el primer valor, el segundo con el segundo y asi sucesivamente.
Este comando inserta un nuevo registro con los valores cargados, de
esta Iorma no daran error las reglas de validacion cuando utilicemos un
Append Blank.
Boton Grabar
Control sobre la existencia o no de la
clave
Cuando escribimos el codigo en el objeto Text1, debemos veriIicar
que no exista otro codigo igual en la tabla, para esto utilizaremos el evento
Valid que se ejecuta cuando presionamos Enter en el objeto o cuando
queremos salir de el.
Esto permitira realizar un control de la clave y si la clave existe,
podemos regresar un valor Ialso (.I.) como si estuvieramos trabajando con la
Iuncion valid de la programacion estructurada.
Al igual que antes el evento valid regresa por deIecto un valor
logico Verdadero. Si alteramos el valor a Ealso el usuario no podra
proseguir cargando otros datos. Ni siquiera podra salir de este objeto hasta
tanto no ingrese un valor que, al ser evaluado en el valid regrese verdadero.
Esto puede transformarse en un arma de doble filo ya que si el
usuario no recuerda, o no quiere continuar con un nuevo valor que
satisfaga la evaluacin del Valid, no podr salir.
Esto sera tenido en cuenta mas adelante para sugerirle al usuario
otras alternativas como ayuda u otra Iorma de cancelar la accion
sele pelicula
iI xnuevo .I. && viene de modiIicar
replace actor with xactor
replace nombre with xnombre
replace codtipo with xcodtipo
replace codsello with xcodsello
else && viene de alta
insert into pelicula (cod, actor, nombre, codtipo, codsello)
;
values (xcodigo, xactor, xnombre, xcodtipo, xcodsello)
endiI
* Desactivo botones
thisIorm.text1.enabled.I.
thisIorm.text2.enabled.I.
thisIorm.text3.enabled.I.
/SSO - Tcncas Frgramacn J
216
Evento Valid del objeto Text1
Otras de las cosas que tenemos que controlar al momento del
ingreso de datos son que exista el codigo de sello y de tipo de pelicula.
Para esto debemos programar el evento Valid de cada uno de ellos
para que revise en las respectivas tablas la existencia de los codigos.
Si los codigos no existen, se emitira un mensaje de error, pero si los
encuentra, deberia actualizar automaticamente el nombre del sello o el tipo
de pelicula.
El evento valid del text4 puede quedar asi:
Y el valid del text5 puede quedar asi:
Cuadros combinados (combos)
Los combos son otra posibilidad de elegir opciones de registros
entre otras cosas. La Iuncion basica del combo, cuando queremos mostrar
datos de una tabla, como un codigo y el nombre de un articulo o si lo
aplicamos al ejemplo que estamos trabajando podria utilizarse para mostrar
los
Eigura 38
No podra continuar hasta que
retorne verdadero.
sele sello
seek xcodsello
iI not Iound()
wait window " El sello no existe"
return .I.
endiI
thisIorm.text6.reIresh && actualizo el nombre del sello
Idea
Hasta que prueben bien el
modulo pueden
comentar la linea del
n I. con un
sele tipo
seek alltrim (xcodtipo)
iI not Iound()
wait window " El tipo no existe"
return .I.
endiI
thisIorm.text7.reIresh
Utilizo la Iuncion Altrim() para
quitarle los espacios en blanco
para no tener problemas en la
busqueda
/.S.S.O. - Tcncas Frgramacn J
217
tipos de las peliculas y los tipos de sellos, es posicionar el puntero
de una tabla, en el registro elegido.
Luego de que el puntero esta en el lugar deseado, obviamente puedo
tomar cualquier dato de ese registro, ya que si el puntero apunta a el, esta en
memoria y por lo tanto disponible para ser utilizado.
El origen da datos que vamos a utilizar en primera instancia para el
combo seran campos de una tabla. Para esto hay que indicarle de cual tabla
debe mostrar los registros y que campos deseamos ver.
Para armar un combo, como otros objetos, existe una ayuda extra
para realizarlos llamada generador. En primer lugar les quiero mostrar cual
es el simbolo en la barra de herramientas para colocar el combo.
Una vez elegido el combo, lo colocan en el Iormulario y haciendo
un clic con el boton derecho del mouse sobre el aparece la opcion de utilizar
el generador para realizar el combo.
Este generador colocara en las propiedades del combo los datos
necesarios para que este Iuncione.
Aspecto de un combo terminado y Iuncionando
Eigura 39
/SSO - Tcncas Frgramacn J
218
Para probar el Iuncionamiento de este objeto, les propongo
modiIicar el Iormulario de actualizacion de peliculas y en vez de colocar el
codigo de sello y actualizarlo en el objeto Text como lo hemos realizado,
podemos colocar un combo para que elijan directamente el sello de pelicula
de la tabla sello. De esta Iorma sera mas rapido, y lo que es mas importante,
evitaremos posibilidades de error ya que el sello de pelicula se elige de los
que ya estan cargados.
Para implementarlo deberan sacar los objetos con los que
trabajamos el sello anteriormente, los text5 al text7 y colocar el combo en el
Iormulario.
Otra cosa que deberan hacer, si es que estan trabajando en el
Iormulario viejo, es borrar todas las reIerencias realizadas a los text que van
a borrar para que no de error el programa.
Luego de sacar las reIerencias a los objetos borrados y colocar el
combo en el Iormulario, deberia quedar con el siguiente aspecto:
Luego podemos llamar al generador para colocar las propiedades
necesarias para que Iuncione.
Eigura 40
Eigura 41
/.S.S.O. - Tcncas Frgramacn J
219
Obviamente tambien se puede construir sin el generador y mas
adelante estudiaremos cuales son las propiedades Iundamentales.
El generador tiene 4 solapas donde debemos colocar en la primera
la tabla de la cual sacara los datos para mostrar.
Las solapas 2 y 3 tienen que ver con el aspecto y algunos caracteres
de Iuncionalidad que los podran descubrir ustedes sin inconveniente.
En la solapa 4 deben elegir el valor que devolvera la propiedad
Value del combo y si desean que el dato elegido se grabe automaticamente
en una tabla en el segundo selector puede colocar el nombre del campo que
recibira el valor elegido del combo.
Es esta oportunidad y casi generalmente no es comun grabar
directamente en la tabla y no se coloca nada en el segundo selector como lo
muestra la proxima Iigura.
Se elige la tabla a
mostrar
Muestra los
campos
disponibles de
esa tabla
Debemos elegir
de los
disponibles,
cuales mostrar
en el combo
Eigura
/SSO - Tcncas Frgramacn J
220
Luego de Iinalizar las 4 solapas del generador, debemos regresar al
Iormulario y colocar las ordenes necesarias para manejar este objeto para
que pueda interaccionar con los demas y Iuncionar bien como lo hacian los
text
En el Init del Form debemos decirle que al comenzar muestre el
nombre del sello cuyo valor corresponda al codigo de sello grabado en la
tabla pelicula.
Esto signiIica que si en la tabla pelicula el primer registro tiene un
codigo de sello 5, el combo gracias a la relacion con la tabla sello, debera
mostrar el nombre correspondiente al sello cuyo codigo es 5.
Entonces, como la relacion acomoda los punteros en Iorma
automatica, solamente debo decirle al combo que muestre el nombre del
sello ya que debe corresponder perIectamente al codigo de sello que se
encuentra en la tabla pelicula.
La propiedad reIerida al valor que muestra el combo se llama:
DispIayVaIue
En el Init del Iorm debemos agregar la linea que le dice al combo
que muestre el valor del nombre
...
...
thisIorm.combo1.displayvalue sello.nombre
Eigura
/.S.S.O. - Tcncas Frgramacn J
221
Con la linea agregada en el init del Iorm, el Iormulario al comenzar,
mostrara el valor del sello en el combo, de lo contrario aparecera en blanco.
El combo debera estar desactivado mientras el usuario se mueve
entre las peliculas. Pero ahora debemos decirle que actualice el valor que va
mostrando a medida que nos movemos en los registros con los botones de
desplazamiento.
Entonces en cada boton de movimiento debo repetir la orden que
colocamos en el init, diciendole que valor mostrar
Como funcionara la modificacion?
La modiIicacion actuara muy similar que antes, con la diIerencia
que deberan habilitar el objeto combo1 en vez de los text.
Cuando presionen el boton Modificar se deberan habilitar los
objetos a modiIicar, entre ellos estara el combo. Cuando el usuario
despliegue el combo y seleccione de alli un sello, nosotros debemos grabar
en una variable qu cdigo de sello eligi, para que este valor sea grabado
luego en la tabla pelicula y de esta Iorma se realice la modiIicacion o
incluso el alta.
Para colocar el valor del codigo elegido en ele combo dentro de una
variable, debemos elegir un evento que se ejecute cuando se produce la
seleccion por parte del usuario.
Este evento puede ser el Click del combo. Entonces en dicho evento
colocaremos la asignacion a la variable.
Click del combo1
En otros de los botones que debemos colocar una pequea
modiIicacion sera el boton grabar, que luego de grabar en la tabla desactiva
los objetos entre ellos el combo
xcodsellosello.cod
...
...
thisIorm.combo1.displayvaluesello.nombre
/SSO - Tcncas Frgramacn J
222
Boton grabar
El resto de los botones que interactuan habilitando e inhabilitando el
combo, llevaran una orden similar.
Cuando generan el combo, podran ver en la ventana de propiedades,
las propiedades que el generador modiIica para que el combo Iuncione. Las
Iundamentales son las siguientes
Propiedad Descripcion Ejemplo
RowSource EspeciIica el origen de
los valores de un combo
Sello.nombre
RowSourceTipe EspeciIica el tipo de
origen. Pueden ser
campos, elementos de
una matriz, archivos,
etc.
6 (campos)
Ejercitacion
De manera similar al de sello, deben colocar el combo para
seleccionar el tipo de pelicula.
Conexion a otros Eormularios
Es muy comun que desde un Iormulario base se requiera llamar a
otro Iormulario que aparezca por encima del primero, se deba trabajar sobre
el y luego regresar al primero.
...
thisIorm.combo1.enabled.I.
...
/.S.S.O. - Tcncas Frgramacn J
223
Para realizar la llamada deben colocar la siguiente orden dentro de
un metodo a ejecutarse en el momento deseado como un Valid de un Text o
pude ser muy comun en el Click de un boton de comandos.
Do form NombredelIormulario~
Ejemplo:
Do Iorm Consulto
Es importante tener en cuenta que para que el segundo Iormulario se
quede encima del primero y no pueda salir el usuario colocar la propiedad
WindowType del segundo Iormulario en Modal.
Esto lo pueden hacer desde la ventana de propiedades del segundo
Iormulario.
Como salir del segundo formulario?
Para salir del segundo Iormulario deben ejecutar la orden
Thisform.ReIease
Esto hara que automaticamente queden parados en el Iormulario
base. Nunca llamen nuevamente el primer formulario desde el segundo
con un Do Form ya que estarn haciendo recursividad.
Objetos para realizar Consultas de Datos
La Grilla
La grilla es en la programacion orientada a objetos casi como el
Browse que se utiliza en la estructurada.
Con este objeto podran mostrar el contenido de una tabla por
pantalla y si realizan las relaciones correspondientes, podran unir varias
tablas en la consulta.
Por ejemplo realizaremos una consulta con este comando que
muestre la tabla alquiler, con los nombres de los socios y de las peliculas
que alquilaron.
Para esto construiremos otro Iormulario y colocaremos en el
entorno de datos la tabla alquiler, socios y peliculas.
Luego relacionaremos alquiler con socio por codigo de socio y con
pelicula por el codigo de esta.
El entorno de datos puede quedar asi:
/SSO - Tcncas Frgramacn J
224
Luego en el Iormulario colocamos la grilla que tiene este simbolo
en la barra de herramientas
Luego de colocar la grilla, podemos llamar al generador para que
nos ayude a la construccion.
En este ejemplo colocaremos en el primer paso la tabla alquiler y
luego en Iorma manual agregaremos las tablas hijos: socios y pelicula.
Eigura 44
Eigura 45
/.S.S.O. - Tcncas Frgramacn J
225
Al igual que el generador de los combos, debemos elegir la tabla
padre en este caso, y los campos que queremos ver en la grilla.
Las solapas 2 y 3 tienen datos reIerentes a la estetica de la grilla
En la solapa 4 no realizaremos relaciones.
Ya esta...
Pueden ejecutarlo y veran lo siguiente:
Como notaran no sale el nombre de la pelicula ni el del socio pero
eso lo solucionaremos de la siguiente manera:
Eigura 46
Eigura 47
/SSO - Tcncas Frgramacn J
226
La grilla en un objeto contenedor, dentro de ella estan las columnas
(Column), los encabezados (Header) de las columnas y los text. Por esto hay
que estar bien seguro de donde estan parados o que objeto estan
seleccionando para trabajar. Desde la Ventana de propiedades podran tener
una vision de todos los objetos y su jerarquia como se muestra en la
proxima Iigura
Las propiedades que modiIica el generador, sobre el objeto Grid,
para que pueda Iuncionar son las siguientes:
Propiedad Descripcion Ejemplo
ColumnCount EspeciIica a cantidad de
columnas que va a tener
la grilla
5
RecordSource EspeciIica el origen de
datos que esta
vinculado con la grilla.
alquiler
Ademas de las propiedades de la Grilla, especiIica las propiedades
de cada Column que muestra
La propiedad donde se le coloca el nombre del campo que va a
mostrar cada columna es:
ControISource
Eigura 48
/.S.S.O. - Tcncas Frgramacn J
227
En este momento estamos preparados para agregar 2 nuevas
columnas a la grilla y colocar el nombre del socio y el nombre de la
pelicula. Lo que deben hacer es lo siguiente:
1. Colocar la propiedad ColumnCount en 7, es decir, agregamos 2
mas.
2. Veran que aparecer 2 nuevas columnas en la grilla. En este
momento pueden acomodar su tamao y posicion. Para hacerlo,
deben clocar el mouse sobre la grilla y presionar el boton
derecho; elegir del menu contextual la opcion ModiIicar y de
esta Iorma podran acceder a cada columna otorgandoles su
tamao y posicion (se pueden arrastrar con el mouse desde el
encabezado), como si estuvieran trabajando en una planilla de
calculos.
Eigura
Columnas insertadas y luego acomodadas para que tengan un orden
logico de aparicion
Eigura 50
/SSO - Tcncas Frgramacn J
228
Noten que los encabezados todavia dicen Header1, lo que Ialta es
ubicar ese objeto y cambiarle la propiedad Caption colocandoles el titulo
deseado.
3. ahora deben seleccionar la columna nueva (Column6) y colocarle en el
ControlSource el nombre del campo a mostrar, en este caso sera
Socio.Nombre
4. De igual manera deben hacer con la columna 7, colocar en la propiedad
ControlSource pelicula.nombre.
5. Por ultimo cambiamos la propiedad Caption de los Header y listo.
Deben tener cuidado ya que la grilla tiene como origen de datos las
tablas, es decir, que si modiIicamos algo en la grilla, pasara directamente a
la tabla.
Para que el usuario no modiIique los datos podemos colocar la
propiedad ReadOnly de la Grilla en verdadero (.T.) para que solo quede de
lectura y no permita la modiIicacion.
Eiltrado de Datos
Supongan que quieren colocar un codigo de pelicula y que muestre
solo los alquileres de esa, es decir que tenemos que realizar un Iiltro de la
tabla alquiler por el codigo de pelicula deseado y mostrar la grilla solo con
los registros que cumplen esa condicion.
Para resolver este problema utilizaremos el ejercicio pasado y le
colocaremos un Text donde deberan introducir el codigo de pelicula. En el
Valid de ese Text Iiltraremos la tabla y reIrescaremos la grilla.
Eigura 51
/.S.S.O. - Tcncas Frgramacn J
229
Que nos hace falta?
1. DeIiniremos una variable en el Init del Eormulario
2. Colocaremos el text en el Iormulario
3. EspeciIicaremos en el ControlSource del text la variable que
hemos deIinido para que se cargue el codigo de la pelicula.
4. Programaremos en el Valid del Text el Iiltro de la tabla pelicula
5. ReIrescaremos la grilla
Init del Eom
Valid del Text
Terminado puede quedar asi:
public xcodpel
xcodpel0
sele alquiler
set Iilter to codpelxcodpel
thisIorm.grid1.reIresh
Eigura 52
/SSO - Tcncas Frgramacn J
230
Listas (list)
Las listas son similares a las grillas pero no tiene el concepto de
trabajar con cada columna por separado.
Tambien tiene la posibilidad de utilizar un generador para
ayudarnos a construir la lista, modiIicando las propiedades necesarias para
que Iuncione. En principio no tiene la posibilidad de mostrar datos de varias
tablas como lo haciamos con la grilla; pero la utilizaremos en primera
instancia, para mostrar datos de una tabla.
Mas adelante y en conjunto con otra materia de este cuatrimestre
(Tecnicas de Programacion) le daremos un uso mas importante, como es el
generar tablas transitorias con lenguaje SQL resultado de unir varias tablas
en una consulta, colocandolas dentro de una Lista, por que justamente es
mas simple que colocarla en una Grilla.
Si utilizamos el ejemplo anterior; pero solo con la tabla alquiler y
cambiamos en el Valid del Text Grid1 por List1, y luego llaman al
generador de la lista, podran verla Iuncionar para que comparen.
El aspecto Iuncionando sera el siguiente:
Eigura 53
/.S.S.O. - Tcncas Frgramacn J
231
Casillas de VeriIicacion y Grupo de
Opciones
Casillas de VeriIicacion
Estos objetos se utilizan para ingresar valores boolenaos, es decir,
cero o uno. En muchas oportunidades es necesario pedirle al usuario que
conIirme con una casilla de veriIicacion si tiene o no cierta propiedad, si
lleva o no descuento, si tiene Iamilia o no, etc., etc.
Al colocar estos objetos en el Iormulario, coloca una casilla con un
nombre que por deIecto es Check1, Check2, etc, que coincide con la
propiedad Name del objeto.
Como ya se habran dado cuenta, debemos cambiarle la propiedad
Caption para colocar el texto deseado
Para ver como Iuncionan podemos colocar en el Iormulario un
boton de comandos que muestre el valor de estos objetos.
Podemos utilizar la propiedad Value para averiguar el valor.
En el Click del boton de comandos colocaremos las siguientes
ordenes:
Eigura
/SSO - Tcncas Frgramacn J
232
Eormulario Iuncionando
Obviamente pueden pasar el valor de estos objetos a una variable y
utilizarla normalmente:
Xlleva ThisIorm.Check1.Value
O directamente pueden grabar en la tabla el valor del Check sin
utilizar variables, si es que el valor a grabar es un cero o un uno.
Replace lleva With ThisIorm.Check1.Value
Grupo de Opciones (OptionGroup)
Los grupos de opciones es otro objeto contenedor que tiene dentro
de el 2 o mas opciones de las cuales el usuario puede elegir una a la vez. Se
puede utilizar por ejemplo para sexo, estado civil, etc.
? thisIorm.check1.value
? thisIorm.check2.value
Lugar donde mostrara el valor que
entregan los objetos Check. Pueden
variar la casilla y presionar el boton para
Eigura 55
/.S.S.O. - Tcncas Frgramacn J
233
Cuando colocan este objeto en el Iormulario aparece, por deIecto,
con dos opciones dentro de el.
Si cambiamos la propiedad ButtonCount a 4 podremos agregar
mas opciones:
Ahora deberan modiIicar cada uno de los Caption de las opciones
del OptionGroup1 llamadas Option1, Option2, Option3, y Option4.
Luego de colocar los caption correspondientes deberan saber que
podemos consultar por dos cosas:
Eigura 56
Eigura 57
/SSO - Tcncas Frgramacn J
234
1. El valor de la clase contenedora:
Thisform.OptionGroup1.Value que nos dara un numero de 1
a 4 (en este ejemplo con 4 opciones) que indicara cual de las
opciones esta activa
2. El valor individual de cada opcion:
Thisform.OptionGroup1.Option1.Value que nos entregara
un cero o un uno segun este seleccionada o no esa opcion.
Podemos colocar dos botones de comandos en el Iormulario
pidiendo que muestren los valores de la clase y otro con los valores
individuales e cada opcion para que vean como Iunciona.
Click del boton que muestra el valor de la clase
Click del boton que muestra los valores individuales de cada opcion
El Iormulario Iuncionando
? ThisIorm.OptionGroup1.Value
? thisIorm.OptionGroup1.Option1.Value
? thisIorm.OptionGroup1.Option2.Value
? thisIorm.OptionGroup1.Option3.Value
? thisIorm.OptionGroup1.Option4.Value
Eigura 58
/.S.S.O. - Tcncas Frgramacn J
235
Paginas o Solapas
Paginas (PageErame)
Las paginas son una solucion cuando queremos cargar o trabajar
con muchos datos en un Iormulario con datos que se pueden subdividir. Por
ejemplo si estoy cargando un cliente en una solapa puedo cargar lo reIerente
a sus datos personales y en otra los laborales.
Cuando colocamos el objeto PageFrame en el Iormulario por
deIecto aparece con 2 paginas. Esto se puede modiIicar de la propiedad
PageCount y colocar alli la cantidad de paginas que deseamos.
Debemos tener en cuenta que el objeto PageFrame es un objeto
contenedor de paginas: Page1, Page2, etc. y a su vez cada Page es
contenedora de los objetos que coloquemos en ella. Por eso si quisieramos
modiIicar una propiedad de un boton que esta en la pagina 2, deberiamos
escribir:
ThisIorm.PageErame1.Page2.Command2.Enabled .T.
Luego de colocar el PageErame en el Iormulario y de agregar las
paginas necesarias debemos comenzar a colocar los objetos en cada una de
ellas. Pare esto es importante que seleccionemos la pagina con la cual
debemos trabajar para colocar los objetos en esa y no en otra.
Para seleccionar la pagina debemos seleccionar primero el
PageErame y presionar el boton derecho del mouse y elegir la opcion
Modificar y luego seleccionar la pagina a trabajar o en la cual se va a
insertar un objeto.
Otra opcion es seleccionar la pagina desde la ventana de
propiedades.
Un ejemplo podria ser el siguiente:
/SSO - Tcncas Frgramacn J
236
Pagina 1
Si notan en la solapa, se lescambio el Caption a cada una colocando
el texto deseado.
Pagina 2
Eigura 59
Eigura 60
/.S.S.O. - Tcncas Frgramacn J
237
El manejo basico de los datos es exactamente igual que antes con la
unica diIerencia que debemos tener en cuanta la Iorma de reIerenciar los
objetos que estan contenidos en las paginas:
Thisform.Pageframe1.Page1.Objeto.Propiedad = Nuevo_VaIor
Los botones u objetos que esten en el Iormulario se seguiran
reIerenciando igual que en los ejemplos anteriores. (en este ejemplo el
modiIicar, grabar y salir, estan directamente sobre el Eorm)
Ejercicios de Aplicacion
Prestamo de Peliculas
Para continuar con el ejemplo del video podemos realizar el modulo
de prestamo de peliculas a un socio.
Que debe hacer el modulo:
1. Seleccionar el socio (veriIicar existencia)
2. Seleccionar la pelicula (veriIicar existencia)
3. Cargar Iecha de prestamo
4. Registrar el pago si es que lo hiciera
5. Grabar todos los datos.
(solo existe una copia de cada pelicula)
Hemos planteado en primera instancia 5 pasos basicos que
seguiremos para realizar el modulo.
Para hacer el Iormulario, pueden comenzar dandole el aspecto
general, colocando los objetos y programarlos al Iinal o pueden ir colocando
y programando uno a uno.
Para que se Iormen una idea general del modulo pueden colocar los
objetos en el Iormulario quedando mas o menos asi:
/SSO - Tcncas Frgramacn J
238
Init del Eormulario
Command1.click (Grabar)
Command2.click (Cancelar)
sele socio
set order to nombre
sele pelicula
set order to nombre
xIechapredate()
sele alquiler
iI thisIorm.check1.value1
insert into alquiler (codpel,codsocio,Iechapres,pago) ;
Values (pelicula.cod,socio.cod,xIechapre,.t.)
else
insert into alquiler (codpel,codsocio,Iechapres,pago) ;
Values (pelicula.cod,socio.cod,xIechapre,.I.)
endiI
thisIorm.command1.enabled.I.
thisIorm.check1.value0
thisIorm.command1.enabled.I.
thisIorm.check1.value0
Eigura 61
/.S.S.O. - Tcncas Frgramacn J
239
Combo2.Click (peliculas)
Otra Iorma de elegir los socios y las peliculas es utilizando el objeto
lista.
Con muy pocos cambios podemos lograr otra Iorma de introduccion
de datos como esta:
El unico cambio que se realizo es borrar los combos y colocar los
list. En el valid del segundo list (eleccion de pelicula) colocamos la
activacion para grabar luego de hacer el control de existencia (en vez del
evento click cuando estaba el combo)
sele alquiler
go top
locate Ior alquiler.codpelpelicula.cod and empty(Iechadev)
iI Iound()
messagebox("No Hay mas Copias",48)
else
messagebox("El Alquiler es Posible")
thisIorm.command1.enabled.t.
endiI
Si no esta la pelicula no activo el
boton Grabar
Eigura 62
/SSO - Tcncas Frgramacn J
240
Valid del List2 (pelicula)
El resto queda igual al Iormulario anterior.
Con los list logramos ver todas las peliculas e incluso se puede
ubicarlas mas rapido comenzando a escribir su nombre en el objeto.
Ejercicio
Realizar la devolucin de la pelcula.
Ayuda
Pueden elegir el socio desde un list, luego en el evento valid de este
Iiltrar la tabla alquiler por codigo de socio y solo mostrar los alquileres de
este socio para reducir la busqueda.
Si no pueden realizarlo o quieren comparar los resultados pueden
encontrar el ejercicio resuelto en la red.
Resolucion de la devolucion de la
pelicula
Una de las Iormas de plantear este ejercicio puede ser con los
siguientes objetos:
sele alquiler
go top
locate Ior alquiler.codpelpelicula.cod and empty(Iechadev)
iI Iound()
messagebox("No Hay mas Copias",48)
else
messagebox("El Alquiler es Posible")
thisIorm.command1.enabled.t.
endiI
/.S.S.O. - Tcncas Frgramacn J
241
Init del Eorm
Valid del List1
Click del Command1 (Grabar)
xIechadevdate()
sele alquiler
** Iiltro por una condicion que no existe
** para que la grilla comience vacia
set Iilter to codpel 1
sele alquiler
set Iilter to alquiler.codsociosocio.cod and;
empty(alquiler.Iechadev)
go top
thisIorm.grid1.reIresh
sele alquiler
replace Iechadev with xIechadev
iI thisIorm.check1.value1
replace pago with .t.
else
replace pago with .I.
endiI
thisIorm.command1.enabled.I.
thisIorm.check1.value0
thisIorm.reIresh
Eigura 63
/SSO - Tcncas Frgramacn J
242
Click del Command2 (Cancelar)
Click del Command4 (Seleccionar)
Notas:
La grilla tiene la propiedad ReadOnly en .T. (solo lectura) para que
no se pueda modiIicar los datos.
Se creo en el entorno de datos una relacion entre la tabla alquiler y
la tabla pelicula para poder mostrar el nombre de la pelicula en la grilla.
La tabla elegida para hacer la grilla es la tabla alquiler, que luego se
le coloco una columna mas para mostrar el nombre de la pelicula.
La tabla base para realizar el List de los socios es la tabla socios.
Mantenemos la casilla de pago, ya que se puede pagar la pelicula en
el momento de la devolucion.
Ejercitacion
Ejercicio del Hotel
En un hotel se requiere modulos de programas que permitan
administrar el consumo de articulos, servicios y dias de hospedaje para
poderle cobrar a sus clientes.
1- Realizar un programa que permita grabar en la tabla registro.dbI,
todos los articulos o servicios que consuma el cliente:
a- ingresar el cliente (veriIicar que exista y que este en el
hotel)
b- ingresar la Iecha
thisIorm.command1.enabled.I.
thisIorm.check1.value0
thisIorm.command1.enabled.t.
/.S.S.O. - Tcncas Frgramacn J
243
c- ingresar el codigo de servicio o de articulo, luego la
cantidad y grabar todo en la tabla registro.dbI (se
grabar un registro por cada articulo o servicio que
consuma el cliente).
2- Realizar un programa que muestre todo lo que consumio un
cliente especiIico y grabarlo en la tabla resumen. (Cada dia en el hotel
cuesta $ 60).
3- Mostrar por pantalla la tabla registro con el nombre del cliente.
Las tablas:
RESUMEN.DBE
Eield Eield Name Type Width Dec
1 NUMERO Numeric 5
2 CODCLI Numeric 3
3 TOTAL Numeric 7 2
REGISTRO.DBE
Eield Eield Name Type Width Dec
1 DIA Date 8
2 CODCLI Numeric 3
3 CODSERV Numeric 3
4 CODART Numeric 3
5 CANT Numeric 3
ARTICULO.DBE
Eield Eield Name Type Width Dec
1 CODART Numeric 3
2 DESCRPCION Character 10
3 PRECIO Numeric 7 2
SERVICIO.DBE
Eield Eield Name Type Width Dec
1 CODSERV Numeric 3
2 DESCRIP Character 15
3 PRECIO Numeric 7 2
CLIETES.DBE
Eield Eield Name Type Width Dec
1 CODCLI Numeric 3
2 NOMBRE Character 15
3 EECHAE Date 8
4 EECHAS Date 8
5 HABIT Numeric 2
/SSO - Tcncas Frgramacn J
244
InIormes
Los inIormes o reportes, son listados de datos que pueden salir por
pantalla o impresora.
Para crear los inIormes existe una herramienta llamada generador de
inIormes que podemos acceder desde la barra de menu o desde el
administrador de proyectos en la solapa de Documentos (en la misma donde
estan los Iormularios).
La IilosoIia basica de Iuncionamiento es listar el contenido de una
tabla. Ahora bien, a esta tabla se la puede Iiltrar o relacionar con otras para
mostrar datos de otras tablas.
Para crear un inIorme tambien podemos escribir en la ventana de
comandos el siguiente comando:
Create Report nombredelinIorme~
Si el inIorme ya existe...
ModiIy Report nombredelinIorme~
En la Iigura vemos 3 zonas de trabajo: El encabezado de la pagina,
el Detalle y la ultima llamada Pie de pagina.
Eigura 65
/.S.S.O. - Tcncas Frgramacn J
245
Tambien vemos una barra de controles con algunos controles
similares a los utilizamos en el generador de Iormularios.
En primer lugar, lo que debemos hacer, es ir al entorno de datos (de
manera similar que en los Iormularios) y colocar la tabla que vamos a
utilizar.
Si vamos a utilizar varias tablas, primero colocaremos la tabla que
hara de padre en las relaciones. Si se equivocan o no saben el orden en que
estaban puestas, pueden sacarlas y volverlas a colocar en el orden correcto.
Como primer ejemplo haremos un listado de socios, entonces
colocaremos solamente esa tabla en el entorno
Ahora comenzaremos a darle Iorma al inIorme.
En la zona del encabezado colocaremos los titulos y textos que se
repetiran en el encabezado de cada pagina del inIorme. Para hacerlo
utilizaremos, desde los controles de inIormes, el objeto Etiqueta
simbolizado con una letra A.
Cuando seleccionamos la etiqueta y hacemos un clic en el inIorme,
aparece un cursor para poder escribir los titulos. Una vez Iinalizado la
escritura, pueden utilizar la herramienta para seleccionar los objetos, y
cambiar desde el menu Formato la Iuente y el tamao de las etiquetas.
Tambien podran centrarlas o agruparlas contra un margen entre otras cosas.
De manera similar que con el encabezado, haremos lo mismo con el
pie de pagina, colocando las etiquetas que se repetiran en cada hoja en el
Iinal de la pagina. (No es obligacion que deban llevar siempre etiquetas).
Eigura 66
/SSO - Tcncas Frgramacn J
246
Ahora debemos colocar los campos de la tabla que queremos que
muestre. Para esto podemos utilizar la herramienta marcada con ab que es
para introducir campos de una tabla o variables.
Los campos que queremos que liste el inIorme, se colocan en la
banda de detalle, que al momento de imprimir, se repetira tantas veces como
registros tenga la tabla para ser listados.
Seleccionamos la herramienta para campos y hacemos un clic en la
banda de detalle. Luego aparece un cuadro de dialogo que pide en primer
lugar el nombre del campo a listar. Si no lo recuerdan, pueden presionar un
boton que tiene tres puntos, encargado de llamar al generador de
expresiones, donde aparecen entre otras cosas, los campos de las tablas que
estan en el entorno de datos y las variables del sistema como asi tambien las
publicas, si es que estan deIinidas con anterioridad.
Para elegir el campo en el generador de expresiones deben hacer
doble clic sobre el campo y este se copiara automaticamente en el cuadro de
expresion.
En la proxima imagen tendran una reIerencia de los cuadros de
dialogos que aparecen para colocar los campos.
Eigura 67
/.S.S.O. - Tcncas Frgramacn J
247
Luego de colocar los dos campos en la banda de detalle podran
ajustar el tamao de la banda para que salgan mas juntos o no, los renglones
listados.
Cuando quieran, a partir de la colocacion de los campos, pueden
pedir la vista preliminar del inIorme desde la lupa o desde el menu Archivo
Jista Preliminar.
Eigura 68
Eigura 69
/SSO - Tcncas Frgramacn J
248
La vista preliminar les servira para ir puliendo los errores para las
impresiones Iinales.
Luego de que el inIorme quedo de su agrado lo pueden grabar, y
para ejecutarlo dentro de una aplicacion deberan colocar la siguiente orden:
Report Form nombredelinIorme~ Preview
Ejemplo:
Report ForminIorm1 Preview
El modiIicador Preview signiIica vista previa o por pantalla, si
colocamos To Print se dirigira a la impresora predeterminada de Windows
Ejemplo:
Report ForminIorm1 To Print
InIormes Avanzados
Listado de varias tablas relacionadas.
Para listar datos de dos o mas tablas en un inIorme, al igual que lo
hicieron en los Iormularios, debemos relacionar las tablas en el entorno de
datos.
En primer lugar debemos colocar las tablas en el entorno de datos
respetando el orden, es decir, deben colocar primero la tabla que sera el
padre de las relaciones.
Por ejemplo listaremos las peliculas alquiladas en un periodo de
Iechas a ingresar.
Como se habran dada cuenta no podremos ingresar ningun dato
dentro de un inIorme, asi que debemos realizar un Iormulario donde se
coloquen las dos Iechas entre las cuales se desea listar los alquileres y Iiltrar
luego la tabla alquiler. Recien en ese momento podremos llamar al inIorme
que listara los registros de la tabla que satisIacen la condicion del Iiltro.
A continuacion veremos el entorno de datos con las relaciones de la
tabla alquiler hacia la tabla pelicula, para sacar el nombre y hacia la tabla
socios para obtener el nombre del mismo.
Recuerden que las relaciones se realizan de la mima manera que en
el entorno de datos de los Iormularios
/.S.S.O. - Tcncas Frgramacn J
249
Si las relaciones estan bien armadas, solo nos resta colocar los
campos en el Detalle y armar los titulos.
Ayuda
Los campos pueden ser arrastrados desde el entorno de datos y
colocados directamente en la linea de detalle, haciendo la tarea mucho mas
rapida.
Eigura
Eigura 71
/SSO - Tcncas Frgramacn J
250
Lo ultimo que resta hacer es, un Iormulario que pida dos Iechas,
Iiltrar la tabla alquiler por esa condicion y ejecutar el inIorme desde un
boton del Iormulario. Luego de que salen del inIorme regresaran
automaticamente al Iormulario de donde partieron.
Calculos dentro de los inIormes
Dentro de los inIormes podemos realizar calculos matematicos o
estadisticos con lo dados que se van listado. Algunas Iunciones vienen
predeterminadas como:
Contar cuantos registros se listaron, sumarlos, sacar el mayor, el
menor, el promedio, la varianza etc.
Pero si queremos mostrar en un inIorme el producto de dos campos
de una tabla como por ejemplo la cantidad por el precio, tambien se puede
hacer.
Contar
Para contar cuantos registros se listaron deben colocar cualquier
campo en el pie de pagina y con un clic del boton derecho llamar a las
propiedades del campo. Ahi eligen el boton de calculos y aparecera el
cuadro de dialogo siguiente:
El cuadro de dialogo anterior muestra todas las acciones que puede
hacer con un campo, en este ejemplo diremos que cuente (recuento).
Eigura 72
/.S.S.O. - Tcncas Frgramacn J
251
Tambien hay un combo donde debemos elegir, donde se pone en
cero el recuento: en el Iinal de la pagina o del inIorme.
Cuando ejecuten el inIorme veran al Iinal de cada pagina el total de
peliculas listadas y, depende donde eligieron que se coloque en cero el
contador, veran el total general o el total de la pagina.
Tambien pueden incorporar dos veces el mismo campo y darles
distintas propiedades, asi podran tener totales por paginas y un total
acumulado.
De la misma manera pueden sumar cantidades numericas u obtener
el mayor o menor valor del campo listado.
Clculos en el detalle
Es muy posible que requieran hacer calculos dentro de la linea del
detalle y no al Iinal de la hoja. Un caso concreto seria un listado de articulos
vendidos como una Iactura o un ticket.
Para aplicarlo en concreto trabajaremos sobre un ejemplo de una
Iarmacia que requiere un modulo para vender sus productos y luego
imprimir un ticket
Las tablas son:
CLIENTE.DBE
Eield Eield Name Type Width Dec
1 COD Numeric 3
2 NOMBRE Character 20
LABORAT.DBE
Eield Eield Name Type Width Dec
1 COD Numeric 3
Eigura 73
/SSO - Tcncas Frgramacn J
252
2 NOMBRE Character 20
MEDICAM.DBE
Eield Eield Name Type Width Dec
1 COD Numeric 3
2 DES Character 20
3 PRECIO Numeric 5 2
4 CODLAB Numeric 3
5 EXI Numeric 5
6 TIPO Numeric 1
TIPO.DBE
Eield Eield Name Type Width Dec
1 COD Numeric 1
2 DES Character 20
TICKET.DBE
Eield Eield Name Type Width Dec
1 NUM Numeric 3
2 CODCLI Numeric 3
3 EECHA Date 8
ITEM.DBE
Eield Eield Name Type Width Dec
1 NUM Numeric 3
2 CODMED Numeric 3
3 CANT Numeric 5
La base de datos quedaria asi:
Eigura 74
/.S.S.O. - Tcncas Frgramacn J
253
En la tabla ticket se guarda los datos basicos del ticket y en la tabla
item cada uno de los codigos de los medicamentos vendidos. Estas tablas se
relacionan por el numero del ticket.
Para el inIorme utilizaremos las tablas item y la de medicam para
sacar el precio.
Noten que el codigo del medicamento y la cantidad vendida estan
en item y el precio en medicam. Entonces debemos hacer una relacion entre
el codigo del medicamento de la tabla item hacia el codigo del mismo en
medicam.
Luego colocaremos los campos en el inIorme en el orden adecuado
y repetiremos el campo cantidad ya que a el le aplicaremos el calculo entre
ese campo y el precio del medicamento.
Eigura
Eigura 76
/SSO - Tcncas Frgramacn J
254
Luego de que estan los campos colocados iremos a las propiedades
del campo donde queremos que realice el calculo del subtotal.
Ayudados por el generador de expresiones debemos colocar el
calculo deseado entre los dos campos. En este caso es la multiplicacion de la
cantidad con el precio.
Ya pueden probar el inIorme y deberia realizar los calculos pedidos
en cada renglon del ticket.
Pero todavia nos Ialta el total al Iinal del ticket. Para esto
utilizaremos la misma estrategia que con el campo anterior (cantidad *
precio) pero iremos a la parte de 'calculos y le diremos que lo sume.
Si colocamos esto en el pie de la pagina tendremos el total de lo
listado en el ticket.
Multiplicamos la
cantidad por el precio
Eigura 77
/.S.S.O. - Tcncas Frgramacn J
255
Cuando pidan la vista previa veran que al Iinal de la pagina aparece
el total de la venta. Obviamente como es un ticket el valor Iinal debe salir al
Iinalizar el ultimo articulo vendido, y no Iijo en un lugar como una Iactura.
Para poder lograr esto estudiaremos el siguiente tema.
Titulo y Resumen
El titulo y el resumen son dos bandas nuevas. La del titulo se repite
solo una vez por inIorme, es decir, como si Iuera una caratula.
La banda del resumen, se imprime solo cuando Iinaliza el inIorme.
Esta banda la podemos utilizar para colocar los calculos de un ticket, ya que
estos se deben realizar al Iinalizar el ultimo articulo vendido.
Para acceder a estas bandas deben hacerlo desde el menu principal
en la opcion InIorme.
Luego aparecera un cuadro de dialogo donde deberan elegir la
aparicion de estas bandas.
Eigura
/SSO - Tcncas Frgramacn J
256
Luego de que aparezca la banda del resumen pueden colocar alli el
campo con los calculos
Si le colocamos algunas lineas para darle mejor aspecto, la
presentacion preliminar quedara asi:
Eigura 79
Eigura 80
/.S.S.O. - Tcncas Frgramacn J
257
Resumen Integracion
Para realizar el modulo completo de la carga del item y su
impresion, primero debemos hacer el Iormulario donde el usuario elija los
articulos a vender, coloque su cantidad y los grabe uno a uno en la tabla
item (en este ejemplo).
Tambien el usuario al Iinalizar la venta debe grabar los datos en la
tabla ticket (aqui graba solo una vez). De esta Iorma se distribuyen los datos
de la venta en dos tablas.
Luego de que la venta esta grabada, pueden habilitar el boton de
imprimir. En ese boton deberan Iiltrar la tabla item por el numero de ticket
ya que en esta tabla estaran todas las ventas anteriores y a ustedes solo les
interesa imprimir la ultima.
Luego de Iiltrar pueden llamar al inIorme.
Otra cosa muy importante y que les sera de mucha utilidad es que si
ustedes deIinen como publicas algunas variables en el Iormularios, podran
colocarlas en el inIorme para que este las muestre. Suele ser util para
mostrar el nombre del cliente, la Iecha o cualquier otro dato que se cargue
en el Iormulario y que deba Iigurar en la impresion.
Eigura 81
/SSO - Tcncas Frgramacn J
258
Ejercitacion
Utilizando los datos de la Iarmacia realizar las siguientes consignas:
1- Registrar la venta de medicamentos:
a) Cargar N de ticket y Iecha
b) Elegir el/los articulos a vender (mostrar nombre,
precio, tipo y nombre de laboratorio)
c) Cargar la cantidad a vender
d) Descontar la existencia (tabla medicam.dbI)
e) Grabar datos en ticket.dbI e item.dbI
2. Realizar un inIorme (impresion del ticket) con todos los datos posibles
3. Mostrar ordenados de mayor a menor los laboratorios que mas
medicamentos vendieron.
4. Realizar un programa que permita mostrar la cantidad Iacturada y la
cantidad de Iacturas realizadas, entre un rango de Iecha a ingresar.

También podría gustarte