2014-11-03 69 views
0

因此,我建立了一個簡單的數據庫,並且我正試圖測試它是否正常工作。我想弄清楚如何將多個條目放入訂單表中。我需要訂購#並且能夠訂購多個物品並使用多個託運人等。我似乎無法找到一種方法將數據正確地存入我​​的數據庫。如何將多行插入到訂單表中?

下面是我如何設置我的數據庫。有人可以向我解釋如何將我的測試數據存入數據庫。

下面是引用表:

CREATE TABLE Product_Table (
ProductID INT NOT NULL, 
Product_Name char(50) NOT NULL, 
Product_Cost number(9,2) NOT NULL, 
Product_In_Stock INT NOT NULL, 
CONSTRAINT Products_PK PRIMARY KEY (ProductID) 
); 

CREATE TABLE Payment_Terms_Table (
PayTermNum INT NOT NULL, 
Payment_Time_Frame CHAR(20) NOT NULL, 
CONSTRAINT Payment_Terms_PK PRIMARY KEY (PayTermNum) 
); 


CREATE TABLE Shipper_Table (
ShipperNum INT NOT NULL, 
Shipper_Name CHAR(50) NOT NULL, 
Shipper_Phone CHAR(22) NULL, 
CONSTRAINT ShipperNum_PK PRIMARY KEY (ShipperNum) 
); 

CREATE TABLE Supplier_Table (
SupplierID INT NOT NULL, 
Supplier_Name CHAR(50) NOT NULL, 
Sup_Address CHAR(50) NOT NULL, 
Sup_City CHAR(20) NOT NULL, 
Sup_State CHAR(20) NOT NULL, 
Sup_Zip CHAR(9) NOT NULL, 
Sup_Phone CHAR(22) NULL, 
ShipperNum INT NOT NULL, 
PayTermNum INT NOT NULL, 
CONSTRAINT Supplier_PK PRIMARY KEY (SupplierID), 
CONSTRAINT ShipperNum_Relationship FOREIGN KEY (ShipperNum) 
     REFERENCES Shipper_Table (ShipperNum), 
CONSTRAINT PayTermNum_Relationship FOREIGN KEY (PayTermNum) 
     REFERENCES Payment_Terms_Table (PayTermNum) 
); 

這裏是我的Order表:

CREATE TABLE Order_Table (
OrderID INT NOT NULL, 
ProductID INT NOT NULL, 
SupplierID INT NOT NULL, 
Wholesale_Price NUMBER (9,2) NOT NULL, 
Units_Ordered INT NOT NULL, 
Order_Date DATE DEFAULT SYSDATE NOT NULL, 
Order_Received DATE NULL, 
CONSTRAINT Order_PK PRIMARY KEY (OrderID), 
CONSTRAINT ProductID_Relationship FOREIGN KEY (ProductID) 
    REFERENCES Product_Table (ProductID), 
CONSTRAINT SupplierID_Relationship FOREIGN KEY (SupplierID) 
    REFERENCES Supplier_Table (SupplierID) 
); 

回答

1

你的問題是,你必須定義一個表來保存訂單,所以你只能有一個每個訂單項目。通常我們通過有兩個表來處理這種情況:包含整個訂單信息的標題和每個訂購商品的行表。

CREATE TABLE Order_Header (
OrderID INT NOT NULL, 
Order_Date DATE DEFAULT SYSDATE NOT NULL, 
Order_Received DATE NULL, 
CONSTRAINT Order_PK PRIMARY KEY (OrderID) 
) 
/

CREATE TABLE Order_Line (
OrderID INT NOT NULL, 
LineNo INT NOT NULL, 
ProductID INT NOT NULL, 
SupplierID INT NOT NULL, 
Wholesale_Price NUMBER (9,2) NOT NULL, 
Units_Ordered INT NOT NULL, 
CONSTRAINT Order_Line_PK PRIMARY KEY (OrderID, LineNo), 
CONSTRAINT Order_Line_Header_FK FOREIGN KEY (OrderID) 
    REFERENCES Order_Header (OrderID) 
CONSTRAINT ProductID_Relationship FOREIGN KEY (ProductID) 
    REFERENCES Product_Table (ProductID), 
CONSTRAINT SupplierID_Relationship FOREIGN KEY (SupplierID) 
    REFERENCES Supplier_Table (SupplierID) 
) 
/

我已經聲明瞭一個複合主鍵,因爲它更容易理解發生了什麼。

既然您有兩張桌子,您可以使用多行來輕鬆創建訂單。


關於正常實踐的問題,訂單應該有一個CUSTOMER。這將是ORDER_HEADER的一個屬性。你也有一個SHIPPER表,但不要使用它。這也可能是ORDER_HEADER的一個屬性。

此外,您的命名約定是醜陋的。不需要包含_TABLE:只需爲它們所代表的對象命名對象即可。同樣,你的外鍵需求也是不透明的;在這個玩具例子中,這並不重要,但是在真實的數據庫中,您會發現在FK名稱中指定子表和父表是很有幫助的。

相關問題