以下是数据库的基本版本:
问题
uid - 主键 - int
qid - 主键 - 身份 - bigint
img - nchar
postdate - datetime
title - nchar
UserProfile
电子邮件 - nchar
UserId - 主键 - idendity - int
投票
qid - 主键 - bigint
uid - 主键 - int
投票 - 日期时间
投票 - 位
我遇到的问题是我希望投票的uid是来自UserTable的外键和投票的qid是来自问题的外键(显然是qid)。当我尝试添加与WebMatrix的关系时,我不断收到错误“引用的表必须有主键或候选键。”我究竟做错了什么?
答案 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)
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)
我遇到了同样的问题,并意外地找到了解决方案。
您需要确保主键索引表与关系中的字段顺序相同。