SQL Compact双外键问题

时间:2011-01-24 21:38:42

标签: sql sql-server-ce webmatrix

以下是数据库的基本版本:

问题
uid - 主键 - int
qid - 主键 - 身份 - bigint
img - nchar
postdate - datetime
title - nchar

UserProfile
电子邮件 - nchar
UserId - 主键 - idendity - int

投票
qid - 主键 - bigint
uid - 主键 - int
投票 - 日期时间
投票 - 位

我遇到的问题是我希望投票的uid是来自UserTable的外键和投票的qid是来自问题的外键(显然是qid)。当我尝试添加与WebMatrix的关系时,我不断收到错误“引用的表必须有主键或候选键。”我究竟做错了什么?

4 个答案:

答案 0 :(得分:1)

外键必须引用另一个表中的唯一键。根据您的问题,您不清楚是否打算将item1或item2作为PK,或者(item1,item2)的组合是否唯一。如果是组合,那么这是来自另一个表的外键的唯一有效链接。

问题的PK由两列组成,因此要从Vote到Question创建FK,您需要2列才能加入它。然而,创建一个只有一列的简单PK会更好。然后,你的FK将会工作。

Votes
qid - primary key - bigint
uid - primary key - int
votedate - datetime
vote - bit

Questions
qid - primary key - identity - bigint
uid - int
img - nchar
postdate - datetime
title - nchar 

您可以在Question(uid,qid)上创建索引,但不要将其设为PK。

答案 1 :(得分:0)

不熟悉WebMatrix,所以我不知道它是否特别是复合键有问题。

但我确实注意到,问题中的主键是(uid,qid),并且与Votes中的qid(本身)不兼容是问题的外键。

答案 2 :(得分:0)

enter image description here

create table UserProfile (
      UserID  integer identity primary key
    , Email   nvarchar(512)
);

create table Question (
      QuestionID integer identity primary key
    , OwnerID    integer 
    , PostDate   datetime
    , Title      nvarchar(1000)
);
alter table Question
    add constraint fk1_Question foreign key (OwnerID) references UserProfile (UserID); 


create table Vote (
      UserID      integer
    , QuestionID  integer
    , VoteDate    datetime
);
alter table Vote
    add constraint pk1_Vote primary key (UserID, QuestionID)
  , add constraint fk1_Vote foreign key (UserID)      references UserProfile (UserID);
  , add constraint fk2_Vote foreign key (QuestionID)  references Question (QuestionID);

答案 3 :(得分:0)

我遇到了同样的问题,并意外地找到了解决方案。

您需要确保主键索引表与关系中的字段顺序相同。