데이터 모델링의 이해
관계(Relationship)?
엔터티 내의 인스턴스들 간 서로 논리적인 연관성이 있는 상태.
분류 - 존재/행위
존재에 의한 관계: 예시. 직원 --- 부서 (소속되다/보유하다)
행위에 의한 관계: 예시. 고객 --- 상품 (주문하다/주문되다)
- ERD(Entity Relationship Diagram)는 존재/행위 등 관계를 똑같이 표시한다. → 간략하게 설명하면, 엔터티 사이의 관계를 그림으로 표현하는 것을 의미한다.
- UML 클래스다이어그램 → 연관관계(존재)는 실선으로 표기 / 의존관계(행위)는 점선으로 표시.
표시 방법
표기하는 방식에 따라 IE와 Barker 표기법으로 구분한다. 보통 IE를 쓰지만 차이점을 구분해야 한다.
관계명(Membership), 관계차수(Cardinality/Degree), 관계선택사양(Optionality)
- 관계명을 표시한다. 이 때 애매한 동사나 과거형은 피한다.(IE와 Barker 모두 표기방식 동일)
- 관계차수는 엔터티 내 각 인스턴스들이 얼마나 참여하는지를 의미한다.(1:1, 1:M(1:다), M:N(다:다))
IE와 Barker의 차이점을 쉽게 보면, 1(빨간 선)을 표시하고 안 하고의 차이로 구분할 수 있다.
N:M 의 관계일 경우, 반드시 1:N 혹은 N:1로 쪼개서 가운데에 관계된 엔티티를 추가한다는 걸 기억하자!
관계선택사양은 엔터티 내 각 인스턴스들이 필수/선택 참여하는지를 의미한다.
예시. 직원은 반드시 부서에 속해야 하지만, 부서에는 직원이 있어도 되고 없어도 된다. IE 표기 방식에서 O부분이 '없어도 된다.'는 의미, |부분이 '1', >가 '다수'를 의미한다. Barker 표기 방식에서는 IE 표기 방식의 O반대쪽에 점선이 나타난다고 외우기!
코드성, 통계성
코드성 엔터티란 엔티티 내에서 특정한 코드에 의미를 부여해서 사용하는 엔터티를 말한다. 예를 들어 성별 엔터티에서 남성을 01, 여성을 02, 중성을 03이라고 설정하고 데이터 입력을 할 경우 이를 코드성 엔터티라고 명명한다. 통계성 엔터티란 여러 엔터티끼리 연결해서 이런 의미가 있구나 하는 것이 아닌, 한 엔터티 자체만으로 의미가 있을 경우에 통계성 엔터티라고 한다. 코드성 엔터티와 통계성 엔터티의 경우 관계를 생략한다.
관계 체크 사항
- 두 엔터티 사이에 관심 있는 연관규칙이 있는가?
- 두 엔터티 사이에 정보의 조합이 발생하는가?
- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되었는가?
- 업무기술서, 장표에 관계연결을 가능케 하는 동사(Verb)가 있는가? → 명사 X
식별자 & 데이터 모델
- 데이터 모델링
현실세계의 복잡한 대상을 단순하게 표현하기 위해 추상화, 단순화, 명확화하여 일정표기법으로 표시하는 것으로 계획/분석/설계 시 업무분석 및 설계, 설명에 사용, 구축/운영 시에는 변경, 관리 목적으로 사용한다.
간략한 순서: [ 현실대상 -> 개념적 데이터 모델링 -> 논리적 데이터 모델링 -> ..........]
- 데이터 모델링 3단계(개념-논리-물리)
개념적 데이터 모델링: 추상적, 업무중심적, 포괄적, 전사적(EA), DBMS(데이터베이스 관리 시스템)독립적, ERD생성
논리적 데이터 모델링: KEY, 속성, 관계 등을 정의, 재사용성이 높음, 특정 DBMS에 종속적, 정규화 수행
물리적 데이터 모델링: 실제 DB에 이식되도록 성능, 저장 등 물리적 성격 고려, 수준이 구체적
ERD
엔터티(Entity)와 엔터티 간의 관계(Relationship)를 발견하고, 이를 그림(Diagram)으로 표현하는 행위로 개념적 데이터 모델링의 결과물이다.
순서 (개념적 모델링) - ERD에서 그리기
- 엔터티를 그린다.(속성 제외) 보통 중요한 엔터티를 왼쪽 상단에 둔다.
- 엔터티를 적절히 배치한다.
- 관계를 설정한다.(서로 관계가 있는 엔터티끼리 선으로 연결)
- 관계명을 기술한다.
- 관계의 참여도(Cardinality) 를 기술한다.
참여도란 엔터티 안의 인스턴스들이 얼마나 참여하였는지를 의미한다.
1:1 1:N N:N 관계 등이 있으며, N 쪽에는 까치발(>)로 표시한다. - 관계의 필수여부(Optionality)를 기술한다.
필수여부란 엔티티 안의 인스턴스들이 반드시 참여하는지를 의미한다.
최소 참여는 (|)을 표시하고, 선택 참여는 (O) 로 표시한다.
순서 (논리적 모델링) - ERD에서 데이터 가져와서 모델링
- 속성을 아래로 모두 입력한다.
- 각 엔터티에서 식별자(Primary KEY - PK)를 선택한다.
(논리적 모델링에서는 식별자, 물리적 모델링에서는 Primary Key 라고 부른다. - 엔터티 내부의 인스턴스를 유일하게 구분할 수 있는 속성의 집합) - 정규화 를 수행해 중복되는 데이터 입력이 없도록 한다. → 엔터티를 쪼개기
- 관계설정(Foreign Key - FK) 을 한다. → 정규화로 쪼개진 대상들을 연결하기 위해 식별자를 빌려온다.
데이터 모델링이 왜 중요할까?
- 파급효과: 초반에 엉망으로 설계하고 개발하다가 나중에 엎게 되면 힘들다.
- 간결한 표현: 서로 의사소통을 위해 모델링된 설계도(ERD 등) 으로 쉽게 이해 가능하다.
- 데이터 품질: 애초에 데이터 모델링을 제대로 해야 이상한 데이터(데이터 중복, 비유연성, 비일관성 등)가 안 들어간다.
데이터 중복 - 말 그대로 데이터가 2개 혹은 그 이상 저장 되었을 경우.
비유연성 - 사소한 프로세스(업무) 변화에도 데이터 정의를 바꿔야 한다.
비일관성 - 데이터가 변경되면 데이터를 쌓아야 하는데, 그렇지 않은 경우.
논리적 모델링 표기법 2가지
- IE 표기법
- 구분된 선 위에는 PK(식별자).
- FK라고 붙은 속성은 빌려온 외래키를 의미.
- 그 외 아무것도 안 적힌 속성은 일반속성.
- 관계차수나 관계선택사양은 그대로 작성.
- 관계선이 점선이라면 비식별자관계.
- Barker 표기법
- #은 PK(식별자).
- O는 선택사항, *는 필수사항을 의미.
- 관계차수나 관계선택사양은 그대로 작성.
- 여기는 FK가 O이므로 비식별자관계. (#이었으면 식별자관계)
데이터베이스 3단계 구조
- 외부(External) 스키마: 여러 사용자 각각의 관점
- 개념(Conceptual) 스키마: 통합적, 조직 전체의 DB관점
- 내부(Internal) 스키마: 데이터 물리 저장 구조 표현
각 스키마는 독립성을 가진다. 예시.
- 외부 스키마 / 개념 스키마: 엔터티 내부에 속성을 추가해도 외부에서 엔터티를 사용하는 데에는 문제가 없다.
- 개념 스키마 / 내부 스키마: 저장 공간(하드디스크) 등을 데이터베이스에 추가해도 직원 테이블(엔터티)의 내용이 변경되지 않는다.
식별자(Identifiers)?
엔터티 내 유일하게 인스턴스를 식별할 수 있는 속성의 집합.
분류
- 대표성여부: 주식별자 VS 보조식별자
- 스스로생성여부(자생여부): 내부식별자 VS 외부식별자. FK(외래 키)로 구분.
- 단일속성여부: 단일식별자 VS 복합식별자. 식별자 속성이 한 개 or 두 개 이상.
- 대체여부: 본질식별자 VS 인조식별자. 업무 본래 대상 or 임의로 코드를 만들어서 사용.
주식별자 도출 기준과 특징
도출기준
- 업무에서 자주 쓰는 속성
- 명칭, 이름 등은 피한다. (중복 고려)
- 속성의 수가 많지 않아야 한다. (식별자 특징: 속성의 수가 최소)
특징
- 유일성: 인스턴스를 유일하게 식별.
- 최소성: 속성의 수가 많지 않게.
- 불변성: 가급적 변하지 않기.
- 존재성: 값이 꼭 입력되기.
https://www.youtube.com/watch?v=64c0BgeCLAY&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=2/
https://www.youtube.com/watch?v=36g7ptAW8KM&list=PL6i7rGeEmTvpLoDkB-kECcuD1zDt_gaPn&index=3/