首页 > 解决方案 > 如何修复 SQL 设计

问题描述

我正在研究一个医疗软件。该软件向患者询问有关其症状的问题,并从中确定可能的病状。我的研究涉及将软件发现的症状和病理与医院的症状和病理进行比较。

为了让我的工作更轻松,我决定在 netbeans 8.2 上用 javadb 创建的数据库中输入数据。

但似乎我做错了什么,因为我的陈述不起作用。

我提前感谢任何愿意花时间帮助我的人。


SQL设计:

Create table Patients(
nip varchar(32) primary key,
sexe varchar(8) not null,
age int not null,
dateArrivee timestamp not null,
constraint ck_sexe check(sexe='Male' or sexe='Female'),
constraint ck_age check (age>=0)
);

Create table Symptoms(
symptomID int primary key generated always as identity (start with 1,                         
increment by 1),
nip varchar(32) not null,
symptom varchar(64),
origin varchar(16) not null,
foreign key (nip) references Patients(nip),
constraint ck_origin check (origin='SOFTWARE' or origin='HOSPITAL')
);

Create table Pathologies(
pathologyID int primary key generated always as identity (start with 1,     
increment by 1),
nip varchar(32) not null,
pathology varchar(64),
origin varchar(16) not null,
foreign key (nip) references Patients(nip),
constraint ck_origin check (origin='SOFTWARE' or origin='HOSPITAL')
);

输入的值:

Insert into Patients values ('001','Male', 25, '2019-05-27 14:00:00');

Insert into Patients values ('002', 'Female', 30, '2019-05-26 15:00:00');

Insert into Symptoms values (, '001', 'Headache', 'SOFTWARE');

Insert into Pathologies values (,'001', 'Fever', 'SOFTWARE');

Insert into Symptoms values (,'001', 'Stomache', 'HOSTPITAL');

Insert into Pathologies values (, '001', 'Gastro-enteritis', 'HOSPITAL');

Insert into Symptoms values(,'002', 'Headache', 'SOFTWARE');

Insert into Pathologies values (,'002', 'Unknow', 'SOFTWARE');

SQL 语句:

Select * 
from (Patients inner join
      Symptoms
      on Patients.nip = Symptoms.nip
     ) inner join
     Pathologies
    on Symptoms.nip = Pathologies.nip
 where Symptoms.origin = 'MEDVIR' and 
       Pathologies.origin = 'MEDVIR';

很抱歉我忘了把我得到的错误。

SQL设计:

首先我有一个关于 auto_incrementation 的错误,甚至认为这是一个好方法。它说“生成”附近的语法不正确。

输入的值:

这里我有一个关于逗号(',')附近语法错误的错误。

SQL 语句:

最后我有一个错误说对象'Patients'不可用。

标签: sqldatabase-designjavadb

解决方案


如果我没记错的话,您正在尝试获取 'Origin' = 'MEDVIR' 的条目虽然,您的插入语句都没有 Origin 为 'MEDVIR'

请检查下面,

Select * 
from (Patients inner join
      Symptoms
      on Patients.nip = Symptoms.nip
     ) inner join
     Pathologies
    on Symptoms.nip = Pathologies.nip
 where Symptoms.origin IN ('SOFTWARE', 'HOSPITAL') and 
       Pathologies.origin IN ('SOFTWARE', 'HOSPITAL');

此外,您的某些 INSERT 语句在值之前有一个额外的逗号,这会导致语法错误。


推荐阅读