2012-08-17 93 views
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) -

道歉,如果我的文章是重复的。纠正我,重定向我无论何时/何时需要。

+0

你正在试图建立的东西,看起来像一个'医院管理系统',并且有超过'100'分析图/项目/ casestudies在谷歌这个。 – Yasser 2012-08-17 06:51:02

+0

@亚瑟是的,它是一个HMS。但抱歉,我找不到资源。如果你能帮助我一个链接,会很好。 – 2012-08-17 06:58:35

+0

@Catcall对不起,我需要15个声望。我现在会研究它。谢谢你指导我。 – 2012-08-18 12:00:48

回答

1

所以我认为我只能通过为每次访问创建一个带有 VisitId的记录来实现。

您需要每行访问一行。每行需要一个密钥。该密钥不需要是单个身份号码。我认为最起码你需要记录每个访问是

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 
+0

谢谢。你非常帮助我。但抱歉,我无法获得这个主键(patient_id,office_visit_start)' 我们可以在同一个表中有两个主键吗? – 2012-08-18 06:18:38

+0

一个主键,由两列组成。我相信你的数据库可以管理它;虽然你的框架可能不会。 – 2012-08-18 11:26:06

+0

另一个查询请..如果我将患者详细信息表作为“--PatientId-- --PatientType-- - DoctorId(FK) - --Office_Visit_Start-- --PrescriptionId(FK) - ”(PatientId,Office_Visit_Start)作为主键。?通过这个我可以避免创建一个新的访问表。这会比创建新的访问表有多高效?谢谢。 – 2012-08-20 05:44:04