Java 症状及其疾病数据库设计

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

我正在使用android健康应用程序,该应用程序将显示人体部位,如头部、胸部等。。现在我有三个表,例如症状、疾病和症状-疾病表,它们将链接这两个表。如果用户选择头晕、晕厥、乏力等症状,则显示高血压病。但当用户只选择一种症状(比如头晕)时,它就会出现问题,它也会显示相同的疾病。我如何区分这些东西?以及如何实施

这是我的症状表

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我的观点是让用户仅选择一种症状,然后系统将输出可能错误的疾病,因为头晕等症状并不意味着用户患有高血压病。嘿。谢谢你的详细解释。我现在就试试这个简单的问题。您如何确定每种疾病的发生概率?