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

clave foránea como clave primaria

Estas en el tema de clave foránea como clave primaria en el foro de Mysql en Foros del Web. Hola a todos. He creado una pequeña base de datos donde existen 3 tablas(Usuario,Sonido y U-S) con los siguientes campos: Usuario( id , nombre ,edad) ...
  #1 (permalink)  
Antiguo 12/11/2008, 16:16
 
Fecha de Ingreso: abril-2006
Mensajes: 205
Antigüedad: 18 años
Puntos: 0
clave foránea como clave primaria

Hola a todos. He creado una pequeña base de datos donde existen 3 tablas(Usuario,Sonido y U-S) con los siguientes campos:

Usuario(id,nombre,edad)
Sonido(ficheromp3,duracion,tipo,mutis)
Usuario-Sonido(id,nombre,ficheromp3,nivel_audicion)

El problema me llega al crear la tercera tabla en MySql... como hago que los campos foráneos se hagan a su vez primarios?

Gracias y un saludo.
  #2 (permalink)  
Antiguo 12/11/2008, 17:43
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, 5 meses
Puntos: 2658
Respuesta: clave foránea como clave primaria

No nos estás diciendo exactamente en qué consiste el problema que MySQL te declara, por lo que en principio no sabemos si el problema es de sintaxis, de implementación o de otro tipo.

Yendo al asunto, no existe ningún impedimento para lo que estás intentando, a menos que lo estés intentando hacer en una tabla de tipo MyISAM, que no es relacional, y por lo tanto no puede manejar FK.
La cosa que tienes que tener en cuenta es que las tablas se deben crear en ese mismo orden:
1. Usuario
2. Sonido
3. Usuario_Sonido (no uses el signo "-" porque te puede generar problemas).

o bien:
1. Sonido
2. Usuario
3. Usuario_Sonido.

No debería generar un error.

Postea lo que sea que te de como mensaje.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/11/2008, 13:25
 
Fecha de Ingreso: abril-2006
Mensajes: 205
Antigüedad: 18 años
Puntos: 0
Respuesta: clave foránea como clave primaria

en el modo de almacenamiento, al crear la tabla no me deja elegir InnoDB, sólo: MyISAM, MEMORY, BLACKHOLE, ARCHIVE, FEDERATED, MRG_MYISAM.

Al poner en la consola "ALTER TABLE sonido ENGINE = InnoDB;

Error
consulta SQL:

ALTER TABLE sonido ENGINE = InnoDB

MySQL ha dicho:

#1289 - The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working

Decir que mi version de mysql es la 5.0.51b por lo que debería soportar tablas InnoDB. Además mi versión de phpmyadmin es la 2.10.3

Además el motor de almacenamiento de phpmyadmin "InnoDB" lo tengo deshabilitado y no me deja habilitarlo.

Última edición por juanmitaaa; 13/11/2008 a las 14:32
  #4 (permalink)  
Antiguo 13/11/2008, 14:37
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: clave foránea como clave primaria

Hola
Eso es por que no tienes habilitado dicho motor de almacenamiento.

Busca el siguiente archivo "my.cnf"
y descomenta las siguientes lineas

Cita:

innodb_data_home_dir
innodb_data_file_path
ibdata1: 10M: autoextend
innodb_log_group_home_dir
innodb_log_group_home_dir
innodb_log_arch_dir


set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_buffer_pool_size = 16M
set-variable = innodb_additional_mem_pool_size=2M
set-variable = innodb_additional_mem_pool_size = 2M

set-variable = innodb_log_file_size=5M
set-variable = innodb_log_file_size = 5M
set-variable = innodb_log_buffer_size=8M
set-variable = innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit=1
innodb_flush_log_at_trx_commit = 1
set-variable = innodb_lock_wait_timeout=50
set-variable = innodb_lock_wait_timeout = 50
reinicia el servicio de tu mysql y ya debe funcionar

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #5 (permalink)  
Antiguo 13/11/2008, 16:05
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, 5 meses
Puntos: 2658
Respuesta: clave foránea como clave primaria

Exacto. Las tablas MyISAM no admiten claves foráneas, de modo que a menos qe habilites el motor InnoDB como te dicen, no vas a poder hacer nada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 14/11/2008, 13:33
 
Fecha de Ingreso: abril-2006
Mensajes: 205
Antigüedad: 18 años
Puntos: 0
Respuesta: clave foránea como clave primaria

ok, gracias ya lo he habilitado como me habéis comentado aunque me sale algo curioso: las tablas las tengo como InnoDB pero la base de datos como MyISAM. ¿Afecta a algo? y otra duda, yo estoy acostumbrado a ORACLE y al crear mis 3 tablas descritas anteriormente en la 3ª tabla "Usuario_Sonido" el campo id,nombre,ficheromp3 me debería de salir reflejado al insertar registros en la 1ª y 2ª tabla no? es decir:
INSERT INTO usuario (id_usuario, nombre, edad) VALUES ('1','juanma','5');
INSERT INTO sonido (ficheromp3, duracion, tipo, mutis) VALUES ('olas.wav','10','a','1');
al hacer un SELECT * FROM Usuario_Sonido; debería salir 2 registros por ser claves foráneas?¿?¿
  #7 (permalink)  
Antiguo 14/11/2008, 16:30
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, 5 meses
Puntos: 2658
Respuesta: clave foránea como clave primaria

Por una cuestión de seguridad y de integridad dentro de la base te conviene poner todas las tablas como InnoDB, así como también la base misma, y las COLLATION de cada tabla.
Esto último es para evitar conflictos con las tablas de caracteres que reconozca cada una.
Una solución práctica en este sentido es que descargues e instales el MySQL GUI Tools, que te trae tanto al MySQL Administrator como al MySQL Query Browser. Son muy buenas herrameintas para administrar y gestionar las bases de MySQL, especialmente porque son nativas de él.
Las puedes descargar en la página oficial (www.mysql.com).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 14/11/2008, 16:55
 
Fecha de Ingreso: abril-2006
Mensajes: 205
Antigüedad: 18 años
Puntos: 0
Respuesta: clave foránea como clave primaria

no veo como cambiar la base de datos a Innodb desde phpmyadmin.... y sobre las claves foráneas he visto algo curioso: Tengo que introducir los nombres de los sonidos y no su ruta es decir:
INSERT INTO Usuario_Sonido (id,nombre,ficheromp3,nivel_audicion) VALUES ('1','juanma','olas.wav','correcto'); me lo inserta correctamente pero si pongo INSERT INTO Usuario_Sonido (id,nombre,ficheromp3,nivel_audicion) VALUES ('1','juanma','c:\\olas.wav','correcto'); me da error de sintaxis, esas barras invertidas que jodias.... las rutas que lo poneis en PHP al exportar los registros de la BBDD??

Última edición por juanmitaaa; 14/11/2008 a las 18:00
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 03:18.