데이터 모델링의 이해를 위해 데이터 모델, 엔티티, 속성, 관계, 식별자에 대해서 이야기해봅시다.
데이터 모델링의 이해와 정리
데이터 모델링(Data Modeling)은 현실 세계의 데이터를 데이터 관점에서 접근하여 비즈니스와 업무의 내용들을 데이터 화 시키고 데이터 저장과 활용 체계를 구조화하는 것입니다. 데이터 모델링은 데이터 베이스를 구축하기 위해서 분석과 설계를 진행하는 과정입니다. 데이터베이스 모델링은 현실 세계를 단순화하여 데이터로 표현하는 기법입니다.
데이터 모델링의 특징에는 추상화, 단순화, 명확화 3가지가 있습니다. 추상화는 현실을 일정한 형식에 맞춰 간략하게 표현하는 것입니다. 단순화는 복잡한 현실 세계를 정해진 표기법으로 단순하게 쉽게 표현하여 누구나 이해할 수 있도록 하는 것입니다. 명확성은 불분명함을 배제하고 명확하게 한 가지로 해석될 수 있도록 기술하는 것입니다.
[데이터 모델링의 특징]
구분 | 내용 |
1 | 추상화 |
2 | 단순화 |
3 | 명확화 |
데이터 모델링에서의 유의점은 중복, 비유연성, 비일관성이 있습니다.
중복은 데이터베이스가 여러 장소에서 같은 정보를 저장하지 않도록 해야 한다는 것입니다. 즉, 같은 데이터가 여러 엔티티에 중복해서 저장되는 것은 지양해야 하는 것입니다.
비유연성은 데이터 정의를 프로세스와 분리하여 데이터나 프로세스의 변화가 데이터베이스에 큰 영향을 주어서는 안된다는 점입니다. 데이터 모델의 설계에 따라서 애플리케이션의 작은 변화가 데이터 모델을 수시로 바꾸도록 만드는 상황을 줄 수 있습니다.
이러한 상황이 발생하게 되면 시스템을 유지 보수하는 관점에서 매우 어려워지기 때문에 애플리케이션의 작은 변화가 수시로 데이터 모델에 수시로 영향을 줘서 데이터 모델을 수시로 변경해야 하는 구조는 바람직하지 않습니다. 즉, 데이터 모델과 프로세스는 분리하여 유연성을 갖출 필요가 있습니다.
비일관성은 데이터와 데이터 사이의 연관 관계에 대해서 명확하게 정의해야 한다는 점입니다. 데이터의 중복이 없는 경우에도 비일관성이 발생할 수 있는데 이는 다른 데이터와의 연관성을 고려하지 않고 일부 데이터만 변경하도록 설계하는 경우 발생할 수 있습니다. 데이터 모델링을 할 대는 데이터 간의 연관 관계에 대해서 명확하게 정의하는 것이 중요합니다.
[데이터 모델링의 유의점]
구분 | 내용 |
1 | 중복 |
2 | 비유연성 |
3 | 비일관성 |
데이터 모델링의 단계에는 개념적 모델링, 논리적 모델링, 물리적 모델링 3가지 단계가 있습니다.
개념적 모델링은 추상화 수준이 매우 높고 업무 중심적인 포괄적인 수준의 모델링입니다. 엔티티와 속성을 도출해서 개념적 ERD(Entity Relation Diagram)를 만드는 단계입니다. 개념적 모델링은 주로 전사적 관점에서 데이터 모델링이 수행됩니다. 추상화 레벨이 가장 높은 모델링 단계입니다. 개념적 모델링 단계에서는 업무 중심적이면서 포괄적인 수준의 모델링이 행해집니다. 개념적 모델링을 개념 모델링 또는 개념적 데이터 모델링(Conceptual Data Modeling)이라고 부릅니다.
논리적 모델링은 키, 속성, 관계 등을 정확하게 표현하는 단계입니다. 논리적 모델링에서는정규화를 통해 재사용성을 높이게 됩니다. 논리적 모델링은 재 사용성이 가장 높은 모델링 단계입니다. 데이터 베이스 모델에 대한 키(Key), 속성(Attribute), 관계(Relation)를 모두 표현하는 단계입니다. 논리적 모델링은 논리 모델 도는 논리적 데이터 모델링(Logical Data Modeling)이라고 부릅니다.
물리적 모델링은 실제 시스템의 데이터베이스(DataBase)에 적용할 수 있는 수준으로 모델링 하는 단계입니다. 실제 성능과 저장과 같이 물리적인 성격의 설계 단계입니다. 물리적 모델링 단계에서는 실제 데이터베이스에 구현할 수 있도록 성능이나 가용성과 같은 물리적인 성격을 고려해서 데이터 모델링을 하는 단계인 것입니다.
[모델링의 3가지 단계]
구분 | 내용 |
1 | 개념적 모델링 |
2 | 논리적 모델링 |
3 | 물리적 모델링 |
데이터 모델링의 관점에서는 데이터 관점, 프로세스 관점, 데이터와 프로세스의 상관 관점 3가지로 구분할 수 있습니다.
데이터 관점은 비즈니스와 업무가 어떤 데이터들과 관련이 있는지를 확인하고 데이터와 데이터 간의 관계는 무엇인지에 대해서 모델링하는 관점입니다. 데이터 관점은 데이터 위주의 모델링이라고 볼 수 있습니다. 업무적으로 어떤 데이터들이 업무와 얽혀 있는지를 확인하고 데이터 간에는 어떤 관계들이 있는지에 대해서 확인하고 모델링 하게 됩니다.
프로세스 관점은 업무가 실제로 하고 있는 일은 무엇인지를 확인하고 무엇을 해야하는지를 모델링하는 관점입니다. 프로세스 관점은 프로세스 위주의 모델링이라고 볼 수 있습니다. 프로세스 관점은 해당 대상이 되는 업무가 실제로 처리하고 있는 것은 무엇인지를 확인하고 앞으로 처리해야 하는 일은 무엇인지를 호가인하면서 모델링하는 관점입니다.
데이터와 프로세스의 상관 관점은 데이터와 프로세스의 관계를 위주로 모델링을 하는 관점입니다. 업무가 처리하는 일의 방법에 따라서 데이터는 어떤 영향을 받고 있는지를 모델링 하게 됩니다.
[데이터 모델링의 3가지 관점]
구분 | 내용 |
1 | 데이터 관점 |
2 | 프로세스 관점 |
3 | 데이터와 프로세스의 상관 관점 |
스키마 구조에는 3단계가 있습니다. 스키마 구조의 3단계는 외부 스키마, 개념 스키마, 내부 스키마가 있습니다.
외부 스키마는 사용자 관점에서 접근하는 방식입니다. 각 사용자가 보는 데이터베이스의 스카마들을 정의합니다. 응용 프로그래머가 데이터베이스(DB)에 접근하는 뷰(View)를 표현합니다.
개념 스키마는 설계자 관점에서 접근하는 방식입니다. 모든 통합 관점을 가지고 있고 데이터베이스의 규칙과 구조를 표현하게 됩니다. 모든 사용자가 보는 데이터베이스의 스키마들을 통합하여 전체 데이터베이스를 나타내는 것입니다. 데이터베이스에 저장되는 데이터들을 표현하며 데이터와 데이터들 간의 관계들을 나타냅니다.
내부 스키마는 개발자 관점에서 접근하는 방식입니다. 물리적 관점이기도 합니다. 물리적 저장 장치의 입장에서 보는 데이터베이스의 구조이며 레코드 구조와 인덱스 등을 표현합니다. 즉, 실질적인 데이터의 저장 구조와 컬럼(Colunm) 정의, 인덱스(Index)를 포함하는 것입니다.
[스키마 구조의 3단계]
구분 | 내용 |
1 | 외부 스키마 |
2 | 개념 스키마 |
3 | 내부 스키마 |
ERD(Entity Relationship Diagram)은 데이터베이스의 엔티티들 간에 어떤 관계가 있는지를 나타내는 다이어그램입니다. ERD는 데이터 모델의 표기법입니다.
ERD를 작성하는 순서는 아래와 같습니다.
[ERD의 작성 순서 설명]
① 엔티티를 도출하고 그린다.
② 엔티티를 적절하게 배치한다.
③ 엔티티 간의 관계를 설정한다.
④ 엔티티의 관계명을 기술하고 기입한다.
⑤ 엔티티 관계의 참여도를 기입한다.
⑥ 엔티티 관계의 필수와 선택 여부를 기입한다.
(* 관계의 필수 여부를 기술)
엔티티(Entity) 정리
엔티티(Entity)는 데이터베이스에서 식별이 가능한 객체로 일반적으로 테이블(Table)을 의미합니다. 엔티티는 비즈니스와 업무에서 관리해야 하는 데이터의 집합입니다. 엔티티는 정보로 저장할 수 있는 개념, 사람, 물건, 사건, 장소 등이 될 수 있습니다.
[구성 요소 정리]
구분 | 내용 |
엔티티(Entity) | 테이블(Table) |
인스턴스(Instance) | 로우(Row) |
속성(Attribute) | 컬럼(Column) |
엔티티(Entity)는 자신을 보다 상세하게 나타내기 위해서 속성(Attribute)를 가지고 있습니다. 속성의 개수는 엔티티마다 다르기 때문에 용도에 따라서 많을 수도 있고 적을 수도 있습니다.
엔티티(Entity)는 5가지 특징을 가지고 있습니다.
엔티티는 유일함을 보장할 수 있는 유일한 식별자가 존재해야 합니다. 엔티티에 속한 각각의 인스턴스들이 중복되거나 식별이 모호하게 되면 이러한 엔티티는 설계가 잘못된 것이라고 볼 수 있습니다. 엔티티는 2개 이상의 인스턴스를 가지고 있어야 합니다. 만약 인스턴스가 현재 1개이고 앞으로도 계속 1개인 구조라면 엔티티로 볼 수 없습니다. 엔티티는 반드시 속성을 가지고 있어야 합니다.
엔티티는 반드시 자신을 상세하게 표현할 수 있는 속성을 가지고 있어야 하는 것입니다. 엔티티는 다른 엔티티와는 1개 이상의 관계를 가지고 있어야 합니다. 각각의 엔티티들은 다른 엔티티와의 연관성을 가지고 있어야 합니다. 그리고 마지막으로 엔티티는 업무에서 사용하는 정보여야 합니다. 실질적으로 업무에서 사용하고 있는 정보이여야지만 엔티티는 의미가 있게 됩니다.
[엔티티의 5가지 특징]
구분 | 내용 | 설명 |
1 | 엔티티 식별자 | 유익한 식별자가 존재해야 함 |
2 | 인스턴스 집합 | 2개 이상의 인스턴스가 있어야 함 |
3 | 엔티티 속성 | 반드시 속성을 가지고 있어야 함 |
4 | 엔티티 관계 | 다른 엔티티와 최소한 1개 이상의 관계를 보유하고 있어야 함 |
5 | 업무 관련성 | 반드시 비즈니스와 업무에서 관리하고 있어야 하는 집합이어야 함 |
엔티티(Entity)는 2가지 관점에서 분류될 수 있습니다. 엔티티는 유형과 무형에 따른 분류와 발생 시점에 따른 분류로 구분할 수 있습니다.
엔티티를 유형과 무형에 따라서 분류한다면 엔티티를 유형 엔티티, 사건 엔티티, 개념 엔티티로 구분할 수 있습니다.
[엔티티의 유형과 무형에 따른 분류]
구분 | 내용 |
1 | 유형 엔티티 |
2 | 사건 엔티티 |
3 | 개념 엔티티 |
유형 엔티티는 비즈니스와 업무에서 도출되어 지속적으로 사용하는 물리적 형태의 엔티티를 말합니다. 유형 엔티티는 물리적 형태로 존재하고 안정적이고 지속적입니다.
개념 엔티티는 오로지 개념적으로만 사용되는 엔티티를 의미합니다. 개념 엔티티는 물리적인 형태가 없고 개념적인 형태입니다.
사건 엔티티는 행위를 함으로써 발생하는 엔티티입니다. 빈번하고 통계 자료로도 사용할 수 있는 엔티티입니다. 사건 엔티티는 업무를 수행하면서 만들어지는 업무와 관련된 행위 형태의 엔티티들입니다.
엔티티는 발생 시점에 따라서 분류할 수 있습니다.
[엔티티의 발생 시점에 따른 분류]
구분 | 내용 |
1 | 기본 엔티티 |
2 | 중심 엔티티 |
3 | 행위 엔티티 |
기본 엔티티는 키 엔티티라고도 부릅니다. 기본 엔티티는 기본적으로 만들어지는 엔티티들입니다. 기본 엔티티는 원래 업무에서 존재하는 정보들입니다. 기본 엔티티는 독립적으로 생성되고 자식 엔티티를 가질 수 있습니다. 기본 엔티티는 독립적으로 생성되어 자신만의 주식별자를 가지고 다른 엔티티의 부모 역할을 합니다. 다른 엔티티들이 자식 엔티티가 됩니다.
중심 엔티티는 기본 엔티티로부터 파생되고 행위 엔티티를 만들게 됩니다. 기본 엔티티로 부터 파생되어 많은 데이터를 가지고 있고 행위 엔티티를 생성하게 됩니다. 업무에서는 중심적인 역할을 하고 데이터의 양이 많이 발생하게 됩니다.
행위 엔티티는 2개 이상의 엔티티로부터 발생되는 엔티티를 의미합니다. 행위 엔티티는 데이터가 자주 변경되거나 증가할 수 있습니다. 행위 엔티티는 2개 이상의 부모 엔티티로부터 파생되고 일반적으로 설계 초기 단계보다는 상세 설계 단계에서 많이 도출되는 엔티티들입니다.
속성(Attribute) 정리
속성(Attribute)은 엔티티(Entity)의 특징을 나타내는 최소의 데이터 단위입니다. 속성은 엔티티가 가지고 있는 항목들이며 더 이상 분리되지 않는 데이터 단위를 의미합니다. 엔티티는 속성들에 의해서 설명될 수 있습니다. 속성은 더 이상 쪼개지지 않는 레벨 단위이어야 합니다.
속성은 엔티티 구성에 따른 분류, 분해 여부에 따른 분류, 특성에 따른 분류로 구분될 수 있습니다.
구성에 따른 분류는 PK 속성, FK 속성, 일반 속성으로 구분될 수 있습니다.
[속성의 구성 방식에 따른 분류]
구분 | 내용 | 설명 |
1 | PK(Primary Key) 속성 | 엔티티의 인스턴스들을 식별할 수 있는 속성 |
2 | FK(Foreign Key) 속성 | 다른 엔티티의 속성에서 가지고 온 속성 |
3 | 일반 속성 | PK와 FK를 제외한 나머지 속성 |
PK(Primary Key) 속성은 엔티티를 식별할 수 있는 속성입니다. 엔티티에 속한 각 인스턴스에 유일함을 부여하는 속성입니다.
FK(Foreign Key) 속성은 다른 엔티티와의 관계에서 포함되어진 속성입니다. FK 속성은 다른 엔티티와 관계를 가질 수 있도록 해주는 매개체 역할을 하는 속성입니다.
일반 속성은 PK속성과 FK 속성에 포함되지 않는 속성입니다. 일반 속성은 PK속성과 FK 속성을 제외한 나머지 속성들입니다.
분해 여부에 따른 분류에는 복합 속성, 단일 속성, 다중 값 속성이 있습니다.
[속성의 분해 여부에 따른 분류]
구분 | 내용 | 설명 |
1 | 복합 속성 | 여러 개의 의미를 가지고 있는 속성 |
2 | 단일 속성 | 오직 하나의 의미를 가지고 있는 속성 |
3 | 다중값 속성 | 하나의 속성에 여러 개의 값을 가지는 속성 |
특성에 따른 분류에는 기본 속성, 설계 속성, 파생 속성으로 구분할 수 있습니다.
[속성의 특성에 따른 분류]
구분 | 내용 | 설명 |
1 | 기본 속성 | 업무 프로세스 분석을 통해 정의할 수 있는 속성 |
2 | 설계 속성 | 업무에 존재하지 않지만 설계하다 보니 필요하다고 판단되어 도출된 속성 |
3 | 파생 속성 | 다른 속성의 속성 값을 계산하거나 특정한 규칙으로 변형하여 생성한 속성 |
기본 속성의 경우 비즈니스와 업무로부터 추출한 모든 속성입니다. 엔티티의 속성 비율 중에서는 가장 많이 비율을 차지하는 속성입니다.
설계 속성의 경우 비즈니스와 업무 상 필요하지는 않았지만 데이터 모델링을 하는 과정에서 생성하거나 변형하여 정의되는 속성입니다. 설계 속성은 일련번호와 같이 유일한 값을 가지게 됩니다.
파생 속성의 경우 다른 속성의 영향을 받아서 발생하는 속성입니다. 파생 속성은 다른 속성의 속성 값을 계산하거나 특정한 규칙으로 변형하여 생성한 속성입니다.
관계(Relationship) 정리
관계(Relationship)는 엔티티와 엔티티와의 관계를 의미합니다. 엔티티에는 어떤 연관성이 있느지를 타입으로 분류해서 존재 관계와 행위 관계를 분류할 수 있습니다.
[관계의 분류]
구분 | 내용 | 설명 |
1 | 존재에 의한 관계 | 존재 자체로 연관성이 있는 관계 |
2 | 행위에 의한 관계 | 특정한 행위로 연관성이 생기는 관계 |
관계의 표기법에는 3가지가 있습니다. 관계명의 표기법에는 관계의 이름인 관계명, 관계에 참여하는 수인 관계 차수, 필수인지 선택인지 여부와 관련된 관계 선택 사양입니다. 관계 명은 엔티티와 엔티티가 어떤 관계를 가지고 있는지를 표현하는 문장입니다.
관계 차수는 각 엔티티에서 관계에 참여하는 수를 의미합니다. 관계 차수의 표기법에는 1대 1 관계, 1대 N 관계, N 대 N 관계가 있습니다.
1대 1 관계의 경우 엔티티와 엔티티는 서로가 속성 하나 씩 만을 가지는 관계입니다. 1 대 N 관계는 하나의 엔티티는 다른 엔티티의 속성 하나를 가질 수 있고 두 번째 엔티티는 첫 번째 엔티티의 여러 속성을 가질 수 있는 관계를 의미합니다. N 대 N 관계는 첫 번째 엔티티는 두 번째 엔티티의 여러 속성을 가질 수 있고 두 번째 엔티티는 첫 번째 엔티티의 여러 속성을 가질 수 있는 관계를 가지게 됩니다.
관계 선택 사양에는 해당 관계가 필수 요소인지 선택 사항 인지를 나타내는 의미입니다.
식별자(Identifiers) 정리
식별자(Identifiers)는 속성 중 각각의 인스턴스를 구분할 수 있게 해주는 대표적인 속성을 의미합니다.
모든 엔티티는 인스턴스를 가지고 있고 인스턴스는 속성으로 자신의 특성을 나타내는데 식별자는 이러한 속성 중 각각의 인스턴스를 구분해주는 구분 값입니다. 즉, 하나의 엔티티에 구성되어 있는 여러 속성 중에서 엔티티를 대표할 수 있는 속성입니다. 하나의 엔티티는 반드시 1개의 유니크한 식별자가 있어야 합니다. 비즈니스나 업무적으로 구분되는 정보가 되며 식별자는 논리 모델링 단계에서부터 사용하게 됩니다.
식별자는 4가지 특징을 가지고 있습니다. 식별자의 4가지 특징은 유일성, 최소성, 불변성, 존재성입니다.
[식별자의 4가지 특징]
구분 | 내용 |
1 | 유일성 |
2 | 최소성 |
3 | 불변성 |
4 | 존재성 |
유일성은 각 인스턴스에 유니크함을 부여하여 식별이 가능하도록 합니다. 유일성은 식별자에 의해 엔티티 안에 있는 모든 인스턴스들이 유일하게 구분되어야 한다는 것입니다. 최소성은 유일성을 보장하는 최소 개수의 속성이어야 합니다. 최소성은 식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다는 것입니다. 불변성은 속성 값이 되도록 변하지 않아야 합니다. 불변성은 식별자가 한 번 지정되면 해당 식별자의 값은 변하지 않아야 한다는 것입니다. 존재성은 속성 값이 NULL 값이 될 수 없습니다. 식별자가 지정되면 반드시 식별자의 값이 존재해야 하는 특징입니다.
식별자 분류는 대표성 여부에 따른 분류, 스스로 생성되었는지 여부에 따른 분류, 속성의 수에 따른 분류, 대체 여부에 따른 분류로 구분할 수 있습니다.
대표성 여부에 따른 분류는 주식별자(Primary Identifier)와 보조식별자(Alternate Identifier)로 구분됩니다. 주식별자는 유일성과 최소성을 만족하면서 엔티티를 대표하는 식별자입니다. 다른 엔티티와 참조 관계로 연결할 수 있습니다. 보조 식별자는 유일성과 최소성을 만족하지만 엔티티를 대표하지 못해서 다른 엔티티와 참조 관계로 연결이 불가능한 것입니다.
스스로 생성되었는지 여부에 따라서는 내부 식별자(Internal Identifier)와 외부 식별자(Foreign Identifier)로 구분됩니다. 내부 식별자는 엔티티 내부에서 스스로 만들어지는 식별자입니다. 외부 식별자는 다른 엔티티와의 관계를 통해서 다른 엔티티로부터 받아오는 식별자입니다.
속성의 수에 따라서 단일 식별자(Single Identifier)와 복합 식별자(Composite Identifier)로 구분됩니다. 단일 식별자는 하나의 속성으로 구성된 식별자입니다. 복합 식별자는 2개 이상의 속성으로 구성된 식별자입니다. 복합 식별자는 둘 이상의 속성으로 구성되었습니다.
대체 여부에 따라서 원조 식별자(Original Identifier)와 대리 식별자(Surrogate Identifier)로 구분됩니다.
원조 식별자는 업무 프로세스에 존재하는 식별자입니다. 가공되지 않는 본질 식별자입니다. 대리 식별자는 주식별자의 속성이 2개 이상인 경우 해당 속성들을 하나로 묶어서 사용하는 인조 식별자입니다.