SQLServer2005:按视图包装表-优缺点 背景
我正在开发一个传统的小型企业自动化系统(库存、销售、采购等),该系统有一个由SQLServer2005托管的数据库和一系列客户端应用程序。主客户端(供所有用户使用)是MS Access 2003应用程序(ADP),其他客户端包括各种VB/VBA应用程序,如Excel加载项和命令行实用程序 除了60个左右的表(主要是3NF),数据库还包含大约200个视图、大约170个UDF(主要是标量和表值内联的UDF)以及大约50个存储过程。正如您可能已经猜到的,所谓的“业务逻辑”的某些部分被封装在大量的T-SQL代码中(因此被所有客户机共享) 总的来说,系统的代码(包括T-SQL代码)组织得不是很好,可以说是很难重构。特别是,大多数表的模式需要各种重构,小重构(如列重命名)和大重构(如规范化) FWIW,我有相当长的应用程序开发经验(C/C++、Java、VB等等),但我不是DBA。所以,如果你觉得这个问题很傻,现在你知道为什么了。:-) 问题: 在考虑重构所有这些乱七八糟的东西时(当然是以和平的方式),我想到了以下想法:SQLServer2005:按视图包装表-优缺点 背景,sql,sql-server,database,refactoring,Sql,Sql Server,Database,Refactoring,我正在开发一个传统的小型企业自动化系统(库存、销售、采购等),该系统有一个由SQLServer2005托管的数据库和一系列客户端应用程序。主客户端(供所有用户使用)是MS Access 2003应用程序(ADP),其他客户端包括各种VB/VBA应用程序,如Excel加载项和命令行实用程序 除了60个左右的表(主要是3NF),数据库还包含大约200个视图、大约170个UDF(主要是标量和表值内联的UDF)以及大约50个存储过程。正如您可能已经猜到的,所谓的“业务逻辑”的某些部分被封装在大量的T-S
- 当要重命名表列时,无需一次重写所有受影响的客户端代码即可完成此操作
- 实现派生属性更容易(比使用计算列更容易)
- 可以有效地使用列名的别名
p.S.我在下面一篇讨论“包装器”视图的老文章中提到: 本文建议避免上述方法。但是在这篇文章中,我真的看不出有什么好的理由反对这个想法。恰恰相反,在创建视图的良好理由列表中,几乎每一项都是为每个表创建“包装器”视图的原因(特别是在遗留系统中,作为重构过程的一部分)
这篇文章真的很老(1999年),所以无论什么原因当时是好的,现在可能不再是好的(反之亦然)。如果最近有人考虑过甚至尝试过使用最新版本的SQL Server和MS Access来实现这一想法,那将非常有趣。在设计数据库时,我更喜欢以下内容:
- 代码不能直接访问表(但从存储过程、视图和函数可以)
- 包含所有列的每个表的基本视图
- 每个表的扩展视图,包括查找列(类型、状态等)
- 所有更新的存储过程
- 用于任何复杂查询的函数
我想补充一点,视图可以确保数据不会在项目中的访问表单之外发生更改。缺点是所有更新都需要存储过程——如果您还没有存储过程,那么也必须创建存储过程。您不会注意到单表视图的任何性能影响;SQL服务器