【问题标题】:Best way of acquiring information from several database tables从多个数据库表中获取信息的最佳方式
【发布时间】:2010-10-07 19:01:59
【问题描述】:

我有一个医疗数据库,其中保存着不同类型的患者数据:检查、实验室结果、X 光片……每种类型的记录都存在于单独的表中。我需要将这些数据显示在一张表上,以显示患者在特定诊所的病史。

我的问题:最好的方法是什么?我是否应该从患者 ID 匹配的每个表中执行SELECT,按日期排序,然后将它们保存在某种人工列表式结构中(按日期排序)?或者有更好的方法吗?

我正在为此应用程序使用 WPF 和 SQL Server 2008。

【问题讨论】:

    标签: c# wpf sql-server-2008 merge


    【解决方案1】:

    正如其他人所说,JOIN 是您通常执行此操作的方式。但是,如果患者的一个表中有多行,那么您可能会在某些列中获得跨多行重复的数据,这通常是您不希望的。在这种情况下,有时使用 UNION 或 UNION ALL 会更容易。

    假设您有两个表,examinationsxrays,每个表都有一个 PatientID、一个日期和一些额外的详细信息。你可以像这样组合它们:

    SELECT PatientID, ExamDate [Date], ExamResults [Details]
    FROM examinations
    WHERE PatientID = @patient
    
    UNION ALL
    
    SELECT PatientID, XrayDate [Date], XrayComments [Details]
    FROM xrays
    WHERE PatientID = @patient
    

    现在您有了一个包含 PatientID、Date 和 Details 列的大型结果集。我发现这对于“合并”具有相似但不相同数据的多个表很方便。

    【讨论】:

    • 创建 UNION ALL 的视图会很有效。如果表中的行数很大,则考虑水平分区,如果这不能提供必要的性能,则进行非规范化以创建仓库表。
    • 不要忘记按 PatientID 和 Date 列索引视图。
    【解决方案2】:

    如果这是您经常要做的事情,我会很想为所有患者数据创建一个非规范化视图(加入相应的表)和index the appropriate column(s) in the view。然后使用适当的方法(存储过程等)来检索传入的患者 ID 的数据。

    【讨论】:

      【解决方案3】:

      使用JOIN 从多个表中获取数据。

      【讨论】:

      • 确定是从 Patient 表进行左外连接吗?
      • 你可能是对的。尽管在患者/检查的情况下,它可能是内部连接。
      • 如果您加入(甚至是左外加入)[患者] 进行检查、实验室结果和 X 射线检查,您将获得笛卡尔结果集 - 每项检查都与每个实验室结果相结合!根据马特汉密尔顿的回答,这些中的每一个都需要一个 UNION。
      【解决方案4】:

      您可以使用连接(不记得具体是哪种类型)从每个表中获取特定患者的所有记录。其工作方式取决于您的数据库设计。

      【讨论】:

        【解决方案5】:

        我会用单独的 SELECT 语句来做,因为一个简单的 JOIN 可能不会做,因为某些表可能有超过 1 行的病人。

        所以我会在一个简单的 DataSet 中检索多个结果集,添加一个 DalaRelation,缓存该对象并逐行查询(按日期、按考试类型、子集...)

        主要的一点是,您可以方便地使用所有数据,如果需要,甚至可以将其缓存在一个易于查询和过滤的结构中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-25
          • 2021-04-17
          • 1970-01-01
          • 2021-07-17
          • 2021-12-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多