php - 关于具有变化/动态数量的字段的数据库的数据库设计的建议

标签 php mysql

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

  1. 有 30 列,例如side_effect_1、side_effect_2 等,并且对于大多数药物来说,这些列中都有很多空值。

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

我是新手,但我发誓我已经花了几个小时试图在网上寻找解决方案,但无济于事。似乎确实有一种观点认为,这个问题(字段的动态数量)可能最好由 NoSQL 数据库来处理。尽管我的大多数领域都会有良好、整洁、一对一的关系,但也有少数领域(副作用、适应症、禁忌症)的数量差异很大。任何建议将不胜感激。

最佳答案

您在这里处理两种不同类型的数据。一方面你有药物,另一方面你有副作用。这直接给了你问题的答案:你需要两张表。现在要连接这两个,您需要另一个来完成这件事。

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

现在,您不仅可以让每种药物产生 n 个副作用,还可以确保引用完整性并避免存储中出现重复(或更多)情况。

关于php - 关于具有变化/动态数量的字段的数据库的数据库设计的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42585791/

相关文章:

javascript - foreach 内的数据属性未更改

javascript - 使用 jQuery 序列化表单时遇到问题

php - 我收到 MDB2 错误 : not found

mysql - 如何仅通过连接表列与 Doctrine 进行分组?

mysql - 尝试向 mariadb 用户授予权限时无法在表错误中找到匹配的行

PHP 在两个字符串之间选择

MySql:提取具有相同选项的产品

php - 禁用 woocommerce_checkout_update_customer_data

php - 如何检查 php 中所有空值的关联数组?

javascript - 没有mysql列出元素的最佳方法是什么