我有一个表的收藏夹,其定义类似于
CREATE TABLE [dbo].[Favorites] (
[username] VARCHAR (50) NOT NULL,
[imdbId] VARCHAR (50) NOT NULL,
PRIMARY KEY CLUSTERED ([username] ASC, [imdbId] ASC),
FOREIGN KEY ([username]) REFERENCES [dbo].[proj_users] ([username])
);
现在我还有一个表TopMovies
CREATE TABLE [dbo].TopMovies (
[imdbId] VARCHAR(50) NOT NULL ,
[count] INT NOT NULL,
PRIMARY KEY ([imdbId], [count]),
CONSTRAINT [FK_TopMovies_Favorites] FOREIGN KEY ([imdbId]) REFERENCES [dbo].[Favorites] ([imdbId]) ON DELETE CASCADE
当我尝试创建此表时,出现以下错误:
“引用的表'[dbo]。[Favorites]'不包含与外键中的引用列列表匹配的主键或候选键。如果引用的列是计算列,则应该保留它。”
答案 0 :(得分:0)
我认为你不能创建TopMovies的FK,因为,收藏夹的PK有2列而你只是引用1.我的意思是你有一方:
你应该在TopMovies中有类似的东西:
FOREIGN KEY([username], [imdbId]) REFERENCES [dbo].[Favorites]([username], [imdbId])
此处您有完全相同的问题:StackOverflow foreign key composite primary key sql server
您必须在之间进行选择,将收藏夹的复合PK更改为简单PK或在FK表中添加缺少的列。
答案 1 :(得分:0)
您的架构未正确规范化。 imdb
应该是一个单独的实体(表),由Favorites和TopMovies引用。
另一方面,TopMovies上的PK看起来也很可疑。