BBDD(Gimnasio)

October 10, 2017 | Author: Francisco Jose Lopez Regalado | Category: Information Technology Management, Data, Information Retrieval, Technology, Computing
Share Embed Donate


Short Description

Download BBDD(Gimnasio)...

Description

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

Titulacion

Telefono

Nombre

2. DISEÑO DE LA BASE DE DATOS:

dni

cod_equipo

MONITOR

descripcion

EQUIPO

estado (0,n)

(1,1)

Imparte

(1:N)

Tiene

(N:1)

dia (1,1)

(0,n)

(N:1) metros

cod_clase

CLASE

hora

(0,n)

(1,1)

Imparte

tipo

SALA

Descripcion

ubicacion (0,n) n_sala

(N:N)

Asiste

(1,n) (N:N)

telefono

estado

direccion

Socio

C_bancaria

Reserva

(1,n)

(0,n)

Padel

ubicacion n_pista

n_socio

hora

nombre

fecha

Fig.1.1. Diagrama Entidad – Relación.

Pág. 2

Diseño de una BBDD para un Gimnasio

MONITOR

SOCIO

CLASE

PK dni

PK n_socio

PK cod_clase

nombre telefono titulacion

nombre telefono direccion C_bancaria

dni dia n_sala descripcion hora

EQUIPO

ASISTE

PK cod_equipo descripcion estado n_sala

PK n_socio PK cod_clase

RESERVA PK n_pista PK fecha PK hora n_socio

SALA PK n_sala ubicacion tipo metros

PADEL PK n_pista ubicacion estado

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 select select select select select select select

* * * * * * * *

from from from from from from from from

`SALA`; `EQUIPO`; `MONITOR`; `CLASE`; `ASISTE`; `SOCIO`; `RESERVA`; `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 drop drop drop drop drop drop drop

table table table table table table table table

`RESERVA`; `PADEL`; `ASISTE`; `SOCIO`; `CLASE`; `MONITOR`; `EQUIPO`; `SALA`; Pág. 9

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF