2

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

基本上一种疾病会出现多种症状,所以在disease表格上我想要这些列:

disease_id, disease_name, disease_description, **disease_symptoms** 

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

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

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

4

3 回答 3

8

如果您在疾病和症状(或任何其他实体,实际上)之间具有 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 问题,您可能会发现它很有用:关系数据库设计模式?

于 2013-09-18T08:54:38.630 回答
1

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

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

于 2013-09-18T08:56:12.833 回答
1

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

于 2013-09-18T08:57:35.757 回答