1. 엔터티(Entity)
1-1. 엔터티(Entity)란?
데이터 베이스의 개념 중에서도 데이터 모델에 대해 공부를 시작할 때 제일 먼저 나오는 개념이 '엔터티(Entity)' 이다.
엔터티는 쉽게 말해 실체, 객체라고 생각할 수 있다.
일반적으로 엔터티를 정의하는 개념들을 정리하여 나타내면 다음과 같이 볼 수 있다.
- 엔터티는 사람, 장소, 물건, 사건, 개념 등과 같은 명사에 해당된다.
- 엔터티는 업무상 관리가 필요한 것에 해당된다.
- 엔터티는 저장 되기 위한 어떤 것(Thing)에 해당된다.
예를 들어 학교라는 곳에선 과목이라는 엔터티가 존재할 수 있다.
그리고 엔터티는 인스턴스의 집합으로 나타나게 됩니다. 즉 과목이라는 엔터티가 있다면, 수학, 영어, 국어와 같은 인스턴스가 과목이라는 엔터티에 포함되는 것이다.
이때 엔터티는 자신이 가지고 있는 인스턴스를 설명할 수 있는, 나타낼 수 있는 속성(Attribute)를 가지게 된다. 앞에서 이야기한 수학, 영어, 국어와 같은 인스턴스가 존재한다면 이들은 과목이라는 엔터티에서 이름이라는 속성을 가지고 있는 것이죠. 속성에 대해서는 엔터티를 알아본 후에 보다 자세히 알아보자.
1-2. 엔터티의 특징
엔터티는 일반적으로 다음과 같은 특징을 가지고 있다. 물론 아래와 같은 특징을 지니지 않은 경우도 있을 수 있지만 일반적으로 아래의 특징을 지니지 않으면 적절하지 않은 엔터티일 확률이 높다.
- 반드시 엔터티가 사용되는 곳의 업무에서 필요하며 관리하고자 하는 정보
- 엔터티가 포함하는 인스턴스에 대해 유일한 식별자로 식별이 가능해야 함
- 엔터티는 지속적으로 존재하는 두개 이상의 인스턴스들의 조합이어야 함
- 엔터티는 반드시 속성을 지녀야 함
- 엔터티는 업무 프로세스에 의해서 이용되어야 함
- 엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 함
1-3. 엔터티의 분류
엔터티는 각각의 성격에 의해, 실체유형(유무형)에 따라 구분하거나, 엔터티의 발생시점에 의해 분류될 수 있다.
1-3-1. 실체유형(유무형)에 따른 분류
- 유형 엔터티(Tangible Entity)
물리적인 형태가 존재하는 엔터티이며 안정적이고 지속적으로 활용되는 엔터티이다.
- 개념 엔터티(Conceptual Entity)
물리적인 형태는 존재하지 않고 관리해야 할 개념적인 정보로 구분이 되는 엔터티이다.
- 사건 엔터티(Event Entity)
업무를 수행함에 따라 발생되는 엔터티이다.
1-3-2. 발생시점에 따른 분류.
- 기본/키 엔터티(Fundamental/Key Entity)
해당 업무에 원래 존재하는 정보로 다른 엔터티와의 관계에 의해 발생 또는 생성되지 않고 독립적으로 존재하는 엔터티이다. 이는 독립적으로 생성이 가능하며 다른 엔터티의 부모역할을 한다.
- 중심 엔터티(Main Entity)
기본 엔터티로 부터 발생되며 업무에 있어서 중심적인 역할을 한다. 일반적으로 데이터 양이 많으며 다른 엔터티와의 관계를 통해 행위 엔터티를 생성한다.
- 행위 엔터티(Active Entity)
두 개이상의 부모엔터티로 부터 주로 발생되고, 자주 엔터티의 내용이 바뀌거나 데이터양이 증감한다. 분석초기 단계보다는 상세 설계단계나 프로세스와 상관모델링을 진행하면서 도출될 수 있다.
1-4. 엔터티의 명명(Naming)
엔터티의 이름을 정하는 데에 있어서는 다음과 같은 원칙을 지켜야 한다.
- 가능하면 현업업무에서 사용하는 용어를 사용한다.
- 가능하면 약어를 사용하지 않는다.
- 단수 명사를 사용한다.
- 모든 엔터티를 통틀어서 유일한 이름을 가져야 한다.
- 엔터티의 생성의미대로 이름을 부여한다.
2. 속성(Attribute)
2-1. 속성(Attribute)란?
속성의 사전적 의미는, 어떤 사물의 성질이나 특징, 그것이 없다면 실체를 생각 또는 표현할 수 없는 것으로 정의할 수 있다.
데이터 모델의 관점에서 속성은, 인스턴스로 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위로 정의할 수 있다.
즉, 속성이란 의미상 더 이상 분리되지 않으며, 엔터티를 설명하는 요소이며 인스턴스의 구성요소이다.
2-2. 속성의 특징
속성 또한 엔터티와 같이 다음과 같은 성질을 가지고 있으며, 이러한 성질을 지니지 않는다면 적절하지 못한 속성일 확률이 높다.
- 엔터티와 마찬가지로 반드시 해당 업무에서 필요하고 관리하고자 하는 정보이어야 한다.
- 정규화 이론에 근간하여 정해진 주 식별자에 함수적 종속성을 가져야 한다.
쉽게 말해, 다양하게 존재하는 인스턴스들에 대해 유일하게 구별할 수 있는 주식별자를 통해서 식별될 수 있어야 한다.
- 하나의 속성에는 단 한개의 값만을 가진다.
2-3. 엔터티, 인스턴스, 속성, 속성값의 관계
엔터티에는 두 개 이상의 인스턴스가 존재한다. 그리고 각각의 엔터티에는 고유의 성격을 표현하는 속성정보를 두 개 이상 갖는다.
분석단계에서는 엔터티 내에 존재하는 여러 개의 인스턴스가 가지는 동일한 성격을 파악하여 이에 이름을 부여하여 엔터티의 속성으로 결정하는 작업이 필요하다. 또한 하나의 속성은 하나의 인스턴스에만 존재할 수 있으며, 속성은 스스로가 또 다른 속성을 가질 수 없고 속성에 대해 어떠한 관계로 기술할 수 없다. 그리고 각 인스턴스는 하나의 속성에 대해 하나의 속성 값만 가질 수 있다.
이를 정리하면 다음과 같다.
- 한 개의 엔터티는 두 개 이상의 인스턴스의 집합이다.
- 한 개의 엔터티는 두 개 이상의 속성을 가진다.
- 한 개의 속성은 한 개의 속성 값을 가진다.
2-4. 속성의 분류
2-4-1. 속성의 특성에 따른 분류
- 기본 속성(Basic Attribute)
업무 분석을 통해 바로 정의한 속성을 기본속성이라고 한다. 엔터티에 있어서 가장 일반적이고 많은 속성을 차지한다. 하지만 코드성 데이터, 엔터티를 식별하기 위해 부여된 일련번호, 그리고 다른 속성을 계산하거나 영향을 받아 생성된 속성등은 기본속성이 아니다.
- 설계 속성(Designed Attribute)
업무상 필요한 데이터 이외에 데이터 모델링을 위해, 업무를 규칙화하기 위해 새로 만들어지거나 변형된 속성을 설계 속성이라고 한다. 일반적으로 코드성 속성은 기존의 속성을 업무상 필요에 의해 변형하여 만든 설계 속성이다. 또한 일련번호와 같은 속성 또한 단일한 식별자를 부여하기 위해 모델 상에서 새롭게 정의하는 설계속성이다.
- 파생 속성(Derived Attribute)
다른 속성에 영향을 받아 발생하는 속성은 파생 속성이다. 일반적으로 계산된 값들이 이에 해당된다. 파생 속성은 가급적 적게 정의하는 것이 좋다.
2-4-2. 엔터티 구성방식에 따른 분류
- PK(Primary Key) 속성
엔터티를 유일하게 구분할 수 있는 속성을 PK 속성이라고 한다.
- FK(Foreign Key) 속성
다른 엔터티와의 관계에 있어서 포함된 속성을 FK 속성이라고 한다.
- 일반 속성
엔터티에 포함되어 있고, PK 또는 FK에 포함되지 않는 속성을 일반 속성이라고 한다.
2-4-3. 세부 의미 유무에 따른 분류
- 단순 속성(Simple Attibute)
나이, 성별과 같은 데이터는 더 이상 다른 속성들로 구성될 수 없는 단순한 속성이므로 단순 속성이라고 한다.
- 복합 속성(Composite Attribute)
주소 속성에 대해서는 시, 구, 동, 번지와 같이 여러 세부 속성들로 구성될 수 있는데 이때 주소 속성과 같은 것들을 복합 속성이라고 한다.
2-5. 도메인(Domain)
각 속성은 무한정적인 값을 갖는 것이 아니라 그 범위가 지정된다. 이 때 속성의 값이 가질 수 있는 범위를 그 속성의 도메인이라고 한다. 따라서 속성 값이 가질 수 있는 데이터 타입과 크기 그리고 추가적인 제약사항이라고 생각할 수 있다.
2-6. 속성의 명명(Naming)
속성에 대해 이름을 부여하는데에 있어서는 아래와 같은 원칙이 존재한다.
- 해당 업무에서 사용하는 이름을 부여한다.
- 서술식 속성명은 사용하지 않는다.
- 약어사용은 가급적 제한한다.
- 전체 데이터 모델에서 유일성을 확보하는 것이 좋다.
'프로그래밍 언어 > DB' 카테고리의 다른 글
Postgresql에서 5432 port가 열려있냐는 문제(Ubuntu 기준) (0) | 2021.06.30 |
---|---|
서버에서 postgresql 접속 및 데이터베이스, 스키마, 테이블 조회 (0) | 2021.06.18 |
postgresql - relation "hibernate_sequence" does not exist (0) | 2021.05.14 |
Column count of mysql.proc is wrong. Expected 21, found 20. The table is probably corrupted (0) | 2021.04.16 |
NoSQL (0) | 2021.03.12 |