2012-09-24 84 views
1

我已經創建了一些SQL代碼來創建基於ERD的7個表。表格未被創建?

這似乎是非常接近的工作,但它說,

列「inv_no」外鍵約束中引用不存在

但是,表發票這inv_no是in創建,並有列inv_no,所以我很困惑如何創建其他表invoiceLine,它需要inv_no作爲外鍵。

這裏是我的代碼:

CREATE TABLE invoice(

     inv_no   INTEGER   NOT NULL, 
     cust_id   INTEGER   NOT NULL, 
     inv_date  DATE   NOT NULL, 
CONSTRAINT PK_invoice_inv_no PRIMARY KEY(inv_no), 
CONSTRAINT FK_customer_cust_id FOREIGN KEY(cust_id) REFERENCES customer(cust_id) 
); 

CREATE TABLE invoiceLine(

     inv_line_no  INTEGER   NOT NULL, 
     inv_line_qty INTEGER   NOT NULL, 
CONSTRAINT PK_invoiceLine_inv_line_no PRIMARY KEY(inv_line_no), 
CONSTRAINT FK_invoice_inv_no FOREIGN KEY(inv_no) REFERENCES invoice(inv_no) 
); 

再次,在涉及的表invoiceLine這似乎是依賴於發票表inv_no。

如果任何人都可以發現我的錯誤,那就太好了!

+0

你沒有'inv_no'在你的'invoiceline'表中,你不能爲缺失的列添加外鍵 –

回答

5

錯誤消息是正確的,在invoiceline中沒有列inv_no。您還需要聲明該列:

 
CREATE TABLE invoiceLine(
     inv_no INTEGER NOT NULL, 
     inv_line_no  INTEGER   NOT NULL, 
     inv_line_qty INTEGER   NOT NULL, 
CONSTRAINT PK_invoiceLine_inv_line_no PRIMARY KEY(inv_line_no), 
CONSTRAINT FK_invoice_inv_no FOREIGN KEY(inv_no) REFERENCES invoice(inv_no) 
); 
+0

我明白了你的觀點。現在非常明顯。如果你願意回答我的後續行動,我的ERD從發票到invoiceLine有1到M的關係。我認爲爲了使這種關係發揮作用,需要inv_no的外鍵約束? – ZAX

+0

@ZAX:你是對的。但爲了*存儲* 1:M關係,您必須在'M'表中存儲'1'表的引用PK值。您已經在客戶和發票之間做到了這一點。 –

+0

非常感謝你!很好的解釋! – ZAX

0

不應該在您的invoiceline表中讀取;

CREATE TABLE invoiceLine(

     inv_line_no  INTEGER   NOT NULL, 
     inv_line_qty INTEGER   NOT NULL, 
CONSTRAINT PK_invoiceLine_inv_line_no PRIMARY KEY(inv_line_no), 
CONSTRAINT FK_invoice_inv_no FOREIGN KEY(inv_line_no) REFERENCES invoice(inv_no) 
); 

inv_line_no代替inv_no

0
你可能想增加一個外鍵約束之前添加inv_no列invoiceLine表

CREATE TABLE invoiceLine(

    inv_line_no  INTEGER   NOT NULL, 
    inv_line_qty INTEGER   NOT NULL, 
    inv_no   Integer   Not Null, 
CONSTRAINT PK_invoiceLine_inv_line_no PRIMARY KEY(inv_line_no), 
CONSTRAINT FK_invoice_inv_no FOREIGN KEY(inv_no) REFERENCES invoice(inv_no) 
);