Conceptos básicos: Datos: Los datos son valores que describen hechos, condiciones o situaciones. Un dato puede ser una letra, un número, un signo ortográfico o cualquier símbolo y que representa una cantidad, una medida, una palabra o una descripción. Información: Los datos se convierten en información cuando se organizan de forma que describen un ente o fenómeno. Campo: Es la mínima unidad de información almacenada, por ejemplo el valor: 3.1416927 por sí solo no nos dice nada, hasta que lo asociamos a la cantidad de veces que entra el diámetro de la circunferencia en su perímetro. El valor 30682873864 es solo una serie de números pero al darle formato 30-68287386-4 podemos decir que se trata de un CUIT. Los campos poseen características que debemos conocer para poder utilizarlos: Tipo de dato: Carácter, Numérico, etc. Longitud: Cantidad de símbolos (bytes) que lo conforman Cantidad de decimales: Solo para los datos numéricos Registro: Es un conjunto de campos que están relacionados entre sí, por ejemplo: 30682873864UNLA UNIVERSIDAD NACIONAL DE LANUS Podemos ver claramente una cadena de caracteres formada por tres campos: CUIT NUMERICO (11, 0) SIGLA CARACTER (10) DENOMINACION CARACTER (50) Estos datos podrían haber sido organizados de otras formas para formar un registro, por ejemplo: Separados por comas: 30682873864,UNLA,UNIVERSIDAD NACIONAL DE LANUS Separados por comas y con comillas para las cadenas de caracteres: 30682873864,”UNLA”, ”UNIVERSIDAD NACIONAL DE LANUS” Separados por tabulaciones: 30682873864 ”UNLA” ”UNIVERSIDAD NACIONAL DE LANUS” U otros cientos de formatos que cada uno puede definir y deben conocer todos los que necesiten leer la información contenida en el archivo. Archivo de datos: Es un conjunto de datos almacenados de forma que puedan ser utilizados por un programa de computadora, los archivos de datos están conformados por una cantidad de registros; estos pueden tener longitud fija o variable; poseer registros de cabecera y cierre (registros de control) y estar organizados de forma tal que puedan ser leídos en forma secuencial, dinámica (random) o ambos De esta forma la información necesaria para hacer funcionar una aplicación se agrupa en archivos donde los registros están formados por campos que poseen cierto nivel de relación definida por el individuo que diseña el sistema. A lo largo de la vida útil del sistema este puede pasar por las manos de varios diseñadores que lo modifican agregando campos o archivos; lamentablemente no todos poseemos el mismo criterio y el dejar ciertas reglas al libre albedrio hace que los sistemas lleguen a un momento de su vida útil donde un dato en particular puede encontrarse en distintos archivos con distinto nivel de actualización. Este es un concepto difícil de comprender porque en un mundo ideal que se les describe todo el tiempo en los libros la documentación de los sistemas está completa, pero cuando trabajamos en empresas reales nos encontramos con documentación incompleta, necesidades de desarrollo (tiempos) que impiden realizar el análisis completo en los archivos y programas que los utilizan, programas de los que no tenemos los fuentes y por tanto deben seguir trabajando con la misma estructura de archivo, etc. Todos estos problemas del mundo real son los que dieron como resultado un caos que pedía a gritos ser organizado, es así que nace CODASYL acrónimo para "Conference on Data Systems Languages" que crea en un principio lenguajes estandarizados de programación como COBOL y luego las bases de datos secuenciales que derivaron en las plex hasta llegar a las relacionales que conocemos y utilizamos masivamente hoy en día. Esto no hace que los archivos de datos se hayan dejado de usar, solo que restringió su uso para algunas determinadas funciones como archivos de parámetros y de intercambio de datos entre sistemas. Bases de datos: Las bases de datos son estructuras de datos almacenadas (en su mayoría) en archivos monolíticos (enormes archivos donde se almacenan todos los datos); la estructura utilizada para almacenar estos datos fue variando con las distintas evoluciones de las bases de datos, pero todas ellas se basaron en dos grandes repositorios de datos: el diccionario de datos y los datos del sistema. El diccionario de datos es el corazón de las bases de datos y posee información sobre la forma en que encontraremos almacenados los datos del sistema en la base de datos (por esto también reciben el nombre de metadata). Las razones de esta complejidad se deben a la necesidad de extraer de los sistemas tradicionales la complejidad del manejo de los datos para ponerla en un sistema administrador de base de datos que se encarga de administrarla: este concepto lo podrán ver reconocer del análisis orientado a objetos como encapsulación. La información en todas las bases de datos se encuentra almacenada en tablas que, en un nivel de abstracción razonablemente alto, podemos ver con una apariencia similar a la de una planilla de cálculo, poseen filas y columnas con intersecciones donde se almacenan los datos. La información sobre el formato y contenido de cada tabla se almacena en un sector de la base de datos llamado diccionario de datos. La realidad es que son mucho mas complejas, pero en este momento necesitamos verlas desde un punto de vista simplista para poder comprender como utilizarlas; por tanto y solo para el objetivo de este apunte simplificaremos las bases de datos como un conjunto de datos organizados en tablas donde las columnas de cada fila cumplen con ciertas restricciones que en la teoría veremos como reglas de normalización. Para poder crear las estructuras de datos y consultarlas utilizaremos un lenguaje estructurado de consulta que se conoce como SQL (Structured Query Language). Las instrucciones que se utilizan para crear, actualizar y eliminar las estructuras de datos se llaman DDL (Data Description Language), las que se utilizan para crear o eliminar filas en las tablas o para actualizar sus datos se denominan DML (Data Management Language). Todas las bases de datos relacionales utilizan versiones distintas versiones de SQL adaptadas del estándar creado por ANSI (American National Standards Institute) en sus distintas versiones desde que lo lanzara en 1987 y hasta la última revisión del 2013. Instrucciones DDL: CREATE Se utiliza para crear estructuras de datos, vistas, índices de acceso, tipos de datos de usuario, funciones, procedimientos, disparadores, etc. ALTER Se utiliza para modificar estructuras de datos, índices de acceso, tipos de datos de usuario, funciones, procedimientos, disparadores, etc. DROP Se utiliza para eliminar estructuras de datos, índices de acceso, tipos de datos de usuario, funciones, procedimientos, disparadores, etc. Instrucciones DML: INSERT Se utiliza para agregar datos en una tabla o vista actualizable UPDATE Se utiliza para actualizar los datos de una tabla o vista actualizable DELETE Se utiliza para eliminar datos de una tabla o vista actualizable TRUNCATE Se utiliza para eliminar todos los datos de una tabla MySQL Este año trabajaremos sobre la base de datos MySQL en su última versión liberada que pueden descargar desde http://dev.mysql.com/downloads/ para el sistema operativo que deseen; el instalador para Microsoft Windows contiene todos los utilitarios necesarios, a los aventureros que deseen instalarlo sobre alguna versión de Linux, les recomiendo que lo instalen desde los repositorios de la versión de Linux que tengan instalado (server y cliente suelen estar disponible en paquetes por separado y deben instalar los dos) y luego descarguen e instalen MySQL Workbench y MySql Utilities desde http://www.mysql.com/products/workbench/ La http://downloads.mysql.com/docs/refman-5.6-en.pdf encontraran la documentación completa de la base de datos, incluyendo la del lenguaje SQL utilizado por esta base de datos relacional. Subconjunto de instrucciones SQL de MySQL que utilizaremos este año: Instrucciones DDL en MySQL: CREATE TABLE Se usa para crear estructuras de tablas de datos ALTER TABLE Se usa para modificar estructuras de tablas de datos, se deben seguir reglas de validación de datos cuando las tablas de datos tienen contenido DROP TABLE Se usa para eliminar estructuras de tablas de datos, cuando se eliminan los datos se pierde la información almacenada en ellas CREATE INDEX Se usa para crear índices de acceso a los datos almacenados en las tablas ALTER INDEX Se usa para modificar índices de acceso a los datos almacenados en las tablas DROP INDEX Se usa para eliminar índices de acceso a los datos almacenados en las tablas CREATE VIEW Se usa para crear vistas a las tablas de datos DROP VIEW Se usa para eliminar vistas a las tablas de datos Instrucciones DML en MySQL: INSERT Se usa para agregar filas a las tablas de datos, para que funcione se deben cumplir las restricciones definidas en el diccionario de datos UPDATE Se usa para actualizar los datos de las filas de las tablas, para que funcione se deben cumplir las restricciones definidas en el diccionario de datos DELETE Se usa para eliminar filas de las tablas de datos TRUNCATE TABLE Se usa para eliminar todas las filas de una tabla de datos SELECT Se usa para recuperar la información de una o mas tablas de datos, para que funcione se deben cumplir restricciones del diccionario de datos Instrucciones DDL: Ejercicio 1: Crear una base de datos con nombre “unla_introdb” usando la instrucción CREATE DATABASE Ejercicio 2: Usando la instrucción CREATE TABLE, crear una tabla con nombre “alumnos” en la base de datos “unla_introdb” con el siguiente formato: Columna Tipo de dato Restricciones Adicionales legajo int NOT NULL PRIMARY KEY nombre varchar(50) NOT NULL apellido varchar(50) NOT NULL cohorte smallint NOT NULL activo char(1) DEFAULT 'S' Ejercicio 3: Usando la instrucción CREATE INDEX, crear una indice con nombre “alumnos_ayn” en la tabla “alumnos” de la base de datos “unla_introdb” con el siguiente formato: Columna Orden nombre ascendente apellido ascendente cohorte descendente Ejercicio 4: Usando la instrucción ALTER TABLE, modificar la estructura de la tabla “alumnos” de la base de datos “unla_introdb” agregando las siguientes columnas: Columna Tipo de dato Restricciones fecha_nacimiento datetime NULL fecha_estado datetime DEFAULT CURDATE() estado smallint DEFAULT 0 Estado: {0: activo, 1: regular, 2: libre} Adicionales Ejercicio 5: Usando la instrucción ALTER TABLE, modificar la estructura de la tabla “alumnos” de la base de datos “unla_introdb” eliminando la columna activo Ejercicio 6: Usando las instrucción de los ejercicios 1 a 5 : 1. Crear una base de datos con nombre “ejercicio6” 2. Crear en la base de datos “ejercicio6” las siguientes tablas: 3. Agregar a la tabla “articulos” la columna “precio” (float default 0) 4. Crear un indice por el campo “tipo_articulo_id” con orden ascendente para la tabla “articulos” Ejercicio 7: Usando la instrucción DROP TABLE, eliminar la tabla “tipos_articulo” de la base de datos “ejercicio6” Ejercicio 8: Usando la instrucción DROP DATABASE eliminar la base de datos “ejercicio6” Ejercicio 9: Usando la instrucciones SQL que correspondan agregar las siguientes tablas a la base de datos: Tabla: “notas_alumno” Columna Tipo de dato Restricciones Adicionales nota_id smallint NOT NULL PRIMARY KEY legajo int NOT NULL PRIMARY KEY nota_valor float DEFAULT 0 Tabla: “notas” Columna Tipo de dato Restricciones Adicionales nota_id smallint NOT NULL PRIMARY KEY nota_desc varchar(20) NOT NULL Tabla: “grupos_tp” Columna Tipo de dato Restricciones Adicionales grupo_id smallint NOT NULL PRIMARY KEY grupo_nombre varchar(50) NOT NULL nota_grupal float DEFAULT 0 Ejercicio 10: Usando la instrucciones SQL que correspondan agregar los siguientes valores a la tabla notas: nota_id nota_nom 1 Primer parcial 2 Segundo parcial 3 Tercer parcial 4 Recuperatorio primer parcial 5 Recuperatorio segundo parcial 6 Recuperatorio tercer parcial 7 Final Ejercicio 11: Realizar un resguardo (BACKUP o DUMP o EXPORT) de la base de datos y entregarlo al profesor Instrucciones DML: Usando: Usando la base de datos “unla_introdb” se realizarán los ejercicios en forma grupal y se guardarán los comandos para cada caso, entregándolo al profesor junto con el resguardo del último ejercicio Ejercicio 1: Usando la instrucción INSERT sobre la tabla “alumnos” insertar los datos de los alumnos del grupo de trabajo (al menos 5 registros). Ejercicio 2: Usando las instrucciones DML que corresponda agregar a la tabla “alumnos” la siguientes columnas: Columna Tipo de dato Restricciones dni bigint NOT NULL email varchar(50) NULL grupo_id smallint Adicionales DEFAULT 0 Ejercicio 3: Usando la instrucción UPDATE modificar el contenido de las filas de la tabla “alumnos” agregando la información para las columnas del punto anterior. Ejercicio 4: Usando la instrucción INSERT modificar el contenido de las filas de la tabla “alumnos” agregando la información de los siguientes alumnos: Nombre y Apellido Legajo Cohorte Estado Fabian Gonzalez 23435 2008 2 Esteban Nagata 23437 2008 2 Carlos Urquiza 23455 2008 2 Carolina Martinez 23502 2008 2 Ejercicio 5: Usando la instrucción SELECT consultar todos los datos de la tabla “alumnos”. Ejercicio 6: Usando la instrucción DELETE eliminar de la tabla “alumnos” los datos de los alumnos libres. Ejercicio 7: Usando la instrucciones SQL que correspondan crear la fila para el grupo de los alumnos ingresados en la tabla “alumnos” del grupo de trabajo práctico que les asigne el profesor. Ejercicio 8: Realizar un resguardo (BACKUP o DUMP o EXPORT) de la base de datos y entregarlo al profesor Uso de la instrucción SELECT: Usando: Usando la base de datos “select_introdb” se realizarán los ejercicios en forma grupal y se guardarán los comandos para cada ejercicio, entregándolo al profesor al finalizar el ejercicio. Ejercicio 1: Escribir la sentencia SELECT que permita recuperar la información de la lista de artículos Ejercicio 2: Agregar a la sentencia del ejercicio anterior los datos del tipo de artículo y el precio, para obtener una lista de precios Ejercicio 3: Agregar a la sentencia del ejercicio anterior la restricción necesaria para mostrar solo los artículos del que se poseen existencias, lista de precios de artículos en existencia Ejercicio 4: Teniendo en cuenta que se realiza un pedido de artículos semanalmente, escribir la sentencia SELECT que permita recuperar la información de la lista de artículos cuyas existencias se encuentren por debajo del punto de reposición Ejercicio 5: Modificar la sentencia anterior para mostrar solo los registros que no tengan pedidos pendientes de semanas anteriores Ejercicio 6: Modificar la sentencia anterior para mostrar también los artículos que se traen solo a pedido (punto de reposición = cero) Ejercicio 7: Escribir la sentencia SELECT que permita recuperar la información de la lista de vendedores Ejercicio 8: Agregar a la sentencia anterior la información del jefe de grupo de ventas Entregar al profesor: Las instrucciones SQL creadas para cada ejercicio Uso de la instrucción SELECT … BETWEEN: Usando: Usando la base de datos “select_introdb” se realizarán los ejercicios en forma grupal y se guardarán los comandos para cada ejercicio, entregándolo al profesor al finalizar el ejercicio. Ejercicio 1: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas mensualmente (año y mes) entre los años 2010 y 2011 Ejercicio 2: Escribir la sentencia SELECT que permita recuperar la información de la cantidad de artículos vendidas por tipo de artículo y artículo entre los años 2010 y 2011 Ejercicio 3: Escribir la sentencia SELECT que permita recuperar la información de la cantidad de artículos y monto realizado por sus ventas por tipo de artículo y artículo en los dos primeros trimestres de 2011 Entregar al profesor: Las instrucciones SQL creadas para cada ejercicio Uso de la instrucción SELECT … GROUP BY: Usando: Usando la base de datos “select_introdb” se realizarán los ejercicios en forma grupal y se guardarán los comandos para cada ejercicio, entregándolo al profesor al finalizar el ejercicio. Ejercicio 1: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas mensualmente (año y mes) Ejercicio 2: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas semanalmente (año, mes y semana) Ejercicio 3: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas trimestralmente (año y trimestre) Ejercicio 4: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas mensualmente (año y mes) por artículo Ejercicio 5: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas semanalmente (año, mes y semana) por artículo Ejercicio 6: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas trimestralmente (año y trimestre) por artículo Ejercicio 7: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas mensualmente (año y mes) por tipo de artículo y artículo Ejercicio 8: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas semanalmente (año, mes y semana) por tipo de artículo y artículo Ejercicio 9: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas trimestralmente (año y trimestre) por tipo de artículo y artículo Ejercicio 10: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas mensualmente (año y mes) por grupo de ventas y vendedor Ejercicio 11: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas semanalmente (año, mes y semana) por grupo de ventas y vendedor Ejercicio 12: Escribir la sentencia SELECT que permita recuperar la información del monto total de ventas realizadas trimestralmente (año y trimestre) por grupo de ventas y vendedor Ejercicio 13: Escribir la sentencia SELECT que permita recuperar la información del promedio de la cantidad de unidades de cada artículo vendidas por operación Ejercicio 14: Escribir la sentencia SELECT que permita recuperar la información del promedio de la cantidad de unidades de cada artículo vendidas por operación y vendedor Ejercicio 15: Escribir la sentencia SELECT que permita recuperar la información del promedio de la cantidad de unidades de cada artículo vendidas por operación y grupo de ventas Ejercicio 16: Escribir la sentencia SELECT que permita recuperar las comisiones de ventas totales por cada mes (año y mes) Ejercicio 17: Idem pero separadas por cada grupo de ventas Ejercicio 18: Idem pero separadas por cada vendedor Entregar al profesor: Las instrucciones SQL creadas para cada ejercicio Uso de JOIN: Usando: Usando la base de datos “select_introdb” se realizarán los ejercicios en forma grupal y se guardarán los comandos para cada ejercicio, entregándolo al profesor al finalizar el ejercicio. Reescribir las instrucciones de la práctica de GOUP BY utilizando JOIN para conectar las tablas Entregar al profesor: Las instrucciones SQL creadas para cada ejercicio Vistas Usando: Usando la base de datos “select_introdb” se realizarán los ejercicios en forma grupal y se guardarán los comandos para cada ejercicio, entregándolo al profesor al finalizar el ejercicio. Crear vistas para los primeros doce ejercicios de la práctica anterior. Entregar al profesor: Las instrucciones SQL creadas para cada ejercicio Usando MySQL Workbench para diseñar una base de datos: Diseño de base de datos: Diseñar una estructura de base de datos para almacenar la información de los turnos de una peluquería, tener en cuenta que se deben almacenar datos de: clientes, empleados, especialidades de los empleados e historia de atención a clientes; no entra dentro del alcance la facturación de los servicios. Cargar datos para diez empleados (cuatro peluqueros, dos manicuras, dos asistentes y dos administrativos), dos turnos de atención rotativos semanalmente, no se atiende los lunes, sábado horario extendido (tres turnos de 4hs) Para asegurar que la estructura de datos funciona correctamente verificar que se puedan realizar las siguientes consultas: 1. Agenda del próximo lunes para cada peluquero 2. Historia de atención de un cliente determinado del último mes 3. En que horario se puede hacer corte, manicura y color en forma simultanea para los próximos tres días Entregar al profesor: Entregar el modelo con datos y el prototipo de las consultas en SQL