首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一个表中定义5-6外键正确吗.?

在一个表中定义5-6外键正确吗.?
EN

Database Administration用户
提问于 2016-03-04 09:33:46
回答 1查看 93关注 0票数 2

如果在单个表上定义5-6个外键,是否存在性能问题?

代码语言:javascript
运行
复制
CREATE TABLE [dbo].[PS_CLASSROOM_MST](
    [CLASS_ID] [int] NOT NULL,
    [CLASS_NAME] [varchar](50) NOT NULL,
    [CLIENT_ID] [int] NOT NULL,
    [SCHOOL_ID] [int] NOT NULL,
    [COURSE_ID] [int] NULL,
    [BRANCH_ID] [int] NOT NULL,
    [SESSION_ID] [int] NOT NULL,
    [SECTION] [varchar](10) NULL,
    [STATUS] [bit] NOT NULL,
    [IP_ADDRESS] [varchar](30) NULL,
    [LANGUAGE] [varchar](50) NULL,
    [CLASS_FILE_PATH] [varchar](200) NULL,
    [REMARK] [nvarchar](max) NULL,
    [SECTION_FILE_PATH] [nvarchar](max) NULL,
    [LOCATION_ID] [int] NOT NULL,
 CONSTRAINT [PK_PS_CLASSROOM_MST] PRIMARY KEY CLUSTERED 
(
    [CLASS_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[PS_CLASSROOM_MST]  WITH CHECK ADD  CONSTRAINT [FK_PS_CLASSROOM_MST_PS_BRANCH_MST] FOREIGN KEY([BRANCH_ID])
REFERENCES [dbo].[PS_BRANCH_MST] ([BRANCH_ID])

GO

ALTER TABLE [dbo].[PS_CLASSROOM_MST] CHECK CONSTRAINT [FK_PS_CLASSROOM_MST_PS_BRANCH_MST]
GO

ALTER TABLE [dbo].[PS_CLASSROOM_MST]  WITH CHECK ADD  CONSTRAINT [FK_PS_CLASSROOM_MST_PS_COURSE_MST] FOREIGN KEY([COURSE_ID])
REFERENCES [dbo].[PS_COURSE_MST] ([COURSE_ID])
GO

ALTER TABLE [dbo].[PS_CLASSROOM_MST] CHECK CONSTRAINT [FK_PS_CLASSROOM_MST_PS_COURSE_MST]
GO

ALTER TABLE [dbo].[PS_CLASSROOM_MST]  WITH CHECK ADD  CONSTRAINT [FK_PS_CLASSROOM_MST_PS_LOCATION] FOREIGN KEY([LOCATION_ID])
REFERENCES [dbo].[PS_LOCATION] ([LOCATION_ID])
GO

ALTER TABLE [dbo].[PS_CLASSROOM_MST] CHECK CONSTRAINT [FK_PS_CLASSROOM_MST_PS_LOCATION]
GO

ALTER TABLE [dbo].[PS_CLASSROOM_MST]  WITH CHECK ADD  CONSTRAINT [FK_PS_CLASSROOM_MST_PS_SCHOOL_MST] FOREIGN KEY([SCHOOL_ID])
REFERENCES [dbo].[PS_SCHOOL_MST] ([SCHOOL_ID])
GO

ALTER TABLE [dbo].[PS_CLASSROOM_MST] CHECK CONSTRAINT [FK_PS_CLASSROOM_MST_PS_SCHOOL_MST]
GO

ALTER TABLE [dbo].[PS_CLASSROOM_MST]  WITH CHECK ADD  CONSTRAINT [FK_PS_CLASSROOM_MST_PS_SESSION_MST1] FOREIGN KEY([SESSION_ID])
REFERENCES [dbo].[PS_SESSION_MST] ([SESSION_ID])
GO

ALTER TABLE [dbo].[PS_CLASSROOM_MST] CHECK CONSTRAINT [FK_PS_CLASSROOM_MST_PS_SESSION_MST1]
GO
EN

回答 1

Database Administration用户

发布于 2016-03-09 10:56:32

外键的存在是为了加强引用完整性,即保持数据的干净。这是件好事。

然而,没有免费午餐。该约束将在写入时进行检查,从而增加延迟。FK可能有一个相关的索引。因此,在写过程中会有开销。FKs越多,开销越大。加上额外的磁盘和维护时间。

如果你已经做了辛勤的设计,并来到这张桌子,那么我看不出主要的面对问题。如果规模测试显示问题,那么就需要考虑其他实现。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/131274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档