estoy realizando una BD de un Gimnasio, y necesito ayuda: se supone que dicho gimnasio tiene distintos tipos de precios en los que cada actividad se paga únicamente de una forma. Las formas posibles son: mensual, asistencia de días a la semana, asistencia medio día o día completo, o por edad. Estas son las formas de pago, entonces, a la hora de implementarlo en MySQL generé una única tabla:
Código:
Después de observarlo me di cuenta de que podría ser una relación de generalización/especialización. Mi problema es que no se si sería así:CREATE TABLE IF NOT EXISTS `precio` ( `activ` tinyint(3) unsigned NOT NULL, `org` enum('GRCSL','UCA') NOT NULL DEFAULT 'GRCSL', `ano` year(4) NOT NULL, `clase` decimal(4,2) unsigned NOT NULL, `mes` decimal(5,2) unsigned DEFAULT NULL, `dia_med` decimal(5,2) unsigned DEFAULT NULL, `dia_comp` decimal(5,2) unsigned DEFAULT NULL, `l_edad` tinyint(3) unsigned DEFAULT NULL, `edad1` decimal(5,2) unsigned DEFAULT NULL, `edad2` decimal(5,2) unsigned DEFAULT NULL, `1d` decimal(5,2) unsigned DEFAULT NULL, `2d` decimal(5,2) unsigned DEFAULT NULL, `3d` decimal(5,2) unsigned DEFAULT NULL, `4d` decimal(5,2) unsigned DEFAULT NULL, `5d` decimal(5,2) unsigned DEFAULT NULL, FOREIGN KEY (`activ`) REFERENCES `actividad` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (`activ`,`org`,`ano`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Código:
No se si me he explicado con claridad. Podría ser uno de estos casos el correcto: una tabla con todos los atributos como el primer código o la especialización (siguiente código pequeñas tablas con los atributos de la especialidad)??Si fuera este último caso, habría que poner un atributo de tipo??CREATE TABLE IF NOT EXISTS `precio` ( `activ` tinyint(3) unsigned NOT NULL, `org` enum('GRCSL','UCA') NOT NULL DEFAULT 'GRCSL', `ano` year(4) NOT NULL, `clase` decimal(4,2) unsigned NOT NULL, FOREIGN KEY (`activ`) REFERENCES `actividad` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (`activ`,`org`,`ano`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `precio_mes` ( `activ` tinyint(3) unsigned NOT NULL, `org` enum('GRCSL','UCA') NOT NULL DEFAULT 'GRCSL', `ano` year(4) NOT NULL, `mes` decimal(5,2) unsigned DEFAULT NULL, FOREIGN KEY (`activ`) REFERENCES `precio` (`activ`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`org`) REFERENCES `precio` (`org`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`ano`) REFERENCES `precio` (`ano`) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (`activ`,`org`,`ano`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `precio_dia` ( `activ` tinyint(3) unsigned NOT NULL, `org` enum('GRCSL','UCA') NOT NULL DEFAULT 'GRCSL', `ano` year(4) NOT NULL, `dia_med` decimal(5,2) unsigned DEFAULT NULL, `dia_comp` decimal(5,2) unsigned DEFAULT NULL, FOREIGN KEY (`activ`) REFERENCES `precio` (`activ`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`org`) REFERENCES `precio` (`org`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`ano`) REFERENCES `precio` (`ano`) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (`activ`,`org`,`ano`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `precio_semanal` ( `activ` tinyint(3) unsigned NOT NULL, `org` enum('GRCSL','UCA') NOT NULL DEFAULT 'GRCSL', `ano` year(4) NOT NULL, `1d` decimal(5,2) unsigned DEFAULT NULL, `2d` decimal(5,2) unsigned DEFAULT NULL, `3d` decimal(5,2) unsigned DEFAULT NULL, `4d` decimal(5,2) unsigned DEFAULT NULL, `5d` decimal(5,2) unsigned DEFAULT NULL, FOREIGN KEY (`activ`) REFERENCES `precio` (`activ`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`org`) REFERENCES `precio` (`org`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`ano`) REFERENCES `precio` (`ano`) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (`activ`,`org`,`ano`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `precio_edad` ( `activ` tinyint(3) unsigned NOT NULL, `org` enum('GRCSL','UCA') NOT NULL DEFAULT 'GRCSL', `ano` year(4) NOT NULL, `l_edad` tinyint(3) unsigned DEFAULT NULL, `edad1` decimal(5,2) unsigned DEFAULT NULL, `edad2` decimal(5,2) unsigned DEFAULT NULL, FOREIGN KEY (`activ`) REFERENCES `precio` (`activ`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`org`) REFERENCES `precio` (`org`) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (`ano`) REFERENCES `precio` (`ano`) ON DELETE CASCADE ON UPDATE CASCADE, PRIMARY KEY (`activ`,`org`,`ano`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Espero vuestras respuestas. Un saludo y gracias!!