Download Bases de Datos

Document related concepts

Modelo de tabla wikipedia , lookup

Capa de acceso a datos wikipedia , lookup

Microsoft SQL Server wikipedia , lookup

Base de datos relacional wikipedia , lookup

Base de datos wikipedia , lookup

Transcript
INTRODUCCION A LOS SISTEMAS DE ARCHIVOS Y
BASES DE DATOS
Tomás Bradanovic P.
Introducción a Los Archivos y Bases de Datos
Los computadores, desde su inicio se han convertido en la herramienta para
modelar por excelencia porque tienen dos potentes características para esta
tarea: pueden almacenar información de manera persistente y pueden
ejecutar procedimientos automatizados (cálculos, búsqueda, selección, etc.).
Las primeras aplicaciones hacían una diferencia clara entre datos y procesos,
los datos eran información estática, guardada en algún lugar que se podía
manipular (procesar) por medio de programas, entonces los datos se
guardaban en archivos que podían ser de tamaño más o menos fijo (como un
archivo con los datos de cuenta para un programa de cuentas corrientes) y
otros de tamaño variable (como los archivos de movimiento que crecen en el
tiempo), en este esquema tenemos:
Archivo de datos
Archivo de datos ----------- Programa
Archivo de datos
En este esquema, que todavía se usa en sistemas pequeños, el programa es
fundamental y actúa sobre los datos, recuperándolos, buscando o
modificando y luego los muestra arreglados de cierta forma.
Volviendo al ejemplo de cuentas corrientes podemos tener un módulo de
programas -por ejemplo- para listar el analítico de una cuenta (la cartola)
este módulo pediría la identificación de la cuenta (clave de búsqueda) y se
iría al archivo de nombres de cuentas, para recuperar el nombre del titular,
su RUT, su límite de crédito, etc. Esos son los datos a desplegar en el
encabezado de la cartola.
Luego el programa recorrería secuencialmente el archivo de movimientos,
que tiene los registros de todas las cuentas almacenados en secuencia,
seleccionando solo los registros que corresponden a la cuenta solicitada y
los desplegaría como líneas de la cartola, del más antiguo al más nuevo.
Operaciones con Archivos
Almacenar datos en una tabla
Esta es la forma mas usada por ser sencilla e intuitiva, es lo que
usan las bases de datos "relacionales" y los archivos planos de
tipo "random" o aleatorio. Consiste en definir campos, nombres y
largos, con lo que describimos una grilla cuyas "lineas"
corresponden a "registros" y las "columnas" a "campos". Los que
conocen las bases de datos o las hojas de cálculo conocen bien
esta idea, por
ejemplo:
NRO
NOMBRE
DIRECCION
TELEFONO
1
PEDRO
LOA 123
223344
2
JUAN
ACACIAS 222
345566
3
DIEGO
CODORNICES 324
765544
También existieron en su época las bases de datos
jerárquicas pero nunca tuvieron tanto éxito como las
relacionales. El hecho es que estamos acostumbrados a
almacenar datos en tablas
Archivos planos vs. Archivos con formato
Los datos se pueden guardar en un soporte magnético (discos duros), en
cinta, en CD, DVD, etc. En la actualidad el soporte magnético es el más
usado porque da la mejor relación entre capacidad de almacenamiento vs
tiempo de recuperación de los datos.
Los datos se graban en archivos, que tienen un nombre y agrupan un
conjunto de datos según cierto orden o estructura. Existen dos formas
distintas de guardar datos: los archivos planos o texto claro, que usan solo
los caracteres del conjunto ASCII normal y guardan los datos tal cual si los
escribiesemos en un block de notas.
La otra forma es en un archivo con formato, que usa caracteres especiales
o bien algún sistema de encriptación u ocultamiento de la información para
que los datos solo se puedan ver usando el programa específico por quien
tiene los permisos. En un archivo de texto plano cualquiera puede ver los
datos simplemente usando el notepad o algún editor de textos básico
Ejemplos de archivo con formato y de texto plano
Los Archivos Random
Son una manera sencilla de guardar los datos en un archivo plano usando Visual
Basic.
Necesitamos guardar en algún lado la cantidad de registros almacenados, para
saber en que posicion se guardará el registro siguiente (en el ejemplo mostrado
hay 3 registros). Esto podria hacerse en otro pequeño archivo con un solo
registro o, por ejemplo, en la primera posicion del mismo archivo, el que quedaría
físicamente así:
3
PEDRO
LOA 123
223344
JUAN
ACACIAS 222
345566
DIEGO
CODORNICES 324
765544
Nótese que eliminamos el campo correspondiente al "número", éste no
necesitamos grabarlo pues está implícito en la posición física donde va grabado
el registro.Luego necesitamos grabar los datos "alineados" es decir todos los
campos deben tener el mismo largo. Supongamos que definimos de antemano
que el campo "nombre" debe tener 30 caracteres, el campo "direccion" 40
caracteres y el campo "teléfono" 20 caracteres ¿como los alineamos?
Simplemente agregándole espacios en blanco. Por ejemplo si entramos el valor
"PEDRO" en el campo de nombre (5 caracteres) tendremos que agregarle 25
espacios en blanco, a "JUAN" (4 caracteres) le agregamos 26 espacios, etc. No
es necesario hacer una rutina para agregar espacios pues esto se hace
fácilmente en Visual Basic con:
Type Registro_de_agenda
Nombre as string * 35
Direccion as string * 40
Telefono as string * 20
End Type
Global Agenda as Registro_de_agenda
Este código se guarda en un módulo .Bas donde van las declaraciones, valores
de inicialización y variables globales o públicas, etc. Las instrucciones
Type....End Type convierten los valores que entramos en esas variables en largo
fijo y la declaración Global (o Dim, Public o Private, según nos convenga) sirve
para crear variables "con apellido" llamadas "tipos de datos definidos por el
usuario", así de ahora en adelante las variables se llamarán:
Agenda.Nombre
Agenda.Direccion
Agenda.Telefono
Esta es una notación muy conveniente y emparentada con la notación de
objetos: es decir el objeto "Agenda" tendría las propiedades "nombre",
"dirección" y "telefono" Luego, para crear un archivo del tipo "random" nos falta
usar solo tres instruciones más "Open" (abre un archivo), "Put" (graba un
registro), "get" (lee un registro) y "Close" (cierra el archivo).
Para "iniializar" un archivo con 1000 registros en blanco por ejemplo, abrimos
una Form, le colocamos un botón con el Caption "Inicializar (Borrar todo)" y le
programamos el evento click con:
Sub Inicializar()
Open "Archivo_de_Agenda" for Random as 1
For z=1 to 1000
Agenda.Nombre=""
Agenda.Direccion=""
Agenda.Telefono=""
Put 1, z, Agenda
Next z
Close
End Sub
¿Se podría usar el archivo sin inicializarlo? si, el único inconveniente sería al
leer registros vacíos aparecería "basura" es decir cualquier información que
haya en el buffer en ese momento
Sub LeerRegistro()
Open "Archivo_de_Agenda" for Random as 1
Get 1, z, Agenda
Nombre=Agenda.Nombre
Direccion=Agenda.Direccion
Telefono=Agenda.Telefono
Close
End Sub
Sub agregar()
Open "Archivo_de_Agenda" For Random As 1
rem
rem leer el indice, incrementar y grabarlo
rem
Get 1, 1, Agenda
ultimo = Val(Agenda.nombre)
If Val(ultimo) = 0 Then ultimo = 1 rem si esta
vacio lo pone en 1
Puntero = ultimo + 1
Agenda.Nombre = Puntero
Put 1, 1, Agenda
rem
rem puntero almacena donde debe grabarse el
nuevo registro
rem
Agenda.Nombre = Text1.Text
Agenda.Direccion = Text2.Text
Agenda.Telefono = Text3.Text
Put 1, Puntero, Agenda
Close
End sub
Sub listar()
Open archivo For Random As 1
rem leer el indice
Get 1, 1, Agenda
ultimo = Val(Agenda.Nombre)
rem listar
For z%=2 to indice
Get 1, z%, agenda
List1.AddItem Agenda.Nombre
Next z
Close
End Sub
Existen dos problemas que a menudo están relacionados al usar archivos
random, son los de buscar (y encontrar) rápidamente un registro y presentar el
archivo ordenado según algún criterio. En ambos casos se usa uno o
más archivos auxiliares de índice, que almacenan la ubicación física de los
registros en distintos órdenes según se requiera.
Para recuperar un registro dentro de un archivo hay dos formas posibles:
1.- hacer una búsqueda secuencial desde el primer registro, uno por uno,
chequeando si es el valor buscado, esto se usa cuando hay que ubicar –por
ejemplo- a una persona por el nombre o parte de él
2.- recuperar directamente por medio de un código que dirija al número de orden
en que el registro está ubicado (por ejemplo para eso se usan los códigos de
barras o los códigos numéricos)
Programar estos índices y usar métodos de ordenación y búsqueda más
sofisticados son procedimientos complicados, y es una de las razones que
originaron y popularizaron el uso de motores de base de datos que automatizan
estas dos tareas. En la programación convencional sin usar bases de datos, se
usan normalmente el método ISAM (Indexed Sequencias Access Mode) y el
algoritmo Quick Sort.
En bases de datos se usa el SQL (structured query language) para estos fines
Los Archivos secuenciales
En los archivos secuenciales los datos no se almacenan en campos de largo fijo
sino como una secuencia continua de datos con algún caracter delimitador que
los separa, el ejemplo anterior –delimitado por comas- quedaría asi:
Pedro,Loa123,223344,Juan,Acacias 222,345566,Diego,Codornices
324,245512… etc.
Un archivo secuencial es como una tira de salchichas donde los datos solo
pueden ir agregandose al final y se debe leer y escribir la secuencia completa
cada vez. Son por lo general complicados de actualizar, ordenar y bastante
lentos, pero tienen algunos usos interesantes como por ejemplo grabar archivos
de texto completos y particularmente archivos del tipo .ini, muy usados en
Windows para ingresar settings
Para usar archivos secuenciales en almacenamiento de datos el procedimiento
es trabajar con toda la sarta de salchichas almacenada en un array en memoria.
Esto limita bastante el tamaño y el rendimiento de estos archivos. Me parece
que las hojas de cálculo usan una estrategia similar y por eso son tán limitadas
en cuanto al manejo de hojas grandes. Para leer un archivo secuencial de texto
en una lista List1, usamos:
Para leer un archivo secuencial en Vbasic usamos
Sub leerarchivo()
Dim Lineatemporal As String
List1.Clear
Open "Archivo_de_Datos" For Input as 1
While not EOF(1)
Line Input 1, Lineatemporal
List1.Additem Lineatemporal
Wend
Close 1
End Sub
Y para escribir (agregar al final) usamos:
Sub escribearchivo()
Open "Archivo_de_Datos" for Append Shared As 1
Print 1, "dato a grabar"
Close 1
End Sub
Este es un ejemplo típico de como trabajan los sistemas procedurales, o sea
donde lo más importante es el proceso. Estos sistemas fueron los primeros en
desarrollarse y tienen muchos inconvenientes a medida que el volumen de datos
crece demasiado (los procesos de búsqueda y recuperación se hacen muy
lentos).
Otro problema es cuando los procesos se complican demasiado, los programas
crecen mucho y llegan a ser imposibles de comprender, excepto por el propio
programador que los hizo. Otro problema de estos sistemas es que el diseño
depende mucho de como están almacenados físicamente los datos (en que
formato), los datos se guardaban en formatos propietarios e incompatibles con
otros programas.
Bases de Datos
Lo anterior se llamaba el problema de la dependencia físico-lógica. "Poco a poco,
el centro de gravedad de la informática, que estaba situado en el proceso, se
desplazo hacia la estructuración de los datos, siendo actualmente los aspectos
relacionados con este tema un eje fundamental alrededor del cual gira una gran
parte del conjunto de problemas con los que se enfrenta todo diseñador de un
sistema de información”.
Se cambia, por tanto, de sistemas orientados hacia el proceso a sistemas
orientados hacia los datos, donde estos adquieren el protagonismo, pasando
desde el plano más bien oscuro y difuso en el que estaban situados a ocupar un
lugar privilegiado en el interés de todo informático.
Surge así, a finales de los sesenta y principios de los setenta, la primera
generación de productos de bases de datos en red (basados en lo que
posteriormente se conocería por modelos jerárquicos y Codasyl), entre los que
destacaron por su impacto el IMS de IBM y el IOMS de Cullinet. Estos productos,
si bien resultaban bastante eficientes, presentaban lenguajes procedimentales,
que obligaban al programador a navegar (registro a registro) por la base de
datos, y que no disponían de la suficiente independencia físico/lógica, lo que
conllevaba una escasa flexibilidad" (Mario Piattini Velthuis).
La base de datos relacional se inventa en 1970, básicamente consiste en un
conjunto de reglas (un modelo) teóricas que independizan las operaciones sobre
los datos de la forma en que estos están almacenados físicamente para ello una
base de datos relacional tiene tres componentes: -Un motor de base de datos
DBMS, que es el conjunto de programas que maneja la creacción y acceso a los
datos físicos, distintos motores de bases de datos deben llevar al mismo modelo
en la capa superior
El DBMS es el que aisla y relaciona la capa superior con los datos físicos, tiene
tres subcomponentes:
-Un lenguaje de definición de datos DDL para definir y documentar las
estructuras de datos
-Un lenguaje de manipulación de datos DML para hacer procesos con los datos
-Un lenguaje de consultas SQL para hacer consultas y obtener vistas de los
datos
La base de datos relacional es la más usada por su sencillez y porque coincide
con nuestra idea intuitiva de como se deben almacenar los datos, relacional, en
palabras simples significa "organizadas como una tabla, en filas y columnas"
pero también existen otras dos formas de organización: jerárquica y en red. La
organización jerárquica sigue el modelo de un organigrama, un arbol geneológico,
etc. con un nodo "raíz" del cual se van descolgando subnodos, la clave de una
organización jerárquica es que cada hijo solo puede tener un padre, o sea solo una
dependencia hacia arriba como muestra la figura:
La tecnología XML, de gran importancia por su potente aplicabilidad en
sistemas de Internet usa un esquema jerárquico para organizar los
datos.
La organización en red es escencialmente igual que la jerárquica pero con el
agregado que los hijos pueden tener varios padres, en estas bases de datos
se usa un registro conector para indicar con quienes está conectado el dato.
Son muy poco usadas por su complejidad.
El Diseño en Tres Capas
Las bases relacionales normalmente se usan en conjunto con la arquitectura en
tres capas (3 Layer Architecture) que consiste en estandarizar y aislar las
operaciones en capas:
1. Capa Física, es el nivel real donde están almacenados los datos (por ejemplo
el disco duro) como se almacenan, en registros, como se indexan, etc. Este
nivel tiene asociada una representación de los datos en registros y campos,
denominada esquema físico. Es un nivel restringido a muy pocas personas.
2. Capa Conceptual, corresponde a una visión de la base de datos, es la
organización lógica de los datos sin importar donde están físicamente
almacenados.
3. Capa de Visión, los usuarios solo tienen acceso a pequeñas porciones de la
capa conceptual (vistas o subconjuntos), rara vez al conjunto total. Por ejemplo
un cajero debe tener su visión restringida a lo que necesita usar y no a ver los
sueldos de sus superiores, la capa conceptual define y divide estas parcelas
para los usuarios.
Ventajas de las bases de datos
1. Independizan los datos de los procesos, si se cambia de programa no es
necesario cambiar los datos y viceversa, porque son bases estandarizadas,
bajando así los costos de mantenimiento.
2. Coherencia, reducen la redundancia (usando la normalización) y se evitan
las inconsistencias (que un mismo dato tenga dos valores distintos al mismo
tiempo)
3. Los datos son más disponibles, ni las plicaciones ni los usuarios son
"dueños" de los datos por tecnología, solo por diseño, los datos pueden ser
usados por distintas aplicaciones y distintos usuarios. Los datos pueden
usarse aunque no haya ningún programa, usando solo el SQL.
4. Procedimientos normalizados, iguales para todos los casos, no hay
procedimientos excepcionales, los accesos y operaciones permitidas están
claramente definidos.
5. El acceso concurrente es mucho más sencillo, por ejemplo varios usuarios
pueden acceder simultáneamente a una misma base de datos e incluso a un
mismo registro, las bases de datos tienen mecanismos incorporados para
evitar inconsistencias a diferencia de los archivos tradicionales.
Desventajas de las Bases de datos
1. Requieren de muchos programas e instalaciones para funcionar:
bibiotecas, APIS, módulos, etc. lo que dificulta la portabilidad, no es sencillo
portar ni migrar una base de datos. La migración entre sistemas legados a un
nuevo sistema es uno de los procesos más críticos y complicados, aunque
hay muchas utilidades para esto.
2. Aunque estándares dentro de su ámbito, el esquema de almacenamiento
físico es propietario y muy oculto, cuando una base de datos se corrompe es
muy difícil recuperar los datos que han quedado intactos, porque su acceso
físico está muy encapsulado.
3. Vulnerabilidad, las bases de datos tienden a ser monolíticas y por lo mismo
muy vulnerables, hay que tener mucho cuidado con las políticas de respaldo.
Algunas marcas de base DBMS:
- MySql, tiene licencia GPL (gratis) basada en un servidor, es
muy rápida pero su rendimiento decae cuando almacena
demasiados datos
-PostgreSqul y Oracle, son de los más poderosos, para grandes
volúmenes de datos
-Access, es el DBMS "casero" de Microsoft almacena los datos
en archivos con extensión mdb, viene con la licencia de los
productos de Office
-Microsoft SQL Server, es la DBMS profesional de Microsoft su
licencia se vende aparte y funciona con los lenguajes .Net como
Visual Basic, etc.