如何链接数据库行?

时间:2012-08-17 06:31:08

标签: sql asp.net-mvc database database-design

我有一个关于数据库表结构的查询。 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) -

如果我的帖子重复,请道歉。纠正我,在需要的任何地方重定向我。

1 个答案:

答案 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