Duvida Insert tabela Muitos para Muitos

MySQL

18/09/2012

Bom dia galerinha. Minha duvida é de iniciante.

tenho 3 tabelas. Orders, Products e OrderDetails

CREATE TABLE `OrderDetails` (
  `OrderID` int(11) NOT NULL,
  `ProductID` int(11) NOT NULL,
  `UnitPrice` double NOT NULL,
  `Quantity` int(11) NOT NULL,
  `Discount` int(11) DEFAULT NULL,
  KEY `fk_OrderDetails_1_idx` (`OrderID`),
  KEY `fk_OrderDetails_1_idx1` (`ProductID`),
  CONSTRAINT `fk_OrderDetails_Products` FOREIGN KEY (`ProductID`) REFERENCES `Products` (`ProductsID`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk_OrderDetails_Order` FOREIGN KEY (`OrderID`) REFERENCES `Orders` (`OrdersID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='latin1_swedish_ci'$$


CREATE TABLE `Orders` (
  `OrdersID` int(11) NOT NULL AUTO_INCREMENT,
  `UnitPrice` int(11) NOT NULL,
  `Quantity` int(11) NOT NULL,
  `Discount` double DEFAULT NULL,
  PRIMARY KEY (`OrdersID`),  
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='latin1_swedish_ci'$$


CREATE TABLE `Products` (
  `ProductsID` int(11) NOT NULL AUTO_INCREMENT,
  `ProductName` varchar(35) NOT NULL,
  `SupplierID` int(11) NOT NULL,
  `CategoryID` int(11) NOT NULL,
  `QuantityPerUnity` int(11) NOT NULL,
  `UnitPrice` double NOT NULL,
  `UnitsInStock` int(11) NOT NULL,
  PRIMARY KEY (`ProductsID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='latin1_swedish_ci'$$


Agora vem as minhas duvidas ^^

1 - Na tabela OrderDetails eu coloquei o campo OrderID e o ProductID apenas como foreign key. É assim mesmo ? tem a necessidade de colocar os 2 campos como primary key tbm ?

2 - No meu codigo eu vou ter que fazer um insert para Product, Order e OrderDetails separadamente ? qual a melhor forma de fazer um insert ?

3 - É possivel eu adicionar o ID da tabela Product e o ID da tabela Order e preencher automaticamente a relação na tabela OrderDetails ?

Renato Chinaglia

Renato Chinaglia

Curtidas 0

Respostas

Felipe Medina

Felipe Medina

18/09/2012

1 - Esta correto.
2 - A forma correta de inserir seria nessa ordem: Product, Order,OrderDetails. Como a tabela OrderDetails tem FK das anterirores será preciso que eles estejam preenchidas com as informações para a FK da OrderDetails.

3- Não é possível via banco, pode ser feito script ( trigger, procedure) que tenha uma regra que faça isso em alguma hipótese, que você define.
GOSTEI 0
Alisson Santos

Alisson Santos

18/09/2012

teve algum progresso sobre a duvida
GOSTEI 0
Renato Chinaglia

Renato Chinaglia

18/09/2012

Muito obrigado.

Respondida ^^
GOSTEI 0
POSTAR