不会指定一个外键约束让我陷入麻烦?

我在VS2013中有以下T-SQL:

CREATE TABLE [dbo].[Jugo] 
(
    [JugoID]  INT           IDENTITY (1, 1) NOT NULL,
    [Jugo]    NVARCHAR (50) NOT NULL,
    [ColorID] INT           NOT NULL,
    [IngreID] INT           NOT NULL,

    PRIMARY KEY CLUSTERED ([JugoID] ASC),
    FOREIGN KEY (ColorID) REFERENCES Color (ColorID) 
        ON UPDATE CASCADE ON DELETE CASCADE,
    FOREIGN KEY (IngreID) REFERENCES Ingrediente (IngreID) 
        ON UPDATE CASCADE ON DELETE CASCADE 
);

在更新数据库之前,我收到以下消息:

亮点没有

用户操作创建外键:[dbo]上的未命名约束[Jugo](外键)外键:[dbo]上的未命名约束[Jugo](外键)

支持行动

我可以继续使用这些未命名的约束吗? 我需要什么约束?

作为参考,这是我想要做的:

3桌:

JugoColorIngrediente :所以要创建一个jugo(果汁),您需要指定名称,颜色和配料,颜色和配料在自己的桌子上,因此我要定义外键。

谢谢。


只要ColorIDIngreID在他们自己的表格中都是主键,您就不会遇到任何问题。

但这里有一个问题,你没有限制你的主键。 对于您正在使用的每个PRIMARY KEY,使用约束是一种很好的做法,这样,当您将外键指定给另一个表时。 它可以读取它来自另一个表。 我不知道VS2013中的SQL但是这里是我的SQL Server示例:

CREATE TABLE JUGO 
(
     JUGOID numeric identity (1,1) //For auto increment
        CONSTRAINT PK_JUGOID PRIMARY KEY (JUGOID),
     JUGO nvarchar(50) not null,
     .
     .
     .
)

PK_JUGOIDCONSTRAINT PK_JUGOID PRIMARY KEY (JUGOID),是用户定义的,但它是一个很好的做法,刚才复制的主键的格式,因此使用外键时,你会不会感到困惑。 :)


外键用于数据一致性。 您在列上创建外键,以避免无效条目。

FOREIGN KEY (ColorID) REFERENCES Color (ColorID) 
    ON UPDATE CASCADE ON DELETE CASCADE,

这个约束确保你的jugo只能有一个颜色表存在的颜色。 此外,你有两个级联命令:

  • ON UPDATE CASCADE表示如果红色为ID 5,但您想将其更改为500,则会自动为所有jugo记录执行更改。 但是,ID不应该改变,所以这是一个很少使用的条款。
  • ON DELETE CASCADE意味着如果你删除红色,那么你用它删除所有红色的jugo记录。 我不知道这是否适合你。 它用于例如用户表上。 删除用户,以便删除其完整数据。 但删除一个颜色?
  • 最后你应该给你的约束名称,所以你更容易处理它们。

    CONSTRAINT pk_jugo PRIMARY KEY CLUSTERED ([JugoID] ASC),
    CONSTRAINT fk_jugo_color FOREIGN KEY (ColorID) REFERENCES Color (ColorID),
    CONSTRAINT fk_jugo_ingre FOREIGN KEY (IngreID) REFERENCES Ingrediente (IngreID)
    
    链接地址: http://www.djcxy.com/p/65891.html

    上一篇: Will not specifying a foreign key constraint get me in trouble?

    下一篇: but foreign key doesn't exist