2012-08-17 6 views
1

데이터베이스 테이블 구조에 대한 쿼리가 있습니다. 은 SQL Server에서 내 환자 정보 테이블 2008 데이터베이스는 다음과 같습니다데이터베이스 행을 앞뒤로 링크하는 방법?

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

각 환자는 병원을 여러 번 방문 할 수 있습니다. 환자의 모든 방문을 연결하고 관리자가 이전 방문 및 다음 방문으로 이동할 수있는 링크 된 방식으로 표시해야합니다.

그래서 나는 각 방문에 대한 기록이 있어야만 할 수 있다고 생각합니다. 방문 ID.

데이터베이스에 불필요한 필드가로드되어서는 안된다는 점에주의해야합니다. 또한 가져 오기 시간에 나쁜 영향을 미치지 않아야합니다.

나는 이것이 가능한 방법이라고 생각합니다. 가능한 경우 나에게 제안하십시오.

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

또는

--VisitId (PK)로 구경위한 별도의 테이블을 갖는 -을 -PrevVisitId (FK) - --NextVisitId을 (FK) -

내 게시물이 중복 된 경우 사과드립니다. 정정 해주세요. 필요할 때마다 리디렉션 해주세요.

+0

'병원 관리 시스템'처럼 보이고, Google의 fr 다이어그램/프로젝트/casestudies 이상이 있습니다. – Yasser

+0

@ 예고편 예. HMS입니다. 하지만 죄송합니다. 리소스를 찾는 것이 나쁩니다. 네가 나를 도와 줄 수 있다면 좋을거야. –

+0

@Catcall 나는 upvote에 유감 스럽다 나는 15의 명망을 필요로한다. 나는 지금 그것을 들여다 볼 것이다. 안내해 주셔서 고마워요. –

답변

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

감사. 너는 크게 나를 도왔다. 하지만 죄송합니다.이 기본 키 (patient_id, office_visit_start)를 얻을 수 없습니다. 동일한 테이블에 두 개의 기본 키를 사용할 수 있습니까? –

+0

하나의 기본 키. 두 개의 열로 구성됩니다. 귀하의 데이터베이스가 그것을 관리 할 수 ​​있다고 확신합니다; 하지만 프레임 워크는 그렇지 않을 수도 있습니다. –

+0

다른 질문하시기 바랍니다 ..(PatientId, Office_Visit_Start)를 primarykey로하여 환자 세부 정보 테이블을'--PatientId---PatientType---DoctorId (FK) --Office_Visit_Start--PrescriptionId (FK)'' .? 이렇게하면 새로운 방문 표를 만들지 않아도됩니다. 새로운 방문 테이블을 만드는 것보다 얼마나 효율적입니까? 감사. –

관련 문제