gpt4 book ai didi

sql - 有什么理由不加入 Foreign Key 到 Foreign Key 吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:21 25 4
gpt4 key购买 nike

我有以下表格:

财务:

  • PK_FinancialID
  • FK_SchoolID

学校:

  • PK_SchoolID

:

  • PK_ClassID
  • FK_SchoolID
  • 类(class)名

Class 和 Financial 都与 School 有外键关系。我想进行一个查询,以显示与满足特定条件的财务行相关的所有类。

最初我想构造查询如下:

Select Class.ClassName
From Class
Join School on Class.FK_SchoolID = School.PK_SchoolID
Join Financial on Financial.FK_SchoolID = Schol.PK_SchoolID
Where Financial ... -- define criteria

但是,由于 Financial 和 Class 都连接到 PK_SchoolID 列,因此应该可以按如下方式重写查询(删除 School 表并直接连接 Class 和 Financial):

Select Class.ClassName
From Class
Join Financial on Financial.FK_SchoolID = Class.FK_SchoolID
Where Financial ... -- define criteria

从 sql 的角度来看,哪种方法更可取?包含 School 表是否会提高性能,因为引用了实际的 PK 记录(因此可以引用聚簇索引)?或者这真的不重要吗?有什么我想念的吗?

平台:Sql Server 2005。所有表都有正确声明和定义的 PK 和 FK 列。

最佳答案

如果你不需要学校,就不要加入学校。如果您不希望此查询运行得很快,请在 Financial 表的 FK_SchoolID 上创建索引。看起来您在 Class-School-Financial 之间有 n-1-1 关系,因此您甚至应该在 Financial 上创建唯一索引。您不应该(在大多数情况下)添加额外的表来加快查询速度,只需优化使用即可。

编辑

如果你只选择ClassName,也许你需要的是:

Select Class.ClassName
From Class
Where Exists
(select * from Financial
where (Financial.FK_SchoolID = Class.FK_SchoolID) and (...))

它可能比其他解决方案更快并且更易于理解。

关于sql - 有什么理由不加入 Foreign Key 到 Foreign Key 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1714800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com