H2和外键

时间:2015-06-19 23:18:17

标签: sql h2

我遇到了一个问题:

我打算在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);

1 个答案:

答案 0 :(得分:3)

未定义链接字段

您正在为表S_ACHIEVEMENT中不存在的列定义关系(外键)。外键是子表("很多"表)上的列与父表上的列(" one"表)之间的链接。您的代码表示您希望链接来自字段" C_TASK"在" S_ACHIEVEMENT"但没有" C_TASK"那张桌子上的字段。

实施例

以具有0个或更多发票(子表)的客户(父表)为例,每个发票必须由一个客户拥有。同样,发票表又是订单项表的父级。

diagram of three tables, invoice_ linking to customer_, and line_item_ linking to invoice_

你会有表格和列:

  • customer_
    • 名_
    • 电话_
    • uuid_(主键)
  • invoice_
    • INVOICE_NUMBER _
    • date_of_invoice _
    • uuid_(主键)
    • fk_customer_uuid_(外键)
  • line_item_
    • _ ITEM_NUMBER
    • product_sold _
    • 成本_
    • 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