2016-10-20 7 views
2

아래 시나리오에 대한 데이터 모델을 만들고 싶습니다. PERSON 및 HEALTH_STANDARDS라는 테이블이 있습니다.이 특정 테이블 관계를 모델링하는 방법

PERSON는 ID, 이름, 주소, 이메일을 가지고 사용자가 사람을 선택하면 HEALTH_STANDARDS는 등 체중, 신장, UI에서

을 가지고 있으며 표준 건강 특성을 보여주고있다. 그런 다음 사용자는 선택한 사람에 따라 상태 속성을 변경합니다. 나머지 인원은 표준 건강 특성을 갖습니다.

어떻게 모델링 할 수 있습니까? PERSON_HEALTH_ATTRIBUTES 테이블을 하나 만들고 여기에 매핑을 수행해야하나요?

+0

사람의 건강 속성을 사람 테이블의 열로 저장하지 않는 이유는 무엇입니까? –

+1

PERSON이 HEALTH_STANDARDS'id '를 참조하는'health_standard_id' 레코드를 가질 수있는 것처럼 들립니다. – neokio

+0

MySQL 또는 Postgresql을 사용하고 있습니까? – jarlh

답변

0

PERSON 및 HEALTH 속성과 일대일 관계가 있기 때문에이를 하나의 테이블로 결합해야합니다. 기본 HEALTH_STANDARDS에 대한 기본값이 1 개만있는 경우이를 PERSON 테이블의 기본값으로 구현합니다.

0

이미지에서 설명한 것과 같은 테이블 구조를 디자인해야한다고 생각합니다.

사람은 신장, 체중, 색 같은 많은 건강 표준을 가질 수 있으므로 건강 표준과 일대일로 많은 관계가 있습니다. 그래서 우리는/우리가 HEALTH_STANDARDS가 상수임을 health_standard 그것은 나에게 보인다 마스터 데이터

enter image description here

1

입니다

테이블 person_health_standard 만든 여기 사람 히스 표준 데이터가 포함됩니다 하나 개 이상의 테이블을 작성해야 실제 사람과 실제로 일치하지 않는 기본값은 PERSONHEALTH_STANDARDS 사이에 직접적인 관계가 없습니다. 오히려 주어진 사람이 어떤 행도 가지고 있지 않을 때 암시 될 수있다. 즉, 사람이 PERSON_HEALTH_ATTRIBUTES에 행이 없다. 단순화를 위해 속성을 가중치로 제한 :

CREATE TABLE HEALTH_STANDARDS 
(person_weight_kg INTEGER NOT NULL); 

CREATE TABLE PERSON 
(person_id INTEGER NOT NULL UNIQUE, 
    name VARCHAR(35) NOT NULL); 

CREATE TABLE PERSON_HEALTH_ATTRIBUTES 
(person_id INTEGER NOT NULL UNIQUE 
    REFERENCES PERSON (person_id), 
    person_weight_kg INTEGER NOT NULL); 


SELECT person_id, person_weight_kg 
    FROM PERSON_HEALTH_ATTRIBUTES 
UNION 
SELECT person_id, person_weight_kg 
    FROM PERSON 
     NATURAL JOIN HEALTH_STANDARDS 
WHERE person_id NOT IN (SELECT person_id 
          FROM PERSON_HEALTH_ATTRIBUTES);