티스토리 뷰

반응형

https://www.youtube.com/watch?v=QB_GYdHUHmA

 

41:31부터.

 

정규화(DB Normalization)의 개념

 

간단하게 말하면 엔터티를 분해하는 과정

 

  • 최소한의 데이터만을 하나의 엔터티에 넣는 식으로 데이터를 분해하는 과정이고, 기준을 수립하는 과정을 정규화라고 한다.
  • 엔터티를 상세화하는 과정으로 논리 데이터 모델링 수행 시점에서 고려된다.
  • 제 1 정규화부터 제 5 정규화까지 존재하지만, 실질적으로는 제 3정규화까지만 수행한다.

 

이상현상

정규화를 하지 않아 발생하는 현상(삽입이상,갱신이상,삭제이상)

특정 인스턴스가 삽입/갱신/삭제 될 때 정의되지 않아도 될 속성까지도 반드시 입력되어야 하는 현상이 발생한다.

 

정규화 단계

 

1. 제 1 정규화(1NF)

  • 테이블이 컬럼의 원자성(한 속성이 하나의 값을 갖는 특성)을 갖도록 테이블을 분해하는 단계이다.
  • 하나의 행과 컬럼의 값이 반드시 한 값만 입력되도록 행을 분리하는 것.

시험 문제 -> 최종 컬럼의 개수가 어떻게 될 것인가?

구매품목 1,2,3 / 구매품목가격 1,2,3 이렇게 두개의 컬럼으로 구성된다.

 

2. 제 2 정규화(2NF)

- 제 1 정규화를 진행하고 완전함수 종속을 진행

- 완전함수종속이란, 기본키를 구성하는 모든 컬럼의 값이 다른 컬럼을 결절짓는다.

 

(학생번호 +강의명)중 강의명에 의해 강의실이 결정되면 완전 함수 종속성이 위배된다.

따라서 PK와 부분함수 종속성을 갖는 컬럼을 각각 다른 테이블로 분해하여 (즉, 강의명을 기준으로 강의실 테이블을 하나 더 만든다)

 

3. 제 3 정규화(3NF)

-2정규화 후 이행적 종속을 없애도록 테이블을 분리

- 이행적 종속성 : A-> B, B->C의 관계가 성립할 떄 A->C가 성립되는 걸 말한다.

 

제품을 사는 고객이 있고, 제품에 따라 가격이 있다.

그러면 고객이 제품을 사고, 제품에는 가격이 있는 이행적 종속성의 관계.

따라서 고객과 제품, 그리고 제품과 가격 테이블로 나눈다.

 

4. 제 4 정규화(4NF)

-여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거

 

5. 제 5 정규화(5NF)

- 조인에 의해서 종속성이 발생되는 경우 분해

 

반정규화=>2024년부터는 빠졌으나, 데이터 베이스의 이해에는 필요하다.

 

반정규화=역정규화의 개념

- 데이터베이스의 성능 향상을 위해 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 기법

- 시스템의 성능 향상, 개발 및 운영의 단순화를 위해 정규화된 데이터 모델을 중복, 통합, 분리하는 데이터 모델링 기법

- 조회 속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.

 

사용 경우

JOIN이 너무 성능을 저하시킬때 그냥 테이블을 조합한다.

다량의 범위를 자주 처리

특정 범위의 데이터만 자주 처리

요약/집계 정보가 자주 처리

 

 

관계의 개념

엔터티의 인스턴스 사이의 논리적인 연관성이다.

관계를 맺는다는 건 부모의 식별자를 자식에게 상속하고, 상속된 속성을 매핑키(조인키)로 활용한다는 뜻이다.

 

즉, A 테이블에서의 a1 속성을 B 테이블에 가져와서 a1의 속성들을 매핑키로 사용한다.

 

관계의 분류

존재 관계는 엔터티 간의 상태를 의미한다.

ex) 사원 엔터티는 부서 엔터티에 소속된다.

 

행위 관계는 엔터티 간의 어떤 행위가 있는 것을 의미한다.

ex) 주문은 고객이 주문할 떄 발생한다.

 

조인의 의미

결국 정규화를 통해서 분리가 되었는데, 두 데이터를 같이 출력하기 위함

 

계층형 데이터 모델이다. 자기 자신끼리 관계가 발생할 수 있다(셀프조인)

 

상호배타적 관계

- 두 테이블 중 하나만 가능한 관계를 말한다.

주문 엔터티에는 개인 또는 법인번호 둘 중 하나만 상속될 수 있다. => 상호 배타적 관계

즉, 주문은 개인고객이거나 법인고객 둘 중 하나의 고객만이 가능

 

트랜잭션

- 하나의 연속적인 업무 단위

- 트랜잭션에 의한 관계는 필수적인 관계 형태를 가진다.

 

모두 성공하거나 모두 취소돼어야 한다(ALL or Nothing)

이런 특성을 가지는 연속적인 업무 단위를 트랜잭션이라고 한다.

서로 독립적으로 발생하면 안되는 업무 단위를 트랜잭션이라고 하는 것.

 

부분 COMMIT 불가

동시 COMMIT 또는 ROLLBACK 처리

 

필수적, 선택적 관계와 ERD

두 엔터티의 관계가 서로 필수적일 때 하나의 트랜잭션을 형성한다

 

IE 표기법) -원을 사용하여 필수적 관계와 선택적 관계를 구분한다.

필수적 관계에는 원 X

서택적 관계에는 관계선 끝에 원

 

바커표기법) - 실선과 점선으로 구분

필수적 관계는 실선

선택적 관계는 점

 

NULL의 이해

 

- DBMS에서 아직 정해지지 않은 값을 의미한다.

- 모델 설계 시 각 컬럼별로 NULL을 허용할 지를 결정한다.

 

NULL의 특성

1. NULL을 포함한 연산 결과는 항상 NULL

하나가 값이 있어도 다른 게 NULL이면 NULL로 나온다.

 

NULL을 치환한다.

MYSQL = ISNULL(해당 속성, 대체값)

ORACLE = NVL(해당 속성, 대체값)

 

2. 집계함수는 NULL을 제외한 연산 결과를 리턴한다.

sum,avg,min,max 등의 함수는 항상 NULL을 무시한다.

 

다만 평균의 경우 NULL을 무시한 평균을 리턴하므로 수식을 직접 써서 고려해야한다.

 

IE 표기법에서는 NULL 허용여부 알기 불가

바커 표기법에서는 속성 앞에 동그라미

 

식별자 구분(대체 여부에 따른)

1) 본질식별자

- 업무에 의해 만들어지는 식별자(꼭 피룡한 식별자)

 

2) 인조식별자

- 인위적으로 만들어지는 식별자(꼭 필요하진 않지만 관리의 편이성 등의 이유로 인위적으로 만들어지는 식별자)

- 주로 각 행을 구분하기 위한 기본키로 사용된다.

 

1. PK : 주문번호 + 상품번호로 설정하면 본질식별자가 된다.

하나의 주문번호로 같은 상품의 주문 결과를 저장할 수 없다.

 

2. PK : 주문번호 + 주문순번(주문 순번이라는 컬럼을 생성한다)

- 하나의 주문에 여러 상품에 대한 주문 결과 저장 가능하다 -> 주문순번으로 구분한다.

 

3. PK : 주문상세번호(인조식별자 생성)

- 주문 상세번호로 각 주문이력을 구분하기 때문에 같은 주문의 같은 상품이력이 저장될 수 있음

- 주문상세번호만이 주식별자이므로 나머지 정보들이 불필요하게 중복 저장될 위험 발생

- 실제 업무와 상관없는 주문상세번호를 주식별자로 생성하면 쓸모없는 index가 생성된다.

 

따라서 인조식별자는 다음의 단점이 있다.

1. 중복 데이터 발생 가능성 -> 데이터 품질 저하

2. 불필요한 인덱스 생성 -> 저장공간 낭비 및 DML 성능 저하

 

인덱스는 DML시  INDEX SPLIT 현상으로 인해 성능이 저하된다.

반응형