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

Foreign keys, foráneas/externas, ya no lo sé

Estas en el tema de Foreign keys, foráneas/externas, ya no lo sé en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 08/03/2006, 06:43
 
Fecha de Ingreso: agosto-2004
Mensajes: 33
Antigüedad: 19 años, 8 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.
  #2 (permalink)  
Antiguo 08/03/2006, 06:47
 
Fecha de Ingreso: agosto-2004
Mensajes: 33
Antigüedad: 19 años, 8 meses
Puntos: 0
yo otra vez

Utilizo el programa MySQL-Front versión 3.2 Compilación 10.32.

No sé si necesitais algun dato más.
  #3 (permalink)  
Antiguo 08/03/2006, 08:10
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 5 meses
Puntos: 5
Holas MargoChanning, sobre tu primera duda si esta bien organizada o si es coherente, todo eso va de la mano con el contexto de tu problema, sin eso no podriamos darte una opinion sobre el diseno que tienes, ahora sobre si la sintaxis esta correcta pues a primera vista no parece tener errores, ahora sobre que en algunos encuentras con INDEX y en otros con KEY, pues mirando la documentacion de MySQL ambos representan indices, y no hablan de alguna diferencia entre ellas, pero si mal no recuerdo en versiones anteriores de MySQL se hacia uso de INDEX y es por eso aun se sigue manejando.
Ahora sobre ese tu campo que quieres relacionar con otra tabla en la que no es llave primaria, lo que tratas de hacer no creo que sea posible, tal vez deberias pensar en normalizar esa tabla y redisenarla para que puedas trabajar sin problemas, tal vez como sugerencia podrias evitar esos errores que tienes al crear las referencias si haces un diseno fisico o ER en un algun programa como DBDesigner o PowerDesigner hay muchas que facilitan el diseno y ayudan generando scripts .sql y hasta te revisan tu sintaxis, cya
__________________
"El Conocimiento es de todos, no solo de algunos"
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 23:53.