DE INGENIERIA DE SISTEMAS INTRODUCCIN AL DISEO DE BASES DE DATOS
Relaciones entre clases
Las clases creadas interactan dentro de un sistema, para esto debemos crear muchas clases y objetos que permitan lograr que el sistema responda al comportamiento para el cual fue creado. Dicha colaboracin entre clases hace necesario establecer relaciones entre ellas.
Navegabilidad: Las relaciones existentes entre las clases nos indican como se comunican los objetos de estas clases entre s. Los mensajes navegan por las relaciones existentes entre las clases.
Objetivos:
Describir otras relaciones entre clases distintas de la herencia como la asociacin, la agregacin, la composicin o la anidacin. Interpretar el cdigo fuente de una aplicacin Java donde aparecen clases asociadas, agregadas, compuestas y anidadas.
Asociacin
Las asociaciones son conexiones conceptuales entre clases. Por ejemplo la asociacin, entre trabajador y empresa. Un trabajador labora en una empresa la asociacin conectara con una lnea a trabajador y empresa, si vemos los roles de cada uno podemos decir que el trabajador es un empleado y la empresa es la empleadora. Labora en es el nombre de la asociacin y la colocamos sobre la lnea, mientras que los roles (empleado, empleador) los colocamos bajo la lnea a cada lado segn corresponda. As nuestra relacin Un trabajador labora en una empresa en UML se vera as:
Las asociaciones pueden funcionar en ambos sentidos. Si vemos el ejemplo anterior desde la perspectiva de la empresa, la asociacin sera Una empresa emplea trabajadores
2
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS Notemos que para comprender el sentido de la asociacin aadimos una flecha. Las asociaciones no se limitan conectar una clase con otra, pueden conectarse varias clases con una.
Cuando necesitamos especificar mas detalles en las asociaciones como restricciones podemos especificarlas encerrndolas entre llaves. Por ejemplo un cajero atiende a un cliente, pero cada cliente es atendido en el orden de su llegada.
La restriccin del tipo O se la representa con una lnea entrecortada que una las 2 relaciones. Por ejemplo un estudiante de educacin media superior puede elegir entre un curso acadmico o uno comercial.
Multiplicidad
La multiplicidad indica la cantidad de objetos de una clase que se relacionan con otro objeto en particular de la clase asociada. La siguiente tabla muestra los diferentes tipos de multiplicidad de una asociacin:
Multiplicidad Significado 0..1 Cero a uno 1 Uno y slo uno 0..* Cero a muchos * Muchos 1..* Uno a muchos (al menos uno)
3
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS En el ejemplo de la relacin, aplicando la multiplicidad sera. Y el diagrama se vera as:
Un trabajador labora en una empresa Una empresa tiene laborando por lo menos un empleado
1 *
En un hospital trabajan muchos mdicos Un mdico trabaja solo en un hospital
Notemos que usamos * como comodn para indicar la palabra varios o muchos
Asociaciones calificadas
Cuando la multiplicidad de una asociacin es de uno a muchos, en ocasiones se requiere seleccionar un objeto especfico para cumplir la asociacin. Para seleccionar el objeto se necesita un identificador que permita diferenciarlo del resto de objetos a este se le llama calificador.
Por ejemplo, cuando se realiza una reservacin en un hotel, el hotel le asigna un nmero de confirmacin. Si se requiere hacer preguntas respecto a la reservacin, se deber proporcionar el nmero de confirmacin que en este caso acta como identificador. En UML esto se representa con un rectngulo adjunto a la clase que usar el calificador.
Asociaciones reflexivas
Esta se da cuando una clase se asocia consigo mismo. Por ejemplo en la clase empleado, un empleado puede actuar como jefe o subalterno. Trabaja > Hospital Mdico
4
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS
Herencia y generalizacin
La herencia y generalizacin son sinnimos dentro de UML. La generalizacin permite que una clase hijo herede todos los atributos y propiedades de la clase padre. Por ejemplo las clases vertebrados e invertebrados pueden heredar de animal.
La representacin de herencia en UML es a travs de una lnea que termina con un tringulo sin relleno.
Dependencias
Es una relacin de uso, es decir una clase (dependiente) usa a otra que la necesita (clase independiente) para ejecutar algn proceso. Se representa con una flecha discontinua que va desde la clase dependiente a la clase independiente. Con la dependencia mostramos que un cambio en la clase independiente puede afectar al funcionamiento de la clase dependiente, pero no al contrario.
Se define cuando una clase utiliza a otra como parmetro de una de sus operaciones. Por ejemplo imaginemos que tenemos 2 clases, sistema y otro formulario. Una de las operaciones de sistema es mostrarFormulario(), la cual tiene como parmetro la clase formulario, esto se representa en UML as:
5
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS Agregacin
Una agregacin es una acumulacin de clases. Es decir una clase esta formada por otras. Por ejemplo un auto esta formado por su motor, chasis, carrocera entre otras cosas. En UML esto se representara as:
Composicin
Una composicin es un tipo de agregacin, la cual determina una restriccin. Cada componente de una agregacin puede pertenecer tan solo a un todo. Esto se representa de igual forma que una agregacin, con la diferencia de que el rombo esta rellenado.
Realizacin
Una realizacin es la relacin entre una clase y una interfaz. Una interfaz define las capacidades o habilidades de un objeto. Por ejemplo: El teclado de la computadora esta basada en la presin de las teclas de igual forma que el teclado una mquina de escribir. La operacin bsica (teclado) es comn para ambos tipos de teclado, sin embargo el teclado de computadora tiene otras operaciones como ctrl, alt, etc. Podramos decir que el teclado de la mquina de escribir es una interfaz del teclado de computadora pues define la habilidad de teclado. Esto en UML se representara as:
6
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS Introduccin a MySQL
MySQL es un gestor de base de datos sencillo de usar y increblemente rpido. Tambin es uno de los motores de base de datos ms usados en Internet, la principal razn de esto es que es gratis para aplicaciones no comerciales.
Las caractersticas principales de MySQL son:
Es un gestor de base de datos. Una base de datos es un conjunto de datos y un gestor de base de datos es una aplicacin capaz de manejar este conjunto de datos de manera eficiente y cmoda. Es una base de datos relacional. Una base de datos relacional es un conjunto de datos que estn almacenados en tablas entre las cuales se establecen unas relaciones para manejar los datos de una forma eficiente y segura. Para usar y gestionar una base de datos relacional se usa el lenguaje estndar de programacin SQL.
Para ver la lista de opciones proporcionadas por mysql, lo invocamos con la opcin --help:
shell> mysql help
Conectar al servidor MySQL
Para conectarse al servidor, usualmente necesitamos de un nombre de usuario (login) y de una contrasea (password).
Sintaxis MySQL
Un comando no necesita ser escrito en una sola lnea, as que los comandos que requieran de varias lneas no son un problema.
En la siguiente tabla se muestran cada uno de los prompts que podemos obtener y una breve descripcin de su significado para mysql:
Prompt Significado mysql> Listo para una nueva consulta. -> Esperando la lnea siguiente de una consulta multilnea. '> Esperando la siguiente lnea para completar una cadena que comienza con una comilla sencilla ( ' ). "> Esperando la siguiente lnea para completar una cadena que comienza con una comilla doble ( " ).
7
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS Crear una base de datos
Si el administrador cre la base de datos al momento de asignar los permisos, podemos hacer uso de ella. De otro modo, nosotros debemos crearla:
mysql> USE zoologico ERROR 1049: Unknown database 'zoologico' mysql>
El mensaje anterior indica que la base de datos no ha sido creada, por lo tanto necesitamos crearla.
Crear la base de datos es la parte ms fcil, pero en este momento la base de datos est vaca, como lo indica el comando SHOW TABLES:
mysql> SHOW TABLES;
La parte un tanto complicada es decidir la estructura que debe tener nuestra base de datos: qu tablas se necesitan y qu columnas estarn en cada tabla.
Usaremos la sentencia CREATE TABLE para indicar como estarn conformados los registros de nuestras mascotas.
mysql> CREATE TABLE mascotas( -> nombre VARCHAR(20), propietario VARCHAR(20), -> especie VARCHAR(20), sexo CHAR(1), nacimiento DATE, -> fallecimento DATE); Query OK, 0 rows affected (0.02 sec)
mysql>
Para verificar que la tabla fue creada como nosotros esperbamos, usaremos la sentencia DESCRIBE:
8
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS mysql> DESCRIBE mascotas; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | nombre | varchar(20) | YES | | NULL | | | propietario | varchar(20) | YES | | NULL | | | especie | varchar(20) | YES | | NULL | | | sexo | char(1) | YES | | NULL | | | nacimiento | date | YES | | NULL | | | fallecimento | date | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+ 6 rows in set (0.01 sec)
mysql>
Como modificar tablas y columnas en MySQL
En MySQL podemos modificar cualquier caracterstica que queramos de una tabla una vez que ya haya sido creada, incluso si esta ya contiene datos. Esta es la sintaxis a utilizar: ALTER, DROP, CHANGE, ADD
Para agregar nuevos campos a la tabla:
mysql> ALTER TABLE mascotas ADD color varchar(40);
Para cambiar el nombre de la columna:
mysql> ALTER TABLE mascotas CHANGE sexo sexo_m char(1);
Para cambiar atributos de la columna:
mysql> ALTER TABLE mascotas CHANGE sexo_m sexo_m varchar(20);
Para eliminar una tabla utilizamos la sentencia DROP:
mysql> DROP TABLE prueba;
Para eliminar un campo de la Tabla:
mysql> ALTER TABLE mascotas DROP COLUMN especie;
9
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS Cargar datos en una tabla
Despus de haber creado la tabla, ahora podemos incorporar algunos datos en ella, para lo cual haremos uso de la sentencias INSERT, INTO y VALUES.
mysql> INSERT INTO mascotas -> VALUES('Pelusa','Diana','Hamster','f','2000-03-30',NULL); Debemos observar que MySQL espera recibir fechas en el formato YYYY-MM-DD, que puede ser diferente a lo que nosotros estamos acostumbrados. Notar que los valores de cadenas y fechas deben estar encerrados entre comillas. Tambin, con la sentencia INSERT podemos insertar el valor NULL directamente para representar un valor nulo, un valor que no conocemos.
Manipular informacin de una tabla
La sentencia SELECT es usada para obtener la informacin guardada en una tabla. La forma general de esta sentencia es:
SELECT LaInformacinQueDeseamos FROM DeQueTabla WHERE CondicinASatisfacer
Aqu, LaInformacinQueDeseamos es la informacin que queremos ver. Esta puede ser una lista de columnas, o un * para indicar "todas las columnas". DeQueTabla indica el nombre de la tabla de la cual vamos a obtener los datos. La clasula WHERE es opcional. Si est presente, la CondicinASatisfacer especifica las condiciones que los registros deben satisfacer para que puedan ser mostrados.
Seleccionando todos los datos La manera ms simple de la sentencia SELECT es cuando se recuperan todos los datos de una tabla:
mysql> SELECT * FROM mascotas; +--------+-------------+-----------+------+------------+---------------+ | nombre | propietario | especie | sexo | nacimiento | fallecimiento | +--------+-------------+-----------+------+------------+---------------+ | Fluffy | Arnoldo | Gato | f | 1999-02-04 | NULL | | Mau | Juan | Gato | m | 1998-03-17 | NULL | | Buffy | Arnoldo | Perro | f | 1999-05-13 | NULL | | FanFan | Benito | Perro | m | 2000-08-27 | NULL | | Kaiser | Diana | Perro | m | 1998-08-31 | 1997-07-29 | | Chispa | Omar | Ave | f | 1998-09-11 | NULL | | Wicho | Toms | Ave | NULL | 2000-02-09 | NULL | | Skim | Benito | Serpiente | m | 2001-04-29 | NULL | | Pelusa | Diana | Hamster | f | 2000-03-30 | NULL | +--------+-------------+-----------+------+------------+---------------+ 9 rows in set (0.00 sec)
10
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS Para corregir slo el registro errneo con una sentencia UPDATE:
mysql> UPDATE mascotas SET nacimiento="1989-08-31" WHERE nombre="Kaiser";
Para eliminar los datos de la tabla mascotas utilizamos la sentencia DELETE:
mysql> DELETE FROM mascotas;
Seleccionar registros particulares
Por ejemplo, si deseamos verificar el cambio que hicimos a la fecha de nacimiento de Kaiser, seleccionamos slo el registro de Kaiser de la siguiente manera:
mysql> SELECT * FROM mascotas WHERE nombre="Kaiser"; +--------+-------------+---------+------+------------+--------------+ | nombre | propietario | especie | sexo | nacimiento | fallecimento | +--------+-------------+---------+------+------------+--------------+ | Kaiser | Diana | Perro | m | 1989-08-31 | 1997-07-29 | +--------+-------------+---------+------+------------+--------------+
Por ejemplo, si deseamos conocer qu mascotas nacieron despus del 2000, tendramos que usar la columna "nacimiento":
mysql> SELECT * FROM mascotas WHERE nacimiento >= "2000-1-1"; +--------+-------------+-----------+------+------------+---------------+ | nombre | propietario | especie | sexo | nacimiento | fallecimiento | +--------+-------------+-----------+------+------------+---------------+ | FanFan | Benito | Perro | m | 2000-08-27 | NULL | | Wicho | Toms | Ave | NULL | 2000-02-09 | NULL | | Skim | Benito | Serpiente | m | 2001-04-29 | NULL | | Pelusa | Diana | Hamster | f | 2000-03-30 | NULL | +--------+-------------+-----------+------+------------+---------------+ 4 rows in set (0.00 sec)
Podemos tambin combinar condiciones, por ejemplo, para localizar a los perros hembras:
mysql> SELECT * FROM mascotas WHERE especie="Perro" AND sexo="f"; +--------+-------------+---------+------+------------+---------------+ | nombre | propietario | especie | sexo | nacimiento | fallecimiento | +--------+-------------+---------+------+------------+---------------+ | Buffy | Arnoldo | Perro | f | 1999-05-13 | NULL | +--------+-------------+---------+------+------------+---------------+ 1 row in set (0.00 sec)
La consulta anterior usa el operador lgico AND. Hay tambin un operador lgico OR:
11
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS mysql> SELECT * FROM mascotas WHERE especie = "Ave" OR especie = "Gato"; +--------+-------------+---------+------+------------+---------------+ | nombre | propietario | especie | sexo | nacimiento | fallecimiento | +--------+-------------+---------+------+------------+---------------+ | Fluffy | Arnoldo | Gato | f | 1999-02-04 | NULL | | Mau | Juan | Gato | m | 1998-03-17 | NULL | | Chispa | Omar | Ave | f | 1998-09-11 | NULL | | Wicho | Toms | Ave | NULL | 2000-02-09 | NULL | +--------+-------------+---------+------+------------+---------------+ 4 rows in set (0.00 sec)
El operador AND y el operador OR pueden ser intercambiados. Si hacemos esto, es buena idea usar parntesis para indicar como deben ser agrupadas las condiciones:
mysql> SELECT * FROM mascotas WHERE (especie = "Gato" AND sexo = "m") -> OR (especie = "Perro" AND sexo = "f"); +--------+-------------+---------+------+------------+---------------+ | nombre | propietario | especie | sexo | nacimiento | fallecimiento | +--------+-------------+---------+------+------------+---------------+ | Mau | Juan | Gato | m | 1998-03-17 | NULL | | Buffy | Arnoldo | Perro | f | 1999-05-13 | NULL | +--------+-------------+---------+------+------------+---------------+ 2 rows in set (0.00 sec)
Seleccionar columnas particulares
Si no deseamos ver los registros completos de una tabla, entonces tenemos que usar los nombres de las columnas en las que estamos interesados separndolas por coma.
mysql> SELECT nombre, nacimiento FROM mascotas; +--------+------------+ | nombre | nacimiento | +--------+------------+ | Fluffy | 1999-02-04 | | Mau | 1998-03-17 | | Buffy | 1999-05-13 | | FanFan | 2000-08-27 |
Para conocer quin tiene alguna mascota, usaremos la siguiente consulta:
mysql> SELECT propietario FROM mascotas;
Sin embargo, debemos notar que la consulta recupera el nombre del propietario de cada mascota, y algunos de ellos aparecen ms de una vez. Para minimizar la salida, agregaremos la palabra clave DISTINCT:
mysql> SELECT DISTINCT propietario FROM mascotas;
12
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS
Se puede usar tambin una clausula WHERE para combinar seleccin de filas con seleccin de columnas. Por ejemplo, para obtener la fecha de nacimiento de los perritos y los gatitos, usaremos la siguiente consulta:
mysql> SELECT nombre, especie, nacimiento FROM mascotas -> WHERE especie = "perro" OR especie = "gato"; +--------+---------+------------+ | nombre | especie | nacimiento | +--------+---------+------------+ | Fluffy | Gato | 1999-02-04 | | Mau | Gato | 1998-03-17 | | Buffy | Perro | 1999-05-13 | | FanFan | Perro | 2000-08-27 | | Kaiser | Perro | 1989-08-31 | +--------+---------+------------+ 5 rows in set (0.00 sec)
Ordenar registros
Se debe notar en los ejemplos anteriores que las filas regresadas son mostradas sin ningn orden en particular. Sin embargo, frecuentemente es ms fcil examinar la salida de una consulta cuando las filas son ordenadas en alguna forma til. Para ordenar los resultados, tenemos que usar una clusula ORDER BY. Aqu aparecen algunos datos ordenados por fecha de nacimiento:
mysql> SELECT nombre, nacimiento FROM mascotas ORDER BY nacimiento; +--------+------------+ | nombre | nacimiento | +--------+------------+ | Kaiser | 1989-08-31 | | Mau | 1998-03-17 | | Chispa | 1998-09-11 | | Fluffy | 1999-02-04 | | Buffy | 1999-05-13 | | Wicho | 2000-02-09 | | Pelusa | 2000-03-30 | | FanFan | 2000-08-27 | | Skim | 2001-04-29 | +--------+------------+
Para ordenar en orden inverso, debemos agregar la palabra clave DESC al nombre de la columna que estamos usando en el ordenamiento:
mysql> SELECT nombre, nacimiento FROM mascotas ORDER BY -> nacimiento DESC; +--------+------------+ | nombre | nacimiento | +--------+------------+ | Skim | 2001-04-29 | | FanFan | 2000-08-27 | | Pelusa | 2000-03-30 | | Wicho | 2000-02-09 |
13
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS | Buffy | 1999-05-13 | | Fluffy | 1999-02-04 | | Chispa | 1998-09-11 | | Mau | 1998-03-17 | | Kaiser | 1989-08-31 | +--------+------------+ 9 rows in set (0.00 sec)
Podemos ordenar mltiples columnas. Por ejemplo, para ordenar por tipo de animal, y poner al inicio los animalitos ms pequeos de edad, usaremos la siguiente consulta:
mysql> SELECT nombre, especie, nacimiento FROM mascotas -> ORDER BY especie, nacimiento DESC; +--------+-----------+------------+ | nombre | especie | nacimiento | +--------+-----------+------------+ | Wicho | Ave | 2000-02-09 | | Chispa | Ave | 1998-09-11 | | Fluffy | Gato | 1999-02-04 | | Mau | Gato | 1998-03-17 | | Pelusa | Hamster | 2000-03-30 | | FanFan | Perro | 2000-08-27 | | Buffy | Perro | 1999-05-13 | | Kaiser | Perro | 1989-08-31 | | Skim | Serpiente | 2001-04-29 | +--------+-----------+------------+ 9 rows in set (0.00 sec)
Notar que la palabra clave DESC aplica slo a la columna nombrada que le precede.
Para salir de la lnea de comandos de MySQL
Una vez hemos terminado de trabajar con MySQL, si queremos cerrar la conexin con el servidor, simplemente escribimos "quit" desde el prompt de MySQL:
mysql> quit
Relaciones de las tablas en Mysql
Las tablas en una base de datos guardan relacin entre ellas que permite que estas puedan comunicarse a travs de mensajes. Existen varios tipos de relaciones entre las tablas, a continuacin veremos algunos de ellos. El modelo entidad relacin es muy til para establecer las relaciones entre las tablas.
Primary Key o Llave Primaria es el campo que lo caracteriza y hace nico al objeto de la tabla, para poder distinguirlo.
Foreing Key o Llave Fornea es el campo que permite la relacin con otra tabla.
14
ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS Relacin de 1 a muchos Es cuando una de las tablas puede compartir muchos datos de la otra tabla. La solucin es colocar el campo Primary key que fue asignado en la tabla 1 como un campo adicional en la tabla 2, en la cual recibir el nombre de Foreign Key o llave Fornea. Por ejemplo: Un autor escribe muchos libros.
Relacin de Muchos a muchos Es cuando las tablas guardan una relacin en la cual pueden compartir muchos datos de la otra y viceversa. La nica solucin es crear una tercera tabla relacin que contengan Por ejemplo: En una universidad un alumno se puede matricular en muchos cursos y en un curso se matriculan muchos alumnos.