2016-02-26 257 views
0

好吧,首先,我已经看了几个小时,试图让我的外键约束工作,并没有运气到目前为止。Derby中的外键约束

我会发布我试过的变化(这基本上是我在谷歌上看到的每一个变化)。

这是我的创建语句,完美的工作,现在我尝试在用户名列上添加一个外键。

public final String CREATE_QUESTIONS_TABLE = "CREATE TABLE Questions(QuestionID INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY," 
     + "SubmittedTime TIMESTAMP NOT NULL," 
     + "Title VARCHAR(50) NOT NULL," 
     + "Text VARCHAR(300) NOT NULL," 
     + "Username VARCHAR(10)," 
     + "Rating INTEGER DEFAULT 0 NOT NULL)"; 

我曾尝试加入这些旁边用户名:

+ "Username VARCHAR(10) CONSTRAINT username_fk FOREIGN KEY (Username) REFERENCES Users(Username)," 

+ "Username VARCHAR(10) CONSTRAINT username_fk REFERENCES Users(Username)," 

而且我现在不记得了几个人(我有很多的选项卡打开)

我知道它不起作用,因为当我添加这些时,我得到以下,当我尝试从它中选择

Schema 'USERNAME' does not exist 

这意味着它没有创建表,我试图从一个不存在的表中选择。

请告诉我需要写什么来帮助我,以便将列定义为另一个表的外键。

我想设置表的用户名问题表用户的用户名(主键)的外键。

这是Derby和Java。

+0

看来,你是不是真正确定你跑什么SQL,并且它的所作所为。为什么不重新开始一个新的数据库,并使用像Derby的“ij”工具或像SquirrelSQL这样的工具来了解DDL应该如何创建表。这里是关于如何指定外键引用的文档:https://db.apache.org/derby/docs/10.12/ref/rrefsqlj13590.html –

+0

我使用嵌入式驱动数据库德比,我只能使用为我的项目。 – ImZyzzBrah

+0

我可以看到你必须遵守家庭作业的规则,但是我很难理解为什么你的老师会认为你不了解SQL和Derby的更多信息。也许你可以问你的老师,如果你在https://db.apache.org/derby/docs/10.12/getstart/上执行了Derby教程是否可以。如果你的类的目标是学习数据库,关于SQL的基本知识似乎是你的老师会赞同的。 –

回答

0

用户表需要首先创建,然后是问题表。

外键约束在最后补充道:

CREATE TABLE Questions 
(
    QuestionID INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
    SubmittedTime TIMESTAMP NOT NULL, 
    Title VARCHAR(50) NOT NULL, 
    Text VARCHAR(300) NOT NULL, 
    Username VARCHAR(10), 
    Rating INTEGER DEFAULT 0 NOT NULL, 
    CONSTRAINT username_fk FOREIGN KEY (Username) REFERENCES Users(Username) 
)