본문 바로가기
ORACLE(DB)

데이터 모델링

by 둥바 2022. 5. 26.

데이터 모델링

현실세계를 데이터의 관점에서 파악 -> ERD(Entity Relationship Diagram)으로 표현

 

 

(1)데이터 모델링의 개념

- 엔티티(Entitiy) : 관리할 대상이 되는 실체

- 관계(RelationShip) : 개체 간 대응 관계

- 속성(attribute) : 관리할 정보의 구체적 항목

(2) 데이터베이스 용어 vs 모델링 용어

데이터베이스 용어 모델링 용어
테이블 엔티티
컬럼,열 애트리뷰트, 속성
튜플,행 인스턴스
기본키 주 식별자
외래키 외래 식별자

 

(3) 엔티티란?

Entitiy는 업무의 관심 대상이 되는 정보를 가진 유,무형의 사물이나 객체

예) 고객, 사원정보, 입고전표, 공정 등

회원 (엔티티) - 권유리, 김태연, 임윤아 (인스턴스)

 

(4)엔티티의 특징

- 시스템 구축 대상이 되는 업무에 필요한 정보

- 2개 이상의 인스턴스가 존재해야한다.

- 반드시 1개 이상의 속성을 가져야한다.

 

(5)엔티티의 명명

- 현업 업무 사용 용어

- 약어는 되도록 사용X

- 단수명사

- 모든 엔티티명은 유일해야

- 의미대로 부여

 

(6) 속성

- 엔티티에서 관리하고자 하는, 더 이상 분리되지 않는 최소 단위의 데이터

- 엔티티는 '속성들의 집합'으로 정의된다.

- 현실 세계의 정보 항목 중 업무에 관심있는 정보 항목만을 선별하여 속성으로 취한다.

예) 현실 세계 : 회원번호,이름,성별,주소,생일,연락처 -> 회원 엔티티의 속성 : 회원번호,이름,주소,연락처

- 엔티티의 속성은 테이블의 컬럼에 대응

 

(7) 관계

- 두 개 이상의 엔티티들 간의 의미있는 연결

- 엔티티와 엔티티가 서로에게 영향을 주는 형태

- 두 엔티티가 관계가 있다는 것의 의미는 서로 공유하는 속성이 존재

- 관계의 명명 : 어느 엔티티의 관점에서 보느냐에 따라서 달라질 수 있다.

 

(7-1) 관계의 카디널리티(Cardinality)

- 두 개의 엔티티간의 관계에서 참여자(인스턴스)의 수를 표현

- 단일 : | , 다중 : <

학생 1명이 N개의 과목과 관련, 수강과목 1개의 정보는 학생 1명과의 관계를 가지므로 1 : N

- 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의 요소들을 관계형 데이터베이스의 요소들로 전환하는 것

- 엔티티 -> 테이블 ( 한글 엔티티명 -> 영문 테이블명 )

- 속성 -> 컬럼 (한글 속성명 -> 영문 컬럼명, 데이터 타입 지정)

- 주식별자, 외래 식별자 -> 기본키, 외래키

- 엔티티 간의 관계, 카디널리티 및 관계의 참여도(필수,선택)도 그대로 적용