2015-06-19 45 views
1

我遇到了一個問題:H2和FOREIGN KEY

我打算在H2中創建2個表。當我試圖創建第二個表,發生錯誤:

列C_TASK沒有發現

下面是代碼:

CREATE TABLE S_TASK (C_TASK INT PRIMARY KEY, N_TASK VARCHAR(255), POINT_COUNT INT); 

CREATE TABLE S_ACHIEVEMENT(C_ACHIEVEMENT INT PRIMARY KEY, N_REWARD VARCHAR(255), PICTURE VARCHAR(255), FOREIGN KEY (C_TASK) REFERENCES S_TASK(C_TASK), EXEC_COUNT INT); 
+0

發佈時,請將業務環境更改爲簡單,明顯且直觀的內容。在你的上下文中,哪個表是父母,哪個是孩子並不明顯。另外,實際上創建一個簡單的示例並在發佈之前運行它通常會有揭示您的問題/解決方案的良好副作用。 –

回答

3

沒有定義連接域

您正在爲表S_ACHIEVEMENT中不存在的列定義關係(外鍵)。外鍵是子表(「多」表)上的列與父表(「一」表)上的列之間的鏈接。您的代碼表示您希望鏈接「S_ACHIEVEMENT」上的字段「C_TASK」,但該表上沒有「C_TASK」字段。

就拿客戶(父表)誰有0個或更多的發票(子表),每張發票必須由只有一個客戶所擁有。同樣,發票表又是行項目表的父項。

​​

你將不得不表和列:

  • customer_
    • 名_
    • phone_
    • uuid_(主鍵)
  • invoice_
    • invoice_number_
    • date_of_invoice_
    • uuid_(主鍵)
    • fk_customer_uuid_(外鍵)
  • line_item_
    • item_number_
    • product_sold_
    • cost_
    • uuid_(主鍵)
    • fk_invoice_uuid_(外鍵)

在invoice_表,你會定義:

ALTER TABLE invoice_ ADD FOREIGN KEY (fk_customer_uuid_) REFERENCES customer_(uuid_) ; 

ALTER TABLE line_item_ ADD FOREIGN KEY (fk_invoice_uuid_) REFERENCES invoice_(uuid_) ; 

標記爲「(外鍵)」的列是您忘記在您的子表上定義的內容。

查看本帖子的更多信息,例如H2 Alter Table Add Foreign Key