【问题标题】:Database Cell with multiple values?具有多个值的数据库单元?
【发布时间】:2013-09-18 08:50:36
【问题描述】:

我正在设计一个应用程序,我想在其中根据症状搜索疾病。我正在尝试使用 MySql 设计数据库,但作为初学者,我在设计理念上遇到了一些麻烦。

基本上,一种疾病会出现多种症状,所以在disease 表中,我希望有这些列:

disease_id, disease_name, disease_description, **disease_symptoms** 

问题是,一种疾病不会只有一种症状,将多个值放在一个单元格中违背了我在网上发现的 DB 设计理念。

所以到目前为止,我发现的最佳解决方案是制作一个包含多列的表,1 列用于疾病 id,然后像 10 列称为:symptom_0symptom_1symptom_2 等。所以当我做一个 SQL 查询时,它可以返回所有具有特定症状的疾病。

我只是想知道是否有更有效的方法来做到这一点。

【问题讨论】:

    标签: mysql database algorithm


    【解决方案1】:

    如果疾病和症状(或任何其他实体,实际上)之间存在 M 对 N 关系,则需要 3 个表:第一个用于疾病,例如 (disease_id, ...),第二个用于症状 (symptom_id, . ..) 和第三个,链接表,(disease_id,symbol_id)。

    然后,您执行如下 SQL:SELECT * FROM diseases WHERE disease_id IN (SELECT disease_id FROM diseases_vs_symptoms WHERE symptom_id = MY_SYMPTOM);

    更新我刚刚搜索了一下,发现这个看起来很有希望的 SO 问题,您可能会发现它很有用:Relational Database Design Patterns?

    【讨论】:

      【解决方案2】:

      我不认为创建多个列是一个好主意,因为有很多可能的症状。我这样做的方式: 使用idname 创建表symptoms 使用disease_idsymptom_id 创建表disease_symptoms

      现在,在disease_symptoms 表中,您已经将疾病和症状联系起来,并且可以轻松找到哪些疾病有一些症状,反之亦然。

      【讨论】:

        【解决方案3】:

        我会再创建两个表。 一个仅用于具有两个字段的症状:症状 ID 和症状名称。 其次,将您的疾病与症状联系起来,两个字段:disease_id 和symbol_id。 第二个表将包含与该疾病的症状一样多的条目。

        【讨论】:

          猜你喜欢
          • 2021-12-05
          • 1970-01-01
          • 2011-08-03
          • 1970-01-01
          • 1970-01-01
          • 2022-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多