我正在设计一个应用程序,我想在那里寻找基于症状的疾病。我正在尝试使用MySql设计数据库,但作为初学者,我在设计理念上遇到了一些麻烦。
基本上,一种疾病会有多种症状,所以在disease
表中,我希望有以下列:
disease_id, disease_name, disease_description, **disease_symptoms**
问题是,一种疾病不会只有一种症状,将多个值放在一个单元格中违背了我在网上发现的DB设计理念。
因此,到目前为止,我找到的最佳解决方案是创建一个具有多列的表,其中1列用于疾病id,然后类似于名为symptom_0
、symptom_1
、symptom_2
等的10列。因此,当我执行SQL查询时,它可以返回所有有特定症状的疾病。
我只是想知道是否有更有效的方法来做到这一点。
发布于 2013-09-18 08:54:38
如果您在疾病和症状之间有M到N的关系(实际上是任何其他实体),那么您需要3个表:第一个用于疾病,例如(disease_id,.),第二个用于症状(symptom_id,.)第三种是链接表(disease_id,symptom_id)。
然后,执行类似于:SELECT * FROM diseases WHERE disease_id IN (SELECT disease_id FROM diseases_vs_symptoms WHERE symptom_id = MY_SYMPTOM);
的SQL
UPDATE --我刚刚在谷歌上搜索了一下,发现这个看起来很有希望的问题,你可能会发现这个问题很有用:Relational Database Design Patterns?
发布于 2013-09-18 08:56:12
我不认为创建多列是个好主意,因为有很多可能的症状。我的做法是:用id
创建表,用id
创建表disease_symptoms
,用disease_id
和symptom_id
创建表disease_symptoms
现在,在表disease_symptoms
中,您已经将疾病和症状联系起来,并且可以很容易地找到哪些疾病有一些症状,而哪些疾病则相反。
发布于 2013-09-18 08:57:35
我会再建两张桌子。一种是针对症状的两个字段: symptom_id和symptom_name。第二,把你的疾病和症状联系起来,有两个领域: disease_id和symptom_id。第二个表将有尽可能多的条目,因为有这种疾病的症状。
https://stackoverflow.com/questions/18867738
复制相似问题