본문 바로가기
IT 와 Social 이야기/Relational Data Modeling 프리미엄 가이드 - 김기창

04 정규화 (Normalization) 5

by manga0713 2019. 10. 21.

 

 

 

 

- 4정규형

  • 다가 종속 개념이 기반이 되는 정규형이다.
  • 다가 종속(MVD: Multivalued Dependency): 한 릴레이션에 다가 속성(Multivalued Attributed)이 두 개 이상 존재할 때 발생할 수 있다. 즉 하나의 다 속성의 모든 값이 다른 다가 속성의 모든 값마다 중복되는 문제점이 발생할 수 있는데 이를 다가 종속이라 한다.
    • 즉 두 개의 독립적인 일대다(1:M) 관계의 속성이 동일한 릴레이션에 존재하면 다가 종속이 발생한다.
    • 속성 A의 하나의 값이 속성 B의 여러 값을 결정하면 A →→ B로 표시하며 'A가 B를 다가 결정(Multidetermine)한다'. 또는 'B가 A에 다가 종속(Multidependent)됐다.라고 한다.
    • 아래 릴레이션은 다가 종속의 사례이다. 사원은 여러 기술을 가지고 있으며 구사할 수 있는 언어도 여러 개다. 그리고 기술과 언어는 아무런 연관 관계가 없다. 즉 '모델링'을 '영어'로 할 수 있다는 요건은 없다.

 

 

 

 

 

 

  • 위 릴레이션에서 기술과 언어 사이에는 직접적인 연관이 없고 단지 한 사원에 속해 있어 간접적인 연관 관계만이 존재한다. 즉 어떤 기술이 어떤 언어와 쌍이 되는지는 중요하지 않으므로 아래와 같이 두 개의 릴레이션으로 분해해야 한다.

 

 

 

 

 

 

  • 4정규형은 1정규형과 유사하나 1정규화는 다가 속성을 엔터티로 분해하는 것이고 4정규화는 서로 관련이 없는 다가 속성을 개별 엔터티로 분해하는 것이다.
  • 다가 속성을 1정규형으로 만들면 다가 종속은 자연히 제거 된다.

 

 

- 5정규형

  • 조인 종속(Join Dependency) 개념을 기반으로 한다. 조인 종속이 존재하면 5정규화 대상이다.
  • 필요한 데이터가 사라지지 않는 무손실 분해가 되고 필요 없는 데이터가 생기지 않는 비부가적 분해가 된 릴레이션이 5정규형이다.
    • 무손실 조인(Lossless Join): 하나의 릴레이션을 여러 개의 릴레이션으로 분해(Decomposition)한 후 공통(식별자) 속성으로 조인(Join)하여 데이터 손실 없이 원래의 릴레이션으로 복원할 수 있는 경우
    • 비부가적 조인(Nonadditive Join): 조인한 결과에 원래 릴레이션에 없는 데이터(가짜 튜플)가 존재하지 않는 경우
  • 아래 릴레이션처럼 사원이 보유한 기술과 구사하는 언어가 관계가 있다는 업무 요건이 존재하는 경우 즉 사원이 기술과 연관성이 있고 또한 사원이 언어와 연관성이 있으므로 세 속성 사이에는 연관성이 존재하면 조인 종속이 존재하는 5정규형 위반이 된다.

 

 

 

 

 

  • 위 릴레이션을 아래와 같이 3 개의 릴레이션으로 분해할 수 있으며 분해 후 다시 조인하면 위 릴레이션으로 돌아갈 수 있다.

 

 

 

 

 

  • 5정규형은 조인 종속이 존재하지 않아야 하므로 위와 같이 분해하면 더 이상 분해할 수 없는 5정규형이 된다. 5정규형은 릴레이션을 분할하고(Project) 합치는(Join) 개념 때문에 PJ정규형(Project-Join Normal Form)이라고도 한다.

 

 

- 정규형의 유형과 특징

 

 

 

 

 

 

4.6. 정규형과 성능

 

 

 

- 성능

  • 조회 성능
    • 빠르게 추출
    • 대부분의 성능 문제를 의미
    • 소량의 데이터에 대한 조회 성능은 주로 인덱스로 해결되며
    • 대량의 데이터는 스캔 방법과 조인 방법을 사용해서 해결할 수 있다.
    • 조회 성능 문제를 해결할 수 있는 또 다른 방법은 비정규형을 채책하는 것이다. 하지만 비정규형이 정규형보다 성능이 좋아진다는 보장이 없다. 때에 따라 더 나빠질 수 있으므로 무조건 비정규형을 채택하면 얻는 것보다는 잃는 것이 더욱 많을 것이다.
  • 인서트 성능
    • 빠르게 저장
    • 많은 트랜잭션을 최대한 빨리 동시에 입력 처리하는 것
    • 조회 성능에 비해 흔하게 발생하지 않지만 핵심적인 업무와 연관돼 있으므로 간과하면 심각한 문제를 일으킨다.
    • 은행 입출금, 거래소 주문/체결 시는 엄청난 트랜잭션이 발행하며 단순한 성능 문제는 인덱스가 해결책으로 많이 사용되지만 위의 예에서는 무용지물이 되고 오히려 인서트 성능을 저하 시킨다.
    • 인서트 구문에 대한 튜닝은 한계가 있으며 방법이 다양하지도 않다. 한꺼번에 다량이 발생하므로 경합을 줄여주는 방향으로 성능 이슈를 해결해야 한다. 그래야 동시에 가능한 많은 건수를 저장할 수 있다.

 

- 정규화를 하면 중복 데이터가 최소화되고 인스턴스의 크기는 작아진다. 그러면 한 블록에 저장하는 인스턴스는 많아지게 된다. 만약 한 블록(8Kbytes)에 100명의 고객 데이터가 존재하면, 특정 고객을 조회할 때 이미 메모리에 올라온 블록에 다른 고객의 데이터도 존재할 수 잇어 다른 조객에 대한 조회 성능이 좋아진다. 바로 적중률(Hit Ratio)이 높아진다.

 

- 정규화의 기본 개념이 함수 종속이므로 종속성, 의존성이 같은 데이터(성격이 같은 데이터)는 업무에서 같이 조회될 가능성도 커져 최소의 블록을 사용하는 효과를 얻게 된다.

 

- 조회 성능일 경우 고려해야 할 중요한 요소 중 하나는 화면 구성이다. 화면 구성에 따라 비정규형을 채택할 수도 있다.

 

- 화면에 데이터를 보여주는 방법이 테이블(스프레드시트) 형식이며, 항목이 오른쪽으로 길게 나열되면 데이터 구조도 그에 맞도록 비정규화하는 것이 좋을 때가 많다.

 

- 조회 성능이든 인서트 성능이든 성능 이슈는 가능한 빠른 단계에서 검토하는 것이 바람직 하다.