-1

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

这是我的查询:

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.
4

2 回答 2

1

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

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

我不建议你这样做

OAID,_Text在我看来,这不是一个好的主键ogrnizationarticle。我会在那里使用代理 PK( IDENTITY),然后您只需将其包含在organizationArticleComment.

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

于 2013-03-12T22:30:06.213 回答
0

OAID中的字段ogrnizationarticle必须是“唯一键”或“主键”。

有关详细信息,请参阅候选键

于 2013-03-12T22:32:40.397 回答