01/17
오늘도 돌아온 밑빠진 개발자에 물 붓기 시간. 전공수업 같은 것을 들어본 적이 없어서 빠진 독이 여기저기 많은데... 열심히 채워야겠지?? 오늘 알아볼 것은 데이터베이스의 Entity 이다.
Entity 란
Entity 단어의 뜻은 실제, 독립체 라는 뜻으로, 데이터 모델링에서 사용되는 객체와 같은 역할을 한다고 생각하면 된다고 한다. 정보를 저장하고 관리하기 위한 어떤 '것'.
들어가기 전에 먼저 용어정리를 해보면,
엔티티(Entity) : 엔티티는 DB 의 테이블 의 역할.
인스턴스(Instance) : 인스턴스는 DB 에 저장된 데이터 내용의 전체 집합을 의미한다. 모든 데이터.
속성(Attribute) : 속성은 인스턴스의 구성요소로, 더 이상 분리되지 않는 단위이다. 각각의 데이터를 저장 가능.
Entity 의 특징
도출한 엔티티가 아래의 특징들을 만족하지 못한다면, 부적절한 엔티티일 수 있으며 엔티티 도출 프로세스의 재검토를 고려해야 한다고 한다. 약간 효율적인 구조 설계와 같은 느낌인가.. 싶은??
유일한 식별자
어떤 엔티티에 의미를 가지는 인스턴스가 식별자에 의해 한 개씩만 존재해야 한다. 다시 말해, 인스턴스 각각을 구분하기 위한 유일한 식별자가 존재해야 한다는 것.
예시를 들면, '회사의 직원' 이라는 엔티티에서 직원 각각을 구분할 수 있는 방법으로 이름을 생각할 수 있다. 하지만 동명이인의 경우가 있거나 할 수 있으므로 이는 유일한 식별자가 될 수 없고, 따라서 사원번호 같은 개별 인스턴스를 구분할 수 있는 것이 존재해야 한다.
인스턴스의 집합
영속적으로 존재하는 인스턴스의 집합이어야 한다... 라고 하는데, 즉 엔티티에 속하는 인스턴스가 두 개 이상이어야 한다. 한 개 밖에 없는 집합은 집합이 아니라서, 엔티티로서 존재해야 하는가 하는 적절성에 부합하지 않는듯. 테이블을 뺄 건데 항목이 하나밖에 없으면 필요 없지 않나..라고 생각하니 바로 납득 되었다.
필요 / 사용 여부
비슷한 듯 살짝 다른데, 정리해보면
엔티티는 실제로 필요로 하고, 관리하고자 하는 정보여야 한다. 위에서 회사 예시를 들었기 때문에 이어서 해 보자면, 사원이라는 엔티티는 회사에 있어 반드시 필요한 엔티티이지만, 날씨?? 와 같은 것은 필요 없는 엔티티이다. 회사가 기상청 혹은 관련 직종이 아니라면, 굳이 저장하고 관리할 이유가 없는 엔티티가 되는 것이다.
또한, 프로세스에서 사용되어야 한다. 필요하다고 생각해서 만들었지만 실제로 사용되지 않는다면, 분석 및 프로세스 도출이 적절히 이루어지지 않은 것이다. 고립된 엔티티가 존재한다면, 엔티티를 제거하거나, 누락된 프로세스가 존재하는지 점검하고 해당 프로세스를 추가해야 한다.
속성 포함 여부
속성을 포함하지 않는 엔티티는 있어도 의미가 없다. 관계가 생략되어 있거나, 분석 미진으로 인하여 속성 정보가 누락되는 경우라던가, 주 식별자는 존재하는데 일반속성은 전혀 없는 경우도 적절한 엔티티라고 할 수 없다.
예외적으로 관계(Associative) 엔티티의 경우에는 주 식별자 속성만 가지고 있어도 엔티티로 인정할 수 있다.
관계 존재 여부
엔티티는 다른 엔티티와 최소 한 개 이상의 관계가 존재해야 한다. 엔티티가 도출되었다는 것은 기본적으로 존재적, 행위적 연관성을 가지고 있기 때문. 관계가 없다면, 마찬가지로 잘못된 엔티티이거나 관계가 누락되었을 경우가 크다.
Entity 의 분류
엔티티는 존재 여부와 같은 실체 유형으로 분류하거나, 엔티티로 구분이 되는 발생 시점에 따라 분류할 수 있다.
유무형에 따른 분류
물리적 형태가 존재하는가??
유형 Entity
분석 과정에서 도출되며 지속적으로 사용되는 엔티티.
e.g. 고객, 강사, 사원
개념 Entity
물리적 형태가 없이, 개념적으로 사용되는 엔티티.
e.g. 거래소 종목, 코스닥 종목, 보험 상품
사건 Entity
프로세스를 실행하면서 생성되는 엔티티.
e.g. 주문, 체결, 취소주문, 수수료 청구
발생 시점에 따른 분류
언제 발생되는가??
기본(Basic) Entity
키 엔티티 라고도 한다. 다른 엔티티로부터 영향을 받지 않고 독립적으로 생성되는 엔티티.
e.g. 고객, 상품, 부서
중심(Main) Entity
기본 엔티티와 행위 엔티티 중간에 있는, 기본 엔티티로부터 발생되고, 행위 엔티티를 생성하는 것을 말한다.
e.g. 계좌, 주문, 취소, 체결
행위(Active) Entity
2개 이상의 엔티티로부터 발생한다.
e.g 주문 이력, 체결 이력