当前位置: 首页 > 知识库问答 >
问题:

存储过程中的业务逻辑-仍然混乱

东郭海阳
2023-03-14
 AVG(CASE WHEN Field1 IS NULL
               THEN CASE WHEN c.Field2 = 1
               THEN ( cap1.Field3 / cap1.Field4) * 60
               ELSE CASE
 ..... etc

所以它不是一个简单的逻辑,而是一个复杂的逻辑。由于这种逻辑可以在许多不同的存储过程中重复,因此可以在数据库中使用一个单独的函数,以避免重复代码。

那么,这里推荐的方式是什么呢?那为什么呢?

共有1个答案

长孙景天
2023-03-14

也许你仍然可以拥有它所属的业务逻辑,并将这些东西归类为更多的“计算”?

不管是哪种方式,当您有100多万行时,您都有一个令人信服的理由在数据库层中进行计算。所以我会把计算放在函数中。因此,在您的示例中,将使用一个可重用函数,如下所示:

SELECT AVG(dbo.fnFieldsEvaluate(Field1, Field2, Field3, Field5)) as FieldAvgs,
...

或者如果它被大量使用,足够简单并且只依赖于单行中的列,那么在表中使用计算列会更方便。

   CREATE TABLE dbo.Products 
   (Field1 ....,
    Field2 ....,
    RowEvaluatesTo AS CASE WHEN Field1 IS NULL
               THEN CASE WHEN Field2 = 1
               THEN(Field3 / Field4) * 60
               ELSE CASE ...
 类似资料:
  • 综述 在多功能的动态web应用程序中测试业务逻辑漏洞需要用非常规手段来思考。如果应用认证机制原先以1、2、3的步骤依次执行的验证身份目的来开发,万一用户从步骤1直接跳到步骤3会发生什么?用更加简单的例子来说,在打开失败、权限拒绝或仅仅500的错误的情况下,应用程序是否依然能够提供访问权限? 可以举出许多例子,但是不变的思想是“跳出常规思维”。这种类型的漏洞无法被漏洞扫描工具探测到,依赖于渗透测试人

  • 因此,每个功能区显然都在数据库中,但它们还需要一些逻辑来确定用户何时获得了功能区。 按照我的编码方式,是一个简单的接口: 是一个抽象类,它实现了接口,避免了方法的定义: 现在,将像这样实现一个特定的功能区: 这段代码工作得很好,表是按照我期望的方式在数据库中创建的(我在本地环境中使用DDL生成)。 问题是,在域对象中编写业务逻辑感觉是错误的。这是好的练习吗?你能提出一个更好的解决方案吗?此外,我不

  • 每条链有独立的数据存储文件 每个智能合约都独立的数据存储空间 每个智能合约可以创建多个数据表

  • 1.1  概述 业务逻辑模块主要用于编写业务逻辑,一般包含三个子模块:action(定义action和procedure)、code(业务逻辑的实现,一般使用java实现,有src,dsrc,lib)、fn(函数定义)。 1.2  Action定义 语法: <action name=" n" global="true" log-enabled="true" procedure=" "> <参

  • In this chapter, you will learn to write code to support business logic in your models and you will also learn how it can be activated on events and user actions. Using the Odoo programming API, we ca

  • 我正在使用Spring Boot 1.5.4、Spring Data REST、Spring JPA、Hibernate,并且我正在开发一个使用REST API的Angular客户端。 Spring Data REST有很大帮助,我正在尝试遵循最佳实践,因此存储库如下所示: 我自动完成了所有的save()、delete()和findXX()方法。太好了。 现在我想知道,在保存实体之前,是否需要自定