我是数据库和制作健身房管理系统的新手,我在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)
);
答案 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表,确保有一个。