You are on page 1of 15

1

ESCUELA ACADEMICO PROFESIONAL


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.

mysql> CREATE DATABASE zoologico;
Query OK, 1 row affected (0.00 sec)

mysql> USE zoologico
Database changed
mysql>

Crear tabla

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.

mysql> CREATE DATABASE editora;
Query OK, 1 row affected (0.00 sec)

mysql> USE editora;
Database changed

mysql> CREATE TABLE autor(
-> cod_a VARCHAR(4),nombre VARCHAR(50),
-> primary key (cod_a)
-> )type=innodb;

mysql> CREATE TABLE libro(
-> cod_l VARCHAR(4),
-> cod_a VARCHAR(4),
-> titulo VARCHAR(50),
-> primary key (cod_l),
-> index(cod_a),
-> foreign key (cod_a) references autor(cod_a)
-> )type=innodb;

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.

mysql> CREATE DATABASE academico;
Query OK, 1 row affected (0.00 sec)

mysql> USE academico;
Database changed

mysql> CREATE TABLE alumno(
-> cod_a VARCHAR(3),nombre VARCHAR(20),
-> sexo CHAR(1), nacimiento DATE,
-> primary key (cod_a)
-> )type=innodb;

mysql> CREATE TABLE curso(

15

ESCUELA ACADEMICO PROFESIONAL
DE INGENIERIA DE SISTEMAS
-> cod_c VARCHAR(3),nombre VARCHAR(20),
-> primary key (cod_c)
-> )type=innodb;

mysql> CREATE TABLE alumno_curso(
-> cod_a VARCHAR(3),
-> cod_c VARCHAR(3),
-> primary key (cod_a,cod_c)
-> )type=innodb;

You might also like