데이터 모델링
데이터 모델링
현실세계를 데이터의 관점에서 파악 -> ERD(Entity Relationship Diagram)으로 표현
(1)데이터 모델링의 개념
- 엔티티(Entitiy) : 관리할 대상이 되는 실체
- 관계(RelationShip) : 개체 간 대응 관계
- 속성(attribute) : 관리할 정보의 구체적 항목
(2) 데이터베이스 용어 vs 모델링 용어
데이터베이스 용어 | 모델링 용어 |
테이블 | 엔티티 |
컬럼,열 | 애트리뷰트, 속성 |
튜플,행 | 인스턴스 |
기본키 | 주 식별자 |
외래키 | 외래 식별자 |
(3) 엔티티란?
Entitiy는 업무의 관심 대상이 되는 정보를 가진 유,무형의 사물이나 객체
예) 고객, 사원정보, 입고전표, 공정 등
회원 (엔티티) - 권유리, 김태연, 임윤아 (인스턴스)
(4)엔티티의 특징
- 시스템 구축 대상이 되는 업무에 필요한 정보
- 2개 이상의 인스턴스가 존재해야한다.
- 반드시 1개 이상의 속성을 가져야한다.
(5)엔티티의 명명
- 현업 업무 사용 용어
- 약어는 되도록 사용X
- 단수명사
- 모든 엔티티명은 유일해야
- 의미대로 부여
(6) 속성
- 엔티티에서 관리하고자 하는, 더 이상 분리되지 않는 최소 단위의 데이터
- 엔티티는 '속성들의 집합'으로 정의된다.
- 현실 세계의 정보 항목 중 업무에 관심있는 정보 항목만을 선별하여 속성으로 취한다.
예) 현실 세계 : 회원번호,이름,성별,주소,생일,연락처 -> 회원 엔티티의 속성 : 회원번호,이름,주소,연락처
- 엔티티의 속성은 테이블의 컬럼에 대응
(7) 관계
- 두 개 이상의 엔티티들 간의 의미있는 연결
- 엔티티와 엔티티가 서로에게 영향을 주는 형태
- 두 엔티티가 관계가 있다는 것의 의미는 서로 공유하는 속성이 존재
- 관계의 명명 : 어느 엔티티의 관점에서 보느냐에 따라서 달라질 수 있다.
(7-1) 관계의 카디널리티(Cardinality)
- 두 개의 엔티티간의 관계에서 참여자(인스턴스)의 수를 표현
- 단일 : | , 다중 : <
- 1: 1 관계의 경우, 두 엔티티는 하나로 합칠 수 있다. (학생 - 신체정보)
- 1: N 관계는 대부분의 관계 ( 학생 - 학생의 취미)
- M : N 관계는 아직 완성되지 않은 작업으로 간주되며, M:N 관계를 해소하기 위한 추가 작업 필요 (제품 - 제조업체)
(7-2) 관계의 참여도
- 관계가 있는 두 엔티티들의 인스턴스들이 항상 관계에 참여하는지, 아니면 경우에 따라 참여하는지 여부
- 필수 : |, 선택 : o
- 모든 사원들은 반드시 부서를 가짐 ( | ) , 단 하나의 부서에 소속된다 ( | )
- 어떤 부서는 특정 시점에서는 사원이 없을 수도 있고(o), 있는 경우 여러 사원을 포함한다(<)
(7-3) 부모 엔티티와 자식 엔티티
- 상호 관계가 있는 두 엔티티는 부모-자식 관계일 가능성이 높다.
- 정보가 먼저 생성되는 곳이 부모 엔티티, 가져다 쓰는 곳이 자식 엔티티
- 부모 엔티티의 주 식별자는 자식 엔티티의 외래식별자와 연결된다.
(8) 식별자 vs 키
Data Modeling 단계 | 물리적 DB 설계 단계 |
주식별자 : 엔티티 내에서 인스턴스를 구별하는 기준 | 기본키 |
외래식별자 : 엔티티와 엔티티를 연결해주는 고리 역할 | 외래키 |
보조식별자 | 대체키 |
- 관계형 데이터베이스에서 주 식별자의 속성은 null 값을 가질 수 없지만, 외래 식별자 속성은 null값을 가질 수 있다.
(9) 정규화
- 관계형 데이터 모델에서 데이터의 중복요소를 찾아 제거하는 과정으로 이상 현상을 방지하고, 데이터의 일관성과 정확성 유지를 위해 무손실 분해하는 과정이다.
- 3차 정규화 정도면 설계에는 무리가 없다.
(9-1) 제 1 정규화
- 엔티티에서 하나의 속성이 복수개의 값을 갖도록 설계되어 있을 때 하나의 속성이 단일 값을 갖도록 변경
- 즉, 테이블의 컬럼이 원자 값을 갖도록 테이블을 분해하는 것
사원번호 | 취미 |
1001 | 등산 낚시 |
1002 | 테니스 등산 |
제 1 정규화를 진행하면 다음과 같이 바뀐다.
사원번호 | 취미 |
1001 | 등산 |
1001 | 낚시 |
1002 | 테니스 |
1002 | 등산 |
(9-2) 제 2 정규화
- 제 1정규화가 만족된 상태에서
- 주 식별자가 아닌 속성들 중에서 주 식별자 전체가 아닌 일부 속성에 종속된 속성을 찾아 제거하는 과정
- 부분함수 종속을 제거(완전 함수적 종속 관계로)
고객명 | 제품 이름 | 판매 가격 | 구매평가 |
김지영 | 컴퓨터 | 100만원 | 5.0 |
김지영 | 냉장고 | 300만원 | 3.5 |
황소희 | 냉장고 | 300만원 | 4.0 |
- 고객명과 제품이름이 (PK)로서 복합키로 작용하여 구매평가에 영향을 주고 있지만, 판매 가격은 제품 이름에 의해서만 영향받는다. 이를 부분함수 종속 관계라고 하는데, 이를 분리하여 제 2 정규형을 만족시킬 수 있다.
고객명 | 제품 이름 | 구매평가 |
김지영 | 컴퓨터 | 5.0 |
김지영 | 냉장고 | 3.5 |
황소희 | 냉장고 | 4.0 |
제품이름 | 판매 가격 |
컴퓨터 | 100만원 |
냉장고 | 300만원 |
(9-3) 제 3 정규화
- 주 식별자가 아닌 속성들 중에서 종속관계에 있는 속성을 찾아 제거
- 이행함수의 종속을 제거
책번호 | 도서 이름 | 저자 | 저자 개인 블로그 |
1 | THIS IS DATABASE | 김땡땡 | www.data.com |
2 | EVERYTHING ABOUT DATA | 이수민 | www.blogc.com |
3 | EVERYTHING ABOUT PROGRAMMING | 이수민 | www.blogc.com |
책번호에 도서이름이 종속되어있고, 책 번호 -> 저자에 영향을 미친다. 그러나 저자 개인 블로그의 경우 저자에 종속되어있다.
즉, 책 번호가 저자에 영향을 주고, 저자가 저자 개인 블로그에 영향을 주고 있는, 이른바 A->B, B->C의 이행함수 종속관계에 있으므로 분리한다. 책번호 -> 저자 개인블로그에 직접적인 영향을 미치지 않기 때문이다.
저자 | 저자 개인 블로그 |
김땡땡 | www.data.com |
이수민 | www.blogc.com |
이수민 | www.blogc.com |
책번호 | 도서이름 | 저자 |
1 | THIS IS DATABASE | 김땡땡 |
2 | EVERYTHING ABOUT DATA | 이수민 |
3 | EVERYTHING ABOUT PROGRAMMING | 이수민 |
(10) 반정규화란
- 정규화의 반대 개념
- 어느 정도의 중복은 감수하고 데이터베이스의 성능(검색 속도) 향상을 위해 ERD를 정규화 이전 상태로 변경하는 과정
- 정규화 과정은 엔티티들을 분리하는 형태로 진행되었다면, 반정규화 과정은 엔티티들을 통합하는 형태로 진행
- 반정규화를 하는 경우 데이터 무결성에 문제가 발생할 수 있다.
<통합의 경우>
- 두 엔티티를 조인하는 데 걸리는 시간을 절약하려는 목적
- 항상 또는 대부분을 조인에 의해 검색하거나, 검색이 빈번히 이루어진 두개의 엔티티를 대상으로 함
예) 반정규화 이전 : SELECT 주문번호, 주문일, 주문업체, 제품번호, 수량, 금액 FROM 주문, 주문내역;
반정규화 이후 : SELECT 주문번호, 주문일, 주문업체, 제품번호, 수량, 금액 FROM 주문정보;
(11) 논리적 DB설계와 물리적 DB설계의 차이점
논리적 DB설계 (데이터 모델링) : DBMS의 종류나 제품에 관계없이 진행 ( 엔티티, 속성, 관계, 주식별자, 외래식별자)
물리적 DB설계 : 특정 DBMS를 전제로 진행 (테이블,컬럼,기본키,외래키,뷰,인덱스)
논리적 DB 설계 -> 물리적 DB 설계 : ERD의 요소들을 관계형 데이터베이스의 요소들로 전환하는 것
- 엔티티 -> 테이블 ( 한글 엔티티명 -> 영문 테이블명 )
- 속성 -> 컬럼 (한글 속성명 -> 영문 컬럼명, 데이터 타입 지정)
- 주식별자, 외래 식별자 -> 기본키, 외래키
- 엔티티 간의 관계, 카디널리티 및 관계의 참여도(필수,선택)도 그대로 적용