我工作的公司在 HL7 中启动了一项新计划,我们在其中交易 v2X 和 v3(特别是 CDA)消息。我现在能够接受、验证和确认我们从贸易伙伴收到的消息,并开始为所述消息的后端存储创建数据模型。经过大量的考虑和研究,我不知道在 MS SQL Server 2008 R2 中解决这个问题的最佳方法是什么。
目前,我的想法是直接从我的集成引擎 (BizTalk) 将数据加载到数据仓库中,并使用一个支持的、标准化的操作数据库。我已经根据 v2.7 规范为 v2X 消息设置了数据库,因为 HL7 v2 的所有版本都是向后兼容的(我可以将任何以前的版本存储在同一个数据库中)。我的初始设计为每个段都有一个表,该表将与我在运行时生成和存储的 guid 绑定到标题表。这种方法的最大问题是每个表中的列数,这是我没有经验的。例如 PV1 段有 569 列以容纳所有可能的数据。除此之外,我需要将所有列设置为 varchar,并使它们足够大以容纳我们供应商提供的任何可能的定制方案。我打算使用 varchar(1024) 来实现这一点。很多这些列(可能大部分)都是 NULL,所以我会使用 SPARSE 列。这对我来说是糟糕的设计,但是完全规范化这些表需要在 BizTalk 和 SQL Server 中进行大量工作,我不确定这样做会得到什么。因为我有最后期限,所以我试图变得务实。
如果完全标准化,我基本上必须创建具有大量参数的存储过程,或者将这些消息拆分到第 n 级,以将单独加载到较小的子表中,并确保它们都与原始 guid 相关联。我还想维护 ACID 处理,这可能会变得棘手并在 BizTalk 中导致大量开销。我想第三种选择是使用 nHapi 从我可以与 Entity Framework 绑定的消息中创建对象,但 nHapi 似乎是一个死项目,我目前还没有使用 Entity Framework 的经验。
我基本上不知所措,需要一些有 HL7 数据建模经验的行业专业人士的帮助。完全规范化表格是否值得付出额外的努力?如果我使用这些具有数百列的非规范化段表(其中每行的大部分将为 NULL),SQL 端的性能会很糟糕吗?我不是 DBA,所以我试图了解每种方法的缺陷。我也看过 RIMBAA,但作为 HL7 新手,HL7 RIM 对我来说似乎是一门外语,将 v2 消息翻译到 RIM 可能需要比我完成这个项目更长的时间。我希望我想多了,有一个更简单的解决方案正盯着我看。希望这个问题不会太开放。