

엔터티(Entity) 란?
업무에서 관리해야 하는 데이터 집합을 의미한다.
개념, 사건, 장소 등의 명사(Things)이다.
특징
1) 엔터티는 유일한 식별자가 있어야 한다.
2) 2개 이상의 인스턴스가 있어야 한다.
3) 반드시 속성을 가지고 있다.
4) 다른 엔터티와 최소한 한 개 이상 관계가 있어야 한다.
5) 업무에서 관리되어야 하는 집합이다.
종류
1) 유형과 무형에 따른
① 유형 엔터티
② 사건 엔터티
③ 개념 엔터티
2) 발생 시점에 따른(*)
① 기본 엔터티(basic)
② 중심 엔터티(main)
③ 행위 엔터티(active)
속성(Attribute) = 컬럼
업무에서 필요한 정보인 엔터티가 가지는 항목을 말한다.
더 이상 분리되지 않는 단위로, 업무에 필요한 데이터를 저장할 수 있다.
인스턴스의 구성요소이다.
특징
1) 업무에서 관리되는 정보이다.
2) 하나의 값만 가진다.
3) 주식별자에게 함수족으로 종속된다.
종류
1) 분해 여부에 따른
① 단일 속성
② 복합 속성
③ 다중값 속성
2) 특성에 따른
① 기본 속성
② 설계 속성
③ 파생 속성
인스턴스(Instance) = 행
인스턴스는 데이터베이스에 저장된 데이터 내용의 전체 집합을 의미한다.

관계를 표기법은 관계명, 관계차수, 관계선택사양 세 가지로 이루어져 있다.
관계명(Membership)
관계명은 엔터티간 관계에 맺어진 형태 뜻한다.
관계가 시작되는 쪽을 "관계시작점(The Beginning)"이라 칭하며 받는쪽을 "관계끝점(The End)"라고 칭한다.
또한 관점에 따라 능동적(Active)이거나 수동적(Passive)으로 명명된다.

관계선택사양(Optionality)
관계에서 항상 참여하는지 아니면 참여할 수도 있는지를 나타내는 방법따라 필수참여 관계(Mandatory), 선택참여 관계(Optional)로 나뉜다.
고객과 주문 엔터티 관계를 살펴보자. 3명의 손님의 가게에 들어왔다. 하지만 2명의 손님만 주문을 시킬 경우도 있다.
주문은 꼭 손님에 의해서 수행이 되지만, 손님은 주문을 시킬수도 있고 안 시킬수도 있다.
이처럼 주문은 손님에의해 수행이 될수도 있고 안 될수도 있어서 선택참여 관계이고 주문된 항목은 꼭 손님에 의해서 수행이 되어져야 하므로 필수참여 관계이다.
선택참여관계일 경우 ERD에서 관계를 나타내는 선에서 선택참여하는 엔터티쪽에 원을 표시해야한다.

부모엔터티로부터 속성을 받았지만 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우가 있다. 이와 같은 경우를 비식별자 관계(Non-Identifying Relationship)라고 하며 다음의 네 가지 경우에 비식별자 관계에 의한 외부속성을 생성한다.
1) 자식엔터티에서 받은 속성이 반드시 필수가 아니어도 무방하기 때문에 부모 없는 자식이 생성될 수 있는 경우이다.
2) 엔터티별로 데이터의 생명주기(Life Cycle)를 다르게 관리할 경우이다. 예를 들어 부모엔터티에 인스턴스가 자식의 엔터티와 관계를 가지고 있었지만 자식만 남겨두고 먼저 소멸될 수 있는 경우가 이에 해당된다. 이에 대한 방안으로 물리데이터베이스 생성 시 Foreign Key를 연결하지 않는 임시적인 방법을 사용하기도 하지만 데이터 모델상에서 관계를 비식별자관계로 조정하는 것이 가장 좋은 방법이다.
3) 여러 개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데 각각의 엔터티가 별도의 관계를 가질 때이며 이에 해당된다.
자식에서 쓸 때 pk로 안쓰는 경우, 부모와 자식 둘의 생명주기가 다를 때 ,FK를 연결안하는 방법도 있긴하지만 애초에 비식별자로 두는게 젤 좋음, 하나의 엔터티가 여러 자식을 가질 때

해설 : 논리적 데이터 모델링 (논리적 시스템으로 구축하고자 하는 업무에 대해 Key, 속성, 관계 등을 정확하게 표현하며 재사용성이 높다.)


기본속성이란?
회원이 직접 입력한 정보 혹은 회원으로부터 수집되는 정보이고, 계산없이 그대로 저장되어야함.
파생속성이란?
이미 있는 정보들로 계산할 수 있는 값
설계속성이란?
사용자한테는 쓸모없지만 시스템 설계할 때 필요한 값
막간퀴즈
과연 회원번호(ID)는 세개 속성중 어떤것에 속할까요?
정답은 설계속성
회원으로부터 수집하는 것도 아니고 계산이 필요한 것도 아니야 맞지? 약간 헷갈릴 때는 소거법을 이용하자구~
성능을 고려한 데이터모델링 순서
데이터 모델링을 할 때 정규화를 정확하게 수행
데이터베이스 용량산정 수행
데이터베이스에 발생되는 트랜잭션 유형 파악
용량과 트랜잭션의 유형에 따라 반정규화 수행
이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 수행
성능관점에서 데이터 모델 검증
데이터 모델링에 있어서 주식별자를 도출하는 것은 중요한 작업이다. 주식별자를 도출하기 위한 기준은 아래와 같다.
온라인 트랜잭션 처리(OLTP)에는 해시조인 보다는 적은 데이터를 조인할 때 유리한 구조인 Nested Loop 방식이 유용하다.

