Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Duda con BBDD Mysql (Claves foraneas)

Estas en el tema de Duda con BBDD Mysql (Claves foraneas) en el foro de Mysql en Foros del Web. Tengo una duda. La tabla Realiza tiene 2 claves primarias y dos foraneas (una es la primaria de Técnico y otra la primaria de ensayo) ...
  #1 (permalink)  
Antiguo 29/07/2008, 09:28
 
Fecha de Ingreso: enero-2008
Mensajes: 61
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta Duda con BBDD Mysql (Claves foraneas)

Tengo una duda. La tabla Realiza tiene 2 claves primarias y dos foraneas (una es la primaria de Técnico y otra la primaria de ensayo) lo que quiero es que al insertar un ensayo se relacione con el tecnico que le inserté mediante la tabla realiza, el problema es que probe a ejecutar la consulta de insercion de un campo en tecnico en ensayo y en realiza y me da un error con la clave foranea.


¿Alguien puede ayudarme?


-- Versión del servidor: 5.0.51
-- Versión de PHP: 5.2.5


SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--

-- Base de datos: `biofarma`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cliente`
--

CREATE TABLE IF NOT EXISTS `cliente` (
`Id_Cliente` int(11) NOT NULL auto_increment,
`Nombre_Cliente` varchar(40) NOT NULL,
`Direccion` varchar(100) default NULL,
`Telefono` varchar(15) default NULL,
`CIF` char(9) default NULL,
PRIMARY KEY (`Id_Cliente`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Volcar la base de datos para la tabla `cliente`
--


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `compuesto`
--

CREATE TABLE IF NOT EXISTS `compuesto` (
`id_Compuesto` int(11) NOT NULL auto_increment,
`referencia` varchar(40) NOT NULL,
`tipo_compuesto` varchar(15) default NULL,
`composicion` varchar(100) default NULL,
`Estanteria` tinyint(4) NOT NULL,
`Fila` tinyint(4) NOT NULL,
`Columna` tinyint(4) NOT NULL,
PRIMARY KEY (`id_Compuesto`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Volcar la base de datos para la tabla `compuesto`
--


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `ensayo`
--

CREATE TABLE IF NOT EXISTS `ensayo` (
`Id_ensayo` int(11) NOT NULL auto_increment,
`Nombre_ensayo` varchar(20) default NULL,
`Nuestra_Referencia` varchar(10) NOT NULL,
`Otros_referencia` varchar(10) default NULL,
`Numero_Folio` int(11) NOT NULL,
`Fecha_comienzo_ensayo` datetime default NULL,
`Fecha_final_ensayo` datetime default NULL,
`Observaciones` varchar(200) default NULL,
`Tipo_Ensayo` varchar(80) default NULL,
`Resultado` varchar(200) default NULL,
PRIMARY KEY (`Id_ensayo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;



Tablas exportadas de PhpMyAdmin:



--
-- Volcar la base de datos para la tabla `ensayo`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `ensayo_radioligando`
--

CREATE TABLE IF NOT EXISTS `ensayo_radioligando` (
`Kd` int(11) NOT NULL,
`concentracion` int(11) NOT NULL,
`tantoporciento` int(11) NOT NULL,
`IC50` int(11) NOT NULL,
`Ki` int(11) NOT NULL,
`Ki_Standard` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `ensayo_radioligando`
--


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `estudioscitotoxicidad`
--

CREATE TABLE IF NOT EXISTS `estudioscitotoxicidad` (
`Tipo` varchar(30) default NULL,
`Horas` tinyint(4) default NULL,
`Metodos` varchar(80) default NULL,
`Resultado` varchar(100) default NULL,
`IC50` int(11) NOT NULL,
`TantoPorCienInhibicion` int(11) NOT NULL,
`concentracion` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `estudioscitotoxicidad`
--


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `formado`
--

CREATE TABLE IF NOT EXISTS `formado` (
`Id_ensayo` int(11) NOT NULL default '0',
`Id_compuesto` int(11) NOT NULL default '0',
PRIMARY KEY (`Id_ensayo`,`Id_compuesto`),
KEY `Id_ensayo` (`Id_ensayo`),
KEY `Id_compuesto` (`Id_compuesto`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `formado`
--


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `medidasegundosmensajeros`
--

CREATE TABLE IF NOT EXISTS `medidasegundosmensajeros` (
`concentracion` int(11) NOT NULL,
`tantoporciento` int(11) NOT NULL,
`EC50` int(11) NOT NULL,
`tantoporcienEmax` tinyint(4) default NULL,
`EC50standart` int(11) NOT NULL,
`TantoporcienEmaxStandart` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `medidasegundosmensajeros`
--


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `realiza`
--

CREATE TABLE IF NOT EXISTS `realiza` (
`Codigo_Tecnico` int(11) NOT NULL default '0',
`Id_ensayo` int(11) NOT NULL default '0',
`Fecha_ensayo` datetime default NULL,
PRIMARY KEY (`Codigo_Tecnico`,`Id_ensayo`),
KEY `fk_tecnico` (`Codigo_Tecnico`),
KEY `fk_ensayo` (`Id_ensayo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `realiza`
--


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tecnico`
--

CREATE TABLE IF NOT EXISTS `tecnico` (
`Codigo_tecnico` int(11) NOT NULL auto_increment,
`numero_tecnico` varchar(40) NOT NULL,
`nombre_tecnico` varchar(15) default NULL,
PRIMARY KEY (`Codigo_tecnico`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Volcar la base de datos para la tabla `tecnico`
--


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tejidosaislados`
--

CREATE TABLE IF NOT EXISTS `tejidosaislados` (
`animal` varchar(70) default NULL,
`tejido` varchar(70) default NULL,
`concentracion` int(11) NOT NULL,
`tantoporciento` int(11) NOT NULL,
`EC50` int(11) NOT NULL,
`tantoporcienEmax` tinyint(4) default NULL,
`EC50standart` int(11) NOT NULL,
`TantoporcienEmaxStandart` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `tejidosaislados`
--


--
-- Filtros para las tablas descargadas (dump)
--

--
-- Filtros para la tabla `compuesto`
--
ALTER TABLE `compuesto`
ADD CONSTRAINT `compuesto_ibfk_1` FOREIGN KEY (`id_Compuesto`) REFERENCES `formado` (`Id_compuesto`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Filtros para la tabla `formado`
--
ALTER TABLE `formado`
ADD CONSTRAINT `formado_ibfk_1` FOREIGN KEY (`Id_ensayo`) REFERENCES `ensayo` (`Id_ensayo`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Filtros para la tabla `realiza`
--
ALTER TABLE `realiza`
ADD CONSTRAINT `realiza_ibfk_7` FOREIGN KEY (`Id_ensayo`) REFERENCES `ensayo` (`Id_ensayo`),
ADD CONSTRAINT `realiza_ibfk_6` FOREIGN KEY (`Codigo_Tecnico`) REFERENCES `tecnico` (`Codigo_tecnico`);

--
-- Filtros para la tabla `tecnico`
--
ALTER TABLE `tecnico`
ADD CONSTRAINT `tecnico_ibfk_1` FOREIGN KEY (`Codigo_tecnico`) REFERENCES `realiza` (`Codigo_Tecnico`);
  #2 (permalink)  
Antiguo 29/07/2008, 10:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda con BBDD Mysql (Claves foraneas)

La condición sine qua non de una inserción en una tabla que posee FK es que las claves deben existir ya en las tablas referidas. Por eso se llaman FOREIGN KEY y por eso existe dependencia.
Nunca jamás vas a poder poner el dato en la tabla del modo que intentas hacerlo. Jamás.
los registros en ENSAYO y TECNICO deben ser ingresados primero.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:57.