我工作的公司在 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 从我可以与实体框架绑定的消息中创建对象,但 nHapi 似乎是一个死项目,而且我现在没有使用实体框架的经验。
我基本上很茫然,需要一些有 HL7 数据建模经验的行业专业人士的帮助。是否值得付出额外的努力来完全标准化表格?如果我使用这些具有数百列的非规范化段表(其中大部分每行为 NULL),SQL 端的性能是否会很糟糕?我不是 DBA,所以我试图了解每种方法的陷阱。我也研究过 RIMBAA,但对于作为 HL7 新手的我来说,HL7 RIM 似乎是一门外语,将 v2 消息翻译到 RIM 可能需要比我完成这个项目更长的时间。我希望我想得太多了,有一个更简单的解决方案摆在我面前。希望这个问题不要太开放。
我最近工作的公司开始了一个钻研HL7消息和数据交易世界的项目.我们正在使用BizTalk Server 2010和2010年的BTAHL7加速器,目前HL7 v2已经成功,但现在我们需要接受HL7 v3(CDA R2)文档.这些是我们将接受外部供应商的CCD.
我有来自HL7的完整的.xsd模式,用于CDA R2(所有1541个)但我正在努力弄清楚如何确定哪些模式与我们将接收的消息有关.我必须使用的是来自我们的贸易伙伴的测试CCD消息,而没有其他信息.我已经尝试使用代码和显示名称以及templateId来确定哪些子文档将匹配,因此我可以适当地映射到我们的内部规范格式以进行数据加载,但我正在努力解决这个问题.
我宁愿不在BizTalk中创建一个项目,它包含所有1541个模式来解析和验证这些文件,因为这会使我的地图和转换机制的阅读变得更加困难.有没有HL7 v3和BizTalk经验的人有什么指导我可以根据测试文件中的可用信息识别合适的子模板?
这是标题信息:
<realmCode code="US"/>
<typeId root="XXX" extension="POCD_HD000040"/>
<templateId root="2.16.840.1.113883.10.20.1"/>
<templateId root="2.16.840.1.113883.3.88.11.32.1"/>
<templateId root="1.3.6.1.4.1.19376.1.5.3.1.1.6"/>
<templateId root="1.3.6.1.4.1.19376.1.5.3.1.1.2"/>
<templateId root="1.3.6.1.4.1.19376.1.5.3.1.1.1"/>
<templateId root="2.16.840.1.113883.10.20.3"/>
<templateId root="2.16.840.1.113883.3.88.11.83.1"/>
<id root="1.2.840.113619.21.1.3164884235793924544.1704986688012700"/>
<code code="34133-9" codeSystem="XXX" codeSystemName="LOINC" displayName="Summarization of episode note"/>
<title>XXX</title>
<effectiveTime value="20140110152448-0500"/>
<confidentialityCode code="N" codeSystem="XXX"/><languageCode code="en-US"/>
Run Code Online (Sandbox Code Playgroud)