Está en la página 1de 7

Bases de datos

1. Introducción

Habitualmente, los programas trabajan con información que está en un fichero. Por ejemplo, nuestro simulador de tráfico aéreo trabaja con una lista de planes de vuelo que inicialmente está en un fichero de texto. Al inicio del proceso de simulación, el programa lee el fichero de texto y coloca la información de los planes de vuelo en una estructura de datos (una lista de planes de vuelo). Durante la simulación utiliza la información que hay en la lista (hace recorridos y búsquedas en la lista). Y finalmente, si el usuario lo desea, el programa guarda los planes de vuelo modificados en un fichero de texto. Por tanto, los ficheros de texto se ha usado en dos momentos: al inicio cuando se lee la información para cargarla en la estructura de datos y al final cuando se vuelca la información de la lista en un fichero. Durante el proceso de simulación los ficheros no se usan para nada.

Con mucha frecuencia ocurre que un programa necesita usar cierta información, pero sólo en parte y de forma puntual. Por ejemplo, supongamos que nuestro simulador maneja también información sobre las compañías aéreas. Para cada compañía queremos tener su identificación, su teléfono y su email, para poder comunicarnos con ella. Podríamos pensar en tener un fichero de texto con la información de todas las compañías del mundo, y cargar ese fichero en una estructura de datos al inicio del programa para tenerla disponible durante la simulación, exactamente igual que con la lista de planes de vuelo. Pero a diferencia de los planes de vuelo, la información sobre compañías sólo la necesitamos en momentos concretos y sólo para algunas compañías (por ejemplo, para generar una lista de compañías afectadas por la regulación, con los teléfonos de contacto). Sería muy ineficiente mantener en una estructura de datos la información de todas las compañías, cuando en realidad sólo necesitaremos la información de unas pocas de ellas.

Para estos casos, lo ideal es usar una base de datos y un sistema de gestión de bases de datos. Una base de datos no es más que un fichero organizado de forma especial (no es un fichero de texto) y el sistema de gestión es una aplicación que realiza de forma eficiente consultas y modificaciones de la información que hay en la base de datos. En nuestro proyecto, usaremos una base de datos con las compañías aéreas de todo el mundo. Al inicio de la simulación el programa se conectará a la base de datos (no se cargarán todos los datos en una estructura, como ocurre con la lista de planes de vuelo). Durante la simulación, cuando sea necesario consultar los datos de alguna compañía aérea se realizará la consulta correspondiente a la base de datos, que se resolverá de forma eficiente gracias al gestor de bases de datos. Cuando acabe nuestro programa simplemente cerraremos la conexión a la base de datos y listo.

1

En este práctica aprenderemos a utilizar el sistema de gestión de bases de datos Microsoft SQL Compact Edition, que viene incorporado en la instalación de Visual C# Express Edition. La práctica se organiza entorno a una colección de videos que explican cómo usar ese sistema de gestión de bases de datos desde nuestros programas. En esta guía se explica brevemente todo lo que hay que saber para poder interpretar adecuadamente la información de los vídeos. A lo largo de la guía se proponen ejercicios que deberás ir haciendo a medida que avanzas.

2. Las tablas de una base de datos y el lenguaje para hacer operaciones

Conceptualmente, una base de datos no es más que una colección de tablas. Cada una de las tablas representa una entidad. Por ejemplo, nuestra base de datos va a tener una tabla para representar la entidad “línea aérea”. Podríamos tener más tablas para representar entidades como “modelo de aeronave” (con información sobre las características técnicas de todos los modelos de aeronave del mundo) o la entidad “aeródromo” (con información sobre las características de todos los aeródromos).

Una tabla tiene una serie de finas. Cada fila corresponde a un registro de la base de datos. En el caso de la tabla de líneas aéreas cada fila de la tabla contiene la información de una línea aérea. Las columnas de la tabla corresponden a las diversas informaciones que queremos tener registradas para cada registro. En nuestro ejemplo, para cada línea aérea queremos tener su nombre, su teléfono y el número de aeronaves que tiene la línea aérea. La siguiente imagen muestra el aspecto que puede tener la tabla de líneas aéreas, con información de tres líneas aéreas.

líneas aéreas, con información de tres líneas aéreas. Para hacer operaciones con las tablas de una

Para hacer operaciones con las tablas de una base de datos (consultas y modificaciones) se usa un lenguaje estándar que se denomina SQL (Structured Query Language). La consulta más básica que se puede hacer en SQL es:

SELECT * FROM LineasAereas

Con esta consulta estamos pidiendo que seleccione todas las columnas (*) de todos los registros de la tabla que se llama LineasAereas. El resultado de esta

2

consulta es una tabla con toda la información de la base de datos, es decir, una tabla como la de la imagen anterior. A continuación se muestran algunas consultas con la tabla que se obtiene como resultado (asumiendo que la tabla LineasAereas contiene la información que se muestra en la imagen anterior).

SELECT Nombre FROM LineasAereas

SELECT Nombre FROM LineasAereas

SELECT Telefono FROM LineasAereas WHERE (Nombre = 'Iberia')

SELECT Telefono FROM LineasAereas WHERE (Nombre = 'Iberia')

SELECT Nombre, Telefono FROM LineasAereas WHERE (NumeroAeronaves > 50) AND (NumeroAeronaves < 100)

SELECT Nombre, Telefono FROM LineasAereas WHERE (NumeroAeronaves > 50) AND (NumeroAeronaves < 100)

Además de consultas, también pueden hacerse operaciones de modificación de registros en la base de datos. Por ejemplo, la operación para insertar un nuevo registro en la tabla sería:

INSERT INTO LineasAereas VALUES('AirNostrum', '913456723', 14)

La operación para incrementar el número de aeronaves de Iberia sería:

UPDATE

LineasAereas

SET

NumeroAeronaves = NumeroAeronaves + 1

WHERE

(Nombre = 'AirNostrum')

Ya puedes ver el primer video de la colección, que muestra cómo crear una base de datos y la tabla correspondiente usando el asistente de bases de datos, y cómo realizar operaciones en el lenguaje SQL, también desde el asistente. Reproduce en tu ordenador las operaciones que te muestre el video y comprueba que todo funciona correctamente.

Parte I: Crear la base de datos y hacer consultas desde el asistente

http://youtu.be/btUlvdf9eZ0

Como ejercicio complementario, añade a la base de datos una nueva tabla para registrar modelos de aeronave. Decide tu mismo qué información quieres registrar de cada modelo (dos o tres datos), define las columnas de la tabla, añade algunos registros y práctica con algunas consultas.

Esta tabla muestra más tipos de operaciones en SQL que te ayudarán a tener una visión más amplia de lo que se puede hacer. Los ejemplos se refieren a

3

una base de datos que tiene una tabla de clientes y para cada cliente tenemos su DNI, su nombre y su edad

SELECT count(*) FROM clientes; SELECT * FROM clientes WHERE edad>18 ORDER BY edad ASC; SELECT * FROM clientes WHERE edad>18 ORDER BY edad DESC; SELECT * FROM clientes WHERE edad>18 AND edad <30; SELECT * FROM clientes WHERE DNI=’1111111111H’; SELECT * FROM clientes WHERE nombre LIKE ‘j%’; SELECT * FROM clients WHERE DNI LIKE ‘%H’; SELECT max(edad) FROM clientes;

INSERT INTO clientes VALUES (‘22222222T’, ‘enric’,25); UPDATE clientes SET nombre=’pep’ WHERE DNI=‘22222222T’; UPDATE clientes SET edad=edad+1 WHERE DNI=‘22222222T’; DELETE FROM clientes WHERE DNI=‘22222222T’ and edad<18; DELETE FROM clientes WHERE DNI=‘22222222T’;

Intenta adaptar algunas de estas consultas y modificaciones al caso de tu base de datos y tus tablas.

3. Consultas

y

modificaciones

programas en C#

de

bases

de

datos

desde

nuestros

En el video anterior has visto cómo crear una base de datos con sus tablas y hacer operaciones con ellas usando el asistente de bases de datos. Pero lo que nos interesa realmente es realizar operaciones con bases de datos desde nuestros programas en C#.

Los siguientes videos muestran cómo conectarse desde nuestro programa a una base de datos, realizar consultas y modificaciones. Es importante que veas cómo el programa debe recorrer la tabla resultante de una consulta para extraer de ella la información y mostrarla al usuario. También es importante que veas la diferencia entre hacer una consulta (que da como resultado una tabla con los resultados de la consulta) y hacer una operación de modificación de la base de datos (que no da como resultado ninguna tabla, sino un número entero que indica cuántas filas de la tabla han sido afectadas por la modificación).

Parte II: Conectarse a la base de datos

http://youtu.be/7NvRSClokfI

Parte III: Consultas a la base de datos

http://youtu.be/1OUrNcq9n0A

Parte IV: Más consultas

http://youtu.be/hH9_aIb_hfM

4

Parte V: Modificaciones de la base de datos

http://youtu.be/xF8Xtj4d-qY

Reproduce en tu ordenador las operaciones que muestran estos vídeos y verifica que funcionan correctamente. Después, añade operaciones para realizar consultas y modificaciones de la tabla de modelos de aeronave (las consultas y modificaciones que te apetezcan).

4. Copiar la base de datos de un proyecto a otro

La base de datos es un fichero que está en la carpeta de nuestro proyecto (junto con los ficheros de código o los ficheros de texto con datos). El siguiente video de la colección explica un problema que puede aparecer con los ficheros de la base de datos y que afecta a la integridad de la información que hay en la base de datos. Además de explicar cómo se resuelve este problema, el video muestra cómo debes hacer para pasar la base de datos a tus compañeros de forma que puedan incorporarla a su proyecto. Esto será necesario porque si trabajáis juntos en el proyecto tendréis que usar todos la misma base de datos y si alguien del equipo modifica esa base de datos debe pasársela al resto.

Parte VI: El problema con los ficheros de la base de datos y cómo pasarle la base de datos a los compañeros.

http://youtu.be/5eU6DHZZZvY

Comprueba que no tienes problema para pasar tu base de datos de un proyecto a otro nuevo.

5. Reorganizar el código

El último video de la colección muestra cómo reorganizar el código de forma que cada una de las operaciones que quieres hacer con la base de datos está encapsulada en una función o un procedimiento. El código queda así mucho más claro.

Parte VII: Reorganizar el código

http://youtu.be/-IxB6ExLTgk

Completa el código con procedimientos y funciones para hacer las operaciones que te interesa con la tabla de modelos de aeronave.

En Atenea encontrarás el código correspondiente a esta última versión de nuestro programa.

5

6.

Más sobre bases de datos

En esta práctica has aprendido a trabajar con bases de datos que tienen una o varias entidades (tablas). Esas entidades no tienen relación entre sí y se trabaja de forma independiente con ellas.

Normalmente, las entidades de una base de datos tienen relación entre si. Por ejemplo, la tabla de líneas aéreas puede estar relacionada con la tabla de modelos de aeronave porque una línea aérea puede tener varias aeronaves y cada una de ellas es de un modelo determinado.

Cuando las tablas están relacionadas entonces es posible realizar en SQL consultas más complejas como por ejemplo:

Dime las características técnicas de todas las aeronaves que tiene una determinada línea aérea

Dime el nombre y el teléfono de todas las líneas aéreas que tienen al menos 3 aeronaves con capacidad para más de 150 pasajeros

En este curso no vamos a estudiar cómo hacer bases de datos con entidades relacionadas entre si, ni como hacer esas consultas más complejas. Pero si te interesa el tema, en la siguiente página web encontrarás un tutorial muy bueno que te permitirá aprender mucho más:

http://www.w3schools.com/sql/default.asp

7. Ejercicio

Implement a data base with two entities: user and product. The attributes of a user are: name and password. The attributes of a product are: name, price and number of units of this product available in the store.

Write a C# program (in console mode) that presents to the user a menu with three options:

Subscribe: The program will ask the user for name and password and will insert a new record in the database.

Unsubscribe: The program will ask the user for name and password and will access the data base to check if the password is correct. If so, the program will delete the user from the data base. On the contrary, the program rejects the chosen option.

Access to the system: The program will ask the user for name and password and will access the data base to check if the password is correct. If so, the program will present the user a second group of options. On the contrary, the program rejects the chosen option.

6

The second group of options to be presented to the user if he gains access to the system is:

List all products in the data base.

List information of one product whose name is introduced from console.

Insert a new product.

Delete the product whose name is introduced from console

Calculate the total value of products in the store (the sum of units per prices).

List product that satisfy two conditions:

o

are more expensive than a given price (to be read from console)

o

the number of units of the product in store are less that another quantity also read from console.

7