[SQLD] 데이터 모델링의 이해 - 엔터티, 속성 요약

 

1. 엔터티의 개념

엔터티는 데이터 모델링에서 핵심적인 개념으로, 실체 또는 객체로 번역될 수 있으며, 실무에서는 주로 '엔터티'라는 용어를 사용한다. 다양한 정의가 있지만, 일반적으로 엔터티는 데이터베이스 내에서 구별 가능한 객체로서 사람, 장소, 물건, 사건, 개념 등과 같은 명사로 표현된다. 엔터티는 업무상 관리가 필요한 관심사에 해당하며, 정보를 저장하기 위한 것이다.

 

엔터티는 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것이다. 엔터티는 동질성을 지닌 인스턴스들의 집합이며, 각각의 인스턴스는 엔터티의 구체적인 예를 나타낸다. 예를 들어, ‘학생’ 엔터티는 학번, 이름, 이수학점 등의 속성을 가지며, 이러한 속성은 엔터티 인스턴스의 특성을 설명한다.

 

1. 엔터티는 사람, 장소, 물건, 사건, 개념 등의 명사에 해당한다.
2. 엔터티는 저장이 되기 위한 어떤 것(Thing)이다.
3. 엔터티는 동질성을 지닌 인스턴스들의 집합이며, 인스턴스는 엔터티의 하나의 값에 해당한다.
엔터티는 그 집합에 속하는 개체들의 특성을 설명할 수 있는 속성(Attribute)을 갖는다.

2.  엔터티의 특징

업무에서 필요로 하는 정보여야 한다

반드시 시스템을 구축하고자 하는 업무에서 필요로 하고 관리하고자 하는 정보여야 한다. 예를 들어 "환자" 라는 엔터티는 의료 시스템을 개발하는 병원에서는 반드시 필요한 엔터티이지만, 일반 회사에서 직원들이 병에 걸려 업무에 지장을 준다 하더라도 이 정보를 그 회사의 정보로서 활용하지 않으니 각자 구축하고자 하는 시스템에서 필요로 하고, 관리되어야 하는 정보를 잘 골라야 한다.

 

식별이 가능해야 한다

식별자(Unique Identifier)에 의해 식별이 가능해야 한다. 유일한 식별자는 그 엔터티의 인스턴스만의 고유한 이름을 뜻한다. 예를 들어서 사원 엔터티의 유일한 식별자(Unique Identifier)는 "사번" 이 될 수 있다. "이름"의 경우 동명이인이 존재할 수 있으니 유일한 식별자로 사용할 수 없다.

 

인스턴스의 집합이어야 한다

엔터티는 영속적으로 존재하는 인스턴스의 집합이 되어야 한다. 특히 인스턴스가 "한 개" 가 아니라, "두 개 이상" 집합되어야 한다.  두 개 이상이라는 개념은 엔터티 뿐만 아니라 엔터티간의 관계, 프로세스와의 관계 등 업무를 분석하고 설계하는 동안 설계자가 모든 업무에 대입해보고 검증해 보아야 하는 중요한 개념으로 볼 수 있다. 때문에 하나의 엔터티는 여러 개의 인스턴스를 포함한다.

 

업무프로세스에 의해 이용된다

비지니스 프로세스가 그 엔터티를 반드시 이용해야 한다. 첫 번째 정의에서 언급한 "업무에서 반드시 필요하다고 생각"하여 엔터티로 선정했는데, 업무프로세스에 의해 전혀 이용이 되지 않으면 안된다.

 

속성이 포함되어야 한다

엔터티에는 반드시 속성(Attributes)이 포함되어야 한다. 속성을 포함하지 않고 엔터티의 이름만 가지고 있는 경우 관계 생략 또는 업무 분석이 잘 안되었음을 의미한다. 주식별자만 존재하며 일반 속성이 전혀 없는 경우도 마찬가지로 적절한 엔터티라고 할 수 없다.

 

다른 엔터티와의 관계의 존재

엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 존재해야 한다. 단, 관계를 생략하여 표현해야 하는 경우도 있다.

1. 통계를 위한 엔터티의 경우는 업무진행 엔터티로부터 통계업무만(Read Only)을 위해 별도로 엔 터티를 다시 정의하게 되므로 엔터티간의 관계가 생략되는 경우에 해당한다.

2. 코드를 위한 엔터티의 경우 너무 많은 엔터티와 엔터티간의 관계 설정으로 인해 데이터 모델의 읽기효율성(Readability)이 저하되어 도저히 모델링 작업을 진행할 수 없게 된다. 또한 코드성 엔터티는 물리적으로 테이블과 프로그램 구현 이후에도 외부키에 의한 참조무결성을 체크하기 위한 규 칙을 데이터베이스 기능에 맡기지 않는 경우가 대부분이기 때문에 논리적으로나 물리적으로 관계를 설정할 이유가 없다.

3. 시스템 처리시 내부 필요에 의한 엔터티(예를 들어, 트랜잭션 로그 테이블 등)의 경우 트랜잭션이 업무적으로 연관된 테이블과 관계 설정이 필요하지만 이 역시 업무적인 필요가 아니고 시스템 내부 적인 필요에 의해 생성된 엔터티이므로 관계를 생략하게 된다.

3.  엔터티의 분류

엔터티는 실체의 유무에 따라 분류되거나 발생시점에 따라 분류될 수 있다.

 

유무형에 따른 분류

유무형에 따라 유형, 개념, 사건 엔터티루 구분된다.

 

유형엔터티(Tangible Entity)

물리적 형태가 있고 안정적이며 지속적으로 활용되는 언터티로서, 업무로부터 엔터티를 구분하기 가장 용이함.

예) 사원, 물품, 강사 등

 

개념엔터티(Conceptual Entity)

물리적 형태는 존재하지 않고 관리해야 할 개념적 정보로만 구분이 되는 엔터티이다.

예) 조직, 보험상품 등

 

사건엔터티(Event Entity)

업무를 수행함에 따라 발생되는 엔터티로서 비교적 발생량이 많고 각종 통계자료에 이용될 수 있다.

예) 주문, 청구, 미납 등

 

발생시점에 따른 분류

발생 시점에 따라 기본/키, 중심, 행위 엔터티로 구분할 수 있다.

 

기본/키엔터티(Fundamental/Key Entity)

업무에 원래 존재하는 정보로서 다른 엔터티와 관계에 의해 생성되지 않고 독립적으로 생성이 가능하며 타 엔터티의 부모 역할을 한다.

예) 사원, 부서, 고객, 상품, 자재 등

 

중심엔터티(Main Entity)

기본엔터티로부터 발생되고, 그 업무에 있어서 중심적인 역할을 하는 엔터티이다. 데이터의 양이 많고, 다른 엔터티와의 관계를 통해 많은 행위엔터티를 생성한다.

예) 계약, 사고, 청구, 주문, 매출 등

 

행위엔터티(Active Entity)

두 개 이상의 부모 엔터티로부터 발생되며 내용이 자주 바뀌거나 데이터량이 증가된다.

예) 주문목록, 사원정보 변경이력 등


4.  엔터티의 명명규칙

1. 가능한 선에서 현업에서 사용하는 용어를 사용한다.

2. 가능한 선에서 약어는 사용하지 않는다.

3. 단수명사를 사용한다.

4. 모든 엔터티에서 유일하게 부여되는 이름이어야 한다.

5. 엔터티 생성 의미대로 이름을 부여한다.


5.  속성의 개념

어떤 사물 또는 개념에 대해서 없어서는 안 될 징표의 전부를 뜻한다. 이를 데이터 모델링 관점에서 정의하자면 "업무에서 필요로 하는, 인스턴스로 관리하고자 하는, 그 의미상 더 이상 분리되지 않는 최소의 데이터 단위"로 정의한다. 예를 들어 "강사" 엔터티의 속성으로는 "이름,주소,생년월일" 등이 될 수 있다.

업무에서 필요로 한다.
의미상 더 이상 분리되지 않는다.
엔터티를 설명하고 인스턴스의 구성요소가 된다.

 

생년월일은 생년,생월,생일 로 구분할 수 있지만 관리목적에 따라 "생년월일" 하나의 속성(DET)으로 구분할 수 있다. 서로 관련이 없는 이름,주소를 합쳐서 하나의 속성 "이름주소"로 정의한다면 두 개의 의미를 갖기 때문에 기본속성으로 성립하지 않는다.


6. 엔터티, 인스턴스,속성,속성값에 대한 내용 및 표기법

엔터티,인스턴스,속성,속성값의 관계

엔터티에는 두 개 이상의 인스턴스가 존재하고 각각의 엔터티는 속성정보 두 개 이상을 갖는다. 각각의 인스턴스는 속성의 집합이고, 하나의 속성은 하나의 인스턴스에만 존재할 수 있다. 속성은 관계로 기술될 수 없고 자신이 속성을 가질 수도 없다. 또한 엔터티 내에 있는 하나의 인스턴스는 각각의 속성들에 대해 한 개의 속성값만을 가질 수 있따.

 

예를 들어 사원의 이름은 "홍길동", 주소는 "서울시 강남구", 전화번호 "123-4567",직책은 "대리"라고 가정해보자. "이름,주소,전화번호,직책"은 "속성"이다. "홍길동,서울시 강남구,123-456,대리"는 "속성값" 이다. 쉽게 말해 속성값은 각각의 엔터티가 가지는 속성들의 구체적인 내용이라 할 수 있다.

1. 한 개의 엔터티는 두 개 이상의 인스턴스의 집합이어야 한다.
2. 한 개의 엔터티는 두 개 이상의 속성을 갖는다.
3. 한 개의 속성은 한 개의 속성값을 갖는다.

 

결론으로 사원(엔터티)에는 홍길동이라는 사람(인스턴스)이  있고, 홍길동이란 사람의 이름,주소,생년월일(속성)이 있으며 홍길동,서울시 강남구,1993년 12월 13일(속성값)이 존재한다.

 

속성의 표기, 특징

표기법은 아래와 같다. 대중적으로 많이 사용하는 IE,Barker 표기법으로 알아보자.

 

속성은 아래와 같은 특징을 가지고 있다. 만약 속성이 다음 성질을 만족하지 못하면 적절하지 않은 속성이다.

1. 엔터티와 마찬가지로 반드시 해당 업무에 필요하고 관리하고자 하는 정보여야 한다. 
2. 정규화 이론에 근간하여 정해진 주식별자에 함수적 종속성을 가져야 한다.
3. 하나의 속성에는 한 개의 값만 갖는다.
4. 하나의 속성에 여려 개의 값이 있는 다중값일 경우 별도의 엔터티를 이용하여 분리한다.

7. 속성의 분류 및 명명규칙

속성의 특성에 따른 분류와 엔터티 구성방식에 따른 분류 2가지로 이야기 할 수 있다.

속성의 특성에 따른 분류

기본속성(Basic Attribute)

이는 업무 분석을 통해 직접 정의된 속성으로, 엔터티에 가장 일반적이고 널리 사용되는 속성이다. 예를 들어, 일련번호나 코드성 데이터 같은 엔터티를 식별하기 위한 데이터가 여기에 해당한다. 단, 업무상 이미 코드로 정의된 속성은 기본속성이 아닐 수 있다.

 

설계속성(Designed Attribute)

이는 업무상 필요한 데이터 이외에 데이터 모델링 과정에서 새로 만들거나 변형하여 정의하는 속성다.
예를 들어, 업무상 필요에 따라 변형된 코드성 속성이나, 유일한 식별자를 부여하기 위해 모델 상에서 새로 정의하는 일련번호 등이 이에 해당한다.

 

파생속성(Derived Attribute)

이는 다른 속성들로부터 계산되거나 변형되어 생성되는 속성이다. 예를 들면, 총점이나 평균점수와 같이 다른 속성의 값에 기반하여 계산되는 속성이다. 파생속성은 데이터 정합성을 유지하기 위해 주의가 필요하며, 가급적 적게 정의하는 것이 좋다.

 

엔터티 구성방식에 따른 분류

기본키(PK, Primary Key) 속성

엔터티를 구별할 수 있는 고유한 속성이다. 예를 들어, 학생 엔터티에서 학번이 기본키 속성이 될 수 있다.


외래키(FK, Foreign Key) 속성

다른 엔터티와의 관계를 나타내는 속성이다. 예를 들어, 학생이 수강하는 강의의 강의번호는 학생 엔터티에서 외래키 속성이 될 수 있다.


일반속성

기본키나 외래키에 포함되지 않는 다른 모든 속성을 뜻한다. 예를 들어, 학생의 이름, 주소, 전화번호 등이 일반속성이 된다.

 

속성 명명규칙

속성명을 부여하는 원칙은 아래와 같다.

1. 해당 업무에서 사용하는 이름을 부여한다.
2. 서술식 속성명은 사용하지 않는다.
3. 되도록 약어 사용은 삼가한다.
4. 전체 데이터 모델에서 유일성을 확보하는 것이 좋다.

8. 도메인(Domain)

데이터 모델링에서는 각 속성이 가질 수 있는 값의 범위를 도메인(Domain) 이라고 한다. 엔터티 내에서 속성에 대한 데이터 타입 및 크기, 그리고 기타 제약사항을 지정하는 것이라 할 수 있다.