具有多个参数的单个数据库调用与具有少量参数的多个数据库调用

时间:2012-04-21 09:29:06

标签: oracle ado.net

我正在编写一个内容管理系统,可以存储有关不同文档类型的元数据。每种文档类型都有自己的元数据字段集。例如,Letter包含“To”,“From”,“ToAddress”,“FromAddress”等字段,而MinutesOfMeeting包含“DateHeldOn”,“TimeHeldOn”,“AttendedBy”等字段。

我将这些信息保存在数据库的两个表中:General和Specific。所有类型共有的常规商店信息,例如DocumentOwnerName,DocumentCreatedDate,DocumentSize等。特定表不是一个表,而是一组35个不同的表,每个文档类型一个。

我有一个页面,其中包含一个网格,其中我显示了文档列表。一条记录对应一个文档。由于网格是为了显示所有类型的文档,因此第一行可以显示一个字母,第二行可以显示一个MinutesOfMeeting,第三行是一个Memo等。

我还创建了一个搜索功能,用户可以根据检索的文档列表设置标准。为了使其工作,每个特定表中的每个字段有四个与搜索相关的参数,并且所有这些参数都被传递到中央过程。然后,此过程根据标准过滤掉记录。

问题是,处理35种不同的文档类型,每种文档类型都有10个字段,我最终得到了超过一千个参数。这是一场维护噩梦。我正在寻找解决方案。

一种解决方案是分别处理每个特定的表,获取ID,然后将它们联合起来。这很好,除了我必须对数据库进行36次不同的调用,每个调用一个特定的表加一个用于通用表。

这一切都归结为一个简单的架构选择:我应该通过多个参数进行单个数据库调用,还是应该通过少量参数进行许多数据库调用。

哪种方法更可取,为什么?

编辑:Web服务器和数据库服务器位于同一台计算机上。因此,网络速度无关紧要。

1 个答案:

答案 0 :(得分:1)

在设计一个API,我需要一个程序来获取大量相关参数,甚至是变量参数列表时,我使用记录类型,例如:

TYPE param_type IS RECORD (
   To
   From
   ToAddress
   FromAddress
   DateHeldOn
   TimeHeldOn
   AttendedBy
);

PROCEDURE do_search (in_params IN param_type);

记录的结构当然取决于你。如果对过程进行编码以忽略NULL的记录元素,那么调用者需要做的就是设置那些所需的元素,例如:

DECLARE
   p param_type;
BEGIN
   p.DateHeldOn := DATE '2012-01-01';
   do_search(p);
END;