관계형 데이터 모델링 노트 3장

'데이터모델링 도서인 `관계형 데이터 모델링 노트 개정판` 책의 `3장 데이터 통합과 서브타입 이야기` 요약 및 정리

정민호정민호
Table of Contents

1. 엔터티 이야기

2. 정규화 이야기

3. 데이터 통합과 서브타입 이야기


요약
  1. 데이터 통합화(Generalization)

    1. 데이터 통합이란?

      • 유사한 성격의 데이터를 합치는 것으로 데이터라는 대상을 논리적, 물리적으로 일반화 하는것을 말함

      • 데이터 통합은 정규화를 기반으로 이뤄져야하고 의미가 있는선까지 일반화 해야하며, 성능 측면도 검토해야함

      • 엔터티를 일반화하거나 상세화하면 슈퍼타입(Supertype)과 서브타입(Subtype)이 생김

    2. 통합시 주의할 점

      1. 성능

        • 데이터를 통합하면 A집합과 B집합의 인스턴스 개수가 합쳐지기 때문에 데이터가 늘어나며, 인서트가 많이 발생하는 엔터티에 다른 엔터티를 통합하는것은 바람직하지 않음

      2. 정체성 희성

        • 지나치게 일반화 하면 데이터 정체성이 희석되므로 통합에 실익이 있는지 고려해야하며, 업무적인 일대일 관계는 분리하는 것이 바람직

        • 엔터티는 실체, 행위, 기준, 가공 엔터티로 분류할 수 있으며, 다른 분류의 엔터티 간에 통합이 발생하면 데이터의 정체성이 희석됨

      3. 무결성 저하

        • 통합해서 같이 사용하게 됨으로써 제약 조건을 생성하지 못하거나, 도메인을 정확히 설정하지 못할 수 있음

        • 주로 Not Null 제약이나 참조무결성(IR) 제약을 생성하지 못함

        • 데이터를 일반화 할 수록 무결성이 떨어짐

      4. 마이그레이션 가능 여부

        • 현실적인 문제로, 다른 모든 조건을 만족하더라도 마이그레이션에 문제가 생기면 통합 모델을 사용할 수 없음

    3. 통합시 고려사항

      1. 요약

        • 데이터의 본질(설격)이 유사할 때

        • 식별자가 동일하면서 유사한 속성이 존재할 때

        • 식별자는 다르지만, 기초 속성이 유사할 때

      2. 데이터의 성격이 유사할 때

      3. 엔터티의 기초속성이 유사할 때

      4. 데이터가 조회 등에 같이 사용될 때

      5. 역할을 관리할 때

      6. 대칭적인 업무일 때

      7. 계층 관계가 존재할 때

      8. 공통 속성이 존재할 때

      9. 배타 관계가 발생할 때

      10. 집계 엔터티의 집계 대상이 같을 때

      11. 비정규화를 수행할 때

      12. 일대일 관계일 때

      13. 유사한 종류의 데이터를 하나의 기준으로 만들 때

      14. 업무가 변경될 가능성이 많을 때

  2. 서브타입(Subtypes)

    1. 서브타입이란

      • 보통 서브타입이란 용어에는 슈퍼타입이 포함되어 있어서, 서브타입이라고만 표현해도 포괄적으로 슈퍼타입까지 포함됨

      • 서브타입이란 서브타입 엔터티(Subtypes Entity)를 말하며, 엔터티를 통합하거나 상세화한 결과가 서브타입으로 이는 모델의 확장성을 좋게함

      • 공통 속성은 슈퍼타입 엔터티에 속하고 고유 속성은 서브타입 엔터티에 속하며 고유 속성이 없는 서브타입(불완전(Incomplete) 서브타입)이 존재 할 수 있음

      • 슈터타입과 서브 타입은 부모·자식 관계가 아니라 동등한 관계로 슈퍼타입과 서브타입을 하나의 인스턴스로 인식해야함

      • 서브타입 엔터티 간의 관계는 일반적으로 상호 배타적(Exclusive)이지만, 간혹 포함적(Inclusive)일 때도 있음

      • 데이터가 어떤 종류(집합)로 이루어졌는지를 한눈에 보여주기 위함

      • 서브타입으로 도출된 엔터티는 핵심 엔터티일 가능성이 크므로 모델링시 심도있게 고민

    2. 서브타입 도출 방법

      1. 유사한 성격의 엔터티를 모아서 슈퍼타입을 생성하는 방법(Roll-Up Supertypes)

        • 두개 이상의 유사한 엔터티에서 공통 속성을 도출하는 방법이며, 엔터티 통합(일반화)라고 함

      2. 복잡한 엔터티를 분해해서 서브타입을 생성하는 방법(Break-Down Subtypes)

        • 복잡한 하나의 엔터티에서 유사한 속성끼리 분류하는 방법이며, 엔터티 상세화 또는 논리화(Logicalization)라고 함

        • 분류할 때 주요 속성부터 분석

    3. 서브타입과 코드의 차이점

      • 전체 집합의 성격을 파악하는 게 '서브타입’이고, 특정 속성의 성격을 파악하는게 '코드'

서브타입 코드

전체 집합에 대한 부분집합을 표현

특정 속성의 구분을 표현

전체 집합의 성격을 파악

한 속성의 성격을 파악

속한 속성이 여러 개 존재

속한 속성이 거의 존재하지 않음

한 엔터티에 하나만 존재

한 엔터티에 여러 개 존재

  1. 서브타입의 종류(Is-A, Part-Of)

    1. Is-A 서브타입

      • 인스턴스를 기준으로 묶으며, 서브타입과 연관

      • 데이터를 일반화 하면 부분집합은 전체 집합과 '이다'(Is-A) 관계가 성립하며, 역으로 '전체 집합 중에 부분집합이 존재한다’는 관계도 성립

      • 예) '개인고객(부분집합)은 고객(전체 집합)이다’는 관계가 성립하며, 역으로 '고객(전체 집합) 중에 개인고객(부분집합)이 존재한다’는 관계도 성립

    2. Part-Of 서브타입

      • 인스턴스를 기준으로 묶지 않으며, 수직분할(일대일 관계)과 연관

      • 요소(속성)를 기준으로 묶을 수 있는데, 이 때 '일부'(Part-Of) 관계가 성립

      • 예) '프로그램(부분집합)과 사용자매뉴얼(부분집합)은 소프트웨어(전체 집합)의 구성요소이다.'는 관계가 성립

      • 예) '프로그램은 소프트웨어이다', '사용자매뉴얼은 소프트웨어이다' 와 같이 '이다'(Is-A)관계가 성립하지 못함

      • 일대일(1:1) 관계를 서브타입으로 잘못 파악한 것이 아닌지 의심해 볼 것

  2. 서브타입 구분(배타, 중복, 완전, 불완전)

    1. 배타 서브타입(Exclusive Subtype 또는 Disjoint Subtype)

      • 배타 서브타입은 서브타입 부분집합 간에 중복이 발생하지 않는 서브타입

      • 하나의 슈퍼타입 인스턴스는 단 하나의 서브타입과 관계(일대일 관계)가 발생하며, 전체 서브타입의 합은 슈퍼타입이 됨

      • 상호 배타적이기 때문에 포함관계가 없어야함

    2. 중복 서브타입(Inclusive Subtype 또는 Overlapping Subtype)

      • 중복 서브타입은 서브타입 부분집합 간에 중복이 발생하는 서브타입

      • 서브타입 A와 B가 있을 때 A에도 속하고 B에도 속하는 인스턴스가 있는 서브타입

    3. 중복 서브타입 관리 방법

      1. 슈퍼타입 인스턴스와 서브타입 인스턴스가 일대일(1:1) 대응(논리적 관계비)

        • 서브타입 인스턴스의 개수를 합하면 슈퍼타입 인스턴스의 개수와 동일

      2. 슈퍼타입 인스턴스와 서브타입 인스턴스가 일대다(1:M) 대응(논리적 관계비)

        • 한 개의 슈퍼타입 인스턴스가 두 개의 서브타입 인스턴스와 대응

        • 실체(사람)와 역할(고객, 개인고객, 사원)을 관리하는 엔터티를 구분하여 설계하는 방법을 고려해 볼 것

    4. 배타 서브타입과 중복 서브타입 판단 기준

      • 배타 서브타입과 중복 서브타입을 판단하는 기준은 특정 시점에 동시에 발생할 수 있는지 여부

      • 배타 서브타입은 특정 시점에 중복이 발생하지 않으며, 중복 서브타입은 특정 시점에 중복이 발생할 수 있음

      • 이력 데이터의 경우 현재 시점을 기준으로 서브타입 양쪽에 데이터가 있는지를 따지면 배타 서브타입인지 중복 서브타입인지 알 수 있음

    5. 완전 서브타입(Complete Subtype)

      • 완전 서브타입은 슈퍼타입의 모든 인스턴스가 최소한 하나의 서브타입 인스턴스와 관계가 존재하는 서브타입

      • 일반적이고 대부분을 차지하며, 서브타입에 인스턴스가 생성될 때 서브타입에도 인스턴스가 생성되면 완전 서브타입

    6. 불완전 서브타입(Incomplete Subtype)

      • 불완전 서브타입은 슈퍼타입에만 인스턴스가 존재하고 서브타입에는 인스턴스가 존재하지 않는 서브타입

      • 서브타입에 인스턴스가 생성될 때 서브타입에도 인스턴스가 생성되지 않으면 불완전 서브타입

    7. 서브타입 구분(배타, 중복, 완전, 불완전)별 특성

인스턴스 제약 배타 중복

완전

EC(Exclusive-Complete) 서브타입

IC(Inclusive-Complete) 서브타입

- 슈퍼타입의 한 인스턴스는 하나의 서브타입 인스턴스와 관계 존재

- 슈퍼타입의 한 인스턴스가 두 개 이상의 서브타입 인스턴스와 관계가 존재할 수 있음

- 슈퍼타입의 모든 인스턴스는 서브타입 인스턴스와 관계가 존재

- 슈퍼타입의 모든 인스턴스는 서브타입 인스턴스와 관계가 존재

불완전

EI(Exclusive-Incomplete) 서브타입

II(Inclusive-Incomplete) 서브타입

- 슈퍼타입의 한 인스턴스는 하나의 서브타입 인스턴스와 관계 존재

- 슈퍼타입의 한 인스턴스가 두 개 이상의 서브타입 인스턴스와 관계가 존재할 수 있음

- 슈퍼타입의 어떤 인스턴스는 서브타입의 인스턴스와 관계가 존재하지 않음

- 슈퍼타입의 어떤 인스턴스는 서브타입의 인스턴스와 관계가 존재하지 않음

  1. 슈퍼타입·서브타입 논리 모델의 물리 모델 변환 방법

    1. 물리 모델로 변환시 고려 사항

      • 성능(논리적인 판단, 조회 범위 및 횟수)

      • 관리적인 측면

      • 사용 결합도

      • 통합 관점

    2. 서브타입별로 엔터티 분할(타입1-분할)

      • 서브타입마다 별도의 엔터티로 만드는 방법

      • 서브타입별로 엔터티를 각자 생성한 후에, 슈퍼타입의 주 식별자를 포함한 속성 전부를 양쪽 엔터티에 추가

      • 주 식별자의 값이 중복되면 안되므로 이를 체크하기 위한 로직 또는 엔터티가 필요함

    3. 슈퍼타입 엔터티 하나로 통합(타입2-통합)

      • 슈퍼타입에 서브타입을 통합하는 방법

      • 각 서브타입에 속하는 속성을 슈퍼타입에 포함시키고, 서브타입을 삭제해 슈퍼타입만 남김

      • 각 서브타입을 슈퍼타입으로 포함시킴으로써 서브타인간 식별할 수 있는 속성이 추가되어야하고, 속성의 널(Null) 값이 많이 발생되므로 이를 체크하기 위한 Check 제약이 필요함

    4. 슈퍼타입 엔터티와 개별 서브타입 엔터티로 분할(타입3-혼합)

      • 슈퍼타입과 개별 서브타입을 별도의 엔터티로 분할하는 방법

      • 슈퍼타입·서브타입 논리 모델 구조가 그대로 물리 모델로 변환되며, 이 때 두가지 방법이 있음

        1. 슈퍼타입과 서브타입의 관계가 일대일(1:1) 관계

        2. 슈퍼타입과 서브타입의 관계가 배타(Arc) 관계

      • 모델 구조적으로도 직관적이라 실무에서 주로 사용되는 모델이

      • 하지만 서브타입은 서로 배타적이어야하며(배타 서브타입), 모든 서브타입의 합집합이 전체 집합이 돼야 한다(완전 서브타입)는 서브타입의 일반적인 정의를 표현한 최적을 모델은 아님

      • 이 모델에서는 서브타입이 상위 엔터티의 성격을 지니며, 슈퍼타입의 주 식별자 값을 체크하기 위해 트리거가 필요함

      • 장점으로 모델 구조가 일종의 제약 역할을 하여 데이터를 더욱 정확하게 관리한다는 점

      • 단점으로 참조 무결성 제약을 생성할 수 없다는 점과 주 식별자 값을 생성하기 어려워 지고, 채번하기 복잡하다는 점

    5. 서브타입 모델을 물리 모델로 변활할 때의 선택 기준

      1. 서브타입별로 엔터티 분할(타입1-분할)

        1. 선택기준

          • 서브타입별 업무가 서로 독립적일 때

          • 서브타입별 속성/관계가 많이 다를 때

          • 서브타입별 주 식별자가 상호 배타적이 아닐 때

          • 모든 서브타입을 동시에 조회하는 경우가 드물 때

          • 서브타입이 업무적으로 서로 약 결합(Loosely Coupled) 관계일 때

        2. 장점

          • 엔터티의 속성이 근본적으로 구분되므로 엔터티를 명확하게 관리할 수 있음

          • 대부분의 조회 요건이 개별 서브타입을 사용할 때 효율적

          • 각 엔터티에 해당하는 업무에 대해 상호 영향을 미치지 않고(Loosely Coupled) 처리할 수 있음

          • 즉 정규직사원 엔터티에 속성을 추가할 때 계약직사원 엔터티에 영향을 끼치지 않음

          • 각 엔터티의 크기가 줄어듦

          • 슈퍼타입과 서브타입 엔터티의 조인이 필요 없으므로 성능 면에서 유리

          • 널(Null) 값을 갖는 속성이 줄어듦

        3. 단점

          • 정규직 사원과 계약직 사원을 동시에 조회하는 요건이 있을 때(강 결합; Tightly Coupled)유니온이 발생하여 쿼리가 복잡해지고 성능 측면에서 불리해짐

          • 사원유형코드 속성과 같이 서브타입을 구분하는 속성을 사용하면 처리하기 불편함

          • 시퀀스나 채번 관리 엔터티를 사용해 주 식별자 값을 생성하기 복잡함

          • 업무가 개별적으로 처리되더라도 데이터는 통합된 모습이 아니므로 DW(Data Warehouse) 등의 요건에 의해 조회가 복잡해질 수 있음

          • 공통 속성이 개별 엔터티에 반복됨으로써 넓은 의미의 1정규형이 아님

      2. 슈퍼타입 엔터티 하나로 통합(타입2-통합)

        1. 선택기준

          • 서브타입별 고유 속성이 적을 때

          • 속성이 지속적으로 늘어날 가능성이 작을 때

          • 하나의 서브타입은 속성도 많고 업무도 중요하며, 나머지 서브타입은 속성도 적고 덜 중요할 때

          • 서브타입 전체를 대상으로 하는 업무가 빈번할 때

          • 데이터 건수가 많지 않을 때

          • 업무가 중요하지 않을 때

          • 서브타입의 중복 서브타입일 때

          • 서브타입이 업무적으로 서로 강 결합(Tightly Coupled) 관계일 때

        2. 장점

          • 슈퍼타입과 서브타입 엔터티의 조인이 발생하지 않아 조회 쿼리가 단순해지며 성능이 좋아질 때가 많음

          • 엔터티 수가 감소해 관리가 용이해짐

          • 복잡한 관계가 없어져 모델이 단순해지기 때문에 ERD를 관리하기 수월함

          • 전체 서브타입을 검색할 때 유니온이 발생하지 않아 성능 측면에서 효율적

        3. 단점

          • 엔터티의 속성 개수가 많아져 크기가 증가함

          • 널(Null) 값이 존재하는 속성이 많아짐

          • 업무가 추가되거나 변경되면 애플리케이션에 끼치는 영향이 커짐

          • 업무 규칙을 모델에 표현하기 어려움

          • 공통 속성만을 조회하는 요건이 빈번하거나 조회 범위가 넓으면 I/O가 많아져 성능이 나빠짐

          • 엔터티의 정체성이 희성될 수 있음

      3. 슈퍼타입 엔터티와 개별 서브타입 엔터티로 분할(타입3-혼합)

        1. 선택기준

          업무 연관성이 있을 때
          • 서브타입이 업무적으로 서로 강 결합(Tightly Coupled) 관계일 때

          주요 엔터티일 때
          • 업무의 변화가 빈번해 속성이 자주 추가될 때

          • 중요 속성과 참고 속성으로 분리될 수 있을 때

          공통 속성을 주로 사용할 때
          • 서브타입별 공통 속성을 대상으로 하는 업무가 빈번할 때

          • 슈퍼타입의 조회가 빈번하고 조회 범위가 넓을 때

          고유 속성이 많을 때
          • 서브타입별 고유 속성이 많을 때

          • 공통 업무와 고유 업무가 다양하게 존재할 때

          통합하면 속성 개수가 많아질 때
          • 통합(타입2)하면 속성 개수가 너무 많아질 때

          트랜잭션을 분리할 때
          • 트랜잭션의 락을 방지하기 위해 엔터티를 분리해야 할 때

        2. 장점

          • 슈퍼타입 엔터티의 한 블록에 많은 인스턴스가 저장되므로 핵심 조회 요건의 성능이 좋아질 때가 많음

          • 논리 모델과 유사한 구조이기 때문에 모델에 업무 규칙이 표현되므로 모델의 가독성이 높아짐

          • 추가 업무로 생기는 애플리케이션의 변경 영향을 줄일 수 있음

          • 집계나 DW의 요건을 만족할 가능성이 커짐(전사 차원에서 고려)

          • 데이터 저장 공간을 가장 효율적으로 사용

        3. 단점

          • 조회 요건에 따라 조인이나 조인 후의 유니온 쿼리 등이 발생해 성능 효율이 떨어질 수 있음

          • 여러 엔터티로 나뉘어 엔터티 개수가 늘어나며 관리가 어려워짐

          • 배타, 중복, 완전, 불완전 서브타입의 종류에 따라 인스턴스를 발생시킬 때 혼성이 발생할 수 있음

  2. 중첩 서브타입(Nested Subtype)

    • 중첩 서브타입은 서브타입 안에 다시 서브타입이 존재할 때 중첩 서브타입이라 하며, 물리적으로 구현되는 일은 적음

    • 중첩 서브타입에는 중첩된 서브타입의 수 만큼 구분자가 필요함

      1. 서브타입 간의 관계 관리 방법

        1. 슈퍼타입 엔터티에 재귀 관계 도출

    • 관계가 어떤 관계인지 명확한 반면, 관계가 늘어나면 속성도 늘어나게 되는 유연하지 않은 모델

      1. 서브타입 엔터티 사이의 관계 도출

    • 요건을 서브타입 엔터티 간의 관계로 관리하는 모델로 완전 서브타입 일 때만 사용할 수 있음

    • 업무 규칙을 가장 구체적으로 관리할 수 있는 모델이지만, 여러 관계를 관리하려면 관계 속성이 계속 늘어나기 때문에 유연하지 않은 모델

      1. 슈퍼타입 엔터티에 별도의 관계 엔터티 도출

    • 다대다(M:M) 재귀 관계를 관리하는 BOM(Bill Of Materials) 모델


3.1. 데이터 통합에 대한 서설

  • o

3.1.1. d

  • d


3.2. 일반화와 상세화

  • o

3.2.1. d

  • d


3.3. 데이터 통합과 엔터티 통합

  • o

3.3.1. d

  • d


3.4. 통합이 대세인가?

  • o

3.4.1. d

  • d


3.5. 어떤 경우에 통합을 고려하는가?

  • o

3.5.1. d

  • d


3.6. 통합을 고려하지 않아도 되는 경우

  • o

3.6.1. d

  • d


3.7. 데이터 통합이 어려운 또 다른 이유

  • o

3.7.1. d

  • d


3.8. 데이터 주제 영역이란?

  • o

3.8.1. d

  • d


3.9. 주제 영역 설계 방법

  • o

3.9.1. d

  • d


3.10. 데이터 오너십과 모델 오너십과데이터 통합의 시발점

  • o

3.10.1. d

  • d


3.11. 데이터 통합과 정규화

  • o

3.11.1. d

  • d


3.12. 통합과 합체

  • o

3.12.1. d

  • d


3.13. 주 식별자가 다른 엔터티의 통합

  • o

3.13.1. d

  • d


3.14. 서브타입에 대한 서설

  • o

3.14.1. d

  • d


3.15. 서브타입과 부분집합

  • o

3.15.1. d

  • d


3.16. 서브타입은 어떻게 도출하는가?

  • o

3.16.1. d

  • d


3.17. 왜 서브타입을 사용하는가?

  • o

3.17.1. d

  • d


3.18. 한 엔터티에 서브타입이 여러 개 존재한다?

  • o

3.18.1. d

  • d


3.19. 서브타입과 코드

  • o

3.19.1. d

  • d


3.20. Is-A 서브타입과 Part-Of 서브타입

  • o

3.20.1. d

  • d


3.21. 배타 서브타입과 중복 서브타입

  • o

3.21.1. d

  • d


3.22. 배타 서브타입과 이력 데이터

  • o

3.22.1. d

  • d


3.23. 중복 서브타입에 대한 설계

  • o

3.23.1. d

  • d


3.24. 중복 서브타입의 주의점

  • o

3.24.1. d

  • d


3.25. 완전 서브타입과 불완전 서브타입

  • o

3.25.1. d

  • d


3.26. 서브타입과 슈퍼타입의 관계

  • o

3.26.1. d

  • d


3.27. 서브타입의 오해 - 슈퍼타입과 서브타입은 부모 자식 관계다

  • o

3.27.1. d

  • d


3.28. 슈퍼타입·서브타입 논리 모델의 물리 모델 변환

  • o

3.28.1. d

  • d


3.29. 서브타입 모델의 물리 모델 변환 - 서브타입별로 엔터티 분할

  • o

3.29.1. d

  • d


3.30. 서브타입 모델의 물리 모델 변환 - 슈퍼타입 엔터티로 통합

  • o

3.30.1. d

  • d


3.31. 서브타입 모델의 물리 모델 변환 - 슈퍼타입·서브타입 개별 생성

  • o

3.31.1. d

  • d


3.32. 서브타입 모델의 물리 모델 변환 - 슈퍼타입·서브타입 개별 생성(배타 관계)

  • o

3.32.1. d

  • d


3.33. ERWin 툴의 서브타입 표기법

  • o

3.33.1. d

  • d


3.34. 중첩 서브타입

  • o

3.34.1. d

  • d


3.35. 서브타입 간의 관계 표현법

  • o

3.35.1. d

  • d


3.36. 잘못된 서브타입

  • o

3.36.1. d

  • d


3.37. 범주에 대해서

  • o

3.37.1. d

  • d


관계형 데이터 모델링 노트 1장

'데이터모델링 도서인 `관계형 데이터 모델링 노트 개정판` 책의 `1장 엔터티 이야기` 요약 및 정리

정민호정민호

1. 엔터티 이야기


요약
  1. 데이터 모델링이란

    • 업무 요건을 데이터로 설계하는 작업으로 모델링 하는 대상(What)은 업무 요건이며, 모델링하는 방법(How)은 모델링 설계 원칙임

    • 데이터의 성격을 정확히 분석해 엔터티를 명확하게 하는것이 모델링의 시발점

  2. 엔터티란 무엇인지

    • 엔터티란 업무를 수행하는데 필요한 데이터를 특성이 유사한 것끼리 모아 놓은 집합

    • 명확한 조건이 기준이 돼어 서로 명확하게 구별돼어야함

  3. 엔터티를 만드는 이유

    • 필요에 의해 업무에서 관리하고자 하는 데이터(속성)들을 잘 관리하기 위해

  4. 엔터티를 정의하는 방법

    • CASE 툴 등에 엔터티 정의 항목에 엔터티에 대한 설명을 작성

      • 엔터티가 본질적으로 어떤 집합으로 이루어져 있는지를 명백하게 기술

      • 식별자가 무엇이고 서브타입이 무엇인지 기술

  5. 엔서티를 정의하는 방법 상세

    • '만질 수 있느냐 없느냐’로 간단히 성격을 파악하고, '데이터가 자립했는지 아닌지’를 심도있게 분석하면 엔터티를 정의하기 수월해짐

      1. 실체가 있는지

    • 집합의 기준

      • 보이는 것(실체로 존재)

        • 보이는 실체이기 때문에 인식하기도 쉬워 가능하면 도출

        • 다른 여러 행위의 주체가 되기 때문에 더욱 중요

        • 엔터티를 분석이나 설계 할 때, 보이는 것을 관리하는지부터 따져볼 것

      • 보이지 않는 것(개념으로 존재)

        • 연상이 되는 것

          • 예) 주문, 강의 등

        • 연상이 안되는 것

          • 예) 환율, 분류 등

            1. 자립하여 스스로 존재하는지

    • 자립 엔터티(Independent Entity 또는 Strong Entity, Dominant Entity) 란

      • 어떤 엔터티에도 존재 종속(Existence Dependency)되지 않는 엔터티

      • 다른 엔터티에 존재 종속되지 않고 참조 관계만 존재

      • 참조 관계는 주 식별자로 상속하지 않고 일반 속성으로 상속

    • 존재 종속 엔터티(Dependent Entity 또는 Weak Entity, Subordinate Entity) 란

      • 자립 엔터티의 상대적인 개념으로 상위(부모) 엔터티가 존재하지 않으면 존재할 수 없는 엔터티

      • 존재 종속 관계는 주 식별자로 상속

      • 부모 엔터티의 인스턴스가 삭제되면 종속 엔터티의 인스턴스도 삭제돼야함

  6. 엔터티 유형

    1. 데이터 본질에 따른 핵심 엔터티 유형

      1. 실체 엔터티

        • 실체 물체(보이는 실상)에 대한 본질적인 데이터를 관리하는 엔터티

      2. 행위 엔터티

        • 행위나 활동으로 발생한 원천 데이터를 관리하는 엔터티

      3. 가공 엔터티

        • 원천 데이터를 추출·집계한 데이터를 관리하는 엔터티

      4. 기준 엔터티

        • 실체나 행위 데이터의 기준(업무 기준)이 되는 데이터를 관리하는 엔터티

    2. 기타 엔터티 유형

      1. 기본 엔터티

        • 실체 엔터티와 동일

        • 실제 물체(보이는 실상)를 관리

      2. 내역 엔터티

        • 행위 엔터티와 유사

        • 활동이나 행위에 의해 발생한 데이터를 관리

      3. 상세 엔터티

        • 한 개의 엔터티를 일대일(1:1) 관계의 두 개의 엔터티로 분해할 때의 하위 엔터티를 의미

        • 중요 속성이 아닌 속성을 관리

          • 단순히 중요하지 않은 속성만을 모아놓은 엔터티는 데이터 성격을 하나로 정의할 수 없기 때문에 '~상세' 엔터티가 됨

      4. 이력 엔터티

        • 이력은 '주문’과 같은 하나의 의미를 나타내는 용어

      5. 코드 엔터티

        • 코드 명과 코드 값을 관리하는 엔터티로써 그 외의 속성을 관리하면 코드 엔터티가 아님

      6. 관계 엔터티

        • 교차 엔터티의 일종

      7. 집계 엔터티

        • 어떤 값을 집계한 속성이 그 엔터티의 주요 속성이면 집계 엔터티로 정의

      8. 백업 엔터티

        • 원천 데이터의 데이터를 백업한 엔터티이므로, 백업 엔터티와 원천 엔터티를 합쳐야 전체 데이터가 됨

      9. 임시 엔터티

        • 범위가 모호하여 기준을 명확히 정할 필요가 있음

        • 사용한 후 삭제하는 엔터티 또는 트랜젝션이 끝날 때 삭제하는 엔터티, 매일 초기화되는 엔터티 등

  7. 엔터티 설계 방법

    1. 데이터 정체성

      • 엔터티만 명확하게 정의하면 모델링의 많은 문제는 해결

      • 여러 데이터가 혼합된 형태의 엔터티는 엔터티가 아니라 뷰로 사용

    2. 엔터티 무결성

      • 주 식별자가 존재하도록 엔터티 설계

    3. 엔터티 유일성

      • 같은 성격의 데이터는 전사적으로 유일하게

    4. 데이터 혼용 배제

      • 하나의 엔터티에 서로 다른 성격의 데이터를 혼용해서는 안됨

    5. 타 엔터티와 관계 존재

      • 엔터티는 보통 다른 엔터티와 관계가 존재하는 것이 일반적이므로 관계가 존재하지 않으면 그 엔터티의 성격을 다시 확인

        • 가공·기준 엔터티 등은 관계가 존재하지 않을 수 있음

    6. 프로세스 도출 지양

      • 프로세스에 따라 변하는 상태를 엔터티로 설계하거나, 특정 프로세스를 처리하기 위한 화면에 따라 엔터티를 설계하면 안됨

      • 엔터티와 프로세스는 별개

    7. 화면 도출 지양

      • 하나의 화면에 하나의 엔터티를 매핑해서 설계하는 것은 지양할 것

    8. 데이터 관리 요건

      • 데이터베이스에서 관리하려는 데이터를 엔터티로 설계하며, 설계 했더라도 사용하지 않는다면 삭제

  8. 엔터티 검증 방법

    • 단기간에 데이터 모델을 검증하는 방법은 사실상 없음

    • 엔터티를 하나씩 상세하게 들여다 보면서 평가 필요

    • 논리 모델이 완료된 시점에 검증하는 것이 좋으며, 리더가 일관되게 검증

    • 업무에서 필요한 데이터를 사용하기 좋게 설계한 것이 모델이므로, 모델에 누락된 데이터가 있는지, 불필요한 데이터가 있는지 검증

    • 엔터티가 잘못 설계됐을 경우 주 식별자나 관계, 속성, 변경 이력 데이터 등을 제대로 설계 하는 것이 무의미하기 때문에 엔터티 검증은 가장 우선으로 해야함

  9. 데이터 무결성 확보 방법

    • 데이터 무결성은 데이터 값이 완전하고 정확한 상태를 의미하며, 데이터가 정확하지 않다면 신뢰하기 힘들어 활용에 한계가 생김

    • DBMS 차원의 제약은 데이터 무결성을 호가보하기 위해서 중욯나 요소이므로 사용을 적극적으로 고려

      1. 엔터티 무결성(Entity Integrity)

        • 엔터티에 존재하는 모든 인스턴스는 고유해야 하며, 널 값을 가지면 안 된다는 것이 엔터티 무결성

        • 한 엔터티에는 동일한 주 식별자 값이 존재할 수 없으며, 주 식별자 속성은 모르는 값인 널 값을 허용할 수 없음

        • 엔터티 무결성을 만족하기 위해선 주 식별자에 PK(Primary Key)를 생성하고, 업무 식별자에 유니크 인덱스(Unique Index)를 생성

      2. 참조 무결성(Referential Integrity)

        • 연관된 인스턴스 간의 일관성을 유지하기 위한 제약

        • 엔터티의 외래 식별자 속성 값은 참조되는 엔터티의 주 식별자 값과 일치하거나 널 값이어야 한다는 것

        • 참조 무결성은 FK(Foreign Key) 제약으로 지켜짐

      3. 도메인 무결성(Domain Integrity)

        • 도메인 무결성은 속성과 관련된 제약

        • 도메인 무결성은 데이터 타입(Data Type)과 기본 값(Default) 제약, 널(Null) 제약, 체크(Check) 제약 등을 지킬 수 있음

      4. 업무 무결성(Business Integrity)

        • 업무 무결성은 기업에서 업무를 수행하는 방법이나 데이터를 처리하는 규칙을 의미

        • 업무 무결성을 지키기 위해 지침을 제시하여 논리적으로 지키게 하는 방법이 있고, 데이터베이스 제약을 사용하여 강제적으로 지키게 하는 방법이 있음


1.1. 집합과 엔터티

  • 집합 및 엔터티는 어떤 조건에 의해 그 대상을 분명히 알 수 있는것의 모임이며, 명확한 조건이 기준이 돼어 서로 명확하게 구별돼어야함

  • 직관이나 사고로 확정지을 수 있는 대상에 보이지 않는 것을 포함하고 있으며, 누가 생각해도 대상(원소)이 같을 수 있도록 정의하는 것이 중요

  • 릴레이션의 속성이 집합의 원소라고 생각하기 쉬우나, 집합의 원소는 릴레이션의 인스턴스를 의미

  • 테이블의 표에 비유하면, 가로는 릴레이션(속성)을 의미하고, 세로는 집합(인스턴스)을 의미


1.2. 엔터티에 대한 서설

  • 엔터티란 업무를 수행하는데 필요한 데이터를 특성이 유사한 것끼리 모아 놓은 집합

  • 엔터티

    • 필요 때문에 관리하고자 하는 데이터의 집합

    • 특성이 유사한 데이터끼리 모아 놓은 집합

      • 특성이 유사한것끼리 모아 놓았다는 것은 함수 종속(Functional Dependency)을 의미

    • 업무에서 관리하고자 하는 데이터(속성)를 함수 종속으로 도출한 결과 집합

  • 엔터티 설계시 유의 사항

    • 가능한 많은 데이터를 데이터베이스에 저장하도록 유도하는것이 좋으며, 관리할 필요성은 현업이 판단

    • 엔터티와 주 식별자는 한몸이라고 생각해야하며, 주식별자를 모르고 엔터티를 설계(정의) 할 수 없음

    • 속성이나 광계와 혼동해서는 안됨


1.3. 엔터티 정의가 왜 중요한가?

  • 엔터티를 잘못 정의하면 그 이후의 단계(관계 및 속성 정의 등)는 의미가 없어짐

  • 엔터티 정의(Definition)란

    • 엔터티의 설명을 적는것

      • CASE 툴 등에 엔터티 정의 항목에 엔터티에 대한 설명을 적는것

    • 엔터티가 본질적으로 어떤 집합으로 이루어져 있는지를 명백하게 하는 것

      • 식별자가 무엇이고 서브타입이 무엇인지를 밝히는 것


1.4. 엔터티 분류법

  • 데이터의 성격을 정확히 분석해 엔터티를 명확하게 하는것이 모델링의 시발점

  • 엔터티를 분류하는 이유

    • 대상을 범주로 구분하면 그 대상의 특성이 더 잘 이해기 떄문

    • 데이터와 엔터티를 보다 명확하게 이해하기 위함

  • 엔터티 분류 방법

    • 만질 수 있는 것과 만질 수 없는 것

      • 사람/사물과 같이 실제로 존재하는 물건인지, 만져서 느낄 수 있는지

    • 자립 엔터티와 종속 엔터티

      • 엔터티가 스스로 존재할 수 있는 자립 엔터티인지

      • 다른 엔터티엔가 존재 종속(Existence Dependency)된 종속 엔터티인지

    • 원천 데이터와 가공 데이터

    • 실체·행위·가공·기준 엔터티

      • 실체·행위·가공·기준 엔터티 중 어디에 속하는지

    • 내부 생성 데이터와 외부 생성 데이터

    • 엔터티 유형에 의한 기본·내역·상세 등의 엔터티


1.5. 엔터티 정의 방법 - 보이는 것인가?

  • 보이는 것을 관리하는 데이터는 실체 엔터티이며, 의미하는 데이터는 핵심 데이터일 가능성이 높음

  • 실체 데이터와 개념으로 존재하는 데이터를 명확히 구분하는게 엔터티를 설계하는 시발점

  • 집합의 기준

    • 보이는 것(실체로 존재)

      • 보이는 실체이기 때문에 인식하기도 쉬워 가능하면 도출

      • 다른 여러 행위의 주체가 되기 때문에 더욱 중요

      • 엔터티를 분석이나 설계 할 때, 보이는 것을 관리하는지부터 따져볼 것

    • 보이지 않는 것(개념으로 존재)

      • 연상이 되는 것

        • 예) 주문, 강의 등

      • 연상이 안되는 것

        • 예) 환율, 분류 등


1.6. 엔터티 정의 방법 - 스스로 존재하는가?

  • 관리하는 데이터의 범위에 따라 자립 엔터티가 종속 엔터티가 될 수 있고, 종속 엔터티가 자립 엔터티가 될 수 있음

  • 데이터의 성격만을 판단해 엔터티를 명확히 정의하는 것이 모델링의 시발점

  • 자립 엔터티(Independent Entity 또는 Strong Entity, Dominant Entity) 란

    • 어떤 엔터티에도 존재 종속(Existence Dependency)되지 않는 엔터티

    • 다른 엔터티에 존재 종속되지 않고 참조 관계만 존재

    • 참조 관계는 주 식별자로 상속하지 않고 일반 속성으로 상속

  • 존재 종속 엔터티(Dependent Entity 또는 Weak Entity, Subordinate Entity) 란

    • 자립 엔터티의 상대적인 개념으로 상위(부모) 엔터티가 존재하지 않으면 존재할 수 없는 엔터티

    • 존재 종속 관계는 주 식별자로 상속

    • 부모 엔터티의 인스턴스가 삭제되면 종속 엔터티의 인스턴스도 삭제돼야함

Tip
'만질 수 있느냐 없느냐’로 간단히 성격을 파악하고, '데이터가 자립했는지 아닌지’를 심도있게 분석하면 엔터티를 정의하기 수월해짐

1.7. 종속 엔터티의 종류

  • 종속 엔터티는 참조 엔터티에 비하면 그다지 많지 않지만, 다양한 경우에서 발생

  • 종속 엔터티의 유형

    • 부모 엔터티의 부가 데이터를 관리하는 엔터티

      • 일부 데이터를 더욱 상세하게 관리하는 엔터티

    • 1정규화에 의해서 발생한 엔터티

      • 부모 엔터티 없이는 존재할 수 없는 종속 엔터티

    • 이력 데이터를 관리하는 엔터티

      • 원천 엔터티의 변경 데이터를 관리하기 위한 엔터티

    • 다대다(M:M) 관계에서 발생한 교차 엔터티

      • 다대다(M:M) 관계는 보통 두 개의 일다다(1:M) 관계로 표현되면서 종속 엔터티가 생기는데 이를 교차 엔터티(Association Entity 또는 Relationship Entity, Intersection Entity)라고 함

    • 슈퍼타입에 대한 서브타입 엔터티

      • 서브타입 엔터티는 슈퍼타입에 종속된 엔터티

    • 엔터티 분해에 의한 일대일 관계의 엔터티

      • 성능이나 관리상의 이유로 속성을 수직 분할로 나눠서 관리하는 엔터티


1.8. 모델(ERD)과 메타 시스템의 속성 설명

  • 표준은 기준을 의미하기도 하고 토대가 되기도 하지만, 메타 시스템의 속성 설명보다는 ERD의 속성 설명이 더욱 의미가 있다는 것을 간과하면 안됨

  • 메타 시스템이란

    • 엔터티와 속성 등의 정보를 관리하는 시스템

    • 엔터티를 관리하는 엔터티와 속성을 관리하는 엔터티 필요할 것

  • 메타 시스템에서 속성 관리 방안

    1. 엔터티의 엔터티의 주 식별자를 상속받아 엔터티의 속성을 관리

    2. 엔터티의 엔터티와 속성 엔터티를 별도로 두어 M:M 관계로 교차(관계) 엔터티를 통해 엔터티에 속한 속성을 관리

  • 속성 설명 종류

    • 일반화된 표준 설명

      • 메타 시스템에서는 대표적인 의미의 속성 설명

    • 개별적으로 특화된 설명

      • ERD에서는 엔터티의 개별적인 의미의 속성 설명


1.9. 엔터티 정의 방법 - 원천 데이터인가?

  • 엔터티에서 관리하는 데이터가 원천 데이터인지, 가공 데이터인지를 분류하는 것은 엔터티를 이해하는데 도움을 줌

  • 보이는 것을 설계한 데이터인지, 스스로 존재하는 것을 설계한 데이터인지에 이어 원천과 가공 데이터를 구분하는 것은 매우 유용한 데이터 분석법

  • 원천 데이터(Row Data)란

    • 스스로 존재하는 최초의 데이터

    • 고객이나 사용자가 화면에서 직접 입력(Key-In)함으로써 생성

    • 원천 엔터티는 데이터 성격 자체로 판단한 식별자가 사용

    • 외부에서 제공 받은 데이터

  • 가공 데이터(Processing Data)란

    • 원천 데이터나 또 다른 가공 데이터를 통해 만들어진 데이터

    • 프로그램에 의해 생성된 데이터(집계, 요약, 임시, 작업용 데이터)

    • 스스로 업데이트가 발생하지 않고 원천 데이터가 바뀌면 따라서 업데이트됨

    • 원천 데이터와는 연관성만 있을 뿐 참조 무결성 관계는 없음

    • 집계 기준과 같은 목적에 의해 주 식별자 결정됨으로써 식별자가 복잡해 질 수 있음

  • 백업 데이터(Backup Data)란

    • 원천 데이터일 수도 있고, 가공 데이터일 수도 있는 데이터

      • 기존 데이터를 두고 백업하면, 데이터 중복이 발생함으로 가공데이터

      • 기존 데이터에서 삭제하고 백업한다면 중복된 데이터가 아니므로 원천 데이터

  • 원천 데이터와 가공 데이터의 정합성을 맞추는 방법

    • 원천 데이터가 수정되는 시점에 가공 데이터를 실시간으로 수정하는 방법

    • 특정 시간을 정해 배치로 가공 데이터를 원천 데이터와 맞추는 방법

    • 가공 데이터는 원천 데이터가 어떤 엔터티에 존재하는지 기술

      • 어떤 방식으로 생성 했는지, 데이터 정합성을 어떻게 구현할 수 있는지 등 또한 기술


1.10. 데이터 본질에 따른 엔터티 분류법 - 실체·행위·가공·기준

  • 엔터티를 분류할 때의 기준은 데이터의 성격

  • 엔터티를 분류하는 이유

    • 다양하게 분류해 보면 엔터티의 성격을 이해하는데 많은 도움

    • 모델링 작업 순서를 정하는데 도움

  • 엔터티 분류 핵심 유형

    • 실체 엔터티

      • 실체 물체(보이는 실상)에 대한 본질적인 데이터를 관리하는 엔터티

    • 행위 엔터티

      • 행위나 활동으로 발생한 원천 데이터를 관리하는 엔터티

    • 가공 엔터티

      • 원천 데이터를 추출·집계한 데이터를 관리하는 엔터티

    • 기준 엔터티

      • 실체나 행위 데이터의 기준(업무 기준)이 되는 데이터를 관리하는 엔터티

  • 엔터티 분류 기준

    • 엔터티의 용도

    • 엔터티의 중요도

    • 엔터티 생성 순서

  • 엔터티 분류 순서

    1. 기준·실체 엔터티

    2. 행위 엔터티

    3. 가공 엔터티


1.11. 실체 엔터티란?

  • 실체 엔터티는 도출이 수비지만 잘못 설계하면 업무 전체적으로 심각한 영향을 끼침

  • 실체 엔터티를 제대로 설계해야 전체 모델이 안정됨

  • 실체 엔터티는 단순하게 설계

  • 실체 엔터티란

    • 간단히 만질 수 있는 것(Tangible) 중 본질적인 데이터를 관리하는 엔터티

  • 실체 엔터티 특징

    • 실체 엔터티의 주 식별자는 단순하게

      • 인조 식별자가 오히려 집합의 성격을 더 직관적이고 명확하게 해줌

      • 행위 엔터티나 가공 엔터티에 인조 식별자를 사용하면 이해하기 어렵고 오용되는 경향이 있으니 주의

    • 다른 엔터티 유형에 비해 과감한 통합 필요

      • 실체 엔터티가 통합되면 전체 모델 구조가 단순해지며, 단순한 모델이 좋은 모델이 될 가능성이 높음

    • 실체가 소멸되지 않는 한 지속해서 하나의 인스턴스로 관리

      • 실체 엔터티의 이력 데이터를 실체 데이터에 포함시키지 않도록 주의

    • 실체의 특정 속성이나 상태가 바뀔 수 있음

      • 일부 특성이 변하는 것으로 일부 속성에 대해 이력 데이터로 관리


1.12. 행위 엔터티란?

  • 행위 엔터티와 행위 엔터티를 관리하는 속성이 대부분 많기 때문에 모델링시 가장 많은 시간이 소요됨

  • 행위 엔터티의 통합은 실체 엔터티보다 어렵지만, 업무 식별자를 명확히 하여 최대한 통합하는 것이 좋음

  • 행위 엔터티란

    • 어떤 실체 의 업무 행위나 활동에 의해서 생긴 원천 데이터를 관리하는 엔터티

  • 행위 엔터티 특징

    • 엔터티 발생 순서가 존재할 수 있음

    • 복잡한 주 식별자와 관계

      • 주 식별자는 업무 식별자를 우선적으로 사용하며, 가공 엔터티와 관계가 발생하면 잘못된 모델일 가능성이 높음

  • 행위 엔터티의 업무 식별자 도출 방법

    • 누가, 무엇을, 언제, 어떻게, 어디에서 했는지 분석

      • 이 중 전부가 모여야 인스턴스를 유일하게 식별할 수 있고, 2~3개가 인스턴스를 발생시킨 주체일 수도 있음


1.13. 가공 엔터티란?

  • 원천 엔터티가 깔끔해도 가공 엔터티가 무분별하면 시스템 전반적으로 문제가 발생하기 때문에 가공 엔터티도 신경 써서 분석

  • 원천 데이터를 바로 집계해도 크게 불편하지 않다면 굳이 집계 엔터티를 사용할 이유는 없음

  • 가공 엔터티는 데이터 정합성이 문제를 최소화하기 위해 최대한 통합

  • 가공 엔터티란

    • 원천 데이터가 아닌 데이터를 관리하는 엔터티

    • 원천 데이터의 실체, 행위, 기준 엔터티의 데이터를 가공한 데이터를 관리하는 엔터티

      • 주로 집계, 요약, 임시 데이터를 관리

    • 보통 집계 기준(Dimension) 역할을 하는 엔터티 이외의 엔터티와는 관계가 존재하지 않음

    • 주 식별자는 집계하려는 기준을 의미

    • 작업의 편의성을 위해 데이터를 중복으로 관리하기도 함


1.14. 기준 엔터티란?

  • 기준 데이터는 소량의 데이터지만 행위 엔터티 등에서 사용되므로 시스템 전반적으로 영향을 미침

  • 기준 엔터티란

    • 업무의 기준이 되는 엔터티

      • 업무를 수행할 때 참조가 되기 때문에 참조(Reference) 엔터티라고도 함

    • 개념적인 데이터를 관리하는게 다를뿐 실체 엔터티의 특징을 그대로 따름

  • 기준 엔터티 구분

    • 기준 정보 성격의 데이터를 관리하는 엔터티

    • 기본 정보 성격의 데이터를 관리

  • 기준 엔터티 통합

    • 데이터의 중복을 방지하기 위해 통합

    • 업무의 기준이 되는 속성들을 모아 구조 통합


1.15. 엔터티 정의 방법 - 데이터 생성에 따른 분류법

  • 데이터는 어디에서 생성했는지에 따라 내부 데이터와 외부 데이터로 구분

  • 어떻게 생성했는지에 따라 화면 입력 데이터와 배치 데이터로 구분되며 모두 정규화 대상

  • 내부 데이터(Internal Data)란

    • 내부에서 생성할 수 있는 데이터로써, 그 값이 맞고 틀린지 결정할 수 있음

    • 중복 데이터를 배제하고, 완전 정규화된 관계형 데이터 모델에 저장

  • 외부 데이터(External Data)란

    • 외부에서 받은 데이터로써, 그 값이 맞고 틀린지 결정할 수 없음

    • 받은 그대로 저장하거나, 관계형 데이터 모델로 재설계하여 저장

  • 내/외부 데이터 기준

    • 내/외부 데이터의 기준은 주로 회사이지만, 기준 자체가 중요한 게 아니라 기준을 정한 후 일관되게 생각하는것이 중요

  • 데이터 생성 유형

    • 화면 입력(Key-In)

      • 외부 고객(Customer)이나 내부 사용자(User)가 주체

      • 화면을 선택하고 값을 입력한 후 저장하는 절차에 의해 데이터 생성

    • 배치(Batch)

      • 대량 배치

      • 개별 배치

        • 트리거


1.16. 엔터티 정의 방법 - 엔터티 유형에 따른 분류법

  • 기준이 명확하지 않으므로, 실무에 사용할 시 어떤 식으로든 기준을 정의해야함

  • 엔터티 유형을 접미어로 사용하는것은 바람직 하지 않으나, 표준을 정해 방향을 제시한다는 측면에서 접미어를 붙이는 것이 시스템에 유용할 수 있음

  • 접미어를 붙이기 위해 엔터티 분류법을 사용하는 것이 아니라, 데이터 성격을 파악하기 위해 분류법을 사용할 것

  • 엔터티 유형

    • 기본 엔터티

      • 실체 엔터티와 동일

      • 실제 물체(보이는 실상)를 관리

    • 내역 엔터티

      • 행위 엔터티와 유사

      • 활동이나 행위에 의해 발생한 데이터를 관리

    • 상세 엔터티

      • 한 개의 엔터티를 일대일(1:1) 관계의 두 개의 엔터티로 분해할 때의 하위 엔터티를 의미

      • 중요 속성이 아닌 속성을 관리

        • 단순히 중요하지 않은 속성만을 모아놓은 엔터티는 데이터 성격을 하나로 정의할 수 없기 때문에 '~상세' 엔터티가 됨

    • 이력 엔터티

      • 이력은 '주문’과 같은 하나의 의미를 나타내는 용어

    • 코드 엔터티

      • 코드 명과 코드 값을 관리하는 엔터티로써 그 외의 속성을 관리하면 코드 엔터티가 아님

    • 관계 엔터티

      • 교차 엔터티의 일종

    • 집계 엔터티

      • 어떤 값을 집계한 속성이 그 엔터티의 주요 속성이면 집계 엔터티로 정의

    • 백업 엔터티

      • 원천 데이터의 데이터를 백업한 엔터티이므로, 백업 엔터티와 원천 엔터티를 합쳐야 전체 데이터가 됨

    • 임시 엔터티

      • 범위가 모호하여 기준을 명확히 정할 필요가 있음

      • 사용한 후 삭제하는 엔터티 또는 트랜젝션이 끝날 때 삭제하는 엔터티, 매일 초기화되는 엔터티 등


1.17. 교차 엔터티란?

  • 교차 엔터티로 설계하는 것은 가능한 빠른 단계에서 하는것이 바람직

  • 엔터티 작도시 양쪽 부모 엔터티 사이에 위치 시키는 것이 좋음

  • 교차 엔터티란

    • 다대다(M:M) 관계에서 발생한 엔터티로써 물리 모델에서는 구현될 수 없으므로, 가능한 빠른 단계에서 교차 엔터티로 설계

    • 재귀 관계에서 발생하는 BOM(Bill Of Materials) 엔터티도 교차 엔터티

      • 다대다(M:M) 재귀 관계는 역할(Role)을 관ㄹ히나는 모델에서 주로 발생

  • 교차 엔터티 특징

    • 다대다(M:M) 관계는 논리적으로 많이 발생

    • 관리되는 속성이 많지 않음

    • 3개체 관계(Ternary Relationships)에서도 발생

    • 다대다(M:M) 관계를 해소하더라도 또다른 다대다(M:M) 관계가 생길 수 있음

  • 교차 엔터티 명명법

    • 관계의 명명법과 연관

    • 양쪽 무모 엔터티와의 연관성을 표현


1.18. 엔터티 설계 원칙

  • 성격·본질·주제에 따른 정체성이 분명한 엔터티로 설계

1.18.1. 데이터 정체성

  • 엔터티만 명확하게 정의하면 모델링의 많은 문제는 해결

  • 여러 데이터가 혼합된 형태의 엔터티는 엔터티가 아니라 뷰로 사용

1.18.2. 엔터티 무결성

  • 주 식별자가 존재하도록 엔터티 설계

1.18.3. 엔터티 유일성

  • 같은 성격의 데이터는 전사적으로 유일하게

1.18.4. 데이터 혼용 배제

  • 하나의 엔터티에 서로 다른 성격의 데이터를 혼용해서는 안됨

1.18.5. 타 엔터티와 관계 존재

  • 엔터티는 보통 다른 엔터티와 관계가 존재하는 것이 일반적이므로 관계가 존재하지 않으면 그 엔터티의 성격을 다시 확인

    • 가공·기준 엔터티 등은 관계가 존재하지 않을 수 있음

1.18.6. 프로세스 도출 지양

  • 프로세스에 따라 변하는 상태를 엔터티로 설계하거나, 특정 프로세스를 처리하기 위한 화면에 따라 엔터티를 설계하면 안됨

  • 엔터티와 프로세스는 별개

1.18.7. 화면 도출 지양

  • 하나의 화면에 하나의 엔터티를 매핑해서 설계하는 것은 지양할 것

1.18.8. 데이터 관리 요건

  • 데이터베이스에서 관리하려는 데이터를 엔터티로 설계하며, 설계 했더라도 사용하지 않는다면 삭제


1.19. 엔터티 명은 어떻게 정하는가?

  • 엔터티 명은 자신의 데이터 집합에 대한 이름이기도 하지만, 다른 엔터티가 바라보는 이름이기도 하므로 타 엔터티와 연관 관계에서 중요한 역할을 함

  • 부적절한 엔터티 명은 엔터티의 정확한 사용을 어렵게하여 엔터티를 오용하게 함

  • 엔터티 정의와 엔터티 명, 업무 식별자만 제대로 설계하면 엔터티는 온전해지며 더욱 견고해짐

1.19.1. 데이터 성격을 파악하기 쉽게 명명

엔터티 명을 보고 어떤 데이터를 관리하는지 알 수 있도록 적절하고 구체적으로 표현

1.19.2. 일관성 있게 명명

  • 일정한 약속을 정해 준수할 것

1.19.3. 구체적으로 명명

  • 구체적(Specific)

    • 엔터티를 구성하는 집합의 성격이 고정적일 때

    • 모호한 단어를 사용하지 않고 수식어를 적절히 사용하는것이며, 데이터의 성격을 표현하도록 붙이는 것

1.19.4. 확장성을 고려하여 명명

  • 일반적(General)

    • 추후에 추가(통합)될 집합이 존재할 가능성이 있을 대

    • 넓은 개념을 포함할 수 있도록 유연하게 정의

1.19.5. 필요한 단어로만 명명

  • 생략해도 의미가 통하는 단어는 생략

    • '~시', '~용', '~별' 등

  • 중복 의미를 나타내는 단어가 사용되지 않도록 주의

1.19.6. 프로세스를 표현하지 않도록 명명

  • 엔터티 명에 '~등록', '~처리' 등과 같이 프로세스(업무)를 표현하는 것은 바람직하지 않음

1.19.7. 명사형으로 명명

  • 엔터티 명은 명사형으로 사용하는 것이 일반적

  • 형용사형을 사용하여 설명하는 식의 엔터티명은 함축적이지 않으며 직관적이지 않음

1.19.8. 가능하면 짧게 명명

  • 엔터티 명은 가독성에 문제가 되지 않고 성격을 파악할 수 있는 정도 내에서 띄어쓰기를 하지 않고 명명

1.19.9. 테이블 명이 엔터티 명에 종속되지 않도록 명명

  • 속성 명을 컬럼 명으로 자동 전환하는 것과 달리 엔터티 명은 테이블 명으로 자동 전환하지 않아야 함

  • 엔터티 정의가 바뀌는 것은 바람직 하지 않지만, 엔터티 명은 생각보다 자주 바뀜

  • 엔터티 명은 빈번하게 변경되지만, 테이블 명은 변경할 이유가 없다는 점을 염두에 두고 원칙을 정의

1.19.10. 동일한 엔터티 명이 없도록 명명

  • 테이블 명과 마찬가지로 엔터티 명은 전 영역에서 중복돼서는 안됨

  • 엔터티 명에 특수 문자는 사용하지 않는 것이 원칙이지만 '_', '/', '( )', '[ ]' 등은 사용가능


1.20. 다양한 엔터티에 대한 명명법

  • 엔터티에서 관리하는 데이터를 가장 잘 표현한 명을 사용

1.20.1. 실체 엔터티 명명법

  • 실체 엔터티에 대한 명명법의 핵심은 엔터티 명이 명사로 끝나는 것

1.20.2. 행위 엔터티 명명법

  • 명사로 끝나도록 정하는 것은 적합하지 않음

  • 엔터티 명에 '~했음’이나 '~한 데이터’를 붙여보았을 때 자연스러운 문장이 되면 행위 엔터티에 대한 명명으로 적합

1.20.3. 교차 엔터티 명명법

  • 교차 엔터티의 명명법은 관계의 명명법과 연관됨

  • 다대다(M:M) 관계의 관계 명은 교차 엔터티 명과 유사

1.20.4. 집계 엔터티 명명법

  • 집계 기준은 앞쪽에, 대상(무엇을 집계했는지)은 뒤쪽에 위치하는 것이 좋음

    • '(사원, 부서, 월, 매채)별(거래, 매출, 주문)집계' 와 같은 형식의 엔터티 명

1.20.5. 외부 엔터티 명명법

  • 구체화 할것인지 일반화 할것인지 판단

    • 구체화 할 시 기관명을 엔터티 명에 붙이는 것이 좋고, 일반화 할 시 통합을 대비해 기관명을 생략

1.20.6. 서브타입 엔터티 명명법

  • 서브타입 엔터티 명은 슈퍼타입 엔터티에 수식어를 붙이는 형식으로 사용

1.20.7. 일대일 관계 엔터티 명명법

  • 유사한 속성을 분리할 때

    • 데이터의 성격에 맞게 명명

  • 덜 사용되는 속성을 분리할 때

    • 사용빈도에 따라 속성을 나눌경우 '~상세’로 명명

  • 프로세스를 표현한 결과를 나타낼 때

    • '~요청', '~승인’과 같이 데이터 성격에 맞는 엔터티 명으로 작성


1.21. 엔터티 설명은 어떻게 기술하는가?

  • 길고 장황한 설명은 전달을 흐리게 해 혼란스러울 수 있음

  • 간결한 설명이 좋은 설명이므로, 단순 명료하게 설명해야함

  • 엔터티 설명(Explanation)이란

    • 엔터티를 정의하는 것과 다르게, 단지 엔터티에 관해서 기술하는 것

    • 엔터티가 어떤 데이터를 관리하는지 알게 하기 위해 생략하지 않고 반드시 기술

  • 엔터티 설명 시 내용

    • 본질적인 설명

      • 엔터티를 구성하는 데이터의 본질, 성격, 주제 등에 대해서 설명

      • 원천 데이터가 어떤 엔터티인지, 외부에서 받은 데이터라면 어디에서 받은 데이터인지 기술

    • 부가 설명

      • 업무에 대한 설명, 프로세스에 대한 설명 등 참고로 기술하면 좋은 설명


1.22. 개념 모델에 포함하는 주요 엔터티란?

  • 주요 엔터티는 사용 중인 전체 엔터티 중 10 ~ 30% 정도로 정의

  • 주요 엔터티를 선정하는 것은 여의치 않을 때 생략할 수도 있으며, 모델링 중에 재선정할 수도 있음

  • 주요(핵심) 엔터티란

    • 주요 엔터티에 대한 정의는 명확하지 않지만, 중요하고(Important) 주된(Main) 엔터티

  • 주요 엔터티를 찾는 방법

    • 행위의 주체가 되는 엔터티

    • 하위 엔터티가 많은 엔터티

    • 핵심 업무 파악

    • 업무에서 자주 사용되는 엔터티

  • 주요 엔터티를 찾는 목적

    • 개념 모델링을 하기 위해서

  • 주요 엔터티를 선정하는 방법

    • 리스트를 대상으로 주요 엔터티 선정을 요청하는 방법

    • 인터뷰를 통해 주요 엔터티를 정하는 방법

    • 개략적으로 분석하고 실체, 행위, 가공 엔터티로 분류하면서 주요 엔터티를 선정하는 방법


1.23. 엔터티 정의의 또 다른 이름 - 업무 식별자

  • 업무 식별자는 엔터티를 설계하는 자체이기 때문에 업무 식별자까지 도출해야 제대로 엔터티를 설계한 것

  • 엔터티 정의와 직접 연결 되므로, 엔터티를 정의하는 시점에 업무 식별자 도출

  • 업무 식별자란

    • 업무적으로 인스턴스를 구분하게 하는 식별자

    • 데이터를 쌓는 기준이 되는 것으로 인스턴스의 발생 기준

      • 인조 식별자(사원번호 등)는 인스턴스를 물리적으로 구분하는 역할을 하지만, 업무 식별자는 인스턴스를 업무적으로 구분하는 역할


1.24. 업무 식별자 도출 방법

  • 인스턴스를 발생시키는 기준 속성을 찾고, 시각 속성과 순번 속성은 우선 제외하고 따져 봄

  • 업무 식별자를 도출할 때의 기본 원칙은 최소한의 속성이 되도록 해야함

  • 업무 식별자 찾는 방법

    • 데이터가 생성되는 기준 찾기

    • 정규화를 수행하는 기준 찾기

  • 업무 식별자 유형

    • 실체 엔터티는 보통 식별 번호가 업무 식별자가 됨

    • 행위 엔터티는 육하원칙에 의해 정해짐

    • 집계 엔터티는 집계 기준(Dimension)이 업무 식별자가 됨

    • 이력 엔터티는 업무 식별자에 시간 개념이 포함됨


1.25. 업무 식별자 표현 방법

  • 업무 식별자는 중요한 요소이기 떄문에 어떠한 방법으로든 관리해야 함

  • 업무 식별자 관리 방안

    • 업무 식별자에 유니크 인덱스 생성

  • 업무 식별자 표현 방안

    • 대리 식별자(Alternate Identifier) 사용


1.26. 데이터 모델을 검증할 수 있는가?

  • 단기간에 데이터 모델을 검증하는 방법은 사실상 없음

  • 데이터 모델을 기계적으로 평가하는 방법은 몇 가지가 있지만, 평가 했다고 하기엔 많이 부족함

  • 업무 요건에 따라 모델을 설계하기 때문에 어떤 식으로든 사람의 개입이 필연적

  • 객관화하기 위해서는 정량화하여 수치로 평가할 수 있어야함


1.27. 엔터티 검증

  • 업무에서 필요한 데이터를 사용하기 좋게 설계한 것이 모델이므로, 모델에 누락된 데이터가 있는지, 불필요한 데이터가 있는지 검증

  • 엔터티가 잘못 설계됐을 경우 주 식별자나 관계, 속성, 변경 이력 데이터 등을 제대로 설계 하는 것이 무의미하기 때문에 엔터티 검증은 가장 우선으로 해야함

1.27.1. 엔터티 검증 시기

  • 논리 모델이 완료된 시점에 검증하는 것이 좋으며, 리더가 일관되게 검증

1.27.2. 엔터티 존재 여부 검증 방법

  • 모델에 표현된 불필요한 엔터티가 있는지?

  • 모델에 표현되지 않은 엔터티가 있는지?

    • 애플리케이션 화면, 엔터티 매트릭스 비교

      • 화면은 있는데 엔터티가 없는 경우

      • 엔터티만 존재하고 화면이 없는 경우

      • 엔터티에도 없고 화면에도 없는 경우

    • TOBE 엔터티 존재 여부 검증

      • ASIS 엔터티가 TOBE 모델에 없는 경우

        • ASIS ㅇ네터티에 해당 업무가 TOBE에 삭제됐는지 검토

      • TOBE 모델에 있는 엔터티가 ASIS 모델에 없는 경우

        • 신규 업무로 인해 TOBE 모델에 추가됐는지 검토

1.27.3. 속성으로 설계해야 하는 것은 아닌지?

  • 엔터티를 설계할 때 간혹 속성으로 설계해야 하는데, 엔터티로 설계하는 경우가 있으니 주의

1.27.4. 하나의 엔터티는 하나의 주제로 구성되었는가?

  • 한 엔터티에 여러 성격의 데이터가 혼재돼서는 안되며, 엔터티는 동일한 성격의 집합으로 구성되어야 함

1.27.5. 유사한 성격의 데이터인데 개별적인 엔터티에서 관리하고 있지 않은지?

  • 유사한 데이터가 여러 엔터티에 존재하는 것은 특별한 이득이 없으므로 엔터티 통합을 기본 원칙으로 검증

  • 유사한 구조가 반복된다면 좀 더 일반화하여 통합

1.27.6. 필요한 단어만을 사용해서 엔터티 명을 구체적으로 붙였는지?

  • 필요한 단어만을 사용해서 구체적으로 붙여야함

  • 엔터티 명을 보고 어떤 데이터를 관리하는 엔터티인지를 알 수 있도록 가능한 구체적이어야 함

  • 반대로 확장할 수 있는 집합인데도 불구하고 구체적으로 붙이는 것은 바람직하지 않음

  • 엔터티 명에 필요 없는 단어는 생략

  • 서브타입 엔터티 명은 슈퍼타입 엔터티 명을 차용해야 함

1.27.7. 엔터티 명이 주 식별자와 한 쌍이 되도록 붙였는지?

  • 엔터티 명은 주 식별자와 한 쌍처럼 잘 어울려야 함

  • 어울리지 않을 경우 단순히 가독성 측면에서만 문제가 되는 것이 아니라 간혹 둘 중의 하나를 잘못 설계했을 수도 있음

1.27.8. 엔터티 설명이 존재하며 간결하고 명확한가?

  • 엔터티 설명은 반드시 기술하는 것이 원칙

  • 설명이 누락된 엔터티를 뽑아서 설명을 채워야함

  • 모델러는 엔터티 명과 설명만을 보고도 해당 엔터티를 충분히 설명할 수 있어야함

1.27.9. 업무 식별자가 존재하는가?

  • 모든 엔터티에 업무 식별자가 존재하는지를 검토

  • 업무 식별자는 CASE 툴에서 관리하지 않기 때문에 표준 형식을 정해서 관리

1.27.10. 이력 데이터를 관리하는 엔터티가 맞는지?

  • 엔터티 명이 '~이력’으로 끝나는지 검토

  • 하위(자식) 엔터티가 많다면 종료일자 속성을 주 식별자에 포함하지 말 것

1.27.11. 일대일 관계의 두 엔터티를 합체할 수 없는가?

  • 일대일(1:1) 관계만을 뽑아서 두 엔터티의 성격이 같은지 확인

  • 성능, 관리 상의 문제가 없다면 합체할 것을 고려

1.27.12. 종속 관계 엔터티의 주 식별자 상속이 적절한가?

  • 종속 관계인 엔터티는 동일한 주제 영역에 존재해야함

  • 종속 엔터티는 일반적으로 주 식별자를 식별자로서 상속

1.27.13. 데이터 인스턴스가 하나뿐인 특수 엔터티가 있는가?

  • 인스턴스가 하나뿐인 엔터티는 흔치 않으므로, 반드시 잘못된 것은 아니지만 재차 확인해볼 필요가 있음

1.27.14. 주 식별자가 존재하지 않은 엔터티가 있는가?

  • 주 식별자가 없다고 반드시 잘못된 엔터티는 아니지만, 주 식별자가 없는 엔터티를 뽑아서 다시 검토해야함

1.27.15. 주 식별자가 동일한 엔터티가 있는가?

  • 일대일(1:1) 관계나 슈퍼타입, 서브타입 관계 등을 제외하고, 엔터티의 주 식별자가 같은 엔터티는 주 식별자를 검토해 볼 필요가 있음

1.27.16. 엔터티의 의미를 쉽게 설명할 수 있는가?

  • 모델러는 스스로 설계한 엔터티와 속성을 쉽게 설명할 수 있어야함

1.27.17. 외부·복제 엔터티의 엔터티 명과 주 식별자가 원천 엔터티와 같은가?

  • 외부 엔터티나 복제 엔터티는 원천 엔터티와 엔터티 명과 주 식별자가 동일해야함


1.28. 데이터 모델 설계 원칙

  • 업무 요건을 데이터로 설계하는 작업으로 모델링 하는 대상(What)은 업무 요건이며, 모델링하는 방법(How)은 모델링 설계 원칙임

  • 모델 설계시 우선순위

    1. 데이터 무결성

    2. 데이터 성능

    3. 관리 효율성

    4. 사용 편의성

  • 모델 설계 원칙

1.28.1. 정체성

  • 데이터 성격에 맞는 정체성이 뚜렷한 엔터티를 설계하는 것은 데이터 모델 설계의 중요한 원칙

1.28.2. 통합성

  • 유사한 성격의 데이터는 통합하는 것이 데이터 모델링의 주요 원칙

1.28.3. 유연성

  • 확장하기 수월한 모델으로 데이터를 통합할수록 모델은 유연해짐

1.28.4. 무결성

  • 데이터에 결점이 없는 상태

    • 무결성을 지키기위해 중복된 데이터를 배제하고 참조 무결성(Referential Itegrity), 도메인 규칙을 정의

1.28.5. 가독성

  • 가독성이 좋도록 모델을 설계

    • 관계선이 겹치지 않도록하거나 서브타입을 표현하는 것, 재귀 관계나 배타 관계를 표현하는 것

1.28.6. 업무 연관성

  • 업무 요건에 맞는 모델을 설계하는 것

  • 업무 식별자를 제대로 도출하여 엔터티를 분명히 설계

  • 업무 프로세스에 맞게 관계선을 표현

1.28.7. 성능 효율성

  • 성능이 좋도록 모델을 설계하는 것

1.28.8. 관리 효율성

  • ERD가 제대로 관리될 수 있도록 설계하는 것

1.28.9. 표준화

  • 표준화 원칙을 따라 동일한 용어를 사용하도록 설계하는 것

1.28.10. 데이터 보안 대비

  • 향후에 사용되지 않을 수도 있다는 것을 고려해서 설계하며, 주믄등록번호 같은 암호화 대상 속성을 주 식별자로 사용하면 안됨


1.29. 무결성에 대해서

  • 데이터 무결성은 데이터 값이 완전하고 정확한 상태를 의미하며, 데이터가 정확하지 않다면 신뢰하기 힘들어 활용에 한계가 생김

  • DBMS 차원의 제약은 데이터 무결성을 호가보하기 위해서 중욯나 요소이므로 사용을 적극적으로 고려

1.29.1. 엔터티 무결성(Entity Integrity)

  • 엔터티에 존재하는 모든 인스턴스는 고유해야 하며, 널 값을 가지면 안 된다는 것이 엔터티 무결성

  • 한 엔터티에는 동일한 주 식별자 값이 존재할 수 없으며, 주 식별자 속성은 모르는 값인 널 값을 허용할 수 없음

  • 엔터티 무결성을 만족하기 위해선 주 식별자에 PK(Primary Key)를 생성하고, 업무 식별자에 유니크 인덱스(Unique Index)를 생성

1.29.2. 참조 무결성(Referential Integrity)

  • 연관된 인스턴스 간의 일관성을 유지하기 위한 제약

  • 엔터티의 외래 식별자 속성 값은 참조되는 엔터티의 주 식별자 값과 일치하거나 널 값이어야 한다는 것

  • 참조 무결성은 FK(Foreign Key) 제약으로 지켜짐

1.29.3. 도메인 무결성(Domain Integrity)

  • 도메인 무결성은 속성과 관련된 제약

  • 도메인 무결성은 데이터 타입(Data Type)과 기본 값(Default) 제약, 널(Null) 제약, 체크(Check) 제약 등을 지킬 수 있음

1.29.4. 업무 무결성(Business Integrity)

  • 업무 무결성은 기업에서 업무를 수행하는 방법이나 데이터를 처리하는 규칙을 의미

  • 업무 무결성을 지키기 위해 지침을 제시하여 논리적으로 지키게 하는 방법이 있고, 데이터베이스 제약을 사용하여 강제적으로 지키게 하는 방법이 있음


1.30. 성능에 대해서

  • 정규화를 할수록 엔터티가 분해되기 때문에 많은 조인이 생겨 조회 성능이 나빠지는 반면에, 중복 데이터를 사용하면 많은 인서트·업데이트가 생겨 쓰기 성능이 나빠짐

  • 성능 문제는 개념, 논리, 물리 모델링 각 단계에서 검토

  • 성능을 위해 정규화라는 관계형 모델링 우너칙을 깨고 비정규형을 사용하는 것이 데이터 무결성을 지키는 것만큼의 가치가 있는지에 대한 검토 또한 필요

  • 성능의 종류

    • 조회(Select) 성능

      • 소수 데이터 조회

        • 인덱스로 해결

      • 다량의 데이터 조회

        • 스캔 방법과 조인 방법을 사용해 해결

    • 쓰기(Insert/Update/Delete) 성능

      • 많은 트랜잭션을 동시에 최대한 빨리 입력 또는 수정 처리하는 것을 의미함

      • 한꺼번에 다량 발생하므로 경합을 줄여주는 방향으로 문제 해결 유도

관계형 데이터 모델링 노트 2장

'데이터모델링 도서인 `관계형 데이터 모델링 노트 개정판` 책의 `2장 엔터티 이야기` 요약 및 정리

정민호정민호

1. 엔터티 이야기

2. 정규화 이야기


요약
  1. 정규화 개요

    1. 정규화(Normalization)란?

      • 엔터티는 정규화에 의해 생성되고 정규화는 함수 종속으로 수행되며, 함수 종속은 키가 없이는 존재 할 수 없는 개념

      • 중복을 최대한 제거하는 과정으로 식별자에 종속된 유사한 속성들은 모으고, 종속되지 않은 독립적인 속성들은 분리하여 속성을 명확히 구별하는 것

      • 모든 속성은 주인이 되는 하나의 엔터티에만 속하고, 주 식별자(Primary Key)만이 다른 엔터티에 존재하는 것

      • 키가 아닌 모든 속성은 키에 직접 종속되도록 분해하는 것으로 릴레이션에 결정자(Key)를 찾지 못하면 정규화를 할 수 없음

      • 함수 종속을 사용해서 유사한 속성끼리 모아 하나의 릴레이션으로 만드는 체계적인 방법

    2. 함수 종속(FD;Function Dependency)란?

      • 속성 간의 연관성을 명확하게 파악하는 데 도움이 되며, 이는 엔터티의 성격(정체성)을 명확히 하는 것

      • 밀접한 속성을 모아 하나의 릴레이션으로 만드는 체계적인 방법

      • 릴레이션에서 A 속성의 값이 B 속성의 값을 유일하게 식별할 수 있다면, B 속성은 A 속성에 함수적으로 종속됐다고 함

      • 속성 간의 종속성을 분석해 집합을 분리하기 위한 것이므로 속성과 엔터티를 정의하고 관계를 파악하는 데 절대적인 역할을 함

      • 한 속성이 다른 속성을 유일하게 식별할 수 있는지는 업무 요건에 따라 달라짐

    3. 결정자(Determinant)와 종속자(Dependent)

      • 결정자(Determinant)는 속성 간의 종속성을 분석할 때의 기준이 되는 값(식별자(Key))이며, 또 릴레이션에 모든 속성을 함수적으로 결정하는 최소한의 속성(후보 키(Candidate Key))

      • 종속자(Dependent)는 결정자의 값에 의해 정해질 수 있는 값(비식별자(Non-Key))

    4. 폐포(Closure)

      • X의 폐포는 X에 종속돼따고 추론(Reasoning) 할 수 있는 모든 속성의 집합

      • 식별자(Key)가 정확한지 검증하는 도구로 활용

      • 함수 종속의 밑바탕에 깔려있는 개념

    5. 종속성 추론 규칙

      • Y ⊆ X 이면 X → Y 성립

      • X → Y 이면 XZ → XY 성립

      • X → Y 이고 Y → Z 이면 X → Z 성립

      • x → YZ 이면 X → Y 이고 X → Z 성립

      • X → Y 이고 X → Z 이면 X → YZ 성립

      • X → Y 이고 YZ → W 이면 XZ → W 성립

    6. 그냥 릴레이션(NFNF; Non First Normal Form, NF)과 비정규형(Denormalization)

      • 그냥 릴레이션은 그냥 그대로의 릴레이션으로 사용하던 릴레이션에 속성을 잘못 추가해서 사용할 때나 새로 설계할 때 정규화와 무관하게 화면이나 업무 요건 문장을 그대로 릴레이션으로 설계할 때 생길 수 있음

      • 비정규형 릴레이션은 정규형이 아닌 릴레이션을 뜻함

    7. 아노말리(Anomaly)

      • 아노말리 개요

        • 아노말리는 데이터의 이상 현상 뜻하며, 데이터 품질을 저하시키는 주범

        • 데이터가 서로 맞지 않는 아노말리는 중복 데이터로 인해 발생

        • 중복 데이터 존재시 의도하지 않은 이상 현상이 발생 할 수 있음

        • 아노말리는 방지하는 근본적인 방법은 정규화

        • 아노말리는 애플리케이션에서 방지할 수 있으나 이는 임시방편적인 편법

        • 중복 데이터가 사용되면 언젠가는 데이터 이상 현상이 발생

      • 아노말리 종류

        • 업데이트 아노말리 : 릴레이션에서 속성의 값을 업데이트할 때 발생하는 데이터 이상 현상

        • 삭제 아노말리 : 릴레이션에서 인스턴스를 삭제할 때 발생하는 데이터 이상 현상

        • 삽입 아노말리 : 릴레이션에 새로운 인스턴스를 삽입할 때 발생하는 데이터 이상현상

  2. 정규화 상세

    1. 정규화를 왜 해야하는지

      • 정규화는 단순히 릴레이션을 분해하는 것이 목적이 아니라, 중복이 발생하지 않도록 분해해서 데이터 무결성을 높이는 것이 목적

      • 데이터의 성격에 맞는 엔터티를 설계하기 위함

      • 확장성이 좋은 모델을 설계하기 위함

      • 데이터 이상 현상(아노말리) 방지

      • 중복 데이터가 사용되면 언젠가는 데이터 이상 현상이 발생

      • 비정규형은 중복 데이터에 대한 정합성 맞출 수 있도록 완전하게 제어하지 못함

    2. 정규화 방법

      • 먼저 릴레이션의 키를 도출한 뒤 정규화 수행

      • 어떤 방법을 사용하든 정규화는 키를 구하는 것으로 시작하며, 키를 구하려면 모든 함수 종속을 찾아야함

      • 상향식 모델링 시 기존 엔터티의 주 식별자를 검증하면서 정규화 수행

      • 하향식 모델링 시 엔터티와 주 식별자를 새롭게 분석하며, 분석 시 후보 식별자를 정한 수 맞는지 검증

    3. 정규화 수행시 장점

      • 데이터 및 엔터티의 완전성(completeness)과 확장성(Flexibility) 확보

      • 데이터 무결성 향상

      • 데이터 저장 공간 사용 최소화

      • 데이터 모델 단순화

    4. 정규형과 비정규형의 특징

      • 정규형

        • 업무 요건의 변경에 유연하여, 확장성이 좋은 모델

        • 인덱스 수가 감소하고, 속성을 횡(橫, 가로)으로 보여주는 화면에 대한 쿼리가 비교적 복잡해짐

        • 반복 속성이 추가될 가능성이 존재할 때 사용

        • 인스턴스 레벨로 관리되므로 데이터의 자식 엔터티를 가질 수 있음

      • 비정규형

        • 업무 요건의 변경에 매무 취약하여, 확장성이 좋지 않은 모델

        • 인덱스 수가 증가하고, 속성을 종(縱, 세로)으로 보여주는 화면에 대한 쿼리가 복잡해짐

        • 반복 속성이 추가될 가능성이 없을 때 사용할 수 있음

        • 전체 속성 레벨로 관리되므로 해당 데이터의 자식 엔터티를 가질 수 없음

  3. 정규형의 종류

    1. 개념 기반 분류에 따른 정규형의 종류

      • 원자성(ATOM) 개념 기반의 1정규형

      • 함수 종속(Functional Dependency) 개념 기반의 2정규형, 3정규형, BC정규형

      • 다가 종속(Multivalued Dependency) 개념 기반의 4정규형

      • 조인 종속(Join Dependency) 개념 기반의 5정규형

    2. 1정규형

      1. 1정규화 개요

        • 속성은 반드시 하나의 값을 가져야하며 반복 형태가 존재하면 안 된다는 것이 1정규형의 원칙

        • 복합 속성과 다가 속성, 중첩된 릴레이션과 같은 반복 그룹이 나타나지 말아야 1정규형을 만족

        • 이력 데이터까지 고려하고, 모델의 궁극적인 확장성을 고려하면 1정규형 위반을 허용하는 경우는 거의 없는게 정상

      2. 1정규화 대상

        • 다가 속성이 사용된 릴레이션

        • 복합 속성이 사용된 릴레이션

        • 유사한 속성이 반복된 릴레이션

        • 중첩 릴레이션

        • 동일 속성이 여러 릴레이션에 사용된 경우

        • 반복된 속성이 사용된 릴레이션

      3. 1정규화 수행방법

        • 제거해야 하는 속성을 엔터티에서 제거

        • 제거한 속성이 포함된 새로운 엔터티를 만듬

        • 기존 엔터티에서 새로운 엔터티로 관계를 상속

    3. 2정규형

      1. 2정규화 개요

        • 2정규화는 부분 함수 종속을 제거하는 것

        • 일반 속성 중에서 후보 식별자 전체에 종속적이지 않은 속성(후보 식별자의 일부 속성에만 종속된 속성)을 찾아 기본 엔터티에서 제거하고, 그 속성의 결정자를 주 식별자로 하는 새로운 상위 엔터티를 생성하는 것

        • 릴레이션의 모든 속성이 후보 식별자 전체에 종속적일 때

        • 주 식별자가 두 개 이상인 릴레이션에서 발생

        • 부분 함수 종속으로 발생한 중복 데이터를 제거하는 것이 2정규화

        • 2정규화는 후보 식별자를 구성하는 속성이 두개 이상일 때만 대상이 되고, 단일 속성일 때는 대상이 안됨

        • 즉 전체에 종속되지 않고 일부에 종속(Partial Functional Dependency)된 속성을 2정규형이 아님

      2. 2정규화 대상에 대한 판단 및 주의사항

        • 간혹 2정규화를 해야하는지 판단이 힘들 때가 있는데, 이는 속성 명을 명확히 붙이지 않아서 발생하기 때문에 발견하기 쉽지 않음

        • 따라서 데이터를 보고 분석해야 정확히 2정규화 대상인지를 판단할 수 있음

        • 모델에서 속성 명이나 엔터티 명을 잘못 사용해 의도한 것과 다르게 모델을 설계하는 경우가 있는데, 이 때문에 2정규화를 하게 될 수도 있어 주의해야함

        • 엔터티를 정확하게 분석해서 엔터티 명과 속성 명을 명확하게 사용하면 이런 문제는 발생하지 않을것

      3. 2정규화 수행방법

        • 제거해야 하는 속성을 엔터티에서 제거

        • 제거한 속성이 포함된 새로운 엔터티를 만듬

        • 새로 만든 엔터티에서 기존 엔터티로 관계(식별관계)를 상속

        • (관계 속성은 주 식별자에 포함되며, 관계가 식별 관계(Identifying Relationship))

    4. 3정규형

      1. 3정규화 개요

        • 3정규화는 일반 속성(비식별자 속성)간의 종속 관계를 분해하는 것

        • 바로 상위의 관계(1차 관계)만을 관리하는 것이 중요하듯, 이행 종속이 아닌 직접 종속된 속성만으로 엔터티를 설계해야 함

        • 3정규형의 대상이 되는 속성을 이행 종속 속성(Transitive Dependency Attribute)이라 함

        • 이행적 종속성은 Y가 X에 종속되고 Z가 Y에 종속되면 Z는 X에도 종속된다고 추론하는 것을 말함

        • 즉 X → Y 이고 Y → Z 이면 X → Z가 성립하며, 이때 Y느 릴레이션의 후보 식별자나 후보 식별자의 일부가 아닌 일반 속성(비식별자 속성)

      2. 3정규화 예

        • {(#A#B → C , #A#B → D , C → D)} 일 때, C는 일반 속성이면서 속성 D의 결정자기도 함

        • 즉 속성 D는 주 식별자인 A와 B에 간접 종속돼 있으므로 직접적인 함수 종속에 의해서 분해돼야 함

        • 이행 종속된 속성 D와 그 속성의 결정자 역할을 하는 속성 C를 분해해서 새로운 릴에이션으로 생성 {(#A#B → C), (#C → D)}

      3. 3정규화 수행방법

        • 제거해야 하는 속성을 엔터티에서 제거

        • 제거한 속성이 포함한 새로운 엔터티를 만듬

        • 새로 만든 엔터티에서 기존 엔터티로 관계(비식별 관계)를 상속

        • (상속한 관계가 일반속성이 되며, 관계는 비식별 관계(Non-Identifying Relationship))

    5. BC정규형

      1. BC정규화 개요

        • 3정규형을 보강한 정규형으로 모든 결정자는 주 식별자여야 한다는 정규형으로 릴레이션에 존재하는 종속자는 후보 식별자가 아니어야함

        • 함수 종속의 종속자가 후보 식별자(주 식별자를 포함한 후보 식별자)에 포함된 모델은 BC정규형을 위반한 모델

      2. BC정규형 구분

        • 속성 Y에 종속된 Z가 후보 식별자에 포함되면 BC정규형이 아님

        • Z가 후보 식별자에 포함되는지에 따라 3정규형과 BC정규형이 구분됨

        • Z가 후보 식별자에 포함되더라도 일반 속성간에는 종속성이 없으므로 3정규형은 만족함

      3. BC정규형 예

        • {(#A#B → C, #A#B → D, C → #B)} 일 때, 일반 속성 C에 종속된 종속자 #B가 주식별자에 포함돼 있으므로 BC 정규형에 어긋나지만 일반 속성(C, D) 사이에는 종속 관계가 없으므로 3정규형은 만족함

        • BC 정규형을 만족하기 위해서 주식별자 #B 를 일반속성으로 변경하고 일반 속성 C를 주식별자로 변경하며, 속성 C와 B를 분해해서 새로운 릴레이션으로 생성

        • {(#A#C → D), (#C → B)}

      4. BC정규화 수행방법

        • 후보 식별자 속성 중 종속자 속성을 엔터티에서 제거

        • 제거한 속성과 그 속성의 결정자 속성으로 새로운 엔터티를 만듬

        • 새로 만든 엔터티에서 기존 엔터티로 관계를 상속

    6. 4정규형

      1. 4정규화 개요

        • 다가 종속 개념이 기반이 되는 정규형으로 이를 이해하려면 다가 종속(MVD; Multivalued Dependency)을 이해해야 함

        • 다가 종속은 한 릴레이션에 다가 속성이 두 개 이상 존재할 때 발생할 수 있으며, 다가 속성 값 사이에 다대다(M:M) 관계가 발생 하는 것

        • 다가 종속이 발생하여 M*N 만큼 인스턴스가 생성돼 중복 데이터 발생

        • 서로 관계가 없는 다가 속성 간에 종속성이 생긴 릴레이션은 많은 중복 데이터가 생기기 때문에 4정규화를 하여 중복 데이터를 제거해야 함

        • 데이터를 정확하고 효율적으로 관리할 수 있도록 해주며 데이터 사용 공간도 절약

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

      2. 4정규형 발생 조건

        • 하나의 A 값에 대응하는 여러 개의 B 값이 있고 A 값에 대응하는 여러 개의 C 값이 있으며, B 값과 C 값 사이에는 아무런 상관관계가 없는데 A, B, C 값을 하나의 릴레이션에서 관리할 때 다가 종속이 발생

        • 즉 두 개의 독립적인 일대다(1:M) 관계의 속성이 하나의 릴레이션에 존재하면 다가 종속이 발생

      3. 4정규형 수행방법

        • 제거해야 하는 대상인 다가 종속에 포함된 속서을 엔터티에서 제거

        • 제거한 속성이 포함된 새로운 엔터티를 다가 속성 개수만큼 만듬

        • 기존 엔터티와 새로 만든 엔터티와의 교차 관계 엔터티를 만듬

    7. 5정규형

      1. 5정규화 개요

        • 더 이상 쪼갤 수 없도록 릴레이션을 쪼갠 릴레이션

        • 무손실 분해와 비부가적 분해가 되도록 분해한 릴레이션

        • 조인 종속(Join Dependency) 개념 기반으로 조인 종속이 없는 릴레이션

        • 어떤 릴레이션을 분해(정규화)한 다음에 조인해서 다시 원래의 릴레이션으로 복원할 수 있다면, 그 릴레이션은 조인 종속이 존재하는 릴레이션

        • 5정규형은 릴레이션을 분해하고(Project) 합치는(Join) 개념 때문에 PJ정규형(Project-Join Normal Form)이라고도 함

        • 5정규형은 3개체 관계(Ternary Relationships)와 연관되며, 3개체 관계가 발생한 릴레이션은 일반적으로 세 개의 릴레이션으로 분해할 수 있고 세 개의 릴레이션으로 분해하면 5정규형을 만족함

        • 5정규형은 지나치게 이론적이며 DBMS에서 실제로 사용하기에는 부적합하지만, 오히려 실무에서 효율적이지 않기 때문에 실익이 없는 5정규형을 사용하지 않기 위해서라도 구분할 수 있어야함

      2. 5정규형 수행방법

        • 데이터가 변질되지 않는한 엔터티를 최대로 분해

  4. 정규형과 성능

    1. 정규형과 성능 개요

      • 쓰기 성능은 일반적으로 정규형의 성능이 좋으며, 조회 성능은 요건에 따라서 비정규형의 성능이 더 나빠질 수 있음

      • 데이터베이스를 사용하는 가장 근본적인 이유는 데이터를 효과적으로 관리하기 위함으로써 반드시 정규형을 채택해야하며 성능 차원에서 문제가 되는 중요한 요건이 있을 때만 비정규형을 고려

      • 사소한 성능 향상을 위해 데이터 무결성을 저해하는 것은 소탐대실일 것

    2. 조회 성능 저하에 대한 오해

      • 정규화하여 엔터티를 분해하였을 때 조인하는 과정에서 사용하는 블록이 능어남으로써 성능에 나쁜 영향을 미침

      • 따라서 일반적인 조회 요건이라면 미세하게라도 정규형이 비정규형보다 조회 성능이 떨어질 가능성이 높음

      • 다만 정규화를 하면 중복 데이터가 최소화되고 인스턴스의 크기가 작아지므로, 한 블록(8Kbytes)에 저장하는 인스턴스는 많아지게됨

      • 이 점이 여러 건의 조회뿐만 아니라 한 건의 조회에도 특정 속성을 조회할 때는 정규형의 성능이 좋아질수 있는 원인

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

      • 그로인해 블록이 다시 사용될 가능성(확률)이 커짐으로써 메모리에 존재하는 블록을 조회할 메모리 적중률(Hit Ratio)이 높짐으로써 성능이 좋아짐

    3. 쓰기(Insert, Update, Delete) 성능

      • 조회 성능과는 다르게 쓰기 성능(Insert, Update, Delete)이 좋다는 것은 중복 속성이 없기 때문

      • 비정규형은 어떤식으로든 중복 데이터를 사용하며, 한 속성을 다루는게 아니라 여러 속성을 다루기 때문에 쓰기 시간이 오래 걸림


2.1. 정규화에 대한 서설

  • 속성의 주인(엔터티)을 찾는 과정

  • 모든 속성은 주인이 되는 하나의 엔터티에만 속하고, 주 식별자(Primary Key)만이 다른 엔터티에 존재하는 것

2.1.1. 정규화 설계 개요

  • 속성의 종속성을 파악하여 엔터티를 설계하는 것

  • 핵심은 식별자(Identifier)와 종속성(Dependency)

  • 엔터티를 대표하는 속성(업무 식별자)을 찾은 후에, 그 속성을 기준으로 대상 속성이 종속됐는지 여부를 판단

  • 업무 요건에 필요한 속성을 묶어서 엔터티 설계

2.1.2. 정규화 설계 방법

  • 정규화는 일반적으로 순서대로 수행되지 않으나, 크게 상향식(속성을 제거하면서 정규화), 하향식(생각하는 과정을 통해 정규화)으로 구분할 수 있음

  • 순서대로 수행하는 것이 현실적이진 않을 수 있지만, 더 체계적일 수 있음


2.2. 정규화(Normalization)란

  • 중복을 최대한 제거하는 과정으로 식별자에 종속된 유사한 속성들은 모으고, 종속되지 않은 독립적인 속성들은 분리하여 속성을 명확히 구별하는 것

  • 특정 속성이 어떤 엔터티에 위치해야 옳은지를 따져서 제자리인 한 곳에만 있도록 하는 과정

2.2.1. 정규화 개요

  • 식별자에 종속된 유사한 속성들은 모으고, 종속되지 않은 독립적인 속성들은 분리하여 속성을 명확히 구별하는 것

  • 특정 속성이 어떤 엔터티에 위치해야 옳은지를 따져서 제자리인 한 곳에만 있도록 하는 과정

  • 더는 분해될 수 없는 엔터티

  • 속성 간의 부정확한 종속성을 없애는 것

  • 중복 속성을 제거하기 위함이지 액세스 성능을 최적화하기 위함은 아님

  • 다만 정규화를 수행할 때는 성능을 고려해야 하며, 서능 문제가 분명할 때는 비정규화를 고려해야함


2.3. 함수 종속(FD;Function Dependency)이란?

  • 릴레이션 내에 존재하는 속성 간의 종속성

  • 한 속성의 값을 알면 다른 속성의 값은 저절로 결정되는, 두 속성 간의 일종의 제약

  • 밀접한 속성을 모아 하나의 릴레이션으로 만드는 체계적인 방법

2.3.1. 함수 종속 개요

  • 모든 종속의 기초가 되는 종속

  • 릴레이션에서 A 속성의 값이 B 속성의 값을 유일하게 식별할 수 있다면, B 속성은 A 속성에 함수적으로 종속됐다고 함

  • 속성 간의 종속성을 분석해 집합을 분리하기 위한 것이므로 속성과 엔터티를 정의하고 관계를 파악하는 데 절대적인 역할을 함

  • 한 속성이 다른 속성을 유일하게 식별할 수 있는지는 업무 요건에 따라 달라짐

  • 밀접한 속성을 모아 하나의 릴레이션으로 만드는 체계적인 방법


2.4. 결정자와 종속자

  • 결정자(Determinant)는 속성 간의 종속성을 분석할 때의 기준이 되는 값(식별자(Key))

  • 종속자(Dependent)는 결정자의 값에 의해 정해질 수 있는 값(비식별자(Non-Key))

2.4.1. 결정자(Determinant)와 종속자(Dependent) 개요

  • 속성 Y가 속성 X에 의해 함수적으로 종속되다는 말은 속성 X의 값을 이용해 속성 Y의 값을 유일하게 식별할 수 있다는 의미

  • 이 때 X를 결정자, Y를 종속자라고 하고 X는 Y를 함수적으로 결정한다고하며, 기호로 X → Y, y=f(x) 로 표현

  • X→Y→Z와 같은 종속을 이행 종속(Transitive Dependency)라 하며, 3정규형과 관련된 종속

  • 함수 종속은 직접 종속을 의미

2.4.2. 결정자(Determinant)란?

  • 결정자(Determinant)는 속성 간의 종속성을 분석할 때의 기준이 되는 값(식별자(Key))

  • 릴레이션에 모든 속성을 함수적으로 결정하는 최소한의 속성(후보 키(Candidate Key))

2.4.3. 종속자(Dependent)란?

  • 종속자(Dependent)는 결정자의 값에 의해 정해질 수 있는 값(비식별자(Non-Key))


2.5. 함수 종속과 폐포

  • 폐포는 식별자(Key)가 정확한지를 검증하는 도구

  • X의 폐포는 X에 종속됐다고 추론(Reasoning)할 수 있는 모든 속성의 집합을 의미

2.5.1. 폐포(Closure)란

  • 릴레이션 R의 속성 X가 키인지 알려면 X의 폐포를 알아야함

  • X의 폐포는 X에 종속됐다고 추론(Reasoning)할 수 있는 모든 속성의 집합을 의미

  • X→(Y,Z)라면 X의 폐포는 X 자신과 Y와 Z다 (X^+ = X, Y, Z)

2.5.2. 종속성 추론 규칙

  • Y ⊆ X 이면 X → Y 성립

  • X → Y 이면 XZ → XY 성립

  • X → Y 이고 Y → Z 이면 X → Z 성립

  • x → YZ 이면 X → Y 이고 X → Z 성립

  • X → Y 이고 X → Z 이면 X → YZ 성립

  • X → Y 이고 YZ → W 이면 XZ → W 성립


2.6. 함수 종속과 정규화

  • 함수 종속을 사용해서 유사한 속성끼리 모아 하나의 릴레이션으로 만드는 체계적인 방법이 정규화

  • 엔터티는 정규화에 의해 생성되고 정규화는 함수 종속으로 수행되며, 함수 종속은 키가 없이는 존재 할 수 없는 개념

2.6.1. 정규화 수행 방법

  • 먼저 릴레이션의 키를 도출한 뒤 정규화 수행

  • 어떤 방법을 사용하든 정규화는 키를 구하는 것으로 시작하며, 키를 구하려면 모든 함수 종속을 찾아야함

  • 상향식 모델링 시 기존 엔터티의 주 식별자를 검증하면서 정규화 수행

  • 하향식 모델링 시 엔터티와 주 식별자를 새롭게 분석하며, 분석 시 후보 식별자를 정한 수 맞는지 검증


2.7. 그냥 릴레이션과 비정규형 릴레이션

  • 모든 릴레이션은 비정규형 릴레이션을 사용하더라도 정규화 과정을 거쳐야함

2.7.1. 그냥 릴레이션(NFNF; Non First Normal Form, NF)란

  • 그냥 그대로의 릴레이션

  • 사용하던 릴레이션에 속성을 잘못 추가해서 사용할 때 생길 수 있음

  • 새로 설계할 때 정규화와 무관하게 화면이나 업무 요건 문장을 그대로 릴레이션으로 설계할 때 생길 수 있음

2.7.2. 비정규형(Denormalization) 릴레이션

  • 정규형이 아닌 릴레이션


2.8. 등산과 정규화

  • 정규화를 하고 필요에 의해 비정규화를 한 모델이 비록 현행 모델과 유사하다고 할지라도, 데이터를 이해하는 정규화 과정을 거치지 않았다면 모델링을 수행한 것은 아님

  • 정규화를 하고 필요에 의해 비정규화를 한 모델이 비록 현행 모델과 유사하다고 할지라도, 데이터를 이해하는 정규화 과정을 거치지 않았다면 모델링을 수행한 것은 아님

  • 정규화를 수행함으로써 데이터의 성격에 맞는 엔터티가 설계되며, 확장성이 좋은 효과적인 모델이 됨


2.9. 정규화를 하면 좋아지는 게 무엇인가?

  • 정규화의 가장 큰 목적은 중복 데이터를 제거해서 데이터를 완전하게 관리하는 것

  • 데이터 성격에 맞는, 즉 함수 종속에 의해 결정된 데이터 구조는 견고하며 확장성도 뛰어남

  • 정규화를 수행하면 자연적으로 데이터 무결성은 높아짐

2.9.1. 완전성(Completeness)

  • 완전성이란 데이터 중복 등의 이상이 없는 성질

  • 정규화의 가장 커다란 목적 중 하나는 중복 데이터를 제거하는 것으로, 데이터베이스는 데이터를 관리하는 저장소이기 떄문에 데이터 이상이 없어야 완전해질 수 있음

  • 중복 데이터를 사용할수록 데이터 정합성은 저하됨

  • 어떤 경우라도 데이터를 중복시켜 정합성이 깨질 수 있도록 설계하는 것은 좋지 않음

  • 안정성과 신뢰도를 높이는 견고한 정규형 모델을 사용해야 데이터는 완전해짐

2.9.2. 확장성(Flexibility)

  • 확장성이란 업무 변화에 유연하게 대처할 수 있는 성질

  • 정규화를 하면 모델의 확장성(Flexibility)이 좋아짐

  • 또한 함수종속을 기반으로 모델 구조를 정의하기 때문에 데이터의 성격에 맞는 엔터티가 설계됨

  • 엔터티가 명확하게 정의돼 있다면 추가 업무가 발생했을 때 이미 존재하는 엔터티에 통합할지, 별도의 엔터티를 추가할지, 속성으로 추가할지가 명확해지고 그에 따른 엔터티간의 관계도 명확해짐

  • 즉 데이터 성격에 맞는, 함수 종속에 의해 결정된 데이터 구조는 견고하며 확장성도 뛰어남


2.10. 아노말리(Anomaly)란?

  • 아노말리는 데이터의 이상 현상 뜻하며, 데이터 품질을 저하시키는 주범

  • 정규화를 통해 아노말리를 근본적으로 방지 할 수 있음

2.10.1. 아노말리 개요

  • 아노말리는 데이터의 이상 현상 뜻하며, 데이터 품질을 저하시키는 주범

  • 데이터가 서로 맞지 않는 아노말리는 중복 데이터로 인해 발생

  • 중복 데이터 존재시 의도하지 않은 이상 현상이 발생 할 수 있음

  • 아노말리는 방지하는 근본적인 방법은 정규화

  • 아노말리는 애플리케이션에서 방지할 수 있으나 이는 임시방편적인 편법

  • 중복 데이터가 사용되면 언젠가는 데이터 이상 현상이 발생

2.10.2. 아노말리 종류

  • 업데이트 아노말리

    • 릴레이션에서 속성의 값을 업데이트할 때 발생하는 데이터 이상 현상

  • 삭제 아노말리

    • 릴레이션에서 인스턴스를 삭제할 때 발생하는 데이터 이상 현상

  • 삽입 아노말리

    • 릴레이션에 새로운 인스턴스를 삽입할 때 발생하는 데이터 이상현상


2.11. 정규형의 종류

  • 1정규화, 2정규화, 3정규화는 기본적으로 수행해야하는 정규화이며 정규화 대상의 대부분을 차지

  • 데이터 중복과 이상 현상(Anomaly)이 발생하므로 BC정규형, 4정규형, 5정규형 또한 중요

2.11.1. 정규형의 종류

  • 속성의 원자성 개념 기반

    • 1정규형(First Normal form)

  • 함수 종속(Functional Dependency) 개념 기반

    • 2정규형(Second Normal form)

    • 3정규형(Third Normal form)

    • 보이스코드(BC) 정규형(Boyce-Codd Normal form)

  • 다가 종속(Multivalued Dependency) 개념 기반

    • 4정규형(Fourth Normal form)

  • 조인 종속(Join Dependency) 개념 기반

    • 5정규형(Fifth Normal form)

  • 정규형 특징

  • 정규형은 일종의 체계가 존재하므로 일반적으로 3정규형을 만족한다는 것은 1정규형, 2정규형도 만족하는 것을 의미

  • 함수 종속을 사용하지 않고 직관적으로 3정규형이나 BC정규형을 도출할 수도 있음


2.12. 1정규화와 원자 값

  • 속성 값은 더 이상 쪼갤 수 없어야 하며, 하나의 값(원자 값)만을 가져야 한다는 것

  • 속성의 값이 원자 값인지에 대한 판단은 업무 요건에 따라 달라질 수 있음

2.12.1. 원자(ATOM) 값이란

  • 하나의 값을 가져야 한다는 것으로 더 이상 조갤 수 없는(UNCUT) 하나의 값만을 가져야 한다는 것을 의미

2.12.2. 여러 값을 가지는 속성

  • 다가 속성(Multivalued Attributes)

    • 같은 종류의 값을 여러 개 가지는 속성

    • 모든 속성이 하나의 값만을 가지고 있지만, 논리적으로 하나의 값이라고 볼 수 없는 경우가 있음

    • 정규화 할 시 새로운 엔터티 발생

  • 복합 속성(Composite Attributes)

    • 복합 속성은 한 속성에 여러 의미가 있는 속성

    • 여러 의미가 포함된 속성으로 하나의 속성이 여러개의 속성으로 분리될 수 있는 속성

    • 복합 속성은 업무에 따라서 판단이 달라질 수 있음

    • 정규화 할 시 새로운 속성 추가


2.13. 1정규화의 대상

  • 속성은 반드시 하나의 값을 가져야하며 반복 형태가 존재하면 안 된다는 것이 1정규형의 원칙

  • 복합 속성과 다가 속성, 중첩된 릴레이션과 같은 반복 그룹이 나타나지 말아야 1정규형을 만족

2.13.1. 1정규화 대상

  • 다가 속성이 사용된 릴레이션

    • 다가 속성은 같은 종류의 값을 여러 개 가지는 속성을 말함

    • '전화번호' 속성에 여러 전화번호 '123-4567', '234-5678' 를 관리하는 것

#고객번호 전화번호

100

123-4567, 234-5678, 345-6789

101

456-7890, 567-8901

  • 복합 속성이 사용된 릴레이션

    • 복합 속성은 한 속성에 여러 의미가 있는 속성

    • 업무 요건을 고려하여 속성을 분리

    • '고객성명' 속성을 '고객성''고객명' 두개의 속성으로 분리 하는 것

고객성명(정민호)

고객성(정)

고객명(민호)

  • 유사한 속성이 반복된 릴레이션

    • 한 릴레이션에서 반복 형태의 속성이 있는 것

#주문번호

상품번호1

주문수량1

상품번호2

주문수량2

상품번호3

주문수량3

1234

P0001

2

A0001

1

[NULL]

[NULL]

  • 한 릴레이션에서 반복 형태의 속성을 해소한 것

#주문번호

1234

#주문번호 #상품번호 주문수량

1234

P0001

2

1234

A0001

1

  • 중첩 릴레이션

    • 중첩 릴레이션(Nested Relation 또는 Relation-Valued Attribute)은 하나의 인스턴스 내부에 다시 인스턴스가 존재하는 형태

    • 물리적으로는 말생하지 않지만 논리적으로 간혹 발생

    • 중첩 릴레이션을 정규화 하는 과정은 관점에 따라 1정규형이나 2정규형을 수행 할 수 있음

  • 중복 속성이 여러 개 존재하는 릴레이션

#주문번호

#상품번호

고객번호

주문일자

주문수량

1234

P0001

100

1995-08-15

1

1234

A0001

100

1995-08-15

2

  • 중첩 릴레이션이 존재하는 릴레이션

#주문번호

#상품번호

고객번호

주문일자

주문수량

1234

P0001

100

1995-08-15

1

A0001

2

  • 동일 속성이 여러 릴레이션에 사용된 경우

    • 여러 엔터티에 동일한 성격의 속성이 존재하는 것

    • 넓은 의미로 속성이 반복 사용된 것으로 값이 다르더라도 반복 속성이 될 수 있음

    • 가장 이상적인 구조는 동일한 성격의 속성은 전사 모델에서 한 번만 존재하는 것


2.14. 1정규형과 비정규형

  • 정규형의 장점은 업무 요건의 변화에 유연하다는 것이고, 비정규형의 큰 단점은 업무 요건이 변경되면 대처하기 쉽지 않다는 것

  • 성능 문제가 있고, 반복되는 속성이 불변이라면 비정규형을 채택할 수도 있으나, 여러 가지 면을 고려했을 때 원칙에 따라 정규형을 사용하는 것이 바람직

2.14.1. 정규형과 비정규형 특징

  • 정규형

    • 업무 요건의 변경에 유연하여, 확장성이 좋은 모델

    • 인덱스 수가 감소하고, 속성을 횡(橫, 가로)으로 보여주는 화면에 대한 쿼리가 비교적 복잡해짐

    • 반복 속성이 추가될 가능성이 존재할 때 사용

    • 인스턴스 레벨로 관리되므로 데이터의 자식 엔터티를 가질 수 있음

  • 비정규형

    • 업무 요건의 변경에 매무 취약하여, 확장성이 좋지 않은 모델

    • 인덱스 수가 증가하고, 속성을 종(縱, 세로)으로 보여주는 화면에 대한 쿼리가 복잡해짐

    • 반복 속성이 추가될 가능성이 없을 때 사용할 수 있음

    • 전체 속성 레벨로 관리되므로 해당 데이터의 자식 엔터티를 가질 수 없음

2.14.2. 비정규형 사용 조건

  • 정규형 사용시 성능 문제 발생하고, 현재의 업무 요건이 불변할 때 비정규형을 사용

  • 위 두 조건을 동시에 만족하지 않으면 정규형 사용을 권장

  • 비정규형의 조회 성능이 항상 효율적이진 않음


2.15. 반복 속성으로 인한 1정규형 위반 사례

  • 반복 속성이 개별적인 의미가 없고 추가될 가능성이 없는 경우를 제외하고, 나머지의 경우는 정규화나 표준화를 해야함

  • 속성 뒤에 숫자를 붙인 엔터티는 정규화를 하지 않은 경우가 많지만 속성 명을 표준화하지 않아서 생기는 경우도 많음

  • 이력 데이터까지 고려하고, 모델의 궁극적인 확장성을 고려하면 1정규형 위반을 허용하는 경우는 거의 없는게 정상

2.15.1. 속성 명 뒤에 숫자가 붙을 때

  • 자주 발생하면서 가장 심각한 유형은 여러 속성이 묶여서 반복되는 형태(상품번호, 주문수량)

  • 여러 속성이 묶여서 반복됐다는 것은 이미 일대다(1:M)의 독립적인 데이터를 의미함

  • 쌍을 맞춰서 관리해야되는데 이를 어길 경우 데이터 무결성이 깨져 사용할 수 없는 모델이 됨

  • 인덱스 사용하기에도 매우 복잡

#주문번호 상품번호1 주문수량1 상품번호2 주문수량2 상품번호3 주문수량3

1234

P0001

2

A0001

1

[NULL]

[NULL]

2.15.2. 속성의 성격상 반복이 원천적으로 고정된 경우

  • 속성을 특정 기준으로 분리한 경우

  • 하나의 전화번호를 세 자리로 분리한 경우 각각의 의미에 맞도록 속성명을 표준화 해야함

전화번호1 전화번호2 전화번호3 지역전화번호 국전화번호 개별전화번호

2.15.3. 하나의 속성이 반복되지만, 속성 성격상 반복이 고정돼 있지 않은 경우

  • 속성이 업무적으로 반복이 고정적이지 않은 경우

  • 1정규화를 통해 1:M 관계로 관리


2.16. 2정규형

  • 2정규화는 부분 함수 종속을 제거하는 것

  • 일반 속성 중에서 후보 식별자 전체에 종속적이지 않은 속성(후보 식별자의 일부 속성에만 종속된 속성)을 찾아 기본 엔터티에서 제거하고, 그 속성의 결정자를 주 식별자로 하는 새로운 상위 엔터티를 생성하는 것

2.16.1. 2정규형 개요

  • 릴레이션의 모든 속성이 후보 식별자 전체에 종속적일 때

  • 주 식별자가 두 개 이상인 릴레이션에서 발생

  • 부분 함수 종속으로 발생한 중복 데이터를 제거하는 것이 2정규화

  • 2정규화는 후보 식별자를 구성하는 속성이 두개 이상일 때만 대상이 되고, 단일 속성일 때는 대상이 안됨

  • 즉 전체에 종속되지 않고 일부에 종속(Partial Functional Dependency)된 속성을 2정규형이 아님


2.17. 2정규형 위반인가?

  • 모델에서 속성 명이나 엔터티 명을 잘못 사용해 의도한 것과 다르게 모델을 설계하는 경우가 있는데, 이 때문에 2정규화를 하게 될 수도 있어 주의해야함

2.17.1. 2정규화에 대한 판단

  • 간혹 2정규화를 해야하는지 판단이 힘들 때가 있는데, 이는 속성 명을 명확히 붙이지 않아서 발생하기 때문에 발견하기 쉽지 않음

  • 따라서 데이터를 보고 분석해야 정확히 2정규화 대상인지를 판단할 수 있음

  • 모델에서 속성 명이나 엔터티 명을 잘못 사용해 의도한 것과 다르게 모델을 설계하는 경우가 있는데, 이 때문에 2정규화를 하게 될 수도 있어 주의해야함

  • 엔터티를 정확하게 분석해서 엔터티 명과 속성 명을 명확하게 사용하면 이런 문제는 발생하지 않을것


2.18. 3정규형

  • 3정규화는 일반 속성(비식별자 속성)간의 종속 관계를 분해하는 것

  • 3정규형의 대상이 되는 속성을 이행 종속 속성(Transitive Dependency Attribute)이라 함

  • 바로 상위의 관계(1차 관계)만을 관리하는 것이 중요하듯, 이행 종속이 아닌 직접 종속된 속성만으로 엔터티를 설계해야 함

2.18.1. 3정규형 개요

  • 3정규형은 비식별자 속성 간에 발생하는 이행적 종속성(Transitive Dependency)과 관련됨

  • 이행적 종속성은 Y가 X에 종속되고 Z가 Y에 종속되면 Z는 X에도 종속된다고 추론하는 것을 말함

  • 즉 X → Y 이고 Y → Z 이면 X → Z가 성립하며, 이때 Y느 릴레이션의 후보 식별자나 후보 식별자의 일부가 아닌 일반 속성(비식별자 속성)

2.18.2. 3정규형 예

  • {(#A#B → C , #A#B → D , C → D)} 일 때, C는 일반 속성이면서 속성 D의 결정자기도 함

  • 즉 속성 D는 주 식별자인 A와 B에 간접 종속돼 있으므로 직접적인 함수 종속에 의해서 분해돼야 함

  • 이행 종속된 속성 D와 그 속성의 결정자 역할을 하는 속성 C를 분해해서 새로운 릴레이션으로 생성

  • {(#A#B → C), (#C → D)}


2.19. BC정규형(Boyce-Codd Normal Form)

  • 3정규형을 보강한 정규형으로 모든 결정자는 주 식별자여야 한다는 정규형으로 릴레이션에 존재하는 종속자는 후보 식별자가 아니어야함

  • 함수 종속의 종속자가 후보 식별자(주 식별자를 포함한 후보 식별자)에 포함된 모델은 BC정규형을 위반한 모델

  • 모든 결정자는 엔터티의 주 식별자가 돼야 하며, 어떠한 종속자도 후보 식별자가 돼서는 안됨

2.19.1. BC정규형 개요

  • 3정규형을 보강한 정규형으로 모든 결정자는 주 식별자여야 한다는 정규형

  • 릴레이션에 존재하는 종속자는 후보 식별자가 아니어야함

  • 모든 BC정규형 릴레이션은 3정규형 릴레이션이지만, 3정규형 릴레이션이 모두 BC정규형 릴레이션을 만족하는 것은 아님

2.19.2. BC정규형 구분

  • 속성 Y에 종속된 Z가 후보 식별자에 포함되면 BC정규형이 아님

  • Z가 후보 식별자에 포함되는지에 따라 3정규형과 BC정규형이 구분됨

  • Z가 후보 식별자에 포함되더라도 일반 속성간에는 종속성이 없으므로 3정규형은 만족함

2.19.3. BC정규형 예

  • {(#A#B → C, #A#B → D, C → #B)} 일 때, 일반 속성 C에 종속된 종속자 #B가 주식별자에 포함돼 있으므로 BC 정규형에 어긋나지만 일반 속성(C, D) 사이에는 종속 관계가 없으므로 3정규형은 만족함

  • BC 정규형을 만족하기 위해서 주식별자 #B 를 일반속성으로 변경하고 일반 속성 C를 주식별자로 변경하며, 속성 C와 B를 분해해서 새로운 릴레이션으로 생성

  • {(#A#C → D), (#C → B)}


2.20. 4정규형

  • 다가 종속 개념이 기반이 되는 정규형으로 다가 종속을 분리하는 것

  • 다가 종속이 발생하여 M*N 만큼 인스턴스가 생성돼 중복 데이터 발생

  • 서로 관계가 없는 다가 속성 간에 종속성이 생긴 릴레이션은 많은 중복 데이터가 생기기 때문에 4정규화를 하여 중복 데이터를 제거해야 함

2.20.1. 4정규형 개요

  • 다가 종속 개념이 기반이 되는 정규형으로 이를 이해하려면 다가 종속(MVD; Multivalued Dependency)을 이해해야 함

  • 다가 종속은 한 릴레이션에 다가 속성이 두 개 이상 존재할 때 발생할 수 있으며, 다가 속성 값 사이에 다대다(M:M) 관계가 발생 하는 것

  • 데이터를 정확하고 효율적으로 관리할 수 있도록 해주며 데이터 사용 공간도 절약

  • 서로 관계가 없는 다가 속성 간에 종속성이 생긴 릴레이션은 많은 중복 데이터가 생기기 때문에 4정규화를 하여 중복 데이터를 제거해야 함

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

2.20.2. 4정규형 발생 조건

  • 하나의 A 값에 대응하는 여러 개의 B 값이 있고 A 값에 대응하는 여러 개의 C 값이 있으며, B 값과 C 값 사이에는 아무런 상관관계가 없는데 A, B, C 값을 하나의 릴레이션에서 관리할 때 다가 종속이 발생

  • 즉 두 개의 독립적인 일대다(1:M) 관계의 속성이 하나의 릴레이션에 존재하면 다가 종속이 발생

2.20.3. 다가 종속 예

  • 아래 표는 사원은 두 명 이지만 이름이 열번 존재하고 '홍길동’의 기술과 언어는 두 개인데 네 건의 데이터가 존재

  • 사원과 기술, 사원과 언어라는 두개의 다가 속성을 하나의 릴레이션에서 관리하기 때문

#사원 #기술 #언어

홍길동

모델링

영어

홍길동

모델링

한국어

홍길동

튜닝

영어

홍길동

튜닝

한국어

강길동

자바

한국어

강길동

자바

일어

강길동

C++

한국어

강길동

C++

일어

강길동

.Net

한국어

강길동

.Net

일어

2.20.4. 다가 종속 해소 예

  • 기술과 언어 사이에 직접적인 연광이 없고, 단지 한 사원에 속해 있어 간접적인 연관 관계만 존재

  • 즉 어떤 기술이 어떤 언어와 쌍이 되는지 중요하지 않으므로 두개의 릴레이션으로 분해

#사원 #기술 #사원 #언어

홍길동

모델링

홍길동

영어

홍길동

튜닝

홍길동

한국어

강길동

자바

강길동

한국어

강길동

C++

강길동

일어

강길동

.Net

-

-


2.21. 5정규형

  • 더 이상 쪼갤 수 없도록 릴레이션을 쪼갠 릴레이션으로, 데이터가 변질되지 않는 한 엔터티를 최대로 분해하는 것

  • 5정규형은 지나치게 이론적이며 DBMS에서 실제로 사용하기에는 부적합하지만, 오히려 실무에서 효율적이지 않기 때문에 실익이 없는 5정규형을 사용하지 않기 위해서라도 구분할 수 있어야함

2.21.1. 5정규형 개요

  • 조인 종속(Join Dependency) 개념 기반으로 조인 종속이 없는 릴레이션

  • 어떤 릴레이션을 분해(정규화)한 다음에 조인해서 다시 원래의 릴레이션으로 복원할 수 있다면, 그 릴레이션은 조인 종속이 존재하는 릴레이션

  • 무손실 분해와 비부가적 분해가 되도록 분해한 릴레이션이 5정규형

  • 5정규형은 릴레이션을 분해하고(Project) 합치는(Join) 개념 때문에 PJ정규형(Project-Join Normal Form)이라고도 함

  • 5정규형은 3개체 관계(Ternary Relationships)와 연관됨

  • 3개체 관계가 발생한 릴레이션은 일반적으로 세 개의 릴레이션으로 분해할 수 있으며, 세 개의 릴레이션으로 분해하면 5정규형을 만족함

2.21.2. 무손실 조인(Lossless Join)과 비부가적 조인(Nonadditive Join)

  • 하나의 릴레이션을 여러 개의 릴레이션으로 분해한 후 공통(식별자) 속성으로 조인하여 데이터 손실 없이 원래의 릴레이션으로 복원할 수 있으면, 이를 '무손실 조인’이라함

  • 조인한 결과에 원래 릴레이션에 없던 데이터(가짜 튜플)가 존재하지 않으면 이를 '비부가적 조인’이라함

  • '무손실 분해’란 필요한 데이터가 사라지지 않도록 분해하는 것을 뜻하고, '비부가적 분해’란 필요 없는 데이터가 생기지 않는 것을 뜻함


2.22. 정규화 요약

  • 릴레이션에 제거 대상이 존재하면 정규화 수행

  • 제거해야 하는 이유를 알고 어떻게 제거하는지를 알면 정규화는 수월하게 할 수 있음

  • 더이상 제거할 것이 없는 모델이 가장 이상적인 모델

2.22.1. 정규화 요약

구분 제거 대상 특징

1정규화

다가·복합 속성 제거, 반복 속성 제거, 중첩 릴레이션 제거

속성이 추가되거나 일대다(1:M) 관계의 엔터티가 추가되며 관계를 상속시킴

2정규화

부분 종속 제거

일대다(1:M) 관계의 엔터티가 추가되며 관계를 상속받음

3정규화

이행 종속 제거

일대다(1:M) 관계의 엔터티가 추가되며 관계를 상속받음

BC정규화

종속자가 키에 포함된 함수 종속 제거

모든 결정자는 키이어야 한다는 관점에서 3정규형과 같음

4정규화

다가 종속 제거

다가 속성의 개수만큼 일대다(1:M) 관계의 엔터티가 추가되며 관계를 상속시킴

5정규화

조인 종속 제거

조인 종속이 존재하는 엔터티가 오히려 사용하기 편함. 지나치게 이상정

2.22.2. 1정규화 요약

  • 정규화 수행 조건

    • 릴레이션에 다가 속성, 복합속성, 반복 속성, 중첩 릴레이션 같은 제거 대상이 존재하면 1정규화 수행

  • 정규화 순서

    • 제거해야 하는 속성을 엔터티에서 제거

    • 제거한 속성이 포함된 새로운 엔터티를 만듬

    • 기존 엔터티에서 새로운 엔터티로 관계를 상속

2.22.3. 2정규화 요약

  • 정규화 수행 조건

    • 릴레이션에 존재하는 부분 종속을 제거하는 것이 2정규화

  • 정규화 순서

    • 제거해야 하는 속성을 엔터티에서 제거

    • 제거한 속성이 포함된 새로운 엔터티를 만듬

    • 새로 만든 엔터티에서 기존 엔터티로 관계(식별관계)를 상속

    • (관계 속성은 주 식별자에 포함되며, 관계가 식별 관계(Identifying Relationship))

2.22.4. 3정규화 요약

  • 정규화 수행 조건

    • 이행 종속을 제거하는 것이 3정규화

  • 정규화 순서

    • 제거해야 하는 속성을 엔터티에서 제거

    • 제거한 속성이 포함한 새로운 엔터티를 만듬

    • 새로 만든 엔터티에서 기존 엔터티로 관계(비식별 관계)를 상속

  • (상속한 관계가 일반속성이 되며, 관계는 비식별 관계(Non-Identifying Relationship))

2.22.5. BC정규화 요약

  • 정규화 수행 조건

    • 후보 식별자가 종속자가 된 함수 종속을 제거하는 것이 BC정규화

  • 정규화 순서

    • 후보 식별자 속성 중 종속자 속성을 엔터티에서 제거

    • 제거한 속성과 그 속성의 결정자 속성으로 새로운 엔터티를 만듬

    • 새로 만든 엔터티에서 기존 엔터티로 관계를 상속

2.22.6. 4정규화 요약

  • 정규화 수행 조건

    • 다가 종속을 제거하는 것이 4정규화

  • 정규화 순서

    • 제거해야 하는 대상인 다가 종속에 포함된 속서을 엔터티에서 제거

    • 제거한 속성이 포함된 새로운 엔터티를 다가 속성 개수만큼 만듬

    • 기존 엔터티와 새로 만든 엔터티와의 교차 관계 엔터티를 만듬

2.22.7. 5정규화 요약

  • 정규화 수행 조건

    • 조인 종속을 제거하는 것이 5정규화

  • 정규화 순서

    • 데이터가 변질되지 않는한 엔터티를 최대로 분해


2.23. 3정규화까지만 수행하면 된다?

  • 업무 요건에 따라 정규화를 수행하고 나서, 성능 관점에서 필요에 따라 비정규형을 선택할 수 있을 뿐 정규화를 제한하는것은 올바른 접근 방법이 아님

2.23.1. 3정규화까지 수행에 대한 고찰

  • 3정규화까지가 정규화의 대다수를 차지하기 때문에 3정규화까지 하면 대부분의 중복은 해결할 수 있음

  • 3정규화에 비해 어려운 BC정규화, 4정규화, 5정규화 난이도

  • BC 정규화 이상으로 수행할 시 쿼리(조회)가 어렵다고 생각하기 때문

2.23.2. 정규화에 대한 고찰

  • 정규화를 하는 이유는 중복 데이터를 제거하여 데이터 이상현상을 최소화하려는 것

  • 업무 요건에 따라 정규화를 수행하고 나서, 성능 관점에서 필요에 따라 비정규형을 선택할 수 있을 뿐 정규화를 제한하는것은 올바른 접근 방법이 아님

  • 다만 이론에 의해 최대한 분해한 5정규형은 실익이 없고, 5정규화를 하지 않는다고 해서 업무 요건을 저해하는것도 아니며, 중복 데이터가 생기는 것도 아님


2.24. 정규형과 성능

  • 쓰기 성능은 일반적으로 정규형의 성능이 좋으며, 조회 성능은 요건에 따라서 비정규형의 성능이 더 나빠질 수 있음

  • 사소한 성능 향상을 위해 데이터 무결성을 저해하는 것은 소탐대실일 것

2.24.1. 정규화에 따른 조회 성능 저하에 대한 오해

  • 정규화하여 엔터티를 분해하였을 때 조인하는 과정에서 사용하는 블록이 능어남으로써 성능에 나쁜 영향을 미침

  • 따라서 일반적인 조회 요건이라면 미세하게라도 정규형이 비정규형보다 조회 성능이 떨어질 가능성이 높음

  • 다만 정규화를 하면 중복 데이터가 최소화되고 인스턴스의 크기가 작아지므로, 한 블록(8Kbytes)에 저장하는 인스턴스는 많아지게됨

  • 이 점이 여러 건의 조회뿐만 아니라 한 건의 조회에도 특정 속성을 조회할 때는 정규형의 성능이 좋아질수 있는 원인

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

  • 그로인해 블록이 다시 사용될 가능성(확률)이 커짐으로써 메모리에 존재하는 블록을 조회할 메모리 적중률(Hit Ratio)이 높짐으로써 성능이 좋아짐

2.24.2. 정규화에 따른 쓰기 성능 향상

  • 조회 성능과는 다르게 쓰기 성능(Insert, Update, Delete)이 좋다는 것은 중복 속성이 없기 때문

  • 비정규형은 어떤식으로든 중복 데이터를 사용하며, 한 속성을 다루는게 아니라 여러 속성을 다루기 때문에 쓰기 시간이 오래 걸림