표준 SQL 및 데이터베이스 입문
이번에는 다른 관점에서 본 정규형입니다. 앞서 본 함수 종속은 'X에 의해 Y가 결정되는' 관계였습니다.
다음은 'X에 의해 다수의 Y가 결정되는' 관계입니다. 이를 다치종속(multivalued dependency)이라고 하며, 다치종속에 기반한 정규형을 제4정규형이라고 합니다.
그렇다면, 보이스코드 정규형조차도 아직 불충분한 경우가 있는 것인가?
맞습니다. 분할된 테이블을 자연조언했을 때 얻어지는 결과에 기반한 정규형이 있습니다. 그것이 제5정규형입니다. 보이스코드 정규형을 충족하더라도 업데이트나 조회시 불일치가 발생하는 경우가 있습니다. 이 문제를 해결하기 위해 다치종속에 기반한 정규형(제4정규형)과 결합종속에 기반한 정규형(제5정규형)이 고안되었습니다.
⑴ 다치 종속성
다치 종속성은 자주 나타나는 형태입니다. 예를 들어, 학생의 전공과목과 동아이를 관리하는 테이블을 생각해 봅시다. 예를 들어, 전공과목과 동아리를 등록한 데이터가 있다고 가정해 봅시다. 이름, 전공과목, 동아리의 조합을 키(복합키)로 사용하여 지금까지의 정규형을 만족하는 테이블을 만들 수 있습니다.
만약, 동아리가 하나가 아니라면, 한 학생으로부터 여러 개의 동아리가 결정되는 관계가 됩니다. 이렇게 X가 다수의 Y를 결정하는 관계를 '다치종속(Multi-valued Dependency, MVD)'이라고 합니다. 다치종속은 화살표를 2개 사용하여 표기합니다.
한편, 전공과목도 여러 개라고 가정하면, 한 한색으로부터 여러 개의 전공과목과 여러 개의 동아리가 결정되는 관계가 됩니다. 하나의 테이블에 다치 종속이 있는 관계가 여러 개 존재하면 업데이트 불일치가 발생할 수 있습니다. 예를 들어, 학생번호 001의 동아리를 '축구'에서 '테니스'로 변경하려면, 모든 전공과목에 대해 변경해야 합니다. 또한, 한개의 전공과목을 추가하기 위해서도 여러 행이 필요하게 됩니다.
따라서, 하나의 테이블에 여러 다치 종속이 존재하지 않도록 테이블을 분해하는 것이 필요하며, 이를 '제4정규형(4th Normal Form, 4NF)'이라고 합니다.
여러개의 다치종속을 제거하고 제4정규형으로 만들기
여러 전공과목과 여러 동아리는 제4정규형으로 어떻게든 해결되었습니다. 이는 전공과목과 동아리 사이에 별도의 규칙이 존재하지 않았기 때문입니다. 예를 들어, 수학을 전공한다고 해서 테니스 동아리에 들어가지 않는다는 규칙은 없기 때문입니다. 이번에는 '실은 그곳에도 규칙이 있었습니다'라는 사례입니다. 상품, 납품처, 창고를 예를 들어봅시다.
제4정규형에 따라 분할한 데이터를 조인하여 원래의 표를 복원했을 떄의 결과를 생각해 봅시다. 예를 들어, 상품, 납품처, 창고를 관리하는 테이블을 제4정규형화 한 후, 이 테이블로부터 원래의 테이블을 만들기 위해서는 다음과 같은 조인을 수행합니다.
그러면 결과는 아래와 같이 나타납니다. 상품002에 대해서는 문제가 없지만, 상품001의 경우 원래 테이블에는 없던 데이터가 발생하고 있습니다. 이런 데이터를 '노이즈(noise)'라고 표현하기도 합니다.
따라서, 분해된 테이블이 조인을 통해 원래 테이블로 복원되도록 정규화합니다. 이를 제5정규화라고 하며, 완성된 형태를 '제5정규형(5th Normal Form, 5NF)'이라고 합니다. 앞서 제4정규형을 제5정규형으로 만들기 위해서는 납품처와 창고를 추가합니다.
제5정규형은 결합투영정규형(Join-Projection Normal Form, JPNF)이라고 불립니다. 투영(projection)이란, 테이블에서 필요한 열만 추출하는 작업을 의미합니다. 제5정규화된 테이블에서 원래 테이블로 복원할 때, 조인된 테이블에서 일부 열을 추출하기 때문에 이런 이름이 붙인 것입니다.
다치종속을 제거하여 제4정규형으로 (실패 예시)
결합으로 되돌아가는지 여부에 주목하여 제5정규형으로 만들기
©2024-2025 GAEBAL AI, Hand-crafted & made with Damon Jaewoo Kim.
GAEBAL AI 개발사: https://gaebalai.com
AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5