程序数据库代码与多个数据库调用

所以这是一个相当高层次的问题

我正在devise一个数据库,我不确定在哪里把程序逻辑pipe理复杂的查询。 我看到两个可能的select,如下所示:

1)定义过程数据库代码中的逻辑。

例如,在数据库(例如:PLpgSQL)中:

create function A … create function B … create function C … create function main { a = select * from A() … b = select * from B() … where a … c = select * from C() … where b … return c; } 

然后在周围的服务器环境中(例如:Node.js):

 result = query('main'); 

2)在周围的服务器环境中定义逻辑,并简单地对简单的数据库函数进行多个数据库调用

例如,在数据库中:

 create function A … create function B … create function C … 

然后在周围的服务器环境中:

 a = query('A'); b = query('B … where a …'); c = query('C … where b …'); 

从本质上讲,我问的问题是,在过程数据库语言中编写代码,还是在周围的服务器环境中编写查询,以及/或者运行过程数据库代码与从周围服务器环境进行多个数据库调用相关的速度。

谢谢! 🙂

虽然有争议的问题很好。 我在这里有很多经验,所以我可以这样说:

  1. 保存往返旅程只有当你可以节省大量的时间时才有意义
  2. 真正的好处在别处。

存储过程最大的好处是可以让你考虑封装接口的function,然后优化这个function。 换句话说,节省2次往返并不是什么大事,但是能够优化涉及的查询通常会节省更多。 如果接口是合理的,封装好,这有很大的好处。

主要的缺点是人们可能会滥用存储过程,把非事务性的东西(比如发送电子邮件)等等,加上事实上你通常不能有效地扩展参数列表而不破坏封装合同(我不认为可变函数是这个主要的修复)。 Oracle当然有修改版本来帮助后一个问题,但是PostgreSQL没有。 取而代之的是,我倾向于编写服务定位器到存储过程来解决这个问题。