对一个表的外键的CONSTRAINT - 导致错误

时间:2015-08-14 21:13:09

标签: sql sql-server

我开始构建像系统一样的东西,只是配合进入数据库的建议[for pre,next in zipped_generator]

每当我尝试使用喜欢更新表格时,您都会看到错误:

  

由于验证错误,无法继续更新。请更正以下错误,然后重试。

     

SQL71516 ::引用的表'[dbo]。[ForslagOpslag]'包含no   与引用列列表匹配的主键或候选键   外键。如果引用的列是计算列,则为   应该坚持下去。

以下是我构建ForslagOpslag表的方法:

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_brugerid的原因肯定是用户不能投票/喜欢更多一次!

我构建getid表的方式:

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

3 个答案:

答案 0 :(得分:1)

嗯 - 错误似乎很清楚:你正试图在pyg = "ay" #Pig Latin words end with ay. def translate(): #Creating a function. original = input("Enter a word: ").lower() #Ask for input then convert to lower. if len(original) > 0 and original.isalpha() : #isalpha() verifies only abc's and more than one letter. first = original[0] #Assigns the first letter of the string to first. latin = original[1:] + first + pyg #Adds original starting at 2nd letter with first and pyg. print(latin) else: print("You did not enter a valid word, please try again.") translate() #If you did not enter valid word, then call function again until you do. #Defining cont(). Ask for imput and error handling. def cont(): while True: loop = input("Would you like to convert another word? (y/n): ").lower() if loop == "y": return True elif loop == "n": print("Thank you for using this program, have a nice day!") return False else : print("You did not enter a valid response, please try again.") translate() while cont(): translate() 建立一个外键关系:

ForslagOpslag.fk_brugerid

但该列不是该另一个表的主键 - 它也不是CONSTRAINT [FK_ForslagOpslagLikes_ToForslagBrugerid] FOREIGN KEY ([fk_brugerid]) REFERENCES [dbo].[ForslagOpslag]([fk_brugerid]) 约束 - 所以不能引用该列中的那个列外键关系。

但是外键引用的列必须该另一个表的主键 - 或者在SQL Server中,如果对该键有UNIQUE约束就足够了柱。您必须确保您在UNIQUE中引用的值仅匹配该表中的单个列 - 否则,您无法建立外键关系

答案 1 :(得分: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])
);

答案 2 :(得分:-1)

你听起来像斯堪的纳维亚人,布鲁格意味着用户(这里所有的非斯堪的纳维亚人)。

您想要的是Bruger(用户)表,其中fk_brugerid中的ForslagOpslag是创建日期为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])
);