☑️데이터 모델링 특징
- 현실 세계를 일정한 형식에 맞추어 표현하는 추상화의 의미를 가질 수 있다.
- 복잡한 현실을 제한된 언어나 표기법으로 이해하기 쉽게 하는 단순화의 의미를 가지고 있다.
- 모호함을 배제하고 누구나 이해가 가능하도록 정확하게 현상을 기술하는 정확화의 의미를 가진다.
❌시스템 구현만을 위해 진행하는 사전단계의 작업으로서 데이터베이스 구축을 위한 사전작업의 의미가 있다.
⇒ 모델링은 단지 시스템 구현만을 위해 수행하는 태스크가 아니며, 시스템 구현을 포함한 업무 분석 및 업무 형상화를 하는 목적도 있다.
☑️데이터 모델링 설명
- 업무 정보를 구성하는 기초가 되는 정보들을 일정한 표기법으로 표현한다.
- 분석된 모델로 데이터베이스를 생성하여 개발 및 데이터 관리에 사용하기 위한 것이다.
- 데이터 모델링 자체로서 업무의 흐름을 설명하고 분석하는 부분에 의미를 가지고 있다.
❌ 데이터베이스를 구축하는 목적으로 데이터모델링을 수행하며 업무에 대한 설명은 별도의 표기법을 이용한다.
⇒ 단지 데이터베이스를 구축하기 위한 용도로 쓰이는 것이 아니라 데이터 모델링 자체로도 업무를 설명하고 분석하는 부분에서 의미가 있다.
☑️데이터 모델링 유의사항
- 여러 장소의 데이터베이스에 같은 정보를 저장하지 않도록 하여 중복성을 최소화한다.
- 데이터의 정의를 데이터의 사용 프로세스와 분리하여 유연성을 높인다.
- 데이터 간의 상호 연관관계를 명확하게 정의하여 일관성 있게 데이터가 유지되도록 한다.
❌ 사용자가 처리하는 프로세스나 장표 등에 따라 매핑될 수 있도록 프로그램과 테이블 간의 연계성을 높인다.
⇒ 프로그램과 테이블 간의 연계성을 높이면 업무 변경에 대해 취약하게 만드는 단점임;;!!
⇒ 데이터 모델링 유의점은 중복, 비유연성, 비일관성!
- 중복 : 데이터베이스가 여러 장소에 같은 정보를 저장하는 잘못을 하지 않도록 한다.
- 비유연성 : 사소한 업무 변화에도 데이터 모델이 수시로 변경되어 유지보수 어려움을 가중시킬 수 있다. 데이터 정의를 사용 프로세스와 분리하여 중대한 변화를 일으킬 수 있는 가능성을 줄인다.
- 비일관성 : 데이터와 데이터 간의 상호 연관 관계에 대해 명확하게 정의하여 비일관성이 발생하지 않도록 주의한다.
☑️ 데이터 모델링의 관계
- 관계는 존재에 의한 관계와 행위에 의한 관계로 구분될 수 있으나, ERD에서는 관계에 연결할 때 존재와 행위를 구분하지 않고 단일화된 표기법을 사용한다.
- UML에는 클래스 다이어그램의 관계 중 연관관계와 의존관계가 있고 이것은 실선과 점선으로 다르게 표현된다. (연관관계 → 실선, 의존관계 → 점선)
- 연관관계는 항상 이용하는 관계로 존재적 관계에 해당, 부서와 사원 엔터티 간의 ‘소속’ 관계는 존재적 관계의 사례 (1:N 관계)
- 의존 관계는 상대방 클래스의 행위에 의해 관계가 형성되는 행위적 관계에 해당, 주문과 배송 엔터티 간의 ‘배송근거’ 관계는 행위에 의한 관계의 사례
- 관계의 표기법은 관계명(이름), 관계차수(1:N), 식별성이아닌 선택성(선택 사양: 필수관계, 선택관계) 3가지 개념으로 표현
❌ 연관관계는 오퍼레이션에서 파라미터 등으로 이용할 수 있고, 의존 관계는 소스코드에서 멤버 변수로 선언하여 사용할 수 있다.
⇒ 연관 관계는 멤버 변수로 선언하여 사용, 의존 관계는 오퍼레이션에서 파라미터 등으로 이용
☑️데이터 독립성 구성요소
- 통합된 모든 사용자 관점은 개념 스키마와 관련 있다.
- 물리적인 저장구조를 표현하는 스키마는 내부 스키마이다.
- 논리적인 데이터 독립성을 고려하는 단계는 외부단계와 개념적 단계이다.
❌ view 단계는 여러 사용자 관점으로 구성하는 개념 스키마에 해당한다.
⇒ 여러 사용자 관점으로 구성하는 것은 외부 스키마이다.
⇒ 데이터 모델링은 통합관점의 뷰를 가지고 있는 개념 스키마를 만들어가는 과정이다.
⇒ 외부(View 단계, 여러 사용자 관점) - (논리적) - 개념(통합된 모든 사용자 관점) - (물리적) - 내부
⇒ 물리적 독립성 : 데이터베이스 파일 구조의 변화가 논리스키마에 영향을 주지 않음, 데이터베이스의 색인 구조의 변화가 응용 프로그램에 영향을 주지 않음.
⇒ 논리적 독립성: 데이터베이스의 논리적 구조가 변경되었을 때 응용 프로그램이나 사용자에게 영향을 미치지 않도록 하는 특성
☑️ERD에 대한 설명
- 1976년 피터첸에 의해 ENTITY RELATIONSHIP MODEL이라는 표기법이 만들어졌다.
- 일반적으로 ERD를 작성할 때, 엔터티 도출→ 엔터티 배치 → 관계 설정 → 관계명 순이다.
- 관계의 명칭은 관계 표현에서 매우 중요한 부분에 해당한다.
❌ 가장 중요한 엔터티를 오른쪽 상단에 배치하고 추가로 발생되는 엔터티들을 왼쪽 편과 하단에 배치하는 것이 원칙이다.
⇒ 가장 중요한 엔터티를 왼쪽 상단에 배치하고, 이를 중심으로 나열한다.
☑️ ENTITY 특징
- 속성 없는 엔터티는 있을 수 없다. 엔터티는 반드시 속성을 가져야 한다.
- 엔터티는 다른 엔터티와 관계가 있어야 한다. 단, 통계성 엔터티나 코드성 엔터티의 경우 관계를 생략할 수 있다.
- 데이터로서 존재하지만 업무에서 필요하지 않으면 해당 업무의 엔터티로 성립될 수 없다.
❌ 객체 지향의 디자인 패턴에는 싱글턴 패턴이 있어 하나의 인스턴스를 가지는 클래스가 존재한다. 이와 유사하게 엔터티는 한 개의 인스턴스를 가지는 것만으로도 충분한 의미를 부여할 수 있다.
⇒ 영속적으로 존재하는 두 개 이상의 인스턴스 집합 이어야 한다.
⇒ 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야한다.
⇒ 유일한 식별자에 의해 식별이 가능해야 한다.
⇒ 업무 프로세스에 의해 이용되어야 한다.
⇒ 엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다.
- 통계성 엔터티나 코드성 엔터티는 관계를 생략할 수도 있다.
- 통계성 엔터티: 특정 시점의 데이터를 기록하는 엔터티로, 다른 엔터티와 직접적인 관계 없이 독립적으로 존재할 수 있음.
- 예: 월별 매출 통계(SalesStatistics)
- 코드성 엔터티: 단순한 분류 값(코드)을 저장하는 엔터티로, 필드 값으로만 사용될 수도 있음.
- 예: 국가 코드(CountryCode), 상품 카테고리 코드(ProductCategoryCode)
- 이러한 엔터티는 일반적으로 다른 엔터티와 조인하지 않고도 독립적으로 사용할 수 있다.
☑️ 발생 시점에 따른 엔터티 분류
- 기본, 키 엔터티
⇒ 가장 먼저 발생하는 엔터티로, 실체 중심의 데이터. 다른 엔터티들의 참조 대상이 됨. ex) 사용자, 상품
- 중심 엔터티
⇒ 기본 엔터티를 확장하여 비지니스 흐름을 형성하는 엔터티. 특정 시점에서 의미 있는 데이터를 저장 ex) 주문, 계약
- 행위 엔터티
⇒ 업무 처리를 위한 이벤트성 데이터 저장. 자주 변경되거나 트랜잭션이 많이 발생하는 엔터티로, 이력, 상태 변화를 관리 ex) 주문 내역
❌ 관계 엔터티
⇒ 두 엔터티 간 N:M 관계를 풀어주는 역할. 발생 시점 기준이 아니라, 데이터 모델링에서 관계를 표현하는 방식에 따라 구분 됨.
☑️ ENTITY에 이름을 부여하는 방법
- 현업의 업무 용어를 사용하여 업무상의 의미를 분명하게 한다.
- 모든 엔터티에서 유일한 이름이 부여되어야 한다.
- 엔터티가 생성되는 의미대로 자연스럽게 부여하도록 한다.
❌ 가능한 약어를 사용하여 엔터티 이름을 간결하고 명확하게 한다.
⇒ 엔터티 이름을 부여할 땐 가능하면 약어를 사용하지 않는다.
⇒ 단수명사를 활용한다.
☑️ 두 개의 ENTITY 사이에 정의한 관계에 대해 확인해야할 사항
- 두 개의 엔터티 사이에 관심 있는 연관규칙이 존재하는가?
- 두 개의 엔터티 사이에 정보의 조합이 발생하는가?
- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
- 업무기술서, 장표에 관계연결을 가능하게 하는 동사가 있는가?
☑️ 속성에 대한 설명
- 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미 상 더이상 분리되지 않는 최소의 데이터 단위
- 엔터티에 대한 자세하고 구체적인 정보를 나타낸다.
- 하나의 엔터티는 두 개 이상의 속성을 갖는다.
- 속성도 집합이다.
❌ 하나의 인스턴스에서 각각의 속성은 하나 이상의 속성값을 가질 수 있다.
⇒ 하나의 인스턴스에서 각각의 속성은 한 개의 속성값을 가져야 한다.
☑️ 속성에 대한 특징
- 기본속성 : 가장 기본적인 데이터를 저장하는 속성으로, 더 이상 쪼갤 수 없는 원자값이자 별도의 계산 없이 그대로 사용됨. 업무분석을 통해 바로 정의한 속성
- 설계속성 : 비지니스 요구사항을 반영하기 위해 추가하는 속성으로 직접적인 데이터라기 보단 설계 과정에서 도출된 속성
- 파생속성 : 데이터를 조회할 때 빠른 성능을 낼 수 있도록 하기 위해 원래 속성값을 계산하여 저장할 수 있도록 만든 속성
- PK 속성 : 기본 PK를 구성하는 속성으로 기본 키 역할을 하며, 엔터티 내 유일성을 보장하는 속성
- 일반 속성: 엔터티 구성방식에 따른 분류속성으로 엔터티에 포함되어 있고, PK, FK에 포함되지 않는 속성이다.
☑️ 속성의 명칭 부여하는 방법
- 해당 업무에서 사용하는 이름을 부여한다.
- 서술식 속성명은 사용하지 않는다.
- 약어 사용은 가급적 제한한다.
- 전체 데이터 모델에서 유일성을 확보하는 것이 좋다.
❌ 직원 엔터티의 이름, 고객 엔터티의 이름과 같이 엔터티별로 동일한 속성명을 사용하여 데이터 모델의 일관성을 유지하는 것이 좋다.
⇒ 엔터티마다 같은 속성명을 사용하면 혼돈이 발생해요!
☑️ 정규화 과정
- 1차 정규화 : 반복되는 중복 데이터 제거, 원자성 보장
- 2차 정규화 : 부분 함수 종속 제거, 완전 함수 종속 유지 (관련 없는 거 분리)
- 3차 정규화: 키가 아닌 속성이 다른 속성을 결정하지 않도록 이행적 종속 제거 (A→B, B→C라면 A→C)
☑️ 데이터 모델의 개념
- 도메인 : 각 속성은 가질 수 있는 값의 범위가 있는데, 이를 그 속성의 도메인이라고 함. 엔터티 내 속성에 대한 데이터 타입과 크기 그리고 제약사항을 지정.
- 시스템 카탈로그 : 데이터베이스의 메타 데이터를 저장함. 테이블, 열 , 데이터 타입 등 데이터베이스 객체들에 대한 정의와 정보 포함
- 용어 사전 : 업무에서 사용하는 주요 용어나 개념을 정의, 비지니스 용어와 기술 용어를 명확하게 규명
- 속성 사전 : 속성에 대한 정의와 설명을 문서화한 자료
☑️ 식별자의 종류
- 엔터티 내에서 대표성을 가지는가?⇒ 보조식별자도 유일성을 갖는 속성이므로 후보키로 분류
- ⇒ 주식별자(PK)와 보조식별자(AK)로 구분
- 엔터티 내에서 스스로 생성되었는가?
- ⇒내부 식별자와 외부 식별자(타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자)로 구분
- 단일 속성으로 식별되는가?
- ⇒ 단일식별자와 복합 식별자(여러 개의 속성이 결합)로 구분
- 원래 업무적 의미가 있던 식별자 속성을 대체하여 일련번호와 같이 새롭게 만든 식별자인가?
- ⇒ 본질식별자(업무에 의해 만들어지는 식별자)와 인조식별자로 구분 ( 인조 식별자는 보통 ID, CODE 같은 단어를 뒤에 붙임, 주로 기본키로 사)
☑️ 주식별자의 특징
- 유일성 : 주식별자에 의해 엔터티 내의 모든 인스턴스들은 유일하게 구분
- 존재성 : 주식별자는 데이터값이 반드시 존재해야함! (NULL 허용 X)
- 불변성 : 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함.
- 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함.
☑️ 비식별자 관계
- 엔터티와 엔터티가 1:M 관계의 부모와 자식관계에서 데이터가 부모없이 자식쪽 엔터티의 인스턴스가 먼저 생성될 수 있을 경우 비식별자 관계로 연결해야 함
- 부모 엔터티의 인스턴스가 자식 엔터티의 인스턴스보다 먼저 소멸하는 경우 비식별자 관계로 연결
- 자식 엔터티의 식별자가 부모 엔터티의 주식별자를 상속받아 생성하는 것보다 별도의 주식별자를 생성하는 것이 더 유리하다고 판단되는 경우 비식별자 관계로 연결
❌ SQL문의 조인 관계를 최소화 하는 경우 비식별자 관계로 연결해야한다.
⇒ 조인 관계를 최소화하기 위해 식별자 관계로 연결해야 한다.
☑️ 식별자와 비식별자 관계
항목 식별자 비식별자
| 목적 | 강한 연결관계 표현 | 약한 연결관계 표현 |
| 자식 주식별자 | 자식 주식별자의 구성에 포함 | 자식 일반 속성에 포함 |
| 표기법 | 실선 표현 | 점선 표현 |
| 연결 고려사항 | -반드시 부모 엔터티에 종속 |
- 자식 주식별자 구성에 부모 주식별자 포함 필요
- 상속받은 주식별자 속성을 타 엔터티에 이전 필요 | - 약한 종속관계
- 자식 주식별자 구성을 독립적으로 구성
- 자식 주식별자 구성에 부모 주식별자 부분 필요
- 상속받은 주식별자 속성을 타 엔터티에 차단 필요
- 부모쪽의 관계참여가 선택 관계 |
- 식별자 관계 :부모 엔터티 주식별자(PK)가 자식 엔터티의 주식별자에 반드시 포함되어야함
- 비식별자 관계: 자식 엔터티의 주 식별자PK는 독립적으로 구성