1

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

我将此信息保存在数据库中的两个表中:常规和特定。通用存储信息,所有类型通用,如 DocumentOwnerName、DocumentCreatedDate、DocumentSize 等。特定表不是一个表,而是一组 35 个不同的表,每个文档类型一个。

我有一个页面,其中包含一个显示文档列表的网格。一份记录对应一份文件。由于网格用于显示所有类型的文档,因此第一行可能显示一封信,第二行可能显示会议纪要,第三行可能显示备忘录等。

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

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

一种解决方案是单独处理每个特定表,取回 Id,然后将它们合并。这很好,除了我必须对数据库进行 36 次不同的调用,每个调用一个用于特定表,一个用于通用表。

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

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

编辑:网络服务器和数据库服务器在同一台机器上。因此,网络速度应该无关紧要。

4

1 回答 1

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;
于 2012-04-23T05:25:28.593 回答