首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果某些数据在语义上可能不同,但逻辑上是相同的,那么如何在查找表中存储数据呢?

如果某些数据在语义上可能不同,但逻辑上是相同的,那么如何在查找表中存储数据呢?
EN

Database Administration用户
提问于 2019-04-16 19:35:43
回答 1查看 33关注 0票数 0

我正在开发一个系统,接收来自不同实验室的通信。每个实验室都有两个独立操作的数据服务,这意味着A实验室和B实验室可以向系统发送相同的数据,但它们可以以不同的格式(如果它们使用不同的系统)发送数据。我想找出最好的办法来处理这件事。下面是一个例子:

我正在开发的系统接收病人预约状态信息、标本采集信息和最终的实验室测试结果。

当A实验室发送预约状态信息或样本收集信息时,它来自一个系统。他们发送的部分信息可能是XML,例如:

代码语言:javascript
复制
<CollectionStatus>INPRC</CollectionStatus>
<ReasonForTest>PRE</ReasonForTest>
<IdSampleType>UR</IdSampleType>

这向我们的系统表明,尿液(UR)标本收集正在进行中(INPRC),而该测试的原因是“就业前”(PRE)。

稍后,当A实验室发送相同测试的最终实验室测试结果时,他们可以发送XML,例如:

代码语言:javascript
复制
<CollectionStatus>OK</CollectionStatus>
<ReasonForTest>PRE-EMPLOYMENT</ReasonForTest>
<IdSampleType>R</IdSampleType>

这向我们的系统表明,尿样(R)已成功采集(OK)和原因是“就业前”(就业前)。

同一个实验室可能多次发送相同的信息,但由于它们来自同一个实验室的不同系统,所以发送的数据可能不同。

这同样适用于不同的实验室。B实验室可发送:

代码语言:javascript
复制
<CollectionStatus>2</CollectionStatus>
<ReasonForTest>PE</ReasonForTest>
<IdSampleType>U</IdSampleType>

代码语言:javascript
复制
<CollectionStatus>1</CollectionStatus>
<ReasonForTest>1</ReasonForTest>
<IdSampleType>UR</IdSampleType>

为了处理这个问题,现在我为每个不同的变量设置了三个表。以ReasonForTest为例,我将得到以下表:

表"TestReasons“保存的数据是我们系统的标准数据。例如(例如):

代码语言:javascript
复制
| TestReasonID | Reason                         |
-------------------------------------------------
|            1 | Pre-Employment                 |
|            2 | Post-Accident                  |
|            3 | Return to Duty                 |
|            4 | Promotion                      |

其他表"Results.TestReasons“和"Orders.TestReasons”只是为了使系统能够将从实验室接收的数据转换为我们的系统理解和需要操作的数据,并在必要时将其转换回来。"Name“字段包含"UX友好”的文本,通常显示在报表或面向UX的系统前端。"Value“字段保存了实验室在"LaboratoryID”字段中标识的数据(如“预”或“就业前”)。由于并非所有实验室都可能出于同样的原因进行测试(上述例子是一些典型的药物测试原因),"Results.TestReasons“和"Orders.TestReasons”可能没有与"TestReasons“表中的每个条目相匹配的记录。

由于(至少目前)有13种不同的数据类型可以在任何给定的时间发送,所以最终会有39个不同的表来简单地从一种数据类型转换到另一种数据类型。我不知道为什么,但这只是对我来说很有趣,我觉得可能有更好的方法来做这件事。

我是错过了什么,还是这似乎是实现这一目标的最佳方式?

EN

回答 1

Database Administration用户

发布于 2019-04-16 23:41:01

我是错过了什么,还是这似乎是实现这一目标的最佳方式?

项目1

你似乎错过了与实验室签订的合同中“你将以这种格式向我们发送数据”的部分。该文档应该清楚地列出TestReason的有效值(即使它是它们的值列表)。

设计理念1

接收病人预约状态信息、标本采集信息和最终化验结果。

我很肯定有ISO/政府标准来实现这一点。我想到了CDISC

我会看看不同的政府网站,看看它们是否有一个标准的样本列表。开放数据堆栈交换可能可以帮助您解决问题(甚至可以声明它不存在)。

设计理念2

天然钥匙。

在您的两个表(Order.TestReasonsResults.TestReasons)中,(LaboratoryId, Value)都应该有一个唯一的约束。这些可以是你的PK。您可能需要研究为什么它们是两个独立的值集。

设计思想3

您应该已经有了一个TestReasons维度表(以及其他12个维度中的每个维度的表)。这将使您的需求减少到26张桌子。然后,您只需要将这两个表缩小为一个。(例如添加"Domain“列,表示"Orders”vs "Results")

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/234966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档