2015-08-14 58 views
0

我開始建立類似系統到只是建議進入所謂ForslagOpslag數據庫合作。約束外鍵一個表 - 導致錯誤

每次我嘗試更新與喜歡錶,你會看到它與這一個錯誤:

Update cannot proceed due to validation errors. Please correct the following errors and try again.

SQL71516 :: The referenced table '[dbo].[ForslagOpslag]' contains no primary or candidate keys that match the referencing column list in the foreign key. If the referenced column is a computed column, it should be persisted.

這裏是我建我的ForslagOpslagLikes表:

CREATE TABLE [dbo].[ForslagOpslagLikes] 
(
    [fk_brugerid] INT  NOT NULL, 
    [opretdato] DATETIME NOT NULL, 
    [getid]  INT  NOT NULL, 

    CONSTRAINT [PK_ForslagOpslagLikes] 
     PRIMARY KEY CLUSTERED ([fk_brugerid], [getid]), 
    CONSTRAINT [FK_ForslagOpslagLikes_ToGetid] 
     FOREIGN KEY ([getid]) 
     REFERENCES [dbo].[ForslagOpslag]([Id]), 
    CONSTRAINT [FK_ForslagOpslagLikes_ToForslagBrugerid] 
     FOREIGN KEY ([fk_brugerid]) 
     REFERENCES [dbo].[ForslagOpslag]([fk_brugerid]) 
); 

原因都在我fk_brugeridgetid是肯定的我,用戶不能投票/喜歡更多一次!

我建立了我的ForslagOpslag路表:

CREATE TABLE [dbo].[ForslagOpslag] 
(
    [Id]   INT   IDENTITY (1, 1) NOT NULL, 
    [text]  NVARCHAR (MAX) NOT NULL, 
    [fk_brugerid] INT   NOT NULL, 
    [opretdato] DATETIME  NOT NULL, 

    PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

這樣做我喜歡做的系統:

ForslagOpslagLikes -> fk_brugerid to ForslagOpslag -> fk_brugerid 

ForslagOpslagLikes -> getid to ForslagOpslag -> id 

回答

-1

你聽起來斯堪的納維亞添加外鍵在第二個表,並Bruger意味着用戶(對於所有非斯堪的納維亞人來說)。

你似乎想什麼是Bruger(用戶)表,其中fk_brugeridForslagOpslag是誰與opretdato創造的記錄是創建日期的用戶,並ForslagOpslagLikes是用戶的關聯表誰喜歡ForslagOpslag與opretdato感他們點擊「贊」的日期。

CREATE TABLE [dbo].[Bruger] 
(
    [brugerid] INT  IDENTITY (1, 1) NOT NULL, 
    ..., 
    CONSTRAINT [PK_Bruger] 
     PRIMARY KEY CLUSTERED ([brugerid]) 
); 

CREATE TABLE [dbo].[ForslagOpslag] 
(
    [Id]   INT   IDENTITY (1, 1) NOT NULL, 
    [text]  NVARCHAR(MAX) NOT NULL, 
    [fk_brugerid] INT   NOT NULL, 
    [opretdato] DATETIME  NOT NULL, 
    CONSTRAINT [PK_ForslagOpslag] 
     PRIMARY KEY CLUSTERED ([Id]), 
    CONSTRAINT [FK_ForslagOpslag_Bruger] 
     FOREIGN KEY ([fk_brugerid]) 
     REFERENCES [dbo].[Bruger] ([brugerid]) 
); 

CREATE TABLE [dbo].[ForslagOpslagLikes] 
(
    [fk_brugerid] INT  NOT NULL, 
    [opretdato] DATETIME NOT NULL, 
    [getid]  INT  NOT NULL, 

    CONSTRAINT [PK_ForslagOpslagLikes] 
     PRIMARY KEY CLUSTERED ([fk_brugerid], [getid]), 
    CONSTRAINT [FK_ForslagOpslagLikes_Bruger] 
     FOREIGN KEY ([fk_brugerid]) 
     REFERENCES [dbo].[Bruger] ([brugerid]), 
    CONSTRAINT [FK_ForslagOpslagLikes_ForslagOpslag] 
     FOREIGN KEY ([getid]) 
     REFERENCES [dbo].[ForslagOpslag]([Id]) 
); 
+0

NIce!並感謝您的幫助..現在看起來我想/想,但是,我已經完全了關於用戶的報價,因爲我稱之爲別的東西。 –

1

好 - 錯誤似乎很清楚:你想estabslish與ForslagOpslag.fk_brugerid這裏的外鍵關係:

CONSTRAINT [FK_ForslagOpslagLikes_ToForslagBrugerid] 
    FOREIGN KEY ([fk_brugerid]) 
    REFERENCES [dbo].[ForslagOpslag]([fk_brugerid]) 

但列不是其他表的主鍵 - 這是不是一個UNIQUE約束要麼 - 讓你不能參考,在一個外鍵關係的列。

但列(S),一個外鍵引用必須其他表的主鍵 - 或SQL Server,這是不夠好,如果有該列有UNIQUE約束。您必須確保您在FroslagOpslag參考值僅在該表中匹配一個列 - 否則,你無法建立外鍵關係

+0

所以,你告訴我這是在中'forslagopslag'應該fk_brugerid和id被例如這樣設置:'主鍵(ID,fk_brugerid)' –

+0

好,無論是'fk_brugerid'需要是主鍵,或者你必須能夠對它設置一個唯一的約束。如果你選擇創建一個**化合物**主鍵'(id,fk_brugerid)',那麼你必須有一個引用**兩個**列的外鍵。 –

+0

它只是不會按照你向我提出的方式去做,它仍然會繼續犯下錯誤。 :( –

0

嘗試刪除foreing關鍵在你的第一個表像這樣

CREATE TABLE [dbo].[ForslagOpslagLikes] 
(
[fk_brugerid] INT  NOT NULL, 
[opretdato] DATETIME NOT NULL, 
[getid]  INT  NOT NULL, 

CONSTRAINT [PK_ForslagOpslagLikes] 
    PRIMARY KEY CLUSTERED ([fk_brugerid], [getid]), 
CONSTRAINT [FK_ForslagOpslagLikes_ToGetid] 
    FOREIGN KEY ([getid]) 
    REFERENCES [dbo].[ForslagOpslag]([Id]), 
); 

然後,你需要與主鍵與第一臺

CREATE TABLE [dbo].[ForslagOpslag] 
(
[Id]   INT   IDENTITY (1, 1) NOT NULL, 
[text]  NVARCHAR (MAX) NOT NULL, 
[fk_brugerid] INT   NOT NULL, 
[opretdato] DATETIME  NOT NULL, 

PRIMARY KEY CLUSTERED ([Id] ASC), 
CONSTRAINT [FK_ForslagOpslagLikes_ToForslagBrugerid] 
    FOREIGN KEY ([fk_brugerid]) 
    REFERENCES [dbo].[ForslagOpslagLikes]([fk_brugerid]) 
); 
+0

這沒有幫助,它給了我在該領域的錯誤 –