데이터모델링의 이해
데이터 모델링
설계과정에서 시스템의 중요한 개념을 논리적인 데이터 모델로 구성하는 작업
물리적인 데이터베이스 모델 구현부터 시스템 데이터베이스 반영과정을 포함
단순히 데이터를 다루는 것이외에도 시스템의 구체적인 흐름을 정의하는데에도 영향을 끼침
- 정보시스템을 구축하기 위한 데이터 관점의 업무 분석 기법
- 현실세계의 데이터에 대해 약속된 표기법으로 표현하는 과정
- 데이터베이스를 구축하기 위한 분석/설계의 과정
데이터 모델링의 3단계
- 개념적 데이터 모델링
- 높은 추상화 수준, 포괄적인 수준의 모델링
- 논리적 데이터 모델링
- Key, 속성, 관계를 표현, 재사용성 높음
- 물리적 데이터 모델링
- 물리적인 성격을 고려해 설계
데이터 모델링의 3요소
- Thing (어떤 것)
- Attributes (속성)
- Relationships (관계)
데이터 모델링의 특징
현실 세계의 특정 개념을 추상화 / 단순화 / 명확화하여 모델로 표현하고자 함
- 추상화 : 현실세계를 일정한 형식에 맞추어 표기
- 단순화 : 복잡한 현실을 제한된 언어나 표기법을 통해 이해하기 쉽도록 함
- 명확화 : 애매모호함을 제거하고 누구나 이해할 수 있도록 정확하게 현상을 기술
데이터 모델링 유의점
- 중복 : 데이터 모델은 같은 데이터를 사용하는 사람,시간, 그리고 장소를 파악하는데 도움을 줌 지식응용은 데이터베이스가 여러 장소에 같은 정보를 저장하는 잘못을 하지 않도록
- 비유연성 : 데이터 모델을 어떻게 설계했느냐에 따라 사소한 업무변화에도 데이터모델이 수시로 변경되어 유지보수의 어려움을 가중시킬 수 있음, 데이터의 정의를 데이터의 사용 프로세스와 분리시킨다.
- 비일관성 : 사용자가 처리하는 프로세스/관련된 프로그램과 테이블의 연계성을 높이는 것은 데이터 모델이 업무 변경에 대해 취약하게 만드는 단점
데이터 모델링 종류
- 개념적 데이터 모델링
- 논리적 데이터 모델링
- 물리적 데이터 모델링
데이터베이스 독립성 요소 3단계
항목 | 내용 | 비고 |
외부스키마 | - View 단계에서 여러 개의 사용자 관점으로 구성 (사용자 개개의 단계, 개개 사용자가 보는 개인적 DB 스키마) - DB의 개개 사용자나 응용프로그래머가 접근하는 DB 정의 |
여러 사용자 관점 |
개념스키마 | - 모든 사용자 관점을 통합한 조직 전체 관점의 통합적 표현 - 모든 응용시스템들이나 사용자들이 필요로하는 데이터를 통합한 조직 전체의 DB를 기술한 것 - DB에 저장되는 데이터와 그들간의 관계를 표현하는 스키마 |
모든 사용자 관점을 통합한 관점 |
내부스키마 | - DB가 물리적으로 저장된 형식 - 물리적 장치에서 데이터가 실제적으로 저장되는 방법을 표현하는 스키마 |
물리적 저장구조 |
데이터 독립성
- 논리적 독립성 : 개념 스키마가 변경되어도 외부 스키마에 영향 X
- 물리적 독립성 : 내부 스키마가 변경되어도 외부/개념 스키마에 영향 X
ERD
1976년 피터 챈의 E-R model 개발
ERD 작성과정
엔터티 그림 → 엔터티 배치 → 엔터티 관계설정 → 관계명 기술 → 관계 참여도 기술 → 관계 필수여부 기술
좋은 데이터 모델의 요소
- 완전성 : 업무에 필요한 모든 데이터가 정의되어 있어야 함
- 중복 배제 : 하나의 DB 내에 동일한 사실은 한 번만
- 업무 규칙 : 모든 사용자가 해당 규칙을 공유
- 데이터 재사용 : 데이터의 독립성을 고려해 재사용성을 높임
- 의사소통 : 업무규칙은 엔터티, 속성, 관계 등의 형태로 최대한 자세하게 표현
- 통합성 : 동일한 데이터는 한 번만 정의
엔터티
업무에 필요하고 유용한 정보를 저장/관리하기 위한 집합적인 것
- 반드시 해당업무에서 필요해야함
- 유일한 식별자에 의해 식별되야함
- 2개 이상의 인스턴스 집합
- 업무 프로세스에 의해 이용되어야함
- 반드시 속성 필요
- 다른 엔터티와 최소 1개 이상의 관계 있어야함
엔터티 분류
유무형에 따라 분류할 수 있고, 발생 시점에 따라 분류할 수 있다.
- 유무형 분류
- 유형 엔터티 : 물리적인 형태가 있는 것
- ex) 사원, 물품, 강사 등
- 개념 엔터티 : 물리적인 형태는 없고, 관리해야할 개념적인 정보
- ex) 조직, 보험상품 등
- 사건 엔터티 : 업무를 수행함에 따라 발생하는 엔터티
- ex) 주문, 청구 등
- 유형 엔터티 : 물리적인 형태가 있는 것
- 발생 시점에 따른 분류
- 기본 엔터티 : 해당 업무에 원래 존재하는 정보, 타 엔터티의 부모 역할을 하고 자신만의 주식별자를 가짐
- ex) 사원, 부서, 학생, 강사 등
- 중심 엔터티 : 기본 엔터티로부터 발생, 다른 엔터티와의 관계로 많은 행위 엔터티를 생성
- ex) 계약, 주문, 매출 등
- 행위 엔터티 : 2개 이상의 부모 엔터티로부터 발생, 자주 바뀌거나 양이 증가
- ex) 주문목록, 사원 변경 이력 등
- 기본 엔터티 : 해당 업무에 원래 존재하는 정보, 타 엔터티의 부모 역할을 하고 자신만의 주식별자를 가짐
엔터티 명명 규칙
- 현업 업무에서 사용하는 용어 사용
- 약어 금지
- 단수명사 사용
- 고유한 이름 사용
- 생성 의미대로 부여
속성
업무에서 필요로하는 인스턴스, 관리하고자 하는 의미상 분리되지 않는 최소 데이터 단위
- 하나의 엔터티는 2개 이상의 인스턴스 집합 / 2개 이상의 속성을 갖는다.
- 하나의 속성은 하나의 인스턴스에만 존재할 수 있고, 1개의 속성값을 갖는다.
속성의 분류
- 기본 : 업무로부터 추출한 모든 일반적인 속성
- 설계 : 원래 업무상으로는 존재하지 않지만, 설계를 하면서 도출해내는 속성업무를 규칙화하기 위해 새로 만듦
- 파생 : 다른 속성으로부터 계산이나 변형이 되어 발생
속성의 명명 규칙
- 해당 업무에서 사용하는 단어를 이용
- 서술식 속성명 X
- 약어 X
- 전체 데이터 모델에서 유일성 확보
도메인 : 각 속성이 가질수 있는 값 범위
관계
엔터티의 인스턴스 사이의 논리적인 연관성, 존재의 형태/행위, 서로에게 연관성이 부여된 상태
- 존재의 의한 관계 : 부서/사원
- 행위에 의한 관계 : 고객/주문
UML에는 연관관계와 의존관계가 있는데, 연관관계는 항상 이용하는 관계이고 의존 관계는 상대방 행위에 의해 발생하는 관계이다.
ERD에서는 존재적 관계와 행위에 의한 관계를 구분하지 않고 표기했지만 UML에서는 실선, 의존 관계는 점선으로 표현한다.
관계 표기법
- 관계명 : 관계의 이름
- 관계 차수 : 1:1, 1:N, N:M
- 관계선택사양 : 필수 관계, 선택 관계
관계 체크사항
- 2개의 엔터티 사이에 관심있는 연관 규칙이 있는가?
- 2개의 엔터티 사이에 정보의 조합이 발생하는가?
- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
- 업무기술서, 장표에 관계연결을 가능케하는 동사가 있는가?
식별자
엔터티 내에서 인스턴스를 구분하는 구분자, 논리데이터 모델링에 사용
식별자 특징
- 유일성 : 주식별자에 의해 모든 인스턴스들이 유일하게 구분
- 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함
- 불변성 : 지정된 주식별자의 값은 자주 변하지 않아야 함
- 존재성 : 주식별자가 지정이 되면 반드시 값이 들어와야 함 (NULL 불가)
식별자 종류
- 대표성 여부
- 주식별자 : 엔터티 내에서 각 인스턴스를 구분할 수 있는 구분자, 타 엔터티와 참조관계를 연결할 수 있다.
- 보조식별자 : 엔터티 내에서 각 인스턴스를 구분할 수 있는 구분자이지만 대표성이 없는 구분자, 참조관계를 연결하기 위해 사용할 수 없음
- 스스로 생성 여부
- 내부식별자 : 엔터티 내부에서 스스로 생성되는 식별자
- 외부식별자 : 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자
- 단일 속성으로 식별 여부
- 단일식별자 : 하나의 속성으로 구성된 식별자
- 복합식별자 : 2개 이상의 속성으로 구성된 식별자
- 대체 여부
- 본질식별자 : 업무에 의해 만들어진 식별자
- 인조식별자 : 편의성을 위해 인위적으로 만들어진 식별자, 원조식별자가 복잡한 구성을 가지고 있어서 인위적으로 생성
비식별자
약한 연결관계를 표현하기 위함, 부모엔터티와 자식엔터티간의 상호작용이 선택사항
항목 | 식별자 관계 | 비식별자 관계 |
목적 | 강한 연결관계 표현 | 약한 연결관계 표현 |
자식 주식별자 영향 | 자식 주식별자의 구성에 포함됨 | 자식 일반 속성에 포함됨 |
표기법 | 실선 표현 | 점선 표현 |
연결 고려사항 | - 강한 종속관계 (반드시 부모 엔터티에 종속) - 자식 주식별자 구성에 부모 주식별자 포함 필요 - 상속받은 주식별자 속성을 타 엔터티에 이전 필요 |
- 약한 종속관계 - 자식 주식별자 구성을 독립적으로 구성 - 자식 주식별자 구성에 부모 주식별자 부분 필요 - 부모쪽의 관계참여가 선택관계 |
데이터 모델과 SQL
정규화
테이블 간의 데이터 중복을 없애기 위한 작업 ⇒ 무결성 유지, DB 용량 감소
데이터 조회시에 JOIN을 유발, 기본적으로 성능이 저하됨
논리 데이터 모델의 일관성 확보
- 제1 정규화 : 테이블의 칼럼이 원자값(하나의 값)을 갖도록 분해하는 것, 모든 인스턴스가 하나의 값을 가져야함
- 제2 정규화 : 엔터티의 일반속성은 주식별자 전체에 종속적이여야함, 실선 표기
- 기본키가 2개 이상의 칼럼으로 이루어진 경우에만 발생 ⇒ 기본키가 하나의 칼럼으로 이루어져있으면 2정규화 생략
- 제3 정규화 : 엔터티의 일반속성 간에는 서로 종속적이지 않음 이행적 종속이 없도록 분해하는 것, 점선 표기
- 보이스-코드 정규화(BCNF) : 강한 3정규화, 기본키를 제외하고 후보키가 있는경우, 후보키가 기본키를 종속시키면 분해
함수 종속성
X → Y일때 Y는 X에 함수적으로 종속적이다 (X가 변화할때 Y도 변화하는가를 확인)
- 완전함수 종속성 : 기본키를 제외한 모든 속성이 다른 속성에 종속되지 않는 경우
- 부분함수 종속성 : 기본키가 여러 속성으로 구성된 경우, 기본키를 구성하는 속성 중 일부에게 종속된 경우
- 부분함수 종속성을 제거하는 것이 제2정규화
- 이행함수 종속성 : 기본키를 제외한 속성간에 종속성이 발생하는 경우
- 이행함수 종속성을 제거하는 것이 제3정규화
반정규화
성능을 위해 중복을 허용하는 것, 데이터의 중복을 추구함
조화성능은 향상 가능성있다, 입력/수정/삭제 성능은 떨어짐