Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/02/2014, 05:22
Cota_Isla
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 12 años
Puntos: 0
Tabla de clave primaria compuesta y foraneas

Buenas, he creado una tabla que relaciona varias, es decir, de una relación N:N.
El problema es que la generaba por phpmyadmin y en el apartado indices me salía como me añadía las relaciones y las claves primarias correctamente, pero investigando el código SQL veía algo raro:

Código:
--
-- Estructura de tabla para la tabla `se_descuenta`
--

CREATE TABLE IF NOT EXISTS `se_descuenta` (
  `activ` tinyint(3) unsigned NOT NULL,
  `oferta` tinyint(3) unsigned NOT NULL,
  `pvp` decimal(5,2) unsigned NOT NULL,
  PRIMARY KEY (`activ`,`oferta`),
  KEY `oferta` (`oferta`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Restricciones para tablas volcadas
--

--
-- Filtros para la tabla `se_descuenta`
--
ALTER TABLE `se_descuenta`
  ADD CONSTRAINT `se_descuenta_ibfk_1` FOREIGN KEY (`oferta`) REFERENCES `oferta` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `se_descuenta_ibfk_2` FOREIGN KEY (`activ`) REFERENCES `actividad` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
Me refiero por raro, algo que no se si es correcto...
Me añade solamente una clave después de la PK y después modifica la tabla añadiendo ambas claves foráneas.

Al ver esto, lo que hice fue crear mediante código la tabla de la siguiente forma:
Código:
CREATE TABLE IF NOT EXISTS `se_descuenta` (
 `activ` tinyint(3) unsigned NOT NULL,
 `oferta` tinyint(3) unsigned NOT NULL,
 `pvp` decimal(5,2) unsigned NOT NULL,
FOREIGN KEY (`oferta`) REFERENCES `oferta` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`activ`) REFERENCES `actividad` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
 PRIMARY KEY (`activ`,`oferta`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
De esta forma me generaba el mismo resultado, me refiero que al exportar la tabla para ver el código me mostraba el primero que posteo.

No se si es correcto y es problema de PHPmyAdmin o es que estoy cometiendo algún error.

Espero vuestras respuestas! Un saludo.