gpt4 book ai didi

php - 太有关系还是没有关系? MySQL、PHP 数据库工作流程

转载 作者:行者123 更新时间:2023-11-29 14:10:01 24 4
gpt4 key购买 nike

我对 mysql 有点陌生,我正在尝试创建一种复杂的数据库,需要一些帮助。

我的数据库结构

 Tables(columns)

1.patients (Id,name,dob,etc....)
2.visits (Id,doctor,clinic,Patient_id,etc....)
3.prescription (Id,visit_id,drug_name,dose,tdi,etc....)
4.payments (id,doctor_id,clinic_id,patient_id,amount,etc...) etc..
<小时/>

我有大约 9 个表,所有表的主键都是“id”,并且设置为 autoinc。

我不在我的数据库中使用关系(因为我不知道它是否会更好!而且我从来没有真正深入了解过mysql,所以我只是使用php来运行查询来从一个表中获取信息并使用它来运行另一个查询以获取更多信息/商店等..)

例如:如果我想查看我给一位患者提供的所有药物,例如他的 ID 是:100

1-click patient name (name link generated from (tbl:patients,column:id))
2-search tbl visits WHERE patient_id=='100' ; ---> that return all his visits ($x array)
3-loop prescription tbl searching for drugs with matching visit_id with $x (loop array).
4- return all rows found.

随着我的数据库扩展得越来越大(就诊表中有 1k+ 条记录),因此 1 位患者可以进行 40 多次就诊,即 40 次循环进入处方表以获取他之前的所有处方。

所以我想出了一个小柚木,我在其中编辑了我的数据库,以便patent_id和visit_id是几乎所有表中的一列,这样我就可以跳过步骤2和3进入一个步骤(搜索处方 tbl WHERE Patient_id=100),但这在我的数据库中留下了很多重复项,我觉得这样做有点愚蠢!!

我应该开始考虑使用关系数据库吗?

如果是的话,有人可以解释一下这将如何减轻我的生活吗?

我可以重新设计但更改当前表吗?或者我必须重新创建所有表?

非常感谢

最佳答案

是的,您应该利用 MySQL 的关系数据库功能。随着该项目规模的扩大,它们将使您的生活变得更加轻松。

实际上你已经很好地使用它们了。例如,您发现患者可以进行零次或多次就诊。您现在需要做的是学习使用 JOIN 查询 MySQL。

一旦您知道如何使用 JOIN,您可能需要声明一些外键和其他数据库约束。但没有它们你的系统也能正常工作。

您已经决定通过在几乎所有表中包含病人 ID 和访问 ID 来对数据库进行非规范化。非规范化是向各种表添加形式上冗余的数据。通常是出于性能原因而这样做。随着系统规模的扩大,这可能是明智的决定,也可能不是明智的决定。但我认为您可以相信自己的直觉,了解您所选择的非规范化的必要性。阅读“数据库规范化”以获得一些背景知识。

一点建议:不要使用简单命名为“id”的列。每个表中的列名称都相同。例如,使用患者.患者_id、访问.患者_id 等。这是因为有很多自动化软件工程工具可以帮助您理解数据库中的关系。如果您的 ID 列的命名一致,这些工具效果会更好。

下面是一个有关如何使用单个 JOIN 查询执行问题中编号 2 和 3 的步骤的示例。

           SELECT p.patient_id p.name, v.visit_id, rx.drug_name, rx.drug_dose
FROM patients AS p
LEFT JOIN visits AS v ON p.patient_id = v.patient_id
LEFT JOIN prescription AS rx ON v.visit_id = rx.visit_id
WHERE p.patient_id = '100'
ORDER BY p.patient_id, v.visit_id, rx.prescription_id

与所有 SQL 查询一样,这会返回一个由行和列组成的虚拟表。在这种情况下,虚拟表的每一行都有患者、就诊和药物数据。我在这个例子中使用了LEFT JOIN。这意味着没有就诊的患者将有一行包含 NULL 数据。如果您指定JOIN,MySQL 将从虚拟表中忽略这些患者。

关于php - 太有关系还是没有关系? MySQL、PHP 数据库工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13659884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com