sql-server – 嵌套视图是一个很好的数据库设计吗?
我很久以前就读过某个地方.该书指出我们不应该允许在SQL Server中使用嵌套视图.我不确定为什么我们不能这样做或者我可能记得不正确的陈述. 学生们 SELECT studentID,first_name,last_name,SchoolID,... FROM students CREATE VIEW vw_eligible_student AS SELECT * FROM students WHERE enroll_this_year = 1 老师 SELECT TeacherID,... FROM teachers CREATE VIEW vw_eligible_teacher AS SELECT * FROM teachers WHERE HasCert = 1 AND enroll_this_year = 1 学校 CREATE VIEW vw_eligible_school AS SELECT TOP 100 PERCENT SchoolID,school_name FROM schools sh JOIN vw_eligible_student s ON s.SchoolID = sh.SchoolID JOIN vw_eligible_teacher t ON s.SchoolID = t.SchoolID 在我的工作场所,我调查了一个内部数据库应用程序.我检查了发现的对象,其中有两层或三层视图堆栈.所以这让我想起过去读过的东西.任何人都可以帮忙解释一下吗? 如果不这样做,我想知道它仅限于SQL Server,或者它通常用于数据库设计. 附加信息: 解决方法无论平台如何,以下评论均适用.( – )嵌套视图: >更难理解和调试 例如此视图列引用了哪些表列? Lemme dig through 4级视图定义…… 有关轶事证据,请参见this,this,this和this.与this相比,它显示优化器通常足够智能,可以正确解压缩嵌套视图并选择最佳计划,但不能没有编译成本. 您可以通过将视图查询与针对基表编写的等效查询进行比较来衡量性能开销. ()另一方面,嵌套视图让您: >集中和重用聚合或业务规则 我发现他们很少需要. 在您的示例中,您使用嵌套视图来集中和重用某些业务定义(例如“什么是符合条件的学生?”).这是嵌套视图的有效用法.如果要维护或调整此数据库,请权衡将其与删除数据库相比较的成本. > Keep:通过保持嵌套视图,您可以获得上面列举的优缺点. >您需要使用基本查询替换所有出现的视图.>如果您对符合条件的学生/教师/学校的定义发生变化,您必须记得更新所有相关查询,而不是仅更新相关的视图定义. (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |