Database

데이터베이스 정규화에 대한 기본 사항

steloflute 2015. 12. 30. 23:30

https://support.microsoft.com/ko-kr/kb/283878



데이터베이스 정규화에 대한 기본 사항

Office 2003에 대한 지원이 종료되었습니다.

Microsoft는 2014년 4월 8일 Office 2003에 대한 지원을 종료했습니다. 이러한 변경에 따라 해당 소프트웨어 업데이트 및 보안 옵션이 영향을 받습니다. 사용자에게 미치는 영향 및 계속 보호를 받는 방법에 대해 알아보십시오.

초급: 단일 사용자 컴퓨터의 사용자 인터페이스에 대한 지식이 필요합니다. 

이 문서의 Microsoft Access 2000 버전에 대한 내용은 209534를 참조하십시오. 
이 문서의 Microsoft Access 95 또는 Microsoft Access 97 버전에 대한 내용은 100139를 참조하십시오. 
요약
이 문서에서는 초보자를 위해 데이터베이스 정규화 용어를 설명합니다. 이 용어를 기본적으로 이해하고 있으면 관계형 데이터베이스의 디자인을 설명할 때 유용합니다. 

참고: Microsoft에서는 데이터베이스 정규화의 기본 사항을 설명하는 웹캐스트도 제공합니다. 이 웹캐스트를 보려면 다음 Microsoft 웹 사이트를 방문하십시오.
추가 정보

정규화 설명

정규화는 데이터베이스의 데이터를 구성하는 과정입니다. 여기에는 테이블을 만드는 과정과 중복성 및 일관성 없는 종속성을 제거하여 데이터를 보호하고 보다 유연한 데이터베이스를 만들기 위해 설계된 규칙에 따라 테이블 간의 관계를 설정하는 과정이 포함됩니다. 

데이터가 중복되면 디스크 공간이 낭비되고 유지 관리 문제가 발생합니다. 또한 둘 이상의 위치에 있는 데이터를 변경해야 할 경우에는 모든 위치에서 정확히 동일한 방법으로 데이터를 변경해야 합니다. 예를 들어, 고객 주소 데이터가 고객 테이블에만 저장되어 있고 다른 데이터베이스에는 저장되어 있지 않다면 고객 주소를 보다 쉽게 변경할 수 있습니다. 

"일관성 없는 종속성"이란, 다음과 같이 설명할 수 있습니다. 예를 들어, 사용자가 고객 테이블에서 특정 고객의 주소를 찾는 것은 자연스럽지만 고객 테이블에서 해당 고객을 방문한 직원의 급여를 찾는 것은 적절하지 않습니다. 직원의 급여는 직원과 관련되거나 직원에 따라 다르므로 직원 테이블로 이동해야 합니다. 종속성에 일관성이 없으면 데이터를 찾기 위한 경로가 없거나 손상될 수 있으므로 데이터에 액세스하기가 어려울 수 있습니다. 

데이터베이스 정규화에는 몇 가지 규칙이 있습니다. 각 규칙을 "정규형"이라고 합니다. 첫 번째 규칙이 지켜지면 이 데이터베이스를 "제 1 정규형"이라고 합니다. 처음 세 개의 규칙이 지켜지면 이 데이터베이스는 "제 3 정규형"인 것으로 간주됩니다. 다른 수준의 정규화도 가능하지만 제 3 정규형이 대부분의 응용 프로그램에 필요한 가장 높은 수준으로 간주됩니다. 

대부분의 공식적인 규칙 및 사양과 마찬가지로 실제 시나리오에서는 이러한 규칙을 항상 완벽하게 지킬 수는 없습니다. 일반적으로 정규화에는 추가 테이블이 필요하며 일부 고객은 이 작업을 불필요하게 느낄 수 있습니다. 처음 세 개의 정규화 규칙 중 하나를 위반하기로 결정한 경우에는 응용 프로그램에서 데이터 중복 및 일관성 없는 종속성과 같은 문제가 발생할 경우를 대비해야 합니다. 

아래에서는 정규형과 예제를 설명합니다. 

제 1 정규형

  • 개별 테이블에서 반복되는 그룹을 제거합니다.
  • 관련 데이터의 각 집합에 대해 별도의 테이블을 만듭니다.
  • 기본 키를 사용하여 관련 데이터의 각 집합을 식별합니다.
하나의 테이블에 유사한 데이터를 저장하는 필드를 여러 개 사용하지 않습니다. 예를 들어, 가능한 두 개의 공급업체에서 발생할 수 있는 재고 품목을 추적하려는 경우 재고 레코드에 공급업체 코드 1과 공급업체 코드 2에 대한 필드를 포함할 수 있습니다. 

세 번째 공급업체를 추가하면 어떻게 될까요? 이 경우에는 필드를 추가하는 것만으로는 부족하고 프로그램과 테이블을 수정해야 합니다. 공급업체 수가 크게 늘어날 때는 이 방법이 더욱 적절하지 않습니다. 대신 모든 공급업체 정보를 공급업체라는 별도의 테이블에 저장한 다음 품목 번호 키를 사용하여 재고를 공급업체에 연결하거나 공급업체 코드 키를 사용하여 공급업체를 재고에 연결합니다.

제 2 정규형

  • 여러 레코드에 적용되는 값 집합에 대해 별도의 테이블을 만듭니다.
  • 이러한 테이블을 연결할 때는 외래 키를 사용합니다.
레코드는 테이블의 기본 키(필요한 경우 복합 키)에만 종속되어야 합니다. 예를 들어, 계정 시스템에 있는 고객 주소를 생각해 보면 주소는 고객 테이블에 필요하지만 주문, 배달, 청구서, 미수금 및 기수금 테이블에도 주소가 필요합니다. 이럴 때는 고객의 주소를 각 테이블에 별도의 항목으로 저장하는 대신 고객 테이블이나 별도의 주소 테이블 하나에 저장하십시오.

제 3 정규형

  • 키에 종속되지 않는 필드를 제거합니다.
해당 레코드 키의 일부가 아닌 레코드의 값은 테이블에 포함되지 않습니다. 일반적으로 필드 그룹의 내용이 테이블에 있는 둘 이상의 레코드에 적용될 때는 이러한 필드를 별도의 테이블에 저장하는 것이 좋습니다. 

예를 들어, 직원 채용 테이블에 지원자의 대학 이름과 주소를 포함시킬 수 있습니다. 그러나 그룹 메일을 보내려면 전체 대학 목록이 필요합니다. 대학 정보가 지원자 테이블에 저장되어 있으면 현재 지망자를 제외하고 대학을 나열할 수 있는 방법이 없습니다. 따라서 별도의 대학 테이블을 만들고 대학 코드 키를 사용하여 지원자 테이블에 대학을 연결하십시오. 

예외: 제 3 정규형을 준수하는 것은 이론적으로 바람직하지만 항상 효과가 있는 것은 아닙니다. 예를 들어, 고객 테이블에서 가능한 모든 필드 간 종속성을 제거하려면 여러 레코드에서 중복될 수 있는 시/도, 우편 번호, 판매 담당자, 고객 등급 및 기타 요인에 대해 각각 별도의 테이블을 만들어야 합니다. 이론적으로 정규화는 중요한 과정입니다. 그러나 여러 개의 작은 테이블로 인해 성능이 저하되거나 열려 있는 파일 및 메모리 용량이 초과될 수 있습니다. 

제 3 정규형은 자주 변경되는 데이터에만 적용하는 것이 보다 적합할 수 있습니다. 일부 종속 필드가 남아 있으면 필드가 변경될 때 사용자가 모든 관련 필드를 확인해야만 하도록 응용 프로그램을 디자인하십시오.

기타 정규형

BCNF(Boyce Codd Normal Form)라고도 하는 제 4 정규형과 제 5 정규형도 있지만 이 형식은 실제 디자인에서 거의 고려되지 않습니다. 이러한 규칙은 무시해도 데이터베이스 디자인의 완벽성은 덜하겠지만 기능적으로는 영향이 없습니다.

예제 테이블 정규화

이 단계에서는 가공의 학생 테이블을 정규화하는 과정을 보여 줍니다.
  1. 정규화되지 않은 테이블 

    학생 번호지도 교수지도 교수실강좌1강좌2강좌3
    1022김한412101-07143-01159-02
    4123조의연216201-01211-02214-01
  2. 제 1 정규형 반복 그룹 없음

    테이블에는 2차원만 있어야 합니다. 한 명의 학생이 여러 개의 강좌를 들으므로 강좌는 별도의 테이블에 나열해야 합니다. 위의 레코드에서 강좌1, 강좌2 및 강좌3 필드는 디자인에 문제가 있다는 것을 나타냅니다. 

    스프레드시트에서는 3차원을 사용하기도 하지만 테이블에서는 사용할 수 없습니다. 이 테이블은 일대다 관계를 사용한다는 점에서도 문제가 있습니다. 일요소와 다요소를 같은 테이블에 배치하지 마십시오. 대신 다음과 같이 반복 그룹(Class#)을 제거하여 제 1 정규형으로 다른 테이블을 만드십시오.

    학생 번호지도 교수지도 교수실강좌 번호
    1022김한412101-07
    1022김한412143-01
    1022김한412159-02
    4123조의연216201-01
    4123조의연216211-02
    4123조의연216214-01
  3. 제 2 정규형: 중복 데이터 제거

    위의 테이블에는 각 학생 번호 값에 대해 여러 개의 강좌 번호 값이 있습니다. 강좌 번호는 본질적으로 학생 번호(기본 키)에 종속되지 않으므로 이 관계는 제 2 정규형에 맞지 않습니다.

    다음 두 개의 테이블에서는 제 2 정규형을 보여 줍니다. 

    학생:

    학생 번호지도 교수지도 교수실
    1022김한412
    4123조의연216


    등록:

    학생 번호강좌 번호
    1022101-07
    1022143-01
    1022159-02
    4123201-01
    4123211-02
    4123214-01
  4. 제 3 정규형: 키에 종속되지 않는 데이터 제거

    마지막 예제에서 지도 교수실은 본질적으로 지도 교수 특성에 종속됩니다. 이 문제를 해결하는 방법은 다음과 같이 이 특성을 학생 테이블에서 교수 테이블로 이동하는 것입니다.

    학생:

    학생 번호지도 교수
    1022김한
    4123조의연


    교수:

    이름교수실학부
    김한41242
    조의연21642