데이터 베이스 기본 (7)

1차 정규화는 테이블에 1개의 필드에 1개의 값을 가지게 하는 설계라면 2차 정규화와 3차 정규화의 개념 모두 다른 테이블의 관계에서 출발하게 됩니다. 2차 정규화의 개념은 예제로 보지 않고는 이해하기가 어려울 수 있지만 그 정의는 테이블에서 모든 필드는 반드시 기본키에 종속이 되어야 한다는 것 입니다. 어떻게 보면 당연하다고 할 수 있는데 2차 정규화는 제가 사용하는 1개의 필드로 구성된 기본키에서는 발생하지 않고 두 개 이상의 필드를 조합하여 만든 복수 기본키 (Composite Primary Key)에서만 발생하게 됩니다.

 

  1. 2차 정규화의 개념

    2차 정규화의 개념은 기본 키로 1개의 필드가 아닌 여러 개의 필드를 조합하여 지정하게 되었을 때 발생합니다. 컴활 1급시험에서 복수 기본키의 개념이 등장하는 지는 잘 모르겠지만 실제 데이터베이스에서는 매우 흔한 일입니다. 예를 들어 미국의 각 주의 도시 면적을 데이터 베이스로 만든다고 한다면 도시 이름을 기본키로 사용 할 수는 없습니다. 왜냐하면 같은 도시 이름이 많기 때문이죠. 제가 사용한 것 처럼 숫자를 기본키로 사용하면 간단하긴 하지만 데이터의 개수가 정해져 있는 데이터베이스는 확장의 걱정을 거의 않해도 되기 때문에 조금더 직관적인 알파벳을 기본키로 지정하는 경우도 많습니다. 그렇다면 미국 주의 이름과 도시의 이름을 조합해서 기본키로 지정한다면요? 각 주에는 같은 도시 이름이 없으니 고유한 값이 되고 고유의 값이니 기본값 지정이 가능합니다.

    제가 제공하는 데이터 베이스에서 비슷하게 수리 날짜에 기본키를 지정한다면 한날에 몇 가지 제품의 수리 정보를 입력 할 수는 있겠지만 한가지 제품이 두 번 데이터베이스에 입력 되야 하는 경우는 없으므로 수리 날짜와 제품 이름을 통한 수리정보 테이블의 기본키 지정이 가능합니다.

    이렇게 두개의 필드를 조합해서 기본키 지정이 가능 합니다.

     

    여기 까지는 1차 정규화를 어기지 않았습니다. 1개의 셀에 1개의 데이터만 입력하게 되었지만 2차 정규화는 지키지 않았습니다. 2차 정규화의 핵심은 모든 기본키를 제외한 필드는 어느 한 부분의 기본키가 아닌 기본키 전체에 해당해야 하는 것 입니다. 미국 도시의 면적을 예로 들면 해당 주의 해당 도시의 면적은 반드시 둘을 조합한 기본키에 해당하고 주 이름만 봐서도, 도시 이름만 봐서도 안됩니다. 그러나 위의 테이블은 제품 이름만 보고 브랜드의 정보를 얻을 수 있습니다. 갤럭시 S6 Edge 는 확실히 삼성의 제품이고 수리 날짜의 정보는 필요가 없죠. .올바른 데이터 베이스의 형태가 되려면 제품 이름 정보 만으로 브랜드를 알아 낼 수 있어야 하고 수리 날짜 정보는 필요가 없습니다.

  2. 2차 정규화의 해결

    2차 정규화를 원천적으로 해결하는 가장 쉬운 방법은 기본키를 모두 1개의 필드로만 사용하시면 됩니다. 그렇지만 만약 두 개의 필드로 구성된 복수 기본키를 사용하고 싶다면 저 테이블에서 문제점이 발생하는 브랜드만 따로 테이블을 만드시면 됩니다. 그리고 브랜드의 테이블의 기본키는 위의 수리 제품의 기본키를 구성하는 두 개의 필드 중 1개의 필드만 브랜드 테이블과 연결 하면 됩니다.

     

    이렇게 말이지요.

     

    이제 수리 정보를 구성하는 테이블은 수리 날짜와 제품 이름으로 기본키를 구성할 수 있고 또 제품 이름 만으로 브랜드 이름을 알아 낼 수 있습니다.

     

    2차 정규화의 문제는 항상 두 개 이상의 기본키로 구성된 테이블을 만들 때만 고려 하시면 됩니다. 또 이런 문제를 근본적으로 해결 하는 것은 처음 데이터베이스를 설계할 때 1개의 필드, 숫자 키만을 사용해서 기본키를 구성하면 되지만 위에서 제시한 것처럼 총 데이터의 개수가 몇 개 되질 않을 때는 조합된 기본키를 숫자 되신 사용할 때도 많으므로 데이터 베이스 설계를 할 때 고려해야 하는 사항 입니다.

+ Recent posts