2011-01-24 25 views
1

データベースの基本的なバージョンである:

質問
UID - 主キー - 主キー - - アイデンティティ - BIGINT
IMG -
POSTDATE NCHAR - 日時
QIDをint型
タイトル -
SQLコンパクトダブル外部キー問題

nchar型のUserProfile
メール - NCHAR
ユーザーID - primar Yキー - idendity - int型

投票
QID - 主キー - BIGINT
UID - 主キー - 私が午前問題は、私であるビット

- 日時
投票 -
votedateをint型VotesがUserTableからの外部キーであり、Votesが質問からの外部キーとなるqid(明らかにqid)であることが必要です。 WebMatrixでリレーションシップを追加しようとすると、「参照されるテーブルにはプライマリまたは候補キーが必要です」というエラーが表示され続けます。私は間違って何をしていますか?

+0

よく、多くのものがあります。なぜ私たち(I)が助けることができるように、一般的な 'table-item'の代わりにテーブルとカラムの名前を付けて実際の例を投稿してください。 –

+0

は、どの部分がFKであるかを示し、どの部分がリンクしようとしているPKであるかを – RichardTheKiwi

+0

は元に変更しました。それが助けてくれることを願って – foobar

答えて

1

外部キーは、別のテーブルの一意のキーを参照する必要があります。あなたの質問から、あなたがitem1かitem2をPKにしようとするのか、(item1、item2)の組み合わせが一意であるのかは明らかではありません。それがコンビネーションである場合、それは別のテーブルからの外部キーに対する唯一の有効なリンクです。

質問のPKは2つの列で構成されているため、Vote to QuestionからFKを作成するには、2つの列が必要です。ただし、1つの列で簡単な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にしないでください。

+0

それは私が感謝のために探していたものでした! – foobar

0

WebMatrixに詳しくないので、特に複合キーに問題があるかどうかは分かりません。

しかし、質問の主キーは(uid、qid)であり、投票にqidを付ける(それ自体で)質問に対する外部キーではないことに注意してください。

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); 
0

私は同じ問題を抱えていたと誤って解決策を見つけました。

主キー索引表のフィールドの順序がリレーションと同じであることを確認する必要があります。