症状及其疾病数据库设计

时间:2017-03-09 14:15:41

标签: java android mysql sql database

我正在使用android健康应用程序,它将显示人体部位,如头部,胸部等。现在我有三个表,如症状,疾病和symptom_disease表,将链接这两个表。如果用户选择头晕,晕厥,虚弱等症状,则会出现高血压病。但是当用户选择只有一个症状让头晕时会出现问题,它也会显示同样的疾病。我如何区分这些东西?以及如何实施它。

这是我的症状表

s_id    | s_name    | s_part
1       |dizziness  | Head
2       |syncope    | Head
3       |asthenia   | Head

疾病表

d_id    | d_name             | d_desc
1       |hypertensive disease| ....

Symptom_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

这里的问题是当用户只选择一种疾病时,我不希望它显示疾病,因为一种症状并未显示用户生病。所以,我需要一个关于如何实现这一点的建议。我看到一个解决方案,要求我在symptom_disease表中添加等级/权重。但我不知道如何实现这个方法。提前谢谢。

2 个答案:

答案 0 :(得分:1)

这是使用概率列等方法确定特定疾病可能性的基本方法。

对于疾病表:

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

Flu   0.6
Lyme  0.2

所以流感最有可能。

但如果患者有症状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

Lyme   0.8
Flue   0.4

所以莱姆病最有可能发生。

答案 1 :(得分:0)

这可能不是最优雅的方式,但它应该有效,假设您正在使用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子句中以升序连接所有sympton id(其中t.s_ids ='1,2,3'),它应该只给你的症状的疾病与您的用户选择的完全匹配。