我有一个关于数据库表结构的查询。 SQL Server 2008数据库中的“我的患者详细信息”表如下所示:
- PatientId(PK) - --PartientType-- --DoctorId(FK) - --DateOfVisit---PrescriptionId(FK) -
每位患者可多次到医院就诊。我需要链接患者的所有访问并以链接的方式显示它们,管理员可以通过上一次和下次访问进行导航..
所以我认为只有通过VisitId记录每次访问记录才能做到。
我需要注意不要在数据库中加载不必要的字段。它也不应该严重影响提取时间。
我认为这些是可行的方法。建议我,如果有的话。
- PatientId(PK) - --PartientType---DoctorId(FK) - --DateOfVisit---PrescriptionId(FK) - - VisitId---PrevVisitId-- NextVisitId--
或
有一个单独的访问表
- VisitId(PK) - -PrevVisitId(FK) - --NextVisitId(FK) -
如果我的帖子重复,请道歉。纠正我,在需要的任何地方重定向我。
答案 0 :(得分: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