데이터 모델과 데이터 베이스에 관위자가 정의한 사항은 다음과 같다.
- 변별할 수 있는 사물 - Peter Chen (1976)
- DB 내에서 변별 가능한 객체 - C.J Date (1986)
- 정보를 저장할 수 있는 어떤 것 - James Martin (1989)
- 정보가 저장될 수 있는 사람, 장소 물건, 사건 그리고 개념 등 - Thomas Bruce (1992)
위 정의들의 공통점은...
- 명사에 해당된다.
사람, 장소, 물건, 사건, 개념 등...
- 업무상 관리가 필요한 관심사에 해당한다.
- 저장이 되기 위한 어떤 것 이다.
즉 엔터티란 "업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것(Thing)" 으로 설명할 수 있다.
- 물리적인 형태가 있고 안정적이며 지속적으로 활용된다.
- ex. 교수, 강의실, 학생 등...
-
개념 - Conceptual
엔터티- 물리적인 형태는 존재하지 않으나 관리해야 할 개념적 정보
- ex. 수업, 보험상품 등...
-
사건 - Event
엔터티- 업무 수행 과정에서 발생하며 비교적 발생량이 많다.
- ex. 수강신청, 주문, 입금 등...
: 업무에 원래 존재하는 정보로써 다른 엔터티와 관계에 의해 생성되지 않고 독립적으로 생성되는 엔터티
- 타 엔터티의 부모의 역할을 하게된다.
- 자신의 고유 식별자를 가지게 된다.
- 사원, 부서, 고객, 상품 자재 등...
: 그 업무에 있어서 중심적인 역할을 하는 엔터티
- 기본 엔터티로부터 발생된다.
- 계약, 사고, 예금원장, 청구, 주문, 매출 등...
- 두 개 이상의 부모엔터티로부터 발생된다.
- 자주 내용이 바뀌거나 데이터양이 증가된다.
- 주문목록, 사원변경이력 등...
- 스스로 생성될 수 있는지에 따라서 독립엔터티, 의존엔터티로 나뉜다.
관심 영역 - Business Boundary
에 따라 달라진다.- ex. 도서관리 시스템에 환자라는 엔터티가 존재할 일이 없다.
식별자 - Unique Identifier
에 의해 식별 가능해야 한다.- 유일 식별자 : 해당 엔터티 인스턴스만의 고유한 이름
식별자가 두 개 이상의 엔터티를 대변하면 잘못된 설계이다.
만약 회원 엔터티에서 이름을 식별자로 만들어버리면 세상에는 중복되는 이름이 있으므로 이는 잘못된 식별자라고 할 수 있다.
하나의 엔터티는 두 개 이상의 인스턴스를 포함한다.
- 업무 프로세서에 의해 CRUD가 발생해야 한다.
- CRUD가 발생하지 않음 → 부적절한 엔터티 도출, 또는 업무 누락
-
주식별자만 존재하고 일반 속성은 없는 경우도 바람직하지 않다.
관계가 없는 엔터티를 고립 엔터티 - Isolated Entity
라고 하는데 고립 엔터티
가 있을 경우 부적절한 엔터티 도출 및 관계 누락이 있는지 확인한다.
- 통계성 엔터티
읽기 효율성 또는 집계처리를 위한 엔터티
- 코드성 엔터티
ex. 에러 코드 관련 테이블(단순 참조만 할 때)
- 시스템 처리용 내부 엔터티
ex. 트랜잭션 로그 테이블 등...
- 엔터티 생성 의미대로, 실제 업무에서 사용하는 용어를 사용한다.
- 약어를 사용하지 않는다.
- 단수 명사를 사용한다.
- 이름이 동일한 엔터티가 중복으로 존재할 수 없다.
- 엔터티간 논리적 연관성
- 엔터티 내 인스턴스 간의 개별적 연관성
출처: https://youtu.be/RIe2LRc3oio?t=439
관계는 사건 엔터티의 유무로 판단하면 된다.
- 각 관계는 두 방향의 관계명을 가진다.
- 애매한 동사를 피한다.
- 현재형으로 표현한다.
- 각 관계에 참여할 수 있는 인스턴스의 수
-
필수 참여 - Mandatory Membership
-
선택 참여 - Optional Membership
관계의 양쪽이 Optional인 경우, 해당 관계는 잘못 설정되었을 가능성이 크다.
- 사물의 특징 또는 본질적인 성질
- 인스턴스에 대해 의미상 더 이상 분리되지 않는 최소의 데이터 단위
- 엔터티에 속한 인스턴스들의 성격을 구체적으로 나타낸다.
인스턴스 각각을 구분할 수 있는 기준 파악 → 이름 부여 → 속성화
- 각 엔터티는 둘 이상의 인스턴스를 가진다.
- 각 엔터티는 둘 이상의 속성을 가진다.
- 각 속성은 하나의 속성값을 가진다.
- 해당 업무에서 필요하고 관리해야 하는 정보
- 모든 속성은 주식별자에 함수적으로 종속되어야 한다.
- 하나의 속성은 한개의 값만 가져야 한다.
- 속성이 다중값을 가질경우 해당 속성을 별도의 엔터티로 분리한다.
- 협업에서 사용하는 이름을 부여
- 약어 사용은 가급적 금지
- 서술식 속성명을 피하고 명사적 속성명을 사용한다.
- 수식어와 소유격을 피한다.
- 속성의 이름은 가급적 전체 모델에서 유일하게 정의 (권장)
- 엔터티 내에 이름을 기재
- 각 속성의 가질 수 있는 값의 범위
ex. 학점: 0.0 ~ 4.5 사이의 실수
ex. 주소: 길이가 20자리 이내인 문자열 - 속성에 대한 데이터 타입, 크기, 제약사항을 지정한다.
- 기본 속성 - Basic Attribute
- 가장 일반적인 속성, 원래의 업무로부터 유래
- 설계 속성 - Designed Attribute
- 데이터 모델링을 위해 새로 만든 속성
ex. PK, Idx, 코드
- 파생 속성 - Derived Attribute
- 다른 속성들로 유도된 속성 (주로 통계 관련)
- 가급적 적게 정의하는 것이 좋다.
데이터의 중복과 성능에 영향을 미친다.
- ex. 과목점수평균
- Primary Key 속성 : 엔터티의 인스턴스를 구별할 수 있는 속성
- Foreign Key 속성 : 타 엔터티의 PK를 참조하는 속성
- 일반 속성
- 복합 속성 - Composite Attribute
- 단순 속성 - Simple Attribute
- 다중값 속성 - Multi-Valued Attribute
- 단일값 속성 - Single-Valued Attribute
출처: https://youtu.be/GQpbyjjPkK8?t=39
주로 주식별자, 내부식별자, 단일식별자, 본질식별자를 한번에 가지는 경우가 일반적이다.
엔터티 내에서 각 인스던스를 구문할 수 있는 것 중에서 대표성 갖는 것을 주 식별자로 가지고 탈락한 것을 보조식별자로 갖는다.
: 주식별자에 의해 엔터티 내의 각 인스턴스들을 모두 유일하게 구분할 수 있어야 한다.
ex. 각 회원들에 대해 ID가 개인별로 구요하게 부여됨
: 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.
ID만으로 유일성이 만족되면, (ID, 이름)은 주식별자가 아니다.
: 주식별자가 지정되면, 그 식별자의 값은 변하지 않아야 한다.
주식별자인 ID의 값이 변한다는 의미는 이전기록이 말소되고 새로운 기록이 발생했다는 의미다.
: 주식별자의 값은 null이 될 수 없다.
주식별자인 ID가 없는 회원은 있을 수 없다.
- 유일성을 갖는 속성 중 해당 업무에서 자주 이용되는 속성을 지정
- 이름으로 기술되는 것은 가능하면 주식별자로 지정하지 않는다
ex. 명칭, 내역과 같이 무조건 중복될 수 있으므로 code같은 것으로 주 식별자를 가진다.
- 복합식별자를 구성할 경우 너무 많은 속성이 포함되지 않아야 함
주식별자가 너무 많이 포함되면, 인조식별자를 통해 단순화한 주식별자 속성을 만든다. ex. 회원번호, 접수번호 등...
출처: https://youtu.be/GQpbyjjPkK8?t=1558
부모 엔터티의 식별자 A를 자식 엔터티의 외부식별자 A(FK)로 포함할 때
위 사진에서 A(FK)가 주식별자에 포함된 경우를 식별자 관계라고 한다.
- 실선으로 나타낸다.
- 과목코드, 수강년도, 학번은 무조건 값을 가져야한다.
식별자는 null을 가지면 안된다.
위 사진에서 A(FK)가 비 식별자 속성으로 포함된 경우를 비식별자 관계라고 한다.
- 부모 엔터티와 자식 엔터티의 관계가 약한경우
부모 엔터티 없이 자식 엔터티가 생성 가능
- 점선으로 나타낸다.
출처: https://youtu.be/GQpbyjjPkK8?t=1834
- 부모의 주식별자가 자식엔터티의 주식별자로 상속한다.
- 반드시 부모 엔터티가 생성되어야 자식 엔터티가 생성될 수 있다.
- 해당 속성이 Not Null 이므로 → weak entity에 해당된다.
- 자식 엔터티의 주식별자가 해당 속성만으로 구성되는 경우 → 1 : 1 관계
사번번호(FK)는 주식별자, 외부식별자, 단일식별자 에 해당된다.
- 자식 엔터티의 주식별자가 해당 속성 + a 로 구성되는 경우 → 1 : N 관계
사원번호(FK)는 주식별자, 외부식별자, 복합식별자 에 해당된다.
weak entity란?
자신 혼자 식별자를 만들 수 없고 다른 엔터티의 도움을 받아 생성할 수 있는 엔터티를 의미한다.
- 주식별자 속성이 지속적으로 증가한다.
- 조회시 JOIN횟수가 증가한다.
- 부모 엔터티와 자식 엔터티의 관계의 강도가 약한 경우
- 자식 엔터티의 독립적인 주식별자 설정이 필요한 경우
- PK 속성의 단순화가 필요한 경우
SQL복잡도 증가로 인한 개발 생산성이 저하되는 현상을 방지한다.
출처: https://youtu.be/GQpbyjjPkK8?t=3047
이전글: 1. 데이터 모델링의 이해 다음글: 3. 데이터 모델과 성능