外键混淆

Sye*_*idi 2 sql database sql-server

我是数据库和制作健身房管理系统的新手,我在www.homeandlearn.co.uk上的教程中实现了一个数据库.我没有外键就完成了项目.现在我必须链接表,但我收到此错误:

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

SQL71516 ::引用的表'[dbo].[member_info]'不包含与外键中的引用列列表匹配的主键或候选键.如果引用的列是计算列,则应该保留它.

我不知道这个错误是什么.请告诉我如何解决这个问题?我现在必须创建一个新数据库,还是仍然可以在同一个数据库中使用外键?我正在使用Visual Studio 2012.所有帮助将不胜感激.提前致谢.干杯,

我有一个主键,我已将其设置为增加1.看到这是我的表.

CREATE TABLE [dbo].[member_info] (
[Id]                INT           IDENTITY (1, 1) NOT NULL,
[memberName]        NVARCHAR (50) NULL,
[father_name]       NVARCHAR (50) NULL,
[age]               NCHAR (10)    NULL,
[address]           NVARCHAR (50) NULL,
[contact]           NVARCHAR (50) NULL,
[height]            NVARCHAR (50) NULL,
[weight]            NVARCHAR (50) NULL,
[chest]             NVARCHAR (50) NULL,
[triceps_biceps]    NVARCHAR (50) NULL,
[waist]             NVARCHAR (50) NULL,
[shoulders]         NVARCHAR (50) NULL,
[thighs]            NVARCHAR (50) NULL,
[calves]            NVARCHAR (50) NULL,
[instructor]        NVARCHAR (50) NULL,
[date_of_admission] DATE          NULL,
[photo]             IMAGE         NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
CONSTRAINT [FK_member_info_instructor_info] FOREIGN KEY ([instructor]) REFERENCES
[instructor_info]([instructor])
);
Run Code Online (Sandbox Code Playgroud)

这是我的member_info,下面是我的instructor_info表:

CREATE TABLE [dbo].[instructor_info] (
[InstructorID]      INT            IDENTITY (1, 1) NOT NULL,
[instructor]        NVARCHAR (50)  NULL,
[father_name]       NVARCHAR (50)  NULL,
[age]               NCHAR (10)     NULL,
[address]           NVARCHAR (MAX) NULL,
[contact]           NVARCHAR (50)  NULL,
[height]            NCHAR (10)     NULL,
[weight]            NCHAR (10)     NULL,
[chest]             NCHAR (10)     NULL,
[triceps_biceps]    NCHAR (10)     NULL,
[waist]             NCHAR (10)     NULL,
[shoulders]         NCHAR (10)     NULL,
[thighs]            NCHAR (10)     NULL,
[calves]            NCHAR (10)     NULL,
[memberName]           NVARCHAR (50)  NULL,
[date_of_admission] DATE           NULL,
[photo]             IMAGE          NULL,
PRIMARY KEY CLUSTERED ([InstructorID] ASC)
);
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 7

这是你的桌子 instructor_info

[dbo].[instructor_info] 
PRIMARY KEY CLUSTERED ([InstructorID] ASC)
Run Code Online (Sandbox Code Playgroud)

因此,如果要从表中引用该主键member_info,则必须引用该确切的列名(InstructorID).

因此,您当前的FK约束将不起作用 - 您需要引用该列名称,并且必须使用相同的数据类型.

更改member_info要使用的表格

[Instructor_ID] INT
Run Code Online (Sandbox Code Playgroud)

(而不是[instructor] NVARCHAR(50)列),然后将您的FK约束更改为:

CONSTRAINT [FK_member_info_instructor_info] 
FOREIGN KEY ([instructor_ID]) 
REFERENCES [dbo].[instructor_info]([Instructor_ID])
Run Code Online (Sandbox Code Playgroud)

表中的任何外键都必须引用另一个表的主键(或唯一约束) - 它不能只引用您喜欢的任何列....