Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关于具有可变/动态字段数的数据库设计的建议_Php_Mysql - Fatal编程技术网

Php 关于具有可变/动态字段数的数据库设计的建议

Php 关于具有可变/动态字段数的数据库设计的建议,php,mysql,Php,Mysql,我正在使用PHP/MySQL构建一个药品信息web应用程序。我不知道如何处理不同领域的需求。例如,副作用。一种药物可能有三种副作用,另一种可能有30种副作用。我想到了两种可能的解决方案,它们看起来都很糟糕: 有30列,例如side_effect_1、side_effect_2等,对于大多数药物,这些列中有很多空值 在一列中列出所有副作用,以逗号分隔,然后找出如何处理(我猜是某种嵌套数组?它不会成为PHP发送的任何查询的数组中的一个数组吗?) 我是个新手,但我发誓我花了几个小时试图在网上找到解决方

我正在使用PHP/MySQL构建一个药品信息web应用程序。我不知道如何处理不同领域的需求。例如,副作用。一种药物可能有三种副作用,另一种可能有30种副作用。我想到了两种可能的解决方案,它们看起来都很糟糕:

  • 有30列,例如side_effect_1、side_effect_2等,对于大多数药物,这些列中有很多空值

  • 在一列中列出所有副作用,以逗号分隔,然后找出如何处理(我猜是某种嵌套数组?它不会成为PHP发送的任何查询的数组中的一个数组吗?)


  • 我是个新手,但我发誓我花了几个小时试图在网上找到解决方案,但都没有用。似乎有一种观点认为,这个问题(字段的动态数量)最好由NoSQL数据库来处理。虽然我的大部分领域都有很好的、整洁的、一对一的关系,但有一些(副作用、适应症、禁忌症)在数量上差异很大。任何建议都将不胜感激。

    您在这里处理的是两种不同类型的数据。一方面你有药物,另一方面还有副作用。这直接给出了问题的答案:您需要两个表。现在,要将这两个连接起来,你需要另一个能完全做到这一点的人

    ┌───────┐    ┌───────────────────┐    ┌──────────────┐
    │ drugs │    │ drug_side_effects │    │ side_effects │
    ├───────┤    ├───────────────────┤    ├──────────────┤
    │ id    │    │ drug_id           │    │ id           │
    │ name  │    │ side_effect_id    │    │ name         │
    └───────┘    └───────────────────┘    └──────────────┘
    

    现在,每个药物不仅可以有n个副作用,还可以确保参考完整性,避免存储中出现重复(或更多)的数据。

    这里处理的是两种不同类型的数据。一方面你有药物,另一方面还有副作用。这直接给出了问题的答案:您需要两个表。现在,要将这两个连接起来,你需要另一个能完全做到这一点的人

    ┌───────┐    ┌───────────────────┐    ┌──────────────┐
    │ drugs │    │ drug_side_effects │    │ side_effects │
    ├───────┤    ├───────────────────┤    ├──────────────┤
    │ id    │    │ drug_id           │    │ id           │
    │ name  │    │ side_effect_id    │    │ name         │
    └───────┘    └───────────────────┘    └──────────────┘
    

    您不仅可以在药物中产生副作用,还可以确保引用完整性,避免存储中的重复(或更多)。

    MySQL JSON数据类型或使用NOSQL如何?认为副作用是可重用的。为每种药物创建一个具有id的药物表。为每个副作用创建一个id为的副作用表。然后创建一个中间表,其中每行的一列中有药物id,另一列中有副作用id。现在您可以使用JOIN’s获得药物的所有副作用,并且您有可重复使用的副作用。完全不需要动态字段。谢谢。一种药物可能有5种副作用,另一种可能有12种副作用,我该如何解决这个问题呢?无论我实际列出的是副作用还是副作用ID(与联接表中的副作用相关),我仍然需要不同数量的列字段,对吗?不。您将从中间表中选择与“此”药物副作用相关的所有行(见下面的答案)。另一种药物将加入其id的所有行,依此类推。假设副作用id 1是头痛,id 2是恶心。药物1只出现头痛(药物id 1和副作用id 1),而药物2同时出现头痛(2,1和2,2)。我们在中间表格中有一行是关于与药物有关的每种副作用的。谢谢。这有很大帮助。MySQL JSON数据类型或使用NoSQL会怎么样?考虑副作用是可重用的。为每种药物创建一个具有id的药物表。为每个副作用创建一个id为的副作用表。然后创建一个中间表,其中每行的一列中有药物id,另一列中有副作用id。现在您可以使用JOIN’s获得药物的所有副作用,并且您有可重复使用的副作用。完全不需要动态字段。谢谢。一种药物可能有5种副作用,另一种可能有12种副作用,我该如何解决这个问题呢?无论我实际列出的是副作用还是副作用ID(与联接表中的副作用相关),我仍然需要不同数量的列字段,对吗?不。您将从中间表中选择与“此”药物副作用相关的所有行(见下面的答案)。另一种药物将加入其id的所有行,依此类推。假设副作用id 1是头痛,id 2是恶心。药物1只出现头痛(药物id 1和副作用id 1),而药物2同时出现头痛(2,1和2,2)。我们在中间表格中有一行是关于与药物有关的每种副作用的。谢谢。这非常有帮助。所以这是多对多?在副作用表中,每个副作用有n行?副作用表中的每个副作用有一行(药物相同-每个药物有一行)。药物副作用表将是您的多对多表。@jaylblanchard好的,我明白了(我想)。谢谢你可以从这里看到另一个更详细的解释。快乐学习。:)所以这是多对多?在副作用表中,每个副作用有n行?副作用表中的每个副作用有一行(药物相同-每个药物有一行)。药物副作用表将是您的多对多表。@jaylblanchard好的,我明白了(我想)。谢谢你可以从这里看到另一个更详细的解释。快乐学习。:)