Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/03/2006, 06:43
MargoChanning
 
Fecha de Ingreso: agosto-2004
Mensajes: 33
Antigüedad: 20 años, 6 meses
Puntos: 0
Foreign keys, foráneas/externas, ya no lo sé

Hola a todos, tengo diversas dudas sobre esta estructura:

CREATE TABLE `esquemes_fisiologia` (
`id_esq` int(11) NOT NULL auto_increment,
`descr_esq` text NOT NULL,
`fisiopat` int(11) NOT NULL default '0',
`id_simpt` int(11) NOT NULL default '0',
`id_malalt` int(11) NOT NULL default '0',
`id_org` int(11) NOT NULL default '0',
PRIMARY KEY (`id_esq`),
KEY `idorg_fk` (`id_org`),
KEY `idsimpt_fk` (`id_simpt`),
KEY `idmalalt_fk` (`id_malalt`),
CONSTRAINT `idmalalt_fk` FOREIGN KEY (`id_malalt`) REFERENCES `malalties` (`id_malalt`),
CONSTRAINT `idsimpt_fk` FOREIGN KEY (`id_simpt`) REFERENCES `simptomes` (`id_simpt`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

La primera es que no se si esta bien organizada ni si es coherente, empiezo creando un índice (idorg_fk, idsimpt_fk...) y luego paso a la pestaña de las restricciones, en el nombre pongo el mismo que el índice (idorg_fk, idsimpt_fk...) y le indico los campos hijo y padre (que ya he procurado que sean del mismo tipo y de la misma longitud).

En todas las estructuras que encuentro por ahí no pone KEY `idsimpt_fk` (`id_simpt`), sino INDEX `idsimpt_fk` (`id_simpt`).

De todas maneras he podido crear la restricción con simptomes y con malalties, pero no con organs y no sé porque.

CREATE TABLE `simptomes` (
`id_simpt` int(11) NOT NULL auto_increment,
`nom_simpt` varchar(35) NOT NULL default '',
PRIMARY KEY (`id_simpt`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `organs` (
`id_org` int(11) NOT NULL auto_increment,
`nom_org` varchar(35) NOT NULL default '',
PRIMARY KEY (`id_org`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

¿Influye el formato de filas?? Es más, ¿que diferencia hay entre unas y otras?

Y la segunda duda es: en esquemes_fisiologia hay un campo 'fisiopat' que hace referencia a otra tabla (ya se que en ésta esta mal definida), en la otra tabla es un campo de texto, no es una clave principal. ¿Como tendria que hacerlo para no tener que introducir el texto en las dos tablas y para que las actualizaciones funcionen bien? ¿Con un SELECT blablabla?

Versión mysql: 4.1.8-nt

Gracias por escucharme.