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

clave foránea de más de una tabla

Estas en el tema de clave foránea de más de una tabla en el foro de Bases de Datos General en Foros del Web. Tengo varias tablas en mysql, todas tienen un campo identificador autonumérico. Por ejemplo: Tabla musica y software Y una tabla comentarios. El detalle está en ...
  #1 (permalink)  
Antiguo 30/01/2005, 09:11
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
clave foránea de más de una tabla

Tengo varias tablas en mysql, todas tienen un campo identificador autonumérico.

Por ejemplo:

Tabla musica y software

Y una tabla comentarios.

El detalle está en que quiero permitir dejar un comentario sobre una canción o sobre una discoteca o sobre lo que sea, de manera que en la tabla comentarios voy a necesitar un campo que sea clave foránea de varias tablas...

Y no sé cómo hacer referencia a varios campos... lo que tengo es esto:


CREATE TABLE `comentarios` (
`identificador` int(9) NOT NULL auto_increment,
`ident` int(9) NOT NULL default '0',
`tabla` varchar(20) collate latin1_spanish_ci NOT NULL default '',
`comentario` varchar(255) collate latin1_spanish_ci NOT NULL default '',
PRIMARY KEY (`identificador`),
UNIQUE (`ident`),
FOREIGN KEY (`ident`) REFERENCES musica(`identificador`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci ;

ident va ha ser el identificador de las otras tablas (recordemos que todas tienen el mismo campo de clave primaria: identificador int(9) autonumerico)

Entonces dónde tengo ésto:

FOREIGN KEY (`ident`) REFERENCES musica(`identificador`) ON DELETE CASCADE ON UPDATE CASCADE

debería poner algo así:

FOREIGN KEY (`ident`) REFERENCES musica(`identificador`),software(`identificador`) ON DELETE CASCADE ON DELETE CASCADE

Pero el phpmyadmin devuelve un error diciendo que la sintaxis no es correcta.

Cómo se hace? o lo que es más importante: se puede hacer, no?

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #2 (permalink)  
Antiguo 30/01/2005, 12:06
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
No, lo acabo de pensar y eso no se puede hacer. Si una clave foránea apunta a dos claves de tablas distintas a cuál tiene que hacer referencia la foránea?... por eso no se puede...

Pero sigo teniendo el problema principal, y era dejar un comentario sobre una canción, sobre una discoteca o sobre lo que sea...

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #3 (permalink)  
Antiguo 30/01/2005, 19:59
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 8 meses
Puntos: 1
Vamos a ver, lo que tienes que hacer es una cosa que se llama herencia. Es un término más dado a la Orientación a Objetos, pero aplicable también a bases de datos relacionales.
Lo que tienes que hacer es una tabla padre de todas aquellas que se puedan comentar. Me explico:
Hazte una table COMENTABLE que tenga el identificador autonumérico este que tienes:

TABLE COMENTABLE (
ID INT,
PRIMARY KEY (ID)
)

Ahora, lo que tienes que hacer es que el resto de tablas (música, software....lo q sea) hereden de esta tabla, esto es:

TABLE MUSICA (
ID INT,
PRIIMARY KEY (ID),
FOREIGN KEY (ID) REFERENCES COMENTABLE (ID) ON DELETE CASCADE
)

e igual para software o la que sea. Si te fijas, el ID en musica debe ser el mismo que en comentable. Realmente lo que estás haciendo es meter un poco de redundancia, pero sana
Ahora, la tabla comentario hazla de forma que apunte a COMENTABLE (ID). De esa forma apuntará a un comentable, que luego puede ser música, software o lo que quiera que pongas.
Si quieres, también puedes poner en comentable un campo TIPO o algo así, que te diga directamente si es música, informática o lo que sea. Esto no es necesario, pero te hace la vida un poco más fácil.
Como todo buen diseño de herencia, intenta poner en el tipo padre (en este caso comentable) todos los datos que sean comunes a los hijos (música, software, etc), y en éstos sólo el ID que apunta al padre y los campos específicos de cada uno.
Eso es todo, saludosss
__________________
Mi página personal: Julián Urbano

Última edición por caerolus; 02/02/2005 a las 05:02
  #4 (permalink)  
Antiguo 31/01/2005, 11:44
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Gracias caerolus, lo pensaré cómo tú dices.

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
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 10:09.