我如何';重构&x27;SQL查询?

我如何';重构&x27;SQL查询?,sql,sql-server,tsql,database-design,refactoring,Sql,Sql Server,Tsql,Database Design,Refactoring,我有几个MS Access查询(在视图和存储过程中)正在转换为SQL Server 2000(T-SQL)。由于Access对子查询的限制,以及/或原始开发人员的限制,创建了许多视图,这些视图仅作为其他视图的子查询 我没有明确的业务需求规范,除了“做Access应用程序所做的”,还有半页关于报告/CSV摘录的说明,但Access应用程序甚至没有正确地做我认为需要做的事情 一、 因此,我必须采取自下而上的方法,将Access DB“复制”到T-SQL,在T-SQL中我通常会更好地理解需求,并采取自

我有几个MS Access查询(在视图和存储过程中)正在转换为SQL Server 2000(T-SQL)。由于Access对子查询的限制,以及/或原始开发人员的限制,创建了许多视图,这些视图仅作为其他视图的子查询

我没有明确的业务需求规范,除了“做Access应用程序所做的”,还有半页关于报告/CSV摘录的说明,但Access应用程序甚至没有正确地做我认为需要做的事情

一、 因此,我必须采取自下而上的方法,将Access DB“复制”到T-SQL,在T-SQL中我通常会更好地理解需求,并采取自上而下的方法,创建新的查询以满足定义良好的需求


有什么方法可以让我遵循吗?我是将其全部展开并花几天时间“摸索”它,还是继续复制Access视图并采用进化方法优化查询?

我建议立即将视图复制到SQL Server,然后使用其复杂的工具帮助您摸索它们


例如,SQL Server可以告诉您哪些视图、存储过程等依赖于某个特定视图,因此您可以从中查看该视图是其中一个视图还是实际用于多个位置。它将帮助您确定哪些视图比哪些视图更重要。

我建议您立即将视图复制到SQL Server,然后使用其复杂的工具帮助您查找它们


例如,SQL Server可以告诉您哪些视图、存储过程等依赖于某个特定视图,因此您可以从中查看该视图是其中一个视图还是实际用于多个位置。它将帮助您确定哪些视图比哪些视图更重要。

我可能会从Access数据库开始,现场练习查询,然后查看结果集是什么。通常,您可以理解查询完成了什么,然后返回到您自己的设计来完成它。(要彻底了解,无论如何你都需要完全理解意图。)这听起来是你将得到的最好的需求陈述——“就像它现在已经实现了一样。”


除此之外,你的方法是我能想到的最好的方法。一旦他们进入SQL Server,就开始测试和摸索。

我可能会从Access数据库开始,在原地练习查询,看看结果集是什么。通常,您可以理解查询完成了什么,然后返回到您自己的设计来完成它。(要彻底了解,无论如何你都需要完全理解意图。)这听起来是你将得到的最好的需求陈述——“就像它现在已经实现了一样。”


除此之外,你的方法是我能想到的最好的方法。一旦他们进入SQL Server,就可以开始测试和摸索了。

当您处理这样的问题时,在进行增量更改的同时保持工作状态通常是有帮助的。从风险管理的角度来看,这更好


我会集中精力让它工作,然后检查数据库性能并优化性能问题。然后,在添加功能和修复bug时,清理难以维护的代码。正如您所说,子查询实际上非常类似于视图。因此,如果它没有损坏,您可能不需要更改它。

当您处理这样的问题时,在进行增量更改的同时保持事物的原有状态通常是有帮助的。从风险管理的角度来看,这更好


我会集中精力让它工作,然后检查数据库性能并优化性能问题。然后,在添加功能和修复bug时,清理难以维护的代码。正如您所说,子查询实际上非常类似于视图。因此,如果它没有损坏,您可能不需要更改它。

计算access对查询的作用,然后使用这些知识检查您是否正确传输了它。只有这样做了,才能考虑重构。我将从慢速查询开始,然后从那里开始:计算出您需要的索引,然后逐步重写。通过这种方式,您可以在证明您成功地移动了所有内容后立即交付(即使可能会稍微慢一点)。这比因为出现了问题X而根本无法交付要好得多。

计算access对查询的作用,然后使用这些知识检查您是否正确地传输了它。只有这样做了,才能考虑重构。我将从慢速查询开始,然后从那里开始:计算出您需要的索引,然后逐步重写。通过这种方式,您可以在证明您成功地移动了所有内容后立即交付(即使可能会稍微慢一点)。这比根本无法交付要好得多,因为出现了问题X。

这取决于您的时间表。如果您必须尽快让项目完全运行(我知道这对每个项目都是正确的,但如果对您来说确实如此),那么是的,从Access复制功能和基础结构,然后在以后或进行重构

如果您有时间投入,那么现在对其进行重构将带来两件事:

  • 您会对代码更满意,而且它(可能)会执行得更好,因为实际的分析已经完成,而不是复制粘贴的代码转换
  • 您可能会更好地理解真正的业务规则是什么,因为您几乎肯定会遇到规范中没有的东西(特别是考虑到您如何描述它们)

  • 这取决于你的时间表。如果您必须尽快让项目完全运行(我知道这对每个项目都是正确的,但如果对您来说确实如此),那么是的,复制t