1

我有一些医疗信息想存储在关系数据库中,但不知道如何以最佳方式对其进行建模。

这里的问题是我有几个字段细分为其他字段,同时又细分为其他字段....

例如我有这个 sql 代码:

 CREATE TABLE Distribution_patterns(
              id_Distribution_pattern  INTEGER  NOT NULL PRIMARY KEY,
              LEFT_SIDE_VIEW           VARCHAR(40)  NOT NULL,
              RIGHT_SIDE_VIEW          VARCHAR(40)  NOT NULL,
              dorsal_view              VARCHAR(10 ) NOT NULL,
              ventral_ view            VARCHAR(10 ) NOT NULL,              
              CONSTRAINT uc_Info_d_p UNIQUE (id_Distribution_pattern)           
            );


CREATE TABLE lymph_nodes (
              id_lymph_nodes       INTEGER  NOT NULL PRIMARY KEY,
              MANDIBULAR           VARCHAR(40)  NOT NULL,
              scapular             VARCHAR(40)  NOT NULL,
              INGUINAL             VARCHAR(10 ) NOT NULL,
              popliteal            VARCHAR(10 ) NOT NULL,              
              CONSTRAINT uc_Info_l_n UNIQUE (id_lymph_nodes)           
            );

CREATE TABLE evaluation(
          ID_evaluation            INTEGER  NOT NULL PRIMARY KEY,
          Distribution_pattern     INTEGER ,
          lymph_node               INTEGER ,
          Musculoskeletal_system   INTEGER ,
          FOREIGN KEY (Distribution_pattern) references Distribution_patterns (id_Distribution_pattern),
          FOREIGN KEY (lymph_nodes)    references lymph_nodes (id_lymph_node),
          FOREIGN KEY (Musculoskeletal_system) references Musculoskeletal_system_parts (id_Musculoskeletal_system),
          CONSTRAINT uc_Info_evaluation UNIQUE (ID_evaluation)           
        );
  • 分布模式
    • 左侧视图
    • 右侧视图
    • 背面观
    • 腹面观
  • 淋巴结
    • 下颌
    • 肩胛
    • 腹股沟
    • 腘窝
  • 肌肉骨骼系统
    • 步态评估
    • 小跑的估值
    • 触诊
      • TIP 胸部
        • 肘部和前臂
        • CARPO和手指
      • TIP 骨盆
        • 骨盆
        • 膝盖
        • 霍克
      • 具体测试
        • 卡洪测试
        • 奥托拉尼测试
        • 其他

当然这不是全部数据,因为有大约 200 个字段和 14 个类别......

对于具有更多细分的“肌肉骨骼系统” ,这样做是否正确?

有没有其他方法来模拟这种情况,或者我需要有几个表,其中一个 ID 是指向另一个表的指针,它有一个指向另一个表的指针等等......

如果我想做一个查询,给出一个包含“医学评估”所有数据的巨大表,那么最好的方法是什么,几个连接 ON id?

4

2 回答 2

2

这是一个潜在的大型数据库模式,因此我将只关注肌肉骨骼系统。不过,在我开始讨论之前,我应该提到数据库规范化的重要性。这一点很重要!并且有很多原因。主要是,现在通过设计一个好的、规范化的数据库,您可以在确保数据的完整性和可靠性的同时为自己解决问题。始终牢记“这个数据库将如何增长”,“如果我需要添加更多系统或视图或分布模式怎么办”等。做你自己,你的雇主,帮个忙,继续阅读。简要概述可以在这里阅读:http: //databases.about.com/od/specificproducts/a/normalization.htm

对数据库设计:

您希望将冗余列和作为其他列子集的列从表中保留到自己的表中。例如,查看您的淋巴结表。如果一年后你意识到你需要再增加一个淋巴结怎么办?还是去掉一个?或者,如果您只从客户端查看一个节点怎么办?与其按照自己的方式做,不如把桌子绑在一个更大的物体上(我不是医生,所以我不确定分析器是什么),比如病人或淋巴系统。或两者。例子:

一个病人有很多系统(病人表和系统表之间的一对多关系) 一个淋巴系统有很多器官(淋巴系统和器官之间的一对多关系) 一个系统或器官有很多测试(一对多关系)系统和测试之间)。

例子:

餐桌病人

患者 ID (int PK)

患者姓名(字符串)

患者姓名(字符串)

此表应仅包含与单个患者有关的数据

表系统

SystemId(int PK)

系统名称(字符串)

系统描述(字符串)

该表应该只有特定于所有系统的列。系统可能是淋巴系统、呼吸系统、排泄系统等。

TablePatient_TableSystems

Patient_System_ID(int PK)

患者 ID(int FK)

SystemID(int FK)

你不能有多对多的关系。这张表解决了这个问题。如果您没有这个,您需要在每个表中为每个患者/系统保留冗余记录

桌风琴

器官ID(int PK)

器官名称(字符串)

OrganDesc(字符串)

TableOrgan_TableSystem

Organ_SystemID(int PK)

器官ID(int FK)

SystemID(int FK)

解决系统和器官的多对多问题

现在进行测试。测试是针对器官或系统的吗?或两者?这个例子会说两者

表测试

测试ID

测试名称

测试描述

测试成本

Tabel_Test_Stytem

TestSytemID(int PK)

测试ID(int FK)

SystemID(int FK)

Tabel_Test_Organ

TestSytemID(int PK)

TestID(int FK) OrganId(int FK)

这里有很多东西,所以我认为这是一个停下来的好地方。通读数据规范化,当您有问题时,请在此处回复(或给我发消息)。

于 2013-03-08T18:12:06.187 回答
1

你说的是层次结构。如果我被要求这样做,我会得到两个表:一个数据和一个参考。

评价表

  • 评估 ID
  • 零件编号
  • 评估文本

参考表

  • 零件编号
  • 组 ID
  • 零件描述

参考表包含这些:

PartId  GroupId PartDesc
0   null    Evaluation
1   0   Distribution pattern
2   1   LEFT SIDE VIEW
3   1   RIGHT SIDE VIEW
4   1   dorsal view
5   1   Ventral view
6   0   lymph nodes
7   6   MANDIBULAR
8   6   scapular
9   6   INGUINAL
10  6   popliteal
11  0   Musculoskeletal system
12  11  Gait assessment
13  11  VALUATION OF TROT
14  11  PALPATION
15  14  TIP thoracic
16  15  Elbow and forearm
17  15  CARPO AND FINGERS
18  14  TIP pelvic
19  18  PELVIS
20  18  KNEE
21  18  HOCK
22  11  specific tests
23  22  CAJON TEST
24  22  Ortolani TEST
25  22  OTHER

现在我们有一张整洁的桌子可以使用。我们将如何使用它?好吧,当然是递归 CTE。您没有提到 DB Engine,但几乎所有主要的 DBMS 都可以做到,除了 MySQL。您可以自己查找这个很酷的功能,也可以让我们知道您的数据库引擎,我们可以继续讨论。

于 2013-03-12T01:13:09.953 回答