在存储过程中使用extract方法

Ken*_*Lee 5 sql database performance stored-procedures

在编写编程语言时,Extract方法是一种常见的重构模式.

当我尝试对我的存储过程进行一些重构时,我想知道在编写存储过程(SP)/用户定义函数(UDF)时使用extract方法是否也是一个好习惯,因为我们可以调用其他SP/UDF一个SP/UDF?

它会影响性能吗?

提前致谢.

fan*_*nts 1

只是我的意见(现在使用数据库工作了几年):

存储过程只能用于数据库任务。例如迁移数据(例如,目前我正在开发一个转换数据库结构的过程),或者一些动态查询(其中即时构建 sql 语句),或者可能是构建表的过程(例如保存特定日期范围内的日期的表)。

不为别的!对于比上面的示例更复杂的所有事情,请考虑在应用程序层上进行编码。

另外,您可能听说将尽可能多的业务逻辑放入数据库是明智的。对于数据库设计来说确实如此,但这并不意味着您应该对其中的几乎所有内容进行编码。数据库不擅长这一点(例如谈论数据转换或类似的事情)。像 PHP 或其他更快的编程语言!

因此,对于我使用存储过程执行的所有操作,我从未觉得有必要将任何内容放入额外的过程中。例如,除了数据库的重组(在我的例子中,它是一个 ETL 过程(它将数据非规范化为星型模式以获得更好的性能))之外,我还为每个表编写了一个过程,并且从管理该表的过程中调用这些过程。整个过程。但话又说回来,它与编程语言完全不同。

另外,当我以提取方法模式为例时,http://www.refactoring.com/catalog/extractMethod.html
在您的数据库中拥有类似的内容将成为调试噩梦,您将花费太多时间编码。同样,应该使用存储过程的情况并不是应用提取方法模式有意义的情况。