Como debo relacionar dos tablas

publicado por: Anonymous

Tengo una duda sobre cómo relacionar dos tablas.

Foto de las tablas

El problema es no sé qué tipo de relación crear para este ejemplo.

Teniendo en cuenta que en mi tabla COMBUSTIBLE tengo 2 registros:

IDcombustible | Combustible
---------------------------
    1         | Diesel
    2         | Gasolina

Ahora ingreso un motor y le asigno el tipo de combustible. El número 1 que es a diesel.

idmotor | tipo_motor | combustible_idcombustible
------------------------------------------------
1       | '2.5cc'    | 1

Ahora el problema es que necesito ingresar otro motor ‘2.5cc’ pero existe a gasolina.

idmotor | tipo_motor | combustible_idcombustible
------------------------------------------------
1       | '2.5cc'    | 2

Al hacer eso me doy cuenta que nuevamente ingreso en la tabla MOTOR otro registro con la columna tipo_motor con el valor '2.5cc' pero con la columna combustible_idcombustible con valor 2. Creo que no es correcto por que hay redundancia de datos.

¿Cuál sería el modo correcto de relacionar las dos tablas?

solución

Parece que necesitas crear una tabla adicional que soporte tu relación de muchos a muchos entre las tablas motor y combustible. Esto haría que tengas menor redundancia de datos. Así:

CREATE TABLE combustible_motor (
    id INT PRIMARY KEY AUTO_INCREMENT,
    idCombustible INT NOT NULL,
    idMotor INT NOT NULL,
    FOREIGN KEY (idCombustible) REFERENCES combustible (idCombustible),
    FOREIGN KEY (idMotor) REFERENCES motor (idMotor)
);

Y allí asocias los registros de ambas tablas.

INSERT INTO combustible_motor (idCombustible, idMotor) VALUES
(1, 1), -- el primer 1 refiere a tu combustible Diesel y el segundo 1 al motor de 2.5cc
(2, 1) -- el 2 refiere a tu combustible Gasolina y el 1 al motor de 2.5cc;

Por si acaso, hacer esto significa que vas a tener que remover la relación directa que hay entre tu tabla combustible hacia tu tabla motor.

Respondido por: user227

Leave a Reply

Your email address will not be published. Required fields are marked *