【发布时间】:2020-04-16 00:16:56
【问题描述】:
这是我的第一张桌子:
CREATE TABLE [dbo].[County]
(
[CountyId] INT IDENTITY (1, 1) NOT NULL,
[County] VARCHAR(50) NOT NULL,
CONSTRAINT [PK_County] PRIMARY KEY CLUSTERED ([CountyId] ASC)
);
这是我的第二张桌子:
CREATE TABLE [dbo].[Theatre]
(
[TheatreId] INT IDENTITY (1, 1) NOT NULL,
[TheatreName] VARCHAR(50) NOT NULL,
[CountyId] INT NOT NULL,
CONSTRAINT [PK_Theatre]
PRIMARY KEY CLUSTERED ([TheatreId] ASC),
CONSTRAINT [FK_Theatre_County]
FOREIGN KEY ([CountyId]) REFERENCES [dbo].[County] ([CountyId])
);
这是我的第三张桌子:
CREATE TABLE [dbo].[Movies]
(
[CinemaId] INT NOT NULL,
[CategoryId] INT NOT NULL IDENTITY(101, 1),
[CinemaName] VARCHAR(50) NOT NULL,
[TheatreId] INT NOT NULL,
[ShowTimings] TIME (7) NOT NULL,
CONSTRAINT [PK_Movies]
PRIMARY KEY CLUSTERED ([CinemaId], [CategoryId]),
CONSTRAINT [FK_Movies_Theatre]
FOREIGN KEY ([TheatreId]) REFERENCES [dbo].[Theatre] ([TheatreId])
);
这是我最后一张桌子:
CREATE TABLE [dbo].[Reviews]
(
[MovieId] INT IDENTITY (1, 1) NOT NULL,
[Name] VARCHAR(50) NOT NULL,
[Genres] VARCHAR(50) NOT NULL,
[Image] VARCHAR(50) NOT NULL,
[ShortDescription] TEXT NOT NULL,
[Rating] VARCHAR(50) NOT NULL,
[Grade] VARCHAR(50) NOT NULL,
[CategoryId] INT NOT NULL,
CONSTRAINT [PK_Reviews]
PRIMARY KEY CLUSTERED ([MovieId] ASC),
CONSTRAINT [FK_Reviews_Movies]
FOREIGN KEY ([CategoryId]) REFERENCES [Movies]([CategoryId]),
);
我已在表之间创建了关系,但在更新最后一个表时出现错误:
SQL71516 :: 引用的表 '[dbo].[Movies]' 不包含与外键中的引用列列表匹配的主键或候选键。如果引用的列是计算列,它应该被持久化。
请告诉我我做错了什么?
【问题讨论】:
-
ntext和text数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)或varchar(max)。 See details here -
按照您的设置方式,每部电影最多可以有一次评论 - 因为您使用
MovieId作为@987654331 的主键@table - 这就是你想要的吗?? -
而且您将无法控制与评论相关联的电影,因为这是一个身份,因此通常由系统生成
-
@Martin Smith-是的,我正在使用复合主键,因为第二个键是 MovieId 正在与其他表的关系中使用,并且我将 CategoryId 保留为身份,因为它在关系中使用带有评论表。
-
@Martin Smith- 你认为使用复合主键是本案的问题吗?