我在创建数据库中的外键时遇到了一些麻烦。以下是对我的表看起来像一个转述模型:创建新外键(SQL Server)
注意
* (PK) NOTE_ID BIGINT
* TITLE VARCHAR(200)
* DATE DATETIME
* SERIES_ID BIGINT
系列
* (PK) SERIES_ID BIGINT
* TITLE VARCHAR(200)
* DESCR VARCHAR(1000)
我想创建一个“具有” NOTE
之间的关系, SERIES
由SERIES_ID
。我认为,通过SERIES_ID
建立两个表之间的外键将是解决办法,但是当我尝试创建它,我得到以下错误:
ERROR: There are no primary or candidate keys in the referenced table 'dbo.SERIES' that match the referencing column list in the foreign key 'FK_SERIES_NOTE'. Could not create constraint
我用自带的网络数据库管理器我设置的GoDaddy SQL Server,所以我不确定它试图使用的底层查询或我将它发布。
在一天结束时,这是所有创建一个关系,以便我的Note对象的NHibernate映射将包含与Series对象的一对一关系。不过,我甚至可能没有试图用外键来解决这个问题。
我正在以正确的方式去解决这个问题吗?
编辑: 在试图将表格配对到一个更简单的例子,我删除了我认为是几个非关键列。但是,我最终留下了一个实际上是系列表上复合主键的一部分的字段。所以,因为我试图将外键只分配给组合键的一部分,所以不允许我这样做。
最后,我再次审视了我的表的结构,发现我实际上并不需要组合键的另一部分 - 并且在删除之后,现在外键的分配很好。
没有**正在生成实际的T-SQL语句**,这真的很难说出任何东西....最有可能的是,网站管理员做错了什么 - 或者你选错了专栏或什么..... – 2012-04-05 11:16:06
@Tyler,从NHibernate的角度和数据库的角度来看,这不是一对一的关系。这是多对一的关系。如果两个主键都是'NOTE_ID',那么这将是一对一的关系。 – 2012-04-05 11:43:54
您已将'SERIES_ID'标记为'SERIES'中的主键,但是您是否检查过这是实际的?很多人混淆了主键和标识列 - 它们是两个单独的概念。如果可能,您使用的管理器应用程序是否可以为现有对象生成脚本?如果是这样,添加实际的表格定义而不是伪定义将是有用的。 – 2012-04-05 12:56:54