我正在使用以下架构创建一个表Brands
:
UserId
CarId
Brand
UserId
引用id
表中用户的user
CarId
引用id
表car
我将使用的唯一查询是基于这两列的搜索,以获得相应的品牌。
所以我的问题是关于约束部分,因为我是初学者,我想知道使用哪种类型的约束(索引,主键,聚簇或非聚簇,在每个字段或2个字段上)让我的查询更加优化。
这是我的剧本:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Brands]') AND type in (N'U'))
BEGIN
CREATE TABLE [Brands]
(
UserId BIGINT NOT NULL
CONSTRAINT [FK_Brands_Users]
FOREIGN KEY REFERENCES [Users] (UserId),
CarId BIGINT NOT NULL
CONSTRAINT [FK_Brands_Cars]
FOREIGN KEY REFERENCES [Cars] (CarId),
Brand nvarchar(15),
);
END
GO
ALTER TABLE [Brands]
ADD CONSTRAINT [Unique_UserId_BrandId] UNIQUE(UserId, BrandId);
GO
答案 0 :(得分:0)
我会创建一个包含两个字段的主键。定义主键时,它会自动创建聚簇索引。你的主键也有一个独特的约束内置。你的表现在是一个堆,就像你在上面写的那样,这是不好的。您还可以在CarId上创建额外的非聚集索引。我认为在UserId上有一个额外的非聚集索引是没用的。 UserId列可以使用聚簇索引,因为它是聚簇索引中的第一个字段,但我不确定。