1

我有一个关于数据库表结构的查询。SQL Server 2008 数据库中的“我的患者详细信息”表如下所示:

--PatientId(PK)-- --PatientType-- --DoctorId(FK)-- --DateOfVisit-- --PrescriptionId(FK)--

每位患者可能多次到医院就诊。我需要链接患者的所有访问并以链接的方式显示它们,以便管理员可以导航之前和下一次访问..

所以我认为我只能通过使用 VisitId 记录每次访问来做到这一点。

我需要小心不要在数据库中加载不必要的字段。它也不应该严重影响提取时间。

我认为这些是可用的方法。如果有的话建议我。

--PatientId(PK)-- --PatientType-- --DoctorId(FK)-- --DateOfVisit-- --PrescriptionId(FK)-- --VisitId-- --PrevVisitId-- NextVisitId--

或者

有一个单独的表作为访问

--VisitId(PK)---PrevVisitId(FK)-- --NextVisitId(FK)--

抱歉,如果我的帖子重复。请纠正我,将我重定向到任何需要的地方/时间。

4

1 回答 1

1

所以我认为我只能通过使用 VisitId 记录每次访问来做到这一点。

每次访问都需要一行。每行都需要一个键。密钥不需要是单个 ID 号。我认为您每次访问至少需要记录的是

create table visits (
  patient_id integer not null, -- references patients (patient_id), not shown
  doctor_id integer not null,  -- references doctors (doctor_id), not shown
  office_visit_start timestamp not null default current_timestamp,
  primary key (patient_id, office_visit_start)
);

insert into visits values (1, 1, '2012-02-01 08:00');
insert into visits values (1, 1, '2012-02-01 15:00');
insert into visits values (1, 1, '2012-03-01 09:33');
insert into visits values (2, 1, '2012-02-01 09:00');

(具体语法因您的 dbms 平台而异。)您可以通过相当简单的查询找到上一次和下一次就诊——“office_visit_start”将为您提供患者就诊的顺序。

示例查询。. .

-- Previous visit for patient # 1 (before 2012-02-01 15:00)
select patient_id, max(office_visit_start)
from visits 
where patient_id = 1
  and office_visit_start < '2012-02-01 15:00'
group by patient_id

-- Next visit for patient # 1 (after 2012-02-01 15:00)
select patient_id, min(office_visit_start)
from visits 
where patient_id = 1
  and office_visit_start > '2012-02-01 15:00'
group by patient_id
于 2012-08-17T16:44:18.027 回答