자격증/정보처리기사 📌 [정보처리기사] 논리 데이터베이스 설계 - 정규화(Normalization)/반정규화(Denormalization)/시스템 카탈로그
  • 728x90
    반응형

     

     

    목차

       

      정규화의 개요

      📌 정규화란 함수적 종속성 등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정이다.

       

      • 하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해해가는 과정이라 할 수 있다.
      • 정규형에는 제1정규형, 제2정규형, 제3정규형, BCNF형, 제4정규형, 제5정규형이 있으며, 차수가 높아질수록 만족시켜야 할 제약 조건이 늘어난다.
      • 정규화는 데이터베이스의 논리적 설계 단계에서 수행한다.
      • 정규화는 논리적 처리 및 품질에 큰 영향을 미친다.
      • 정규화된 데이터 모델은 일관성, 정확성, 단순성, 비중복성, 안정성 등을 보장한다.
      • 정규화 수준이 높을수록 유연한 데이터 구축이 가능하고 데이터의 정확성이 높아지는 반면 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다.

       

       

      정규화의 목적

      • 데이터 구조의 안정성 및 무결성을 유지한다.
      • 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 만든다.
      • 효과적인 검색 알고리즘을 생성할 수 있다.
      • 데이터 중복을 배제하여 이상(Anomaly)의 발생 방지 및 자료 저장 공간의 최소화가 가능하다.
      • 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄인다.
      • 데이터 모형의 단순화가 가능하다.
      • 속성의 배열 상태 검증이 가능하다.
      • 개체와 속성의 누락 여부 확인이 가능하다.
      • 자료 검색과 추출의 효율성을 추구한다.

       

       

      이상(Anomaly)의 개념 및 종류

      📌 정규화를 거치지 않으면 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 예기치 못한 곤란한 현상이 발생하는데, 이를 이상(Anomaly)이라 하며 삽입 이상, 삭제 이상, 갱신 이상이 있다.

       

      • 삽입 이상(Insertion Anomaly) : 릴레이션에 데이터를 삽입할 때 의도와는 상관없이 원하지 않은 값들도 함께 삽입되는 현상이다.
      • 삭제 이상(Deletion Anomaly) : 릴레이션에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 연쇄가 일어나는 현상이다.
      • 갱신 이상(Update Anomaly) : 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상이다.

       

       

      정규화의 원칙

      • 정보의 무손실 표현, 즉 하나의 스키마를 다른 스키마로 변환할 때 정보의 손실이 있어서는 안 된다.
      • 분리의 원칙, 즉 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜 표현해야 한다.
      • 데이터의 중복성이 감소되어야 한다.

       

       

      정규화 과정

      • 1NF(제1정규형)
        • 1NF는 릴레이션에 속한 모든 도메인(Domain)이 원자 값(Atomic Value)만으로 되어 있는 정규형이다. 즉, 릴레이션의 모든 속성 값이 원자 값으로만 되어 있는 정규형이다.
          • 릴레이션의 모든 속성이 단순 영역에서 정의된다.
      • 2NF(제2정규형)
        • 2NF는 릴레이션 R이 1NF이고, 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형이다.
      • 함수적 종속 / 완전 / 부분 함수적 종속 및 이해
        • 함수적 종속(Functional Dependency)
          • 함수적 종속은 데이터들이 어떤 기준값에 의해 종속되는 것을 의미한다.
          • 예를 들어 <수강> 릴레이션이 (학번, 이름, 과목명)으로 되어 있을 때, '학번'이 결정되면 '과목명'에 상관없이 '학번'에는 항상 같은 '이름'이 대응된다. '학번'에 따라 '이름'이 결정 될 때 '이름'을 '학번'에 함수 종속적이라고 하며 '학번 → 이름'과 같이 쓴다.
        • 완전 함수적 종속
          • 어떤 테이블 R에서 속성 A가 다른 속성 집합 B전체에 대해 함수적 종속이지만 속성 집합 B의 어떠한 진 부분 집합 C(즉, C ⊂ B)에는 함수적 종속이 아닐 때 속성 A는 속성 집합 B에 완전 함수적 종속이라고 한다.
        • 부분 함수적 종속
          • 어떤 테이블 R에서 속성 A가 다른 속성 집합 B 전체에 대해 함수적 종속이면서 속성 집합 B의 어떠한 진 부분 집합에도 함수적 종속일 때, 속성 A는 속성 집합 B에 부분 함수적 종속이라고 한다.
      • 함수적 종속 / 완전 / 부분 함수적 종속 및 이해
        • 완전 / 부분 함수적 종속의 이해
          • 완전 함수적 종속은 어떤 속성이 기본키에 대해 완전히 종속적일 때를 말한다.
          • 예를 들어 <수강> 릴레이션이 (학번, 과목명, 성적, 학년)으로 되어 있고 (학번, 과목명)이 기본키일 때, '성적'은 '학번'과 '과목명'에 의해서만 결정되므로 '성적'은 기본키(학번, 과목명)에 완전 함수적 종속이 되는 것이다.
          • 반면에 '학년'은 '과목명'에 관계없이 '학번'이 같으면 항상 같은 '학년'이 온다. 즉 기본키의 일부인 '학번'에 의해서 '학년'이 결정되므로 '학년'은 부분 함수적 종속이라고 한다.
      • 3NF(제3정규형)
        • 3NF는 릴레이션 R이 2NF이고, 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 만족하지 않는 정규형이다.
          • 무손실 조인 또는 종속성 보존을 저해하지 않고도 항상 3NF 설계를 얻을 수 있다.

       

      💡 이행적 종속(Transitive Dependency) 관계 : A → B 이고 B → C 일 때 A → C를 만족하는 관계를 의미한다.

       

      • BCNF(Boyce-Codd 정규형)
        • BCNF는 릴레이션 R에서 결정자가 모두 후보키(Candidate Key)인 정규형이다.
          • 3NF에서 후보키가 여러 개 존재하고 서로 중첩되는 경우에 적용하는, 강한 제3정규형 이라고도 한다.
          • 모든 BCNF(Boyce-Codd Normal Form)가 종속성을 보존하는 것은 아니다.
          • BCNF의 제약 조건
            • 키가 아닌 모든 속성은 키에 대하여 완전 종속해야 한다.
            • 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가 있지 않은 모든 키에 대하여 완전 종속 해야 한다.
            • 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속할 수 없다.

       

      💡 결정자/종속자 : 결정자(Determinant)는 속성 간의 종속성을 규명할 때 기준이 되는 값이고, 종속자(Dependent)는 결정자의 값에 의해 정해지는 값을 의미한다.
      🔔 예) '학번'에 따라 '이름'이 결정되는 '학번 → 이름'일 때 '학번'을 결정자라고, '이름'을 종속자라 한다.

       

      • 4NF(제4정규형)
        • 4NF는 릴레이션 R에 다치 종속 A → B가 성립하는 경우 R의 모든 속성이 A에 함수적 종속 관계를 만족하는 정규형이다.
      • 5NF(제5정규형, PJ/NF)
        • 5NF는 릴레이션 R의 모든 조인 종속이 R의 후보키를 통해서만 성립되는 정규형이다.

       

      💡 다치 종속(Multi Valued Dependency, 다가 종속) : A, B, C 3개의 속성을 가진 릴레이션 R에서 어떤 복합 속성(A, C)에 대응하는 B값의 집합이 A값에만 종속되고 C값에는 무관하면, B는 A에 다치 종속이라 하고 'A → B' 로 표기한다.
      💡 조인 종속(Join Dependency) : 어떤 릴레이션의 R의 속성에 대한 부분집합 A, B ..., C가 있다고 해보자. 이때 만일 릴레이션 R이 자신의 프로젝션(Projection) A, B, ..., C를 모두 조인한 결과가 자신과 동일한 경우 릴레이션 R은 조인 종속(A, B, ..., C)을 만족한다고 한다.

       

       

       

      정규화 과정 정리

       

      💡 정규화 단계 암기 요령 : 두부를 좋아하는 정규화가 두부가게에 가서 가게에 있는 두부를 다 달라고 말하니 주인이 깜짝 놀라며 말했다. 두부이걸다줘 ? -도부이결다조
      메인이 원자값
      분적 함수 종속 제거
      행적 함수 종속 제거
      정자이면서 후보키가 아닌 것 제거
      치 종속 제거
      인 종속성 이용

       

       


       

       

      반정규화의 개념

      📌 반정규화란 시스템의 성능 향상, 개말 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로, 의도적으로 정규화 원칙을 위배하는 행위이다.

       

      • 반정규화를 수행하면 시스템의 성능이 향상되고 관리 효율성은 증가하지만 데이터의 일관성 및 정합성이 저하될 수 있다.
      • 과도한 반정규화는 오히려 성능을 저하시킬 수 있다.
      • 반정규화를 위해서는 사전에 데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능과 단순화를 우선으로 할지를 결정해야 한다.
      • 반정규화 방법에는 테이블 통합, 테이블 분할, 중복 테이블 추가, 중복 속성 추가 등이 있다.

       

      💡 정규화의 원칙 ? 정보의 무손실 표현, 즉 하나의 스키마를 다른 스키마로 변환할 때 정보의 손실이 있어서는 안 된다. 분리의 원칙, 즉 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜 표현해야 한다. 데이터의 중복성은 감소되어야 한다.

       

       

       

      테이블 통합

      📌 테이블 통합은 두 개의 테이블이 조인(Join)되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능 향상에 도움이 될 경우 수행한다.

       

      • 두 개의 테이블에서 발생하는 프로세스가 동일하게 자주 처리되는 경우, 두 개의 테이블을 이용하여 항상 조회를 수행하는 경우 테이블 통합을 고려한다.

       

      • 테이블 통합의 종류에는 1:1 관계 테이블 통합, 1:N 관계 테이블 통합, 슈퍼타입/서브타입 테이블 통합이 있다.
        • 데이터 검색은 간편하지만 레코드 증가로 인해 처리량이 증가한다.
        • 테이블 통합으로 인해 입력, 수정, 삭제 규칙이 복잡해질 수 있다.
        • Not Null, Default, Check 등의 제약조건(Constraint)을 설계하기 어렵다.

       

      💡 슈퍼타입/서브타입 : 슈퍼타입은 상위 개체를 서브타입은 하위 개체를 의미한다.
      💡 Not Null : 속성 값이 Null이 될 수 없다.
      💡 Default : 속성 값이 생략되면 기본값 설정
      💡 Check : 속성 값의 범위나 조건을 설정하여 설정한 값만 허용

       

       

       

      테이블 분할

      • 테이블 분할은 테이블을 수식 또는 수평으로 분할하는 것이다.

       

      • 수평 분할(Horizontal Partitioning)
        • 수평 분할은 레코드(Record)를 기준으로 테이블을 분할하는 것이다.
        • 레코드 별로 사용 빈도의 차이가 큰 경우 사용 빈도에 따라 테이블을 분할한다.
      • 수식 분할(Vertical Partitioning)
        • 수직 분할은 하나의 테이블에 속성이 너무 많을 경우 속성을 기준으로 테이블을 분할하는 것이다.
        • 갱신 위주의 속성 분할 : 데이터 갱신 시 레코드 잠금으로 인해 다른 작업을 수행할 수 없으므로 갱신이 자주 일어나는 속성들을 수직 분할하여 사용한다.
        • 자주 조회되는 속성 분할 : 테이블에서 자주 조회되는 속성이 극히 일부일 경우 자주 사용되는 속성들을 수직 분할하여 사용한다.
        • 크기가 큰 속성 분할 : 이미니자 2GB 이상 저장될 수 있는 텍스트 형식 등으로 된 속성들을 수식 분할하여 사용한다.
        • 보안을 적용해야 하는 속성 분할 : 테이블 내의 특정 속성에 대해 보안을 적용할 수 없으므로 보안을 적용해야 하는 속성들을 수직 분할하여 사용한다.

       

      💡 레코드 잠금 : 데이터의 무결성을 유지하기 위해 어떤 프로세스가 데이터 값을 변경하려고 하면 변경 작업이 완료될 때까지 다른 프로세스가 해당 데이터 값을 변경하지 못하도록 하는 것을 의미한다.

       

       

       

      • 테이블 분할 시 고려 사항
        • 기본키의 유일성 관리가 어려워진다.
        • 데이터 양이 적거나 사용 빈도가 낮은 경우 테이블 분할이 필요한지를 고려해야 한다.
        • 분할된 테이블로 인해 수행 속도가 느려질 수 있다.
        • 데이터 검색에 중점을 두어 테이블 분할 여부를 결정해야 한다.

       

      중복 테이블 추가

      📌 여러 테이블에서 데이터를 추출해서 사용해야 하거나 다른 서버에 저장된 테이블을 이용해야 하는 경우 중복 테이블을 추가하여 작업의 효율성을 향상시킬 수 있다.

       

      • 중복 테이블을 추가하는 경우
        • 정규화로 인해 수행 속도가 느려지는 경우
        • 많은 범위의 데이터를 자주 처리해야 하는 경우
        • 특정 범위의 데이터만 자주 처리해야 하는 경우
        • 처리 범위를 줄이지 않고는 수행 속도를 개선할 수 없는 경우
      • 중복 테이블을 추가하는 방법은 다음과 같다.
        • 집계 테이블의 추가 : 집계 데이터를 위한 테이블을 생성하고, 각 원본 테이블에 트리거(Trigger)를 설정하여 사용하는 것으로, 트리거의 오버헤드(Overhead)에 유의해야 한다.
        • 진행 테이블의 추가 : 이력 관리 등의 목적으로 추가하는 테이블로, 적절한 데이터 양의 유지와 활용도를 높이기 위해 기본키를 적절히 설정한다.
        • 특정 부분만을 포함하는 테이블의 추가 : 데이터가 많은 테이블의 특정 부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성한다.

       

       

      💡 위의 이미지를 보면 <회원정보>, <상품정보>, <주문정보> 테이블의 데이터를 집계하는 집계 테이블을 추가하여 시스템 사용이 적은 시간에 배치 작업에 의해 원하는 데이터를 생성하여 사용하는 것이다.

       

       

      중복 속성 추가

      📌 중복 속성 추가는 조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가하는 것이다.

       

      • 중복 속성을 추가하면 데이터의 무결성 확보가 어렵고, 디스크 공간이 추가로 필요하다.

       

      <중복 속성 추가>

       

      • 중복 속성을 추가하는 경우
        • 조인이 자주 발생하는 속성인 경우
        • 접근 경로가 복잡한 속성인 경우
        • 액세스의 조건으로 자주 사용되는 속성인 경우
        • 기본키의 형태가 적절하지 않거나 여러 개의 속성으로 구성된 경우
      • 중복 속성 추가 시 고려 사항
        • 테이블 중복과 속성의 중복을 고려한다.
        • 데이터 일관성 및 무결성에 유의해야 한다.
        • SQL 그룹 함수를 이용하여 처리할 수 있어야 한다.
        • 저장 공간의 지나친 낭비를 고려한다.

       

       


       

       

      시스템 카탈로그(System Catalog)의 의미

      📌 시스템 카탈로그는 시스템 그 자체에 관련이 있는 다양한 객체에 관한 정보를 포함하는 시스템 데이터베이스이다.

       

      • 시스템 카탈로그 내의 각 테이블은 사용자를 포함하여 DBMS에서 지원하는 모든 데이터 객체에 대한 정의나 명세에 관한 정보를 유지 관리하는 시스템 테이블이다.
      • 카탈로그들이 생성되면 데이터 사전(Data Dictionary)에 저장되기 때문에 좁은 의미로는 카탈로그를 데이터 사전이라고도 한다.

       

       

      시스템 카탈로그 저장 정보

      📌 시스템 카탈로그에 저장된 정보를 메타 데이터(Meta-Data)라고 한다.

       

      • 메타 데이터의 유형
        • 데이터베이스 객체 정보 : 테이블(Table), 인덱스(Index), 뷰(View) 등의 구조 및 통계 정보
        • 사용자 정보 : 아이디, 패스워드, 접근 권한 등
        • 테이블의 무결성 제약 조건 정보 : 기본키, 외래키, NULL 값 허용 여부 등
        • 함수, 프로시저, 트리거 등에 대한 정보

       

      💡 Catalog(카탈로그)의 사전적 의미는 상품 목록, 상품 안내서를 말한다. 즉, 어떤 상품을 소개하기 위해 기업에서 발행하는 책자다.
      💡 메타 데이터 : '속성정보'라고도 불리는 메타 데이터는 '데이터에 관한 구조화된 데이터', '다른 데이터를 설명해 주는 데이터' 이다.

       

       

       

      카탈로그의 특징

      • 카탈로그 자체도 시스템 테이블로 구성되어 있어 일반 이용자도 SQL을 이용하여 내용을 검색해 볼 수 있다.
      • INSERT, DELETE, UPDATE 문으로 카탈로그 갱신하는 것은 허용되지 않는다.
      • 데이터베이스 시스템에 따라 상이한 구조를 갖는다.
      • 카탈로그는 DBMS가 스스로 생성하고 유지한다.
      • 카탈로그의 갱신 : 사용자가 SQL 문을 실행시켜 기본 테이블, 뷰, 인덱스 등에 변화를 주면 시스템이 자동으로 갱신한다.
      • 분산 시스템에서의 카탈로그 : 보통의 릴레이션, 인덱스, 사용자 등의 정보를 포함할 뿐 아니라 위치 투명성 및 중복 투명성을 제공하기 위해 필요한 모든 제어 정보를 가져야 한다.

       

      💡 인덱스(Index) ? 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료 구조이다. 특정 컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다.
      💡 뷰(View) ? 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블이다.

       

       

       

      카탈로그/데이터 사전을 참조하기 위한 DBMS 내의 모듈 시스템

      • 데이터 정의어 번역기(DDL Compiler) : DDL을 메타 데이터를 갖는 테이브(카탈로그)로 변환하여 데이터 사전에 저장시킨다.
      • 데이터 조작어 번역기(DML Compiler) : 응용 프로그램에 삽입된 DML문을 주 언어로 표현한 프로시저 호출로 변환하여 질의 처리기와 상호 통신한다.
      • Data Directory
        • 데이터 사전에 수록된 데이터를 실제로 접근하는 데 필요한 정보를 관리 유지하는 시스템이다.
        • 시스템 카탈로그는 사용자와 시스템 모두 접근할 수 있지만 데이터 디렉터리는 시스템만 접근할 수 있다.
      • 질의 최적화기 : 사용자의 요구를 효율적인 형태로 변환하고 질의를 처리하는 좋은 전략을 모색한다.
      • 트랜잭션 처리기 : 복수 사용자 환경에서 평행으로 동시에 일어나는 트랜잭션 문제를 해결하여, 각각의 사용자가 데이터베이스 자원을 배타적으로 이용할 수 있도록 한다.

       

       

      728x90
      반응형
    상단으로