Tengo una duda que espero que me puedan resolver.
El caso es que tengo una base de datos ya hecha y me funciona, pero no esta muy depurada ya que uso muchas tablas y me gustaria acortar las consultas sql.
La duda que me lleva rondando y no se solucionarla es con los desarrolladores y distribuidores de los juegos.
Me explico. En un principio creé la tabla compania (idCompania, logo, nombre, fechaSalida y descripcion). Siendo mi intencion insertar todas las companias ahi y que la tabla juegos se relacione con esta.
Pero resulta que los juegos poseen un desarrollador y un distribuidor (que a fin de cuentas son companias), lo primero que pense fue crear dos claves foraneas a la tabla compania (idcompania) para relacionarlas, esto no me daba problema de sintaxis, pero claro me sacaba aquellos campos en los que el desarrollador y el distribuidor eran los mismos, por lo que estaba mal.
Luego intente crear dos claves primarias en la tabla compania (idDistribuidor y idDesarrollador) pero al crear las dos fk me daba error, concretamente este.
Código PHP:
ERROR 1005: Can't create table 'pruebas.#sql-bc_1' (errno: 150)
SQL Statement:
ALTER TABLE `pruebas`.`juegos`
ADD CONSTRAINT `desarrollador_compania`
FOREIGN KEY (`desarrollador` )
REFERENCES `pruebas`.`compania` (`idDesarr` )
ON DELETE NO ACTION
ON UPDATE NO ACTION
ERROR: Error when running failback script. Details follow.
ERROR 1050: Table 'juegos' already exists
SQL Statement:
CREATE TABLE `juegos` (
`idjuegos` int(11) NOT NULL,
`nombreJuego` varchar(45) DEFAULT NULL,
`plataforma` varchar(45) DEFAULT NULL,
`distribuidor` int(11) DEFAULT NULL,
`desarrollador` int(11) DEFAULT NULL,
`descripcion` text,
PRIMARY KEY (`idjuegos`),
KEY `distribuidor_compania` (`distribuidor`),
KEY `desarrollador_compania` (`desarrollador`),
CONSTRAINT `distribuidor_compania` FOREIGN KEY (`distribuidor`) REFERENCES `compania` (`idDistrib`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Nota: Los nombres de las claves primarias son distintas a lo que he dicho por que es una prueba aparte que estoy haciendo, pero viene a ser lo mismo.
Viendo este error, lo que pense fue crear las tablas desarrollador (idDesarrollador, logo, nombre, fechaSalida, descripcion) y distribuidor (idDistribuidor, logo, nombre, fechaSalida, descripcion) para que en la tabla juegos cada campo apunte a una tabla.
Ahora resulta que tengo 3 tablas exactas para lo mismo, y lo que me gustaria es tener una (companias) que era el objetivo del principio y no supe hacerlo. Mi pregunta es, se puede hacer esto en una tabla ??, tengo entendido que se pueden crear dos claves foraneas apuntando a una misma tabla, no??, espero que me puedan ayudar.
Una ultima dudita antes de acabar la entrada de relaciones.
Resulta que todas mis consultas que realizo con relaciones las hago de la siguiente forma.
Suponiendo que quiero sacar el nombre de distribuidor de los juegos...
Código PHP:
SELECT nombreJuego,distribuidor.distribuidor FROM juegos,distribuidor WHERE juegos.distribuidor=distribuidor.iddistribuidor;
Código PHP:
SELECT nombreJuego,distribuidor.distribuidor FROM juegos INNER JOIN distribuidor ON juegos.distribuidor=distribuidor.idDistribuidor;
Muchas gracias por su ayuda.