Está en la página 1de 10

DISEÑO E IMPLEMENTACIÓN DE UNA BASE

DE DATOS PARA UN GIMNASIO.

2º Ing Técnica En Informática De Gestión


Francisco José López Regalado 70881272-X
Carlos Antón García 71015405-F
Diseño de una BBDD para un Gimnasio

1. ANALISIS DE REQUISITOS.

El objetivo de este proyecto es el diseño e implementación de una base de datos para un


gimnasio de tamaño medio. Para ello se han considerado las siguientes entidades:

• Monitor. Conjunto de monitores que imparten clases en el gimnasio.


• Clase. Conjunto de clases a las que pueden asistir los socios y que son
impartidas por los monitores.
• Socio. Clientes que pagan una cuota mensual y tienen derecho a ciertos
servicios.
• Sala. Conjunto de lugares donde poder ejercitar el cuerpo.
• Equipos. Maquinas puestas a disposición de los socios para el ejercicio físico.
• Padel. Conjunto de pistas donde los socios pueden jugar al padel.

Conocido el funcionamiento del gimnasio se establecen las siguientes relaciones y


cardinalidades:

• Un monitor puede participar en varias o en ninguna clase.


• Las clases son impartidas únicamente por un monitor.
• Los socios pueden asistir a ninguna o a varias clases.
• Las clases están formadas mínimo por un socio.
• Cada socio tiene la posibilidad de alquilar varias pistas de padel.
• Una pista de padel puede ser alquilada por varios socios.
• Las clases tienen asignadas una sola sala, pero una sala puede acoger ninguna o
varias clases.
• Un determinado equipo pertenece únicamente a una sala, en la cual pueden
existir ninguno o varios equipos.

En función de todos estos aspectos preliminares se propone el siguiente diagrama


entidad-relación el cual acoge con la máxima fidelidad posible cada uno de los
requisitos establecidos. A cada entidad se le han asociado una serie de atributos que la
califican, el conjunto mínimo de atributos que la identifican de manera única e
inequívoca se ha considerado clave primaria.

Posteriormente se muestra un grafo relacional en el cual se puede observar con cierta


claridad la relación entre tablas mediante las claves ajenas (Integridad Referencial). Por
ultimo se implementa la base de datos en lenguaje MySQL y se proponen algunas
consultas para comprobar su funcionalidad.

Pág. 1
Diseño de una BBDD para un Gimnasio

2. DISEÑO DE LA BASE DE DATOS:

Titulacion
Telefono
Nombre
dni cod_equipo

MONITOR EQUIPO descripcion

estado

(1,1) (0,n)

Imparte (1:N) Tiene (N:1)


dia

(0,n) (1,1)
(N:1)
metros
cod_clase
(0,n) (1,1)
hora CLASE Imparte SALA tipo

Descripcion ubicacion

(0,n)
n_sala

Asiste (N:N)

(1,n)
(N:N)
telefono estado
direccion
Socio (1,n)
Reserva
(0,n)
Padel ubicacion
C_bancaria
n_pista
n_socio

fecha hora
nombre

Fig.1.1. Diagrama Entidad – Relación.

Pág. 2
Diseño de una BBDD para un Gimnasio

MONITOR CLASE SOCIO


PK dni PK cod_clase PK n_socio

nombre dni nombre


telefono dia telefono
titulacion n_sala direccion
descripcion C_bancaria
hora

EQUIPO
ASISTE RESERVA
PK cod_equipo
PK n_socio PK n_pista
PK cod_clase PK fecha
descripcion
PK hora
estado
n_sala
n_socio

SALA PADEL
PK n_sala PK n_pista

ubicacion ubicacion
tipo estado
metros

SALA (n_sala, ubicacion, tipo, metros)


EQUIPO (cod_equipo, descripcion, estado, n_sala)
MONITOR (dni, nombre, telefono, titulacion)
CLASE (cod_clase, dni, día, hora, descripción, n_sala)
SOCIO (n_socio, nombre, telefono, dirección, c_bancaria)
ASISTE (n_socio, cod_clase)
RESERVA (n_socio, n_pista, fecha, hora)
PADEL (n_pista, ubicación, estado)
Fig.1.2. Grafo Relacional.

Pág. 3
Diseño de una BBDD para un Gimnasio

3. CODIFICACION EN MySQL.

3.1. Creación de Tablas.

CREATE DATABASE IF NOT EXISTS `gimnasio`;


USE `gimnasio`;
DROP TABLE IF EXISTS `SALA`;
CREATE TABLE `SALA` (
`n_sala` INTEGER UNSIGNED NOT NULL,
`ubicacion` VARCHAR(45) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`tipo` VARCHAR(100) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`metros` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (`n_sala`)
) TYPE =INNODB;
DROP TABLE IF EXISTS `EQUIPO`;
CREATE TABLE `EQUIPO` (
`cod_equipo` VARCHAR(30) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`descripcion` VARCHAR(150) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`estado` VARCHAR(45) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`n_sala` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (`cod_equipo`),
FOREIGN KEY (`n_sala`) REFERENCES `SALA` (`n_sala`)
)TYPE =INNODB;

DROP TABLE IF EXISTS `MONITOR`;


CREATE TABLE `MONITOR` (
`dni` VARCHAR(9) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`nombre` VARCHAR(90) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`telefono` VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`titulacion` VARCHAR(100) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
PRIMARY KEY (`dni`)
)TYPE =INNODB;
DROP TABLE IF EXISTS `CLASE`;
CREATE TABLE `CLASE` (
`cod_clase` VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`dni` VARCHAR(9) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`dia` VARCHAR(20) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`hora` VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`n_sala` INTEGER UNSIGNED NOT NULL,
`descripcion` VARCHAR(100) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
PRIMARY KEY (`cod_clase`),
FOREIGN KEY (`dni`) REFERENCES `MONITOR` (`dni`),
FOREIGN KEY (`n_sala`) REFERENCES `SALA` (`n_sala`)
)TYPE =INNODB;

Pág. 4
Diseño de una BBDD para un Gimnasio

DROP TABLE IF EXISTS `SOCIO`;


CREATE TABLE `SOCIO` (
`n_socio` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`nombre` VARCHAR(45) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`telefono` INTEGER UNSIGNED NOT NULL,
`direccion` VARCHAR(50) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`C_Bancaria` VARCHAR(20) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
PRIMARY KEY (`n_socio`)
)TYPE =INNODB;

DROP TABLE IF EXISTS `ASISTE`;


CREATE TABLE `ASISTE` (
`n_socio` INTEGER UNSIGNED NOT NULL,
`cod_clase` VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
PRIMARY KEY (`n_socio`,`cod_clase`),
FOREIGN KEY (`n_socio`) REFERENCES `SOCIO` (`n_socio`),
FOREIGN KEY (`cod_clase`) REFERENCES `CLASE` (`cod_clase`)
)TYPE =INNODB;

DROP TABLE IF EXISTS `PADEL`;


CREATE TABLE `PADEL` (
`n_pista` INTEGER UNSIGNED NOT NULL,
`ubicacion` VARCHAR(90) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`estado` VARCHAR(45) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
PRIMARY KEY (`n_pista`)
)TYPE =INNODB;

DROP TABLE IF EXISTS `RESERVA`;


CREATE TABLE `RESERVA` (
`n_pista` INTEGER UNSIGNED NOT NULL,
`fecha` VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`hora` VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
`n_socio` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (`n_pista`, `fecha`, `hora`),
FOREIGN KEY (`n_pista`) REFERENCES `PADEL` (`n_pista`)
)TYPE =INNODB;

Pág. 5
Diseño de una BBDD para un Gimnasio

3.2. Introducción de Datos.

INSERT INTO `SALA` (`n_sala`,`ubicacion`,`tipo`,`metros`) VALUES


(1,'Planta Cero (P0)','Ejercicio Aerobio',50),
(2,'Planta Primera (P1)','Ejercicio Anaerobio',45),
(3,'Planta Segunda (P2)','Zona Spa',30),
(4,'Planta Tercera (P3)','Cafeteria/Restaurante',60),
(5,'Planta Cuarta (P4)','Vestuarios',25);

INSERT INTO `EQUIPO` (`cod_equipo`,`descripcion`,`estado`,`n_sala`) VALUES


('001-P0','Cinta de Correr','Disponible',1),
('002-P0','Bicicletas (Spinning)','Disponible',1),
('003-P0','Step, Aerobic','No Disponible',1),
('004-P1','Equipo Musculacion (espalda)','Disponible',2),
('005-P1','Equipo Musculacion (brazos)','Disponible',2),
('006-P1','Equipo Musculacion (piernas)','Disponible',2),
('007-P2','Jacuzzi','No Disponible',3),
('008-P2','Zona de Masajes','Disponible',3),
('009-P2','Sauna','Disponible',3);

INSERT INTO `MONITOR` (`dni`,`nombre`,`telefono`,`titulacion`) VALUES


('07854121C','David Regalado Alonso','923251478','Magisterio'),
('07854124G','Irene Bajo Modino','923254178','C.C.Empresariales'),
('07854125F','Eva Maria Gonzalez','699744848','Educacion Fisica'),
('70881272X','Julian Perez Delgado','923254784','Educacion Fisica'),
('71254841K','Carlos Anton Garcia','685412541','Ing Informatica');

INSERT INTO `CLASE` (`cod_clase`,`dni`,`dia`,`hora`,`n_sala`,`descripcion`) VALUES


('C1','07854121C','Lunes/Martes','17:00',1,'Spinning'),
('C2','71254841K','Martes','12:00',2,'Aerobic'),
('C3','07854121C','Lunes/Miercoles','18:00',3,'Yoga'),
('C4','07854125F','Miercoles','15:00',2,'Karate'),
('C5','70881272X','Jueves/Viernes','21:00',1,'Boxeo'),
('C6','71254841K','Martes','22:00',3,'Iniciacion al Padel');

INSERT INTO `SOCIO` (`n_socio`,`nombre`,`telefono`,`direccion`,`C_Bancaria`) VALUES


(125,'Elvira Regalado Garcia',927125487,'C/Filiberto Villalobos Nº15 3B','123-521-541-547'),
(500,'Alberto Cabrero Hernandez',699854752,'Gran Via Nº10 5A','748-519-658-743'),
(2547,'Ignacio Meiras Paniagua',699547854,'Paseo de la Estacion Nº25 4C','123-654-785-412'),
(2599,'Ruth Perez Lazaro',685412547,'C/Bermejeros Nº1 1A','125-785-478-569'),
(5874,'Francisco Jose Lopez Regalado',923252918,'Avd/Portugal Nº148 3B','521-478-956-587'),
(9587,'Cristina Montejo Mendez',923415874,'Paseo Carmelitas Nº5 7C','147-854-269-874'),
(12000,'Rafael Sanchez Gonzalez',923547856,'Calle Rua Mayor Nº10 6F','157-485-369-854'),
(12458,'Javier Bermudo Alonso',923254785,'Zona Carrefour ','587-412-587-459'),
(102547,'Fernando Vazquez Perfecto',923547845,'Calle Fonseca Nº8 2A','254-789-541-325');

Pág. 6
Diseño de una BBDD para un Gimnasio

INSERT INTO `PADEL` (`n_pista`,`ubicacion`,`estado`) VALUES


(1,'Zona Norte','Disponible'),
(2,'Zona Sur','Disponible'),
(3,'Zona Este','Disponible'),
(4,'Zona Oeste','Disponible');

INSERT INTO `RESERVA` (`n_pista`,`fecha`,`hora`,`n_socio`) VALUES


(1,'12-10-2008','12:00',2547),
(1,'12-10-2008','13:00',2547),
(1,'13-10-2008','12:00',2599),
(1,'13-10-2008','15:00',102547),
(2,'12-10-2008','13:00',12458),
(2,'12-10-2008','16:00',102547),
(2,'13-10-2008','15:00',500),
(3,'12-10-2008','12:00',500),
(3,'12-10-2008','13:00',125),
(4,'12-10-2008','12:00',9587),
(4,'13-10-2008','15:00',12000),
(4,'13-10-2008','16:00',12000);

INSERT INTO `ASISTE` (`n_socio`,`cod_clase`) VALUES


(125,'C1'),
(102547,'C1'),
(125,'C2'),
(500,'C2'),
(125,'C3'),
(12000,'C3'),
(500,'C4'),
(102547,'C5'),
(5874,'C6'),
(12000,'C6');

Pág. 7
Diseño de una BBDD para un Gimnasio

4. CONSULTAS.

4.1 Confirmamos el contenido de las tablas:

select * from `SALA`;


select * from `EQUIPO`;
select * from `MONITOR`;
select * from `CLASE`;
select * from `ASISTE`;
select * from `SOCIO`;
select * from `RESERVA`;
select * from `PADEL`;

4.2 Nombre y telefono de los socios del club:

Select `nombre`, `telefono` from `SOCIO`;

4.3 Cuenta Bancaria y nombre del socio Elvira Regalado Garcia:

select `nombre`,`C_Bancaria` from `SOCIO` where `nombre` = "ELVIRA REGALADO GARCIA";

4.4 Nombre y telefono de aquellos monitores cuyo telefono no empiece por 9:

select `nombre`,`telefono` from `MONITOR` where `telefono` not like "9%";

4.5 Calcular el numero de socios del Gimnasio cuya cuenta bancaria contenga un 1 y su
telefono empiece por 9.

select count(*) from `SOCIO` where (`C_Bancaria` like "%1%") and (`telefono` like "9%");

4.6. Numero del socio con mas antiguedad.

select max(`n_socio`) from `SOCIO`;

4.7. Numero de socios que han reservado pista de padel.

select count(distinct `n_socio`) from `RESERVA`;

4.8. Anadir el campo edad a la tabla MONITOR.

alter table `MONITOR` add `edad` integer unsigned not null;

Pág. 8
Diseño de una BBDD para un Gimnasio

4.9. Nombre de socios que no han reservado la pista de padel.

select `nombre` from `SOCIO` left join `RESERVA` on `SOCIO`.`n_socio`=`RESERVA`.`n_socio`


where `RESERVA`.`n_socio` is null;

4.10.Igual que el apartado anterior pero utilizando alias.

select `nombre` from `SOCIO` as `S` left join `RESERVA` as `R` on `S`.`n_socio`=`R`.`n_socio`
where `R`.`n_socio` is null;

4.11. Nombre, titulacion y clase impartida por cada monitor.

select `nombre`,`titulacion`,`descripcion` from `MONITOR` as `M` inner join `CLASE` as `C`


on `M`.`dni`=`C`.`dni`;

4.12. Descripción de equipo, ubicación y tipo cuyo estado es disponible y esta situado
en una sala igual o superior a los 45 m2.

select `descripcion`,`ubicacion`,`tipo` from `EQUIPO` as `E` inner join `SALA` as `S`


on `E`.`n_sala`=`S`.`n_sala` where (`estado` = "Disponible" ) and (`metros` >= "45");

4.13. Nombre del socio, hora y pista asignadas el dia 12-10-2008 siempre y cuando su
estado sea disponible

select `S`.`nombre`,`hora`,`P`.`n_pista`,`ubicacion` from `SOCIO` as `S` join `RESERVA` as `R` on


`S`.`n_socio`=`R`.`n_socio` join `PADEL` as `P` on `R`.`n_pista`=`P`.`n_pista` where (`R`.`fecha` =
"12-10-2008") and (`P`.`estado`= "Disponible");

4.14. Nombre de alumno, direccion, tipo de clase a la que esta apuntado y nombre del
monitor que la imparte.

select `S`.`nombre`,`direccion`,`descripcion`,`M`.`nombre` from `SOCIO` as `S` join `ASISTE` as


`A` on `S`.`n_socio`=`A`.`n_socio` join `CLASE` as `C` on `A`.`cod_clase`=`C`.`cod_clase` join
`MONITOR` as `M` on `C`.`dni` = `M`.`dni`;

4.15. Borrar todas las tablas

drop table `RESERVA`;


drop table `PADEL`;
drop table `ASISTE`;
drop table `SOCIO`;
drop table `CLASE`;
drop table `MONITOR`;
drop table `EQUIPO`;
drop table `SALA`;

Pág. 9