Introducción a los archivos y bases de datos Introducción a los archivos (I) • Un archivo o fichero es: – Un conjunto de información sobre un tema. – Tratado como una unidad de almacenamiento. – Organizado de forma estructurada para la búsqueda de un dato individual. • Un archivo es independiente de los programas. Adquisición y Tratamiento de Datos 1 Introducción a los archivos y bases de datos Introducción a los archivos (II) Adquisición y Tratamiento de Datos 2 Introducción a los archivos y bases de datos Introducción a los archivos (III) Nombre Apellidos Campos Domicilio Nombre Apellidos Registros Domicilio Fichero Nombre Apellidos Domicilio • Los registros se identifican mediante determinados campos conocidos como claves del registro. Adquisición y Tratamiento de Datos 3 Introducción a los archivos y bases de datos Introducción a los archivos (IV) • Desde el punto de vista físico, el acceso a los datos es: – Secuencial (cinta). – Directa (CD-ROM). • Desde el punto de vista lógico, su organización es: – Secuencial (archivo de texto). – Secuencial indexada (tabla de índices). – Directa (funciones Hash). Adquisición y Tratamiento de Datos 4 Introducción a los archivos y bases de datos Funciones Hash • Las funciones Hash distribuyen las claves: – Aleatoria. – Uniformemente. • Ejemplos: – Truncamiento: Eliminar algunos dígitos de la clave. – Plegado: Romper la clave en partes y sumarlas. – Multiplicación: Romper la clave en partes, multiplicarlas y truncarlas si es necesario. – Módulo (resto): Dividir la clave por un número primo y quedarnos con el resto. Adquisición y Tratamiento de Datos 5 Introducción a los archivos y bases de datos Operaciones sobre archivos. • Las funciones que pueden efectuarse sobre un archivo son: – Apertura: • Se indica el nombre del archivo y se crea un descriptor para identificarlo a partir de este momento. • Indica las operaciones (lectura y/o escritura) que son posibles sobre el archivo. – Cierre: Se elimina el descriptor creado. – Creación: Se crea el archivo vacío. En algunos lenguajes es un modo más de apertura. – Lectura: Se leen datos del archivo. – Escritura: Se escriben datos en el archivo. Adquisición y Tratamiento de Datos 6 Introducción a los archivos y bases de datos Operaciones sobre archivos en C (I) • Apertura de un archivo: #include <stdio.h> /* Archivo cabecera con la declaración de funciones y del tipo FILE */ ...... FILE *fp; /* Declaramos una variable de tipo puntero a la estructura FILE */ if ((fp=fopen(nombre,modo))==NULL) /* Error de apertura del archivo */ • Modos posibles: {r, w, a} [+] [t, b] – – – – – – r: Leer. w: Crear (escribir). a: Añadir o crearlo si no existe (escribir). +: Aceptar también la operación contraria a la indicada. t: Fichero de texto. b: Fichero binario. Adquisición y Tratamiento de Datos 7 Introducción a los archivos y bases de datos Operaciones sobre archivos en C (II) • Cierre de un archivo: fclose(fp) /* Cierra el archivo cuyo descriptor viene dado por el puntero fp */ • Lectura de un archivo: – Archivos de texto: fscanf(). – Archivos binarios: fread(). • Escritura de un archivo: – Archivos de texto: fprintf(). – Archivos binarios: fwrite(). Adquisición y Tratamiento de Datos 8 Introducción a los archivos y bases de datos Operaciones sobre archivos en C (III) • Lectura de un archivo de texto con fscanf(). fscanf(descriptor del fichero,"cadena de control", lista de argumentos) • Donde la cadena de control esta formada por: – Caracteres de no espacio en blanco: Deben leerse esos caracteres. – Caracteres de espacio en blanco: Deben leerse uno o más caracteres de espacio (espacios, tabuladores o retornos de carro). – Especificadores de formato (con posterioridad). • Los argumentos son punteros a las variables que almacenaran los valores leídos. Adquisición y Tratamiento de Datos 9 Introducción a los archivos y bases de datos Operaciones sobre archivos en C (IV) • Escritura de un archivo de texto con fprintf(). fprintf(descriptor del fichero,"cadena de control", lista de argumentos) • Donde la cadena de control esta formada por: – Caracteres: Se escriben esos caracteres. – Especificadores de formato (con posterioridad). • Los argumentos son los valores a escribir, generalmente los valores de las variables. Adquisición y Tratamiento de Datos 10 Introducción a los archivos y bases de datos Operaciones sobre archivos en C (V) • Especificadores de formato: – Van precedidos del símbolo %. – De forma general son un carácter que indica que tipo de datos se va a leer o escribir. • %c: Un carácter. • %d: Un entero. • %f: Un número real. – En el caso de los enteros se puede preceder de s (%sd) para indicar entero corto o de l (%ld) para indicar entero largo. – En el caso de los reales se puede preceder de l (%lf) para indicar double (real de mayor rango). Adquisición y Tratamiento de Datos 11 Introducción a los archivos y bases de datos Ejemplos de manejo de archivos en C (I) • Lectura de un archivo de texto: #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; float v; if ((fp=fopen("datos.txt","rt"))==NULL) /* Abrimos el archivo para lectura en modo texto */ { fprintf(stderr,"\nError abriendo el archivo\n"); /* Mostramos un mensaje*/ exit(0); /* Salimos del programa */ } while (fscanf(fp,"%f\n",&v)==1); /*Mientras leamos un elemento*/ fclose(fp); /* Cerramos el archivo */ return 0; /* Terminamos el programa */ } Adquisición y Tratamiento de Datos 12 Introducción a los archivos y bases de datos Ejemplos de manejo de archivos en C (II) • Escritura de un archivo de texto: #include <stdio.h> #include <stdlib.h> #define N 1000 int main(void) { FILE *fp; float vector[N]; int num,i; /* Suponemos que num contiene el número de elementos del vector que deseamos guardar, por supuesto dicho número es menor o igual que N */ if ((fp=fopen("datos.txt","wt"))==NULL) /* Creamos para escritura en modo texto */ { fprintf(stderr,"\nError creando el archivo\n"); /* Mostramos un mensaje*/ exit(0); /* Salimos del programa */ } for(i=0;i<num;i++) if (fprintf(fp,"%f\n",vector[i])<0) { fclose(fp); /* Cerramos el archivo */ fprintf(stderr,"\nError escribiendo el archivo\n"); /* Mostramos un mensaje */ exit(0); /* Salimos del programa */ } fclose(fp); /* Cerramos el archivo */ return 0; /* Terminamos el programa */ } Adquisición y Tratamiento de Datos 13 Introducción a los archivos y bases de datos Sistemas de gestión de archivos (I) • Los archivos se diseñan a la medida de los programas. • Los programas necesitan conocer las estructura de los archivos. • El diseño inicial: – Hace eficientes los programas desarrollados inicialmente al estar los archivos pensados para ellos. – Ineficientes posteriores programas al usar archivos no pensados para estos nuevos programas. Adquisición y Tratamiento de Datos 14 Introducción a los archivos y bases de datos Sistemas de gestión de archivos (II) • Problemas: – La información aparece duplicada. – La actualización de información es complicada. – Pueden existir incongruencias en la información. Programa de actualización de empleados DA Archivo maestro de empleados Programa de informe de empleados DA Archivo maestro de fichas Programa de extensión de cheques DA DA Adquisición y Tratamiento de Datos 15 Introducción a los archivos y bases de datos Bases de datos (I) • Una base de datos esta formada por: – Un conjunto de datos. – Un software para la gestión de los mismos. • De forma que: – Se controla el almacenamiento de datos redundantes. – Los datos son independientes de los programas que los usan. – Las relaciones entre los datos se almacenan junto con ellos. – Se puede acceder a los datos de muy diversas formas. Adquisición y Tratamiento de Datos 16 Introducción a los archivos y bases de datos Bases de datos (II) • En una base de datos: – Los objetos o elementos sobre los que se almacena información se llaman entidades. – Los datos que se almacenan sobre cada entidad se llaman atributos. – Además, se almacena relaciones entre las distintas entidades existentes. • Las entidades y atributos son conceptos abstractos, representados internamente de distintas formas según cada base de datos. Adquisición y Tratamiento de Datos 17 Introducción a los archivos y bases de datos Bases de datos (III) • Las bases de datos se clasifican en: – Jerárquicas. – En red. – Relacionales. • Toda base de datos jerárquica puede representarse mediante una base de datos en red. • Toda base de datos en red puede representarse mediante una base de datos relacional. Adquisición y Tratamiento de Datos 18 Introducción a los archivos y bases de datos Bases de datos jerárquicas (I) Coche Motor Cuerpo Chasis Registros Puerta izquierda Tirador Ventana Adquisición y Tratamiento de Datos Puerta derecha Capota Techo Seguro 19 Introducción a los archivos y bases de datos Bases de datos jerárquicas (II) • Representan relaciones padre/hijos. • Permiten: – – – – Obtener un registro padre mediante su clave. Descender hasta el primer hijo. Moverse lateralmente hasta el siguiente hijo. Ascender hasta el padre. • Las relaciones padre/hijo se representan de forma explícita en la base de datos (punteros). • El producto más conocido es Information Management System de IBM, introducido en 1968. Adquisición y Tratamiento de Datos 20 Introducción a los archivos y bases de datos Bases de datos en red (I) Cliente A Cliente B Artículo A Artículo B Conjunto Registro Pedido 1 Adquisición y Tratamiento de Datos Pedido 2 Pedido 3 Pedido 4 21 Introducción a los archivos y bases de datos Bases de datos en red (II) • Representan relaciones padres/hijos. • Estándar oficial CODASYL (1971). • Permiten: – – – – Obtener un registro padre mediante su clave. Descender hasta el primer hijo. Moverse lateralmente hasta el siguiente hijo. Ascender hasta uno de los padres. • Presentan los mismos inconvenientes que las bases de datos jerárquicas. Adquisición y Tratamiento de Datos 22 Introducción a los archivos y bases de datos Bases de datos relacionales (I) • Fueron propuestas por el Dr. Codd en 1970 como superación de los problemas de las bases de datos jerárquicas y en red. • Las estructuras padre/hijos o padres/hijos desaparecen de forma explicita. • Los datos se representan como sencillas tablas fila/columna de valores de datos. • Todas las operaciones sobre la base de datos operan sobre esas tablas. Adquisición y Tratamiento de Datos 23 Introducción a los archivos y bases de datos Bases de datos relacionales (II) Tabla PROFESORES CODIGO NOMBRE APELLIDOS CATEGORIA ANTIGUEDAD H0001 H0002 H0003 … Antonio Amparo Isabel … García García Pérez Pérez Fernández Fernández … Catedrático Ayudante Titular … 15/02/1983 01/09/1997 19/04/1991 … • Cada fila representa una única entidad física. • Cada columna representa un atributo. • Una tabla vacía (sin filas) sigue teniendo definidos los atributos (columnas). Adquisición y Tratamiento de Datos 24 Introducción a los archivos y bases de datos Bases de datos relacionales (III) • En una base de datos relacional no existe ningún orden en la filas. – No podemos seleccionar una fila por su posición. – Debemos utilizar un identificador (clave primaria) que determina de forma unívoca una entidad (fila). Tabla PROFESORES Tabla AULAS CODIGO NOMBRE APELLIDOS EDIFICIO NUMERO CAPACIDAD H0001 H0002 H0003 … Antonio Amparo Isabel … García García Pérez Pérez Fernández Fernández … E1 E1 E2 … 11 12 11 … 100 120 110 … Clave primaria Adquisición y Tratamiento de Datos Clave primaria 25 Introducción a los archivos y bases de datos Bases de datos relacionales (IV) • Las relaciones padre/hijos o padres/hijos pueden existir, pero no de forma explícita. • Para ello se utilizan las claves primarias de una tabla en otra tabla (clave foránea). Tabla ASIGNATURAS Tabla PROFESORES CODIGO NOMBRE PROFESOR CODIGO NOMBRE APELLIDOS 10000 10001 10002 … Tratamiento de datos Análisis estadístico Cálculo numérico … H0001 H0002 H0003 … H0001 H0002 H0003 … Antonio Amparo Isabel … García García Pérez Pérez Fernández Fernández … Clave foránea Clave primaria Clave primaria Adquisición y Tratamiento de Datos 26