【问题标题】:Inserting data into many-to-many relationship table将数据插入多对多关系表
【发布时间】:2014-06-17 00:32:05
【问题描述】:

我正在尝试构建一个包含多个表的数据库以进行研究/研究。这是我第一次设计这种规模的数据库;数据库每天增长 100-200 条记录,到目前为止,我拥有自 2010 年以来的数据。在所有数据中,通用序列号、产品名称和药物(处方)的强度有点困扰我。这是我到目前为止所做的: Generic Seq 编号对于药物强度(产品名称)是唯一的。所以,我有一个包含 id、通用序列号和强度的表。另一个表用于 prod_id 和产品名称。每个Generic seq号可以有一个或多个产品名称,每个产品名称可以根据强度有不同的generic seq号。因此,我将其设置为多对多关系。我为此关系创建了另一个表,其中包含 rx_id、drug_id 和 prod_id。由于可能为许多患者开具同一种药物的处方,因此 drug_id 和 prod_id 可能在 rx_table 中重复多次。

我的第一个问题是,这种设计合适吗? 我应该如何将数据插入 rx_table?即使 drug_id 和 prod_id 已经存在于 rx_table 中,我是否应该每次都为新数据创建新记录,或者我应该查找 drug_id 和 prod_id 序列存在的 rx_id 并将 rx_id 插入到另一个主表(未显示)中包含其他数据。 还是这个问题太模糊了?

感谢您的帮助。

【问题讨论】:

  • 你的方法很好。我猜你的 rx_table 是代理和产品名称的组合,所以它是你作为“药物”购买的。基本上,您的患者表和 rx_table 之间存在另一个 m:n 关系,您可以在其中管理给患者的某种药物(通用序列号/产品名称)的处方。
  • @MartinK。谢谢你。这很有帮助。因此,为了确认,继续向 rx_table 添加数据并创建新的 rx_id,即使 prod_id 和 drug_id 组合存在,对吧?能否请您回复该消息,以便我将其标记为答案?

标签: sql many-to-many


【解决方案1】:

我不知道您的通用序列号到底是什么,所以我将仅使用现实生活中的药物示例。根据您的描述,我认为它与您的应用程序非常相似。假设您有扑热息痛作为代理。那么您的通用序列号表将类似于

drug_id | generic_seq_no     | strength
--------+--------------------+----------
1       | Paracetamol-100    | 100
2       | Paracetamol-250    | 250
3       | Paracetamol-500    | 500

您的产品表将包含商标名称:

prod_id   | prod_name
----------+------------
1         | Tylenol
2         | Captin
3         | Panadol

rx_table 包含商标名称、代理和强度的组合:

rx_id  | drug_id  | prod_id
-------+----------+----------
1      | 1        | 1
2      | 1        | 2
3      | 1        | 3
4      | 2        | 1
5      | 2        | 2
6      | 3        | 2
7      | 3        | 3

例如第一行是泰诺,含有 100 毫克扑热息痛。现在你有医生可以开的处方,这就是你迄今为止所做的。所以正如我所说,你的方法很好。

现在您需要(或拥有?)一张包含所有患者的桌子

patient_id | firstname | lastname
-----------+-----------+-----------
1          | John      | Doe
2          | Jane      | Doe

最后,您必须将您的商标/代理/优势组合与患者联系起来。由于一个患者可能会得到不同的药物,而多个患者可能会得到相同的药物,因此您需要另一个多对多关系,我们称之为处方

prescription_id | patient_id | rx_id
----------------+------------+------
1               | 1          | 1
2               | 1          | 3
3               | 2          | 4

这意味着 John Doe 将获得 Tylenol 和 Panadol,每个都含有 100 毫克扑热息痛。 Jane Doe 将接受 Tylenol 和 250 毫克扑热息痛。我认为您将插入最多的表是此模型中的处方表。

【讨论】:

    猜你喜欢
    • 2018-10-22
    • 2018-12-29
    • 2011-12-23
    • 2013-07-20
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2018-05-03
    • 2016-04-04
    相关资源
    最近更新 更多