我正在设计一个系统,允许用户从一个系统获取数据并发送到其他系统。其中一个目标系统具有复杂的 SOA(Web 服务),另一个是接受平面文件作为输入的大型机。
我创建了一个具有 PublishEvent 表和 PublishEventType 表的数据库。还有一些特定于要发布的事件类型的规范化表。
我还有一个“接口”表,它是标准化数据表的扁平化版本。最终用户有一个将数据放入接口表的过程。我不确定确切的过程 - 我认为这是某种报告应用程序,他们可以将结果导出到 SQL 表。然后,我使用 SSIS 包将数据从接口表中取出,并将其放入规范化的数据结构中,并在 PublishEvent 表中创建新行。我使用平面表是因为当我第一次向他们展示关系表时,他们似乎很困惑。
我有一个 Windows 服务来监视 PublishEvent 表中的新行。Windows 服务通过插件进行扩展(使用 MEF 框架)。调用哪个插件取决于 PublishEvent 行中 PublishEventTypeID 字段的值。
PublishEventTypeID 1 调用从一组表中读取数据并调用 SOA Web 服务的插件。PublishEventTypeID 2 调用从一组不同的表中读取数据并创建要发送到大型机的平面文件的插件。
这似乎我正在实施“数据库作为 IPC”反模式。我应该更改我的设计以使用基于消息传递的系统吗?将数据放入平面表然后放入规范化表的过程是否多余?
编辑:这是在 .NET 3.5 中开发的