Java 症状及其疾病数据库设计
我正在使用android健康应用程序,该应用程序将显示人体部位,如头部、胸部等。。现在我有三个表,例如症状、疾病和症状-疾病表,它们将链接这两个表。如果用户选择头晕、晕厥、乏力等症状,则显示高血压病。但当用户只选择一种症状(比如头晕)时,它就会出现问题,它也会显示相同的疾病。我如何区分这些东西?以及如何实施 这是我的症状表Java 症状及其疾病数据库设计,java,android,mysql,sql,database,Java,Android,Mysql,Sql,Database,我正在使用android健康应用程序,该应用程序将显示人体部位,如头部、胸部等。。现在我有三个表,例如症状、疾病和症状-疾病表,它们将链接这两个表。如果用户选择头晕、晕厥、乏力等症状,则显示高血压病。但当用户只选择一种症状(比如头晕)时,它就会出现问题,它也会显示相同的疾病。我如何区分这些东西?以及如何实施 这是我的症状表 s_id | s_name | s_part 1 |dizziness | Head 2 |syncope | Head 3
s_id | s_name | s_part
1 |dizziness | Head
2 |syncope | Head
3 |asthenia | Head
d_id | d_name | d_desc
1 |hypertensive disease| ....
s_id | d_id
1 | 1
2 | 1
3 | 1
疾病表
s_id | s_name | s_part
1 |dizziness | Head
2 |syncope | Head
3 |asthenia | Head
d_id | d_name | d_desc
1 |hypertensive disease| ....
s_id | d_id
1 | 1
2 | 1
3 | 1
症状和疾病表
s_id | s_name | s_part
1 |dizziness | Head
2 |syncope | Head
3 |asthenia | Head
d_id | d_name | d_desc
1 |hypertensive disease| ....
s_id | d_id
1 | 1
2 | 1
3 | 1
我使用此查询来获取该疾病
SELECT d.d_name, d.d_desc, s.symp_name
FROM symtoms s
LEFT JOIN symptom_disease sd ON sd.sid = s.sid
LEFT JOIN diseases d ON d.did = sd.did
WHERE s.sid IN (1,2,3) GROUP BY d.d_name
这里的问题是当用户只选择一种疾病时,我不希望它显示疾病,因为一种症状并不表示用户生病。所以,我需要一个关于如何实施的建议。我看到一个解决方案,要求我在症状/疾病表中添加等级/权重。但是我不知道如何实现这个方法。提前感谢。这可能不是最优雅的方式,但如果您使用的是MySql,它应该可以工作:
select *
from
(
select d.d_name, d.d_desc, GROUP_CONCAT(sd.s_id SEPARATOR ',') s_ids
from Diseases d , Symptom_disease sd
where sd.d_id = d.d_id
group by d.d_name, d.d_desc
order by sd.s_id
) as t
where t.s_ids = '1,2,3'
;
您需要确保在外部select的where子句中以升序连接所有符号ID(其中t.s_ID='1,2,3'),它应该只提供症状与用户选择的症状完全匹配的疾病。这里有一个基本方法,可以使用概率列之类的东西来确定特定疾病的可能性 疾病表:
1 Flu
2 Lyme
有关症状表:
1 Muscle Aches
2 Headache
3 Fatigue
4 Fever
5 Vomiting
6 Tick Bite
对于疾病症状表:
s_id d_id probability
1 1 0.2
2 1 0.2
3 1 0.2
4 1 0.2
5 1 0.2
1 2 0.1
2 2 0.1
3 2 0.1
4 2 0.1
6 2 0.6
因此,如果患者说有症状2、4和5,那么
select d_name, sum(probability)
from disease, disease_symptom
where disease.d_id = disease_symptom.d_id
and s_id in (2, 4, 5)
group by d_name
order by sum(probability) desc
是
所以流感是最有可能的
但如果患者出现症状2、4和6,则
select d_name, sum(probability)
from disease, disease_symptom
where disease.d_id = disease_symptom.d_id
and s_id in (2, 4, 6)
group by d_name
order by sum(probability) desc
是
因此,莱姆病最有可能发生。您的问题是否有理想的输出?可能在疾病表中添加一列,以指示选择该疾病之前所需的最小症状数。或者可能在症状-疾病表中添加一列,以指定症状与该疾病相关的概率。并在疾病表中添加一列,以指示选择该疾病之前的最小概率。“这里的问题是,当用户仅选择一种疾病时,我不希望它显示该疾病,因为一种症状并不表示用户生病。”??@e4c5我的观点是让用户仅选择一种症状,然后系统将输出可能错误的疾病,因为头晕等症状并不意味着用户患有高血压病。嘿。谢谢你的详细解释。我现在就试试这个简单的问题。您如何确定每种疾病的发生概率?