2012-05-06 6 views
0

다음 엔티티가있는 e-r 모델이 있습니다 : Doctor, Patient, Human이고 Doctor -> HumanPatient -> Human 사이의 생성 관계가 있습니다. 관계 모델을 만들려고합니다. 그래서 어느 모델이 맞습니까? 첫 번째 모델입니까, 두 번째 모델입니까?er 모델 -> 관계형 모델 (데이터베이스)

1)

Human (Name, Surname, Sex, Address) 
Doctor(License number, specification) 
Patient(Insurance number, diagnosis) 

2)

Doctor(Name, Surname, Sex, Address, License number, specification) 
Patient(Name, Surname, Sex, Address, Insurance number, diagnosis) 

및 인간 necesarry되지 엔티티.

P. 관계형 모델에 익숙하지 않습니다.

답변

0

두 모델 모두 '정확함'입니다. 그러나 데이터 삽입 및 쿼리에는 차이가 있습니다.

정규화 된 데이터를 유지하려는 경우 첫 번째 방법을 사용하는 것이 좋습니다 (정규화에 대한 자세한 내용은 http://en.wikipedia.org/wiki/Database_normalization 참조). 그러나 예를 들어 모든 의사 또는 모든 환자에게 질문을하려면 두 테이블을 조인해야합니다.
또한 새 개체를 삽입 할 때 두 행을 삽입해야합니다 (Human 및 Doctor/Patient에).
데이터를 객체로 변환하는 OR 매퍼로 작업 할 때 공통베이스 (Human)를 가지고 있기 때문에 다형성을 사용할 수 있습니다.

두 번째 가능성은 속도가 중요 할 때 좋은 선택입니다.
조인이 필요하지 않으므로 모든 의사/환자를 쿼리 할 때 더 빠릅니다.
예를 들어 쿼리 할 때 속도가 느려집니다. 의사와 환자의 모든 주소

0

이것은 주로 요구 사항에 달려 있습니다. 의사도 환자 일 수 있습니까? 그렇다면 human과 같은 기본 테이블이 필요합니다. 이 경우 doctorpatient의 외래 키는 human이어야합니다.

DBMS에서 지원하는 경우 테이블 상속을 사용하는 것이 좋습니다. PostgreSQL에서는 다음과 같이 할 수 있습니다. 해야 할 일 :

create table human 
(
    name text, 
    surname text, 
    sex char(1), 
    address text 
); 

create table doctor 
(
    license_number integer, 
    specifiction text 
) 
inherits (human); 

create table patient 
(
    insurance_number integer, 
    diagnosis text 
) 
inherits (human); 
관련 문제