尝试执行关系时SQL Query问题

时间:2013-03-12 22:26:21

标签: sql sql-server isqlquery

我正在我的数据库中创建表格,在尝试创建表格之间的关系时,我的查询出现了一个奇怪的问题。

这是我的查询:

CREATE  TABLE ogrnizationarticle (
  OAID Int NOT NULL ,
  _Text VARCHAR(255) NOT NULL ,
  ARank Int NULL DEFAULT NULL ,
  Acomment VARCHAR(255) NULL DEFAULT NULL ,
  Author VARCHAR(45) NULL DEFAULT NULL ,
  PRIMARY KEY (OAID, _Text) ,
  foreign key (OAID) references organization(OID),
  );
-- -----------------------------------------------------
-- Table nasshope.organization_Article_comment
-- -----------------------------------------------------
CREATE  TABLE organizationArticleComment (
  O_Article_ID Int NOT NULL ,
  Comment VARCHAR(255) NOT NULL ,
  Article VARCHAR(255) NOT NULL ,
  Comment_Like Int NULL DEFAULT NULL ,
  _Date DATETIME NULL DEFAULT NULL ,
  PRIMARY KEY (O_Article_ID, Comment, Article) ,
  foreign key (O_Article_ID) references ogrnizationarticle(OAID),
  );

这是错误

Msg 1776, Level 16, State 0, Line 13
There are no primary or candidate keys in the referenced table 'ogrnizationarticle' that match the referencing column list in the foreign key 'FK__organizat__O_Art__42ACE4D4'.
Msg 1750, Level 16, State 0, Line 13
Could not create constraint. See previous errors.

2 个答案:

答案 0 :(得分:1)

为此,您需要将_Text列添加到organizationArticleComment并使用

foreign key (O_Article_ID,_Text) references organization(OAID,_Text)

但是我不建议你这样做

OAID,_Text在我看来并不是ogrnizationarticle的好主键。我会在那里使用代理PK(IDENTITY)然后你只需要在organizationArticleComment中包含它。

否则,您最终需要在表之间复制一个可能非常宽且不稳定的键。由于PK也是该表上的聚簇索引,您应该知道聚簇索引键也包含在表上的任何非聚簇索引中。

答案 1 :(得分:0)

OAID中的

ogrnizationarticle字段必须是`唯一键或主键。

有关详细信息,请参阅 Candidate key