外键混淆

时间:2014-01-21 11:29:25

标签: sql sql-server database

我是数据库和制作健身房管理系统的新手,我在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])
);

这是我的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)
);

3 个答案:

答案 0 :(得分:7)

这是您的表instructor_info

[dbo].[instructor_info] 
PRIMARY KEY CLUSTERED ([InstructorID] ASC)

因此,如果您想引用表member_info中的主键,则必须引用确切的列名InstructorID)。

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

将您的表格member_info更改为使用

[Instructor_ID] INT

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

CONSTRAINT [FK_member_info_instructor_info] 
FOREIGN KEY ([instructor_ID]) 
REFERENCES [dbo].[instructor_info]([Instructor_ID])

表格中的任何外键必须引用其他表格的主键(或唯一约束) - 它不能只引用您喜欢的任何列.... / p>

答案 1 :(得分:1)

您必须为表创建主键才能在外键中引用它们。下面是使用主键创建表的示例,因此您以后不会偶然发现此错误。

CREATE TABLE member_info (
 id MEDIUMINT NOT NULL AUTO_INCREMENT,
 name CHAR(30) NOT NULL,
 PRIMARY KEY (id)
) ENGINE=MyISAM;

关于MYSQL文档的链接:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

编辑:自从我的回答发布后,标签从mysql更改为mssql,以及提供更多信息的代码段。出于历史目的,我正在添加以下代码来回答新问题。

CREATE TABLE [dbo].[instructor_info] (
[InstructorID]      INT            PRIMARY KEY 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
);

CREATE TABLE [dbo].[member_info] (
[Id]                INT           PRIMARY KEY 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]        INT           FOREIGN KEY REFERENCES instructor_info(InstructorID),
[date_of_admission] DATE          NULL,
[photo]             IMAGE         NULL
);

答案 2 :(得分:0)

为了让外键引用表,您必须在该表上有一个主键。检查你的member_info表,确保有一个。

相关问题