Проблема двойного внешнего ключа в SQL Compact - PullRequest
1 голос
/ 25 января 2011

Ниже приведена базовая версия базы данных:

Вопросы
uid - первичный ключ - int
qid - первичный ключ - идентификатор - bigint
img - nchar
postdate -datetime
title - nchar

UserProfile
Email - nchar
UserId - первичный ключ - idendity - int

Голосов
qid - primaryключ - bigint
uid - первичный ключ - int
votedate - datetime
голосование - бит

проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы uid из Votes был внешним ключом отUserTable и qid of Votes - это внешний ключ от вопросов (очевидно, qid).Когда я пытаюсь добавить отношения с WebMatrix, я получаю сообщение об ошибке «Ссылочная таблица должна иметь первичный или потенциальный ключ».Что я делаю неправильно?

Ответы [ 4 ]

1 голос
/ 25 января 2011

Внешний ключ ДОЛЖЕН ссылаться на уникальный ключ из другой таблицы. Из вашего вопроса неясно, намерены ли вы для item1 или item2 быть PK, или комбинация (item1, item2) является уникальной. Если это комбинация, то это единственная действительная ссылка для внешнего ключа из другой таблицы.

PK вопросов состоит из двух столбцов, поэтому для создания FK от голосования до вопроса вам нужно 2 столбца, чтобы присоединиться к нему. Однако было бы лучше создать простой ПК с одним столбцом. Тогда ваш 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 

Вы можете создать индекс по Вопросу (uid, qid), но не делайте это с ПК.

0 голосов
/ 02 июня 2012

У меня была такая же проблема, и я случайно нашел решение.

Необходимо убедиться, что таблица индекса первичного ключа имеет тот же порядок полей, что и в отношении.

0 голосов
/ 25 января 2011

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 голосов
/ 25 января 2011

Не знаком с WebMatrix, поэтому я не знаю, есть ли у него, в частности, проблемы с составными ключами.

Однако я отмечаю, что первичный ключ в вопросах - это (uid, qid), и это несовместимо с тем, что qid в голосованиях (сам по себе) является внешним ключом для вопросов.

...