创建新的外键(SQL Server)

时间:2012-04-05 11:07:50

标签: sql-server foreign-key-relationship

在我的数据库中创建外键时遇到了一些麻烦。这是我的表格看起来的释义模型:

注意

 * (PK) NOTE_ID   BIGINT
 *      TITLE     VARCHAR(200)
 *      DATE      DATETIME
 *      SERIES_ID BIGINT

SERIES

 * (PK) SERIES_ID BIGINT
 *      TITLE     VARCHAR(200)
 *      DESCR     VARCHAR(1000)

我想通过NOTESERIESSERIES_ID之间建立一个“拥有”关系。我认为在SERIES_ID之间设置两个表之间的外键是解决方案,但是当我尝试创建它时,我收到以下错误:

  

错误:引用表'dbo.SERIES'中没有主键或候选键与引用列列表中的匹配   外键'FK_ SERIES _NOTE'。无法创建约束

我正在使用我设置的GoDaddy SQL Server附带的Web数据库管理器,因此我不确定它尝试使用的基础查询是什么,或者我会发布它。

在一天结束时,这就是创建一个关系,以便我的Note对象的NHibernate映射将包含与Series对象的一对一关系。不过,我甚至可能不会试图用外键来解决这个问题。

我是否以正确的方式解决这个问题?

修改 为了将表配对到一个更简单的示例,我删除了我认为是几个非关键列的内容。但是,我最终留下的字段实际上是系列表上复合主键的一部分。所以,因为我试图只将外键分配给复合键的一部分,所以不允许我这样做。

最后,我再看一下我的表的结构,发现我实际上并不需要复合键的另一部分 - 并且在删除之后,外键的分配现在很有效。 / p>

1 个答案:

答案 0 :(得分:0)

如果可以,您可以尝试在查询分析器中运行以下语句,并查看生成的错误消息(我猜@Damien_The_Unbeliever是对的):

ALTER TABLE NOTE ADD CONSTRAINT FK_SERIES_NOTE 
FOREIGN KEY (SERIES_ID) REFERENCES SERIES(SERIES_ID)
--ON DELETE CASCADE
-- uncomment the preceding line if you want a delete on a serie 
-- to automatically delete all notes on this serie

希望这会有所帮助