Cita de: YreX-DwX en 31 Mayo 2020, 09:25 AMLas claves foráneas quedarían así Id_vendedor en pedido, id_pedido en cliente, id_pago en pedido?
Así es, una relación de cardinalidad N:M constituye una nueva entidad (tabla) que estará formada por las claves primarias de ambas tablas originales (que formarán conjuntamente la clave primaria de la nueva tabla) y los atributos de relación que pudiese haber (pudiendo ser alguno de ellos un discrimante y entonces habría que incluirlo en la clave primaria de la nueva tabla).Código (sql) [Seleccionar]
CREATE TABLE [if not exists] Pedido (
id_pedido INT PRIMARY KEY [auto_increment],
...
);
CREATE TABLE [if not exists] Producto (
id_producto INT PRIMARY KEY [auto_increment],
...
);
-- Tabla resultante de la relacion:
CREATE TABLE [if not exists] Inventario (
id_pedido INT,
id_producto INT,
cantidad INT [default 1], -- Cantidad del producto id_producto que hay en el pedido id_pedido, [por defecto: 1]
PRIMARY KEY(id_pedido, id_producto),
[CONSTRAINT FK_Inventario_Pedido] FOREIGN KEY (id_pedido) REFERENCES Pedido(id_pedido),
[CONSTRAINT FK_Inventario_Producto] FOREIGN KEY (id_producto) REFERENCES Producto(id_producto)
);
Por ejemplo a esta relación le vendría bastante bien el atributo de relación <cantidad> para saber cuántos productos de cada tipo hay en cada pedido.
Las partes entre corchetes [] son opcionales y si se ponen tienes que quitar los corchetes.
El DELETE ON CASCADE tienes que incluirlo en la FOREIGN KEY de la tabla que quieres que se elimine en cascada, es decir, de la tabla opuesta a la que tú vas a borrar. En este caso si quieres que al eliminar un Pedido, se elimine un Pago, Pedido tiene que ser la tabla independiente (que no contiene la FK) y Pago será la dependiente.Código (sql) [Seleccionar]
CREATE TABLE [if not exists] Pago (
id_pago int primary key [auto_increment],
...
id_pedido int,
[constraint FK_Pago_Pedido] foreign key (id_pedido) references Pedido(id_pedido) ON DELETE CASCADE
);
No tengo muy claro como crear la estructura con estas claves