2014-01-21 71 views
2

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

Update cannot proceed due to validation errors.
Please correct the following errors and try again.

SQL71516 :: The referenced table '[dbo].[member_info]' contains no primary or candidate keys that match the referencing column list in the foreign key. If the referenced column is a computed column, it should be persisted.

我不知道这个错误是什么。请告诉我如何解决这个问题?我是否必须现在创建一个新的数据库,或者我仍然可以在同一个数据库中使用外键?我正在使用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

表中是否包含数据?如果是,则其他表中的外键必须具有确切的数据类型和精确值作为父表列。否则,您将无法创建约束。 –

+3

您确定这是MySQL - 看起来像是一个MSSql错误 – Liath

+0

向我们展示表结构,以及您如何建立从一个表到另一个表的FK链接! –

回答

6

这是你的表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]) 

表内的任何外键必须引用其他表的主键(或一个唯一的约束) - 它不能只引用你喜欢的任何列....

+0

是的这个工作... 谢谢。 –

0

让你有一个外键引用的表,你必须拥有该表的主键。检查你的member_info表,并确保有一个。

+1

PK,或者一个UNIQUE INDEX,或者一个UNIQUE KEY约束...... – StuartLC

+0

没错,尽管如果那里没有PK,我会从那里开始! – Liath

+0

我在所有表上都有一个主键。 :( –

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

我想我只能做一个主键一个外键。我试过这个,这是工作。 –