我正在设计一个应用程序,我想根据症状搜索疾病。我正在尝试使用MySql设计数据库,但作为初学者,我遇到了设计理念的一些麻烦。
基本上疾病会有多种症状,所以在disease
表上我想要这些列:
disease_id, disease_name, disease_description, **disease_symptoms**
问题是,一种疾病不会只有一种症状,并且在一个单元格中放置多个值与我在网上发现的数据库设计哲学背道而驰。
因此,到目前为止,我找到的最佳解决方案是制作一个包含多个列的表,1表示疾病ID,然后是10个列:symptom_0
,symptom_1
,symptom_2
,等等。因此,当我进行SQL查询时,它可以返回所有具有特定症状的疾病。
我只是想知道是否有更有效的方法来做到这一点。
答案 0 :(得分:7)
如果您在疾病和症状(或实际上是任何其他实体)之间存在M-to-N关系,则需要3个表:首先是疾病,如(disease_id,...),第二个是症状(symptom_id ,. ..)和第三个,链接表,(disease_id,symptom_id)。
然后,执行SQL,如:SELECT * FROM diseases WHERE disease_id IN (SELECT disease_id FROM diseases_vs_symptoms WHERE symptom_id = MY_SYMPTOM);
更新我刚刚搜索了一下,发现这个看起来非常有用的问题,您可能会觉得有用:Relational Database Design Patterns?
答案 1 :(得分:1)
我不认为创建多个列是个好主意,因为有很多可能的症状。我这样做的方式:
使用symptoms
和id
创建表name
使用disease_symptoms
和disease_id
symptom_id
现在,在表disease_symptoms
中,您已将疾病和症状联系起来,并且可以轻松找到哪些疾病有某些症状,反之亦然。
答案 2 :(得分:1)
我会再创建两个表。 一个仅针对具有两个字段的症状:symptom_id和symptom_name。 其次,将您的疾病与症状联系起来,有两个领域:disease_id和symptom_id。 第二个表将包含与该疾病症状一样多的条目。