我正在使用SQL UDF来封装简单的报告/业务逻辑.我应该避免这个吗?

chu*_*son 7 sql sql-server modularity user-defined-functions

我正在SQL Server 2008中为一些报告构建一个新数据库,并且有许多与此数据相关的常见业务规则可用于不同类型的报告.目前,这些规则大多数都是在较大的程序程序中使用遗留语言进行组合,我正试图将其转移到SQL.我正在努力从这些数据中实现报告的灵活性,例如SAS中的一些报告,C#中的一些报告等.

我目前的方法是打破这些通用规则(通常是非常简单的逻辑)并将它们封装在单独的SQL UDF中.性能不是问题,我只想使用这些规则在一种报告"快照"中填充静态字段,然后可以用它来以任何方式报告.

我喜欢这种模块化的方法,只要了解每条规则正在做什么(以及维护规则本身),但我也开始有点害怕维护也可能成为一场噩梦.有些规则依赖于其他规则,但我无法真正摆脱这些 - 这些东西相互叠加......这就是我想要的......我想?;)

这种模块化方法在数据库中是否有更好的方法?我是在正确的轨道上,还是我在太多的应用程序开发思维中考虑这个问题?

OMG*_*ies 1

SQL 是基于集合的,在应用模块化方法时本质上性能很差。
函数、存储过程和/或视图——它们都抽象了底层逻辑。当您使用两个(或更多)使用相同表的函数/等时,性能问题就会出现。这意味着当可以使用同一个表时,却对同一个表进行了两个查询。

多个函数的使用对我来说表明数据模型非常“灵活”。对我来说,这意味着有问题的数据类型和整体列/表定义。需要函数等,因为数据库允许存储任何内容,这意味着坏数据的可能性非常高。我宁愿投入精力始终拥有良好/有效的数据,而不是在事后处理现有的不良数据。

数据库就是包含这个逻辑的地方。它比应用程序代码更快,最重要的是 - 集中化以最大限度地减少维护。