


반복적인 속성값이 나타나는 경우 별도의 엔터티로 분리






문제: "새로운 고객을 등록하려고 해도 주문을 하지 않으면 등록할 수 없음"
원인: 고객 정보(사업자번호, 고객등급)를 저장하기 위해서는 기본 키인 주문번호가 반드시 필요합니다. 주문번호는 고객이 주문을 해야만 생성되므로, 주문하지 않은 고객의 정보를 미리 입력할 수 없습니다.
해결: 고객 정보는 주문 정보와 분리하여 고객 테이블에 저장되어야 합니다.
문제: "여러 번 주문한 고객의 사업자번호를 변경하려고 할 경우 여러 번 수정해야 함"
원인: 한 고객의 정보(사업자번호)가 해당 고객의 모든 주문 행에 반복적으로 중복 저장되어 있기 때문입니다.
해결: 고객 정보는 고객 테이블에서 단 한 번만 수정되도록 분리되어야 합니다.
문제: "고객이 주문을 취소한 경우 주문정보만 삭제되는 것이 아니고 고객의 정보까지 같이 삭제됨"
원인: 고객이 마지막으로 한 번 주문한 주문 행을 삭제할 경우, 그 주문 행에 포함되어 있던 고객의 고유 정보(사업자번호, 고객등급)까지 함께 삭제되어 데이터가 소실됩니다.
해결: 고객 정보는 고객 테이블에 별도로 저장되어야 하며, 주문 정보가 삭제되어도 고객 정보는 유지됩니다.


문제: "새로운 제품을 납품하기 위해서는 납품업체코드와 납품회사명이 같이 입력되어야 함" (새로운 납품업체 정보를 등록하기 위해서는 해당 업체에 대한 납품 기록이 있어야 함)
원인: 납품업체 정보(코드, 회사명)가 오직 납품 행을 통해서만 저장될 수 있기 때문입니다.
해결: 납품업체 정보(코드, 회사명)를 분리하여 납품업체 테이블에 독립적으로 저장해야 합니다.
문제: "납품회사명을 수정하기 위해서는 여러 건의 데이터를 수정해야 함"
원인: 특정 납품업체의 정보(납품회사명)가 해당 업체와 관련된 모든 납품 기록 행에 반복적으로 중복 저장되어 있기 때문입니다.
해결: 납품업체 정보는 납품업체 테이블에서 단 한 번만 수정되도록 분리되어야 합니다.
문제: "특정 회사의 마지막 납품건을 삭제하면, 동시에 납품업체정보도 삭제됨"
원인: 특정 회사의 정보가 해당 회사의 유일한 납품 기록 행에만 존재할 경우, 그 행을 삭제하면 회사에 대한 고유 정보까지 소실됩니다.
해결: 납품업체 정보는 납품업체 테이블에 별도로 저장되어야 하며, 납품 기록이 삭제되어도 업체 정보는 유지됩니다.


문제: "어떤 사원이 새로운 프로젝트에 투입되면 프로젝트와 관계없이 기술코드를 입력해야 함"
원인: 새로운 프로젝트에 투입(예: E100 PJT_C)되었을 때, 이 정보를 저장하려면 기존의 모든 기술(SQL, Java)과의 조합인 개의 행이 새로 추가되어야 합니다. 기술을 먼저 업데이트할 때도 프로젝트 수만큼 행을 추가해야 합니다.
해결: 사원-기술 관계와 사원-프로젝트 관계를 독립된 테이블로 분리해야 합니다.
문제: "어떤 직원이 경험한 프로젝트 코드를 변경해야 한다면 보유하고 있는 기술의 수만큼 변경을 해야 함"
원인: E100 사원의 PJT_A 프로젝트 코드가 PJT_Z로 변경될 경우, 이 사원이 가진 모든 기술(SQL, Java)에 대해 각각 프로젝트 코드를 수정해야 합니다 (총 2회 수정).
해결: 프로젝트 정보는 기술 정보와 분리되어 사원-프로젝트 테이블에서 한 번만 수정되어야 합니다.
문제: "어떤 직원이 보유한 기술을 삭제하면 투입되었던 프로젝트도 같이 삭제되어 프로젝트 경력을 알 수 없음"
원인: E200 사원의 유일한 기술인 C++ 정보를 삭제하기 위해 해당 행을 삭제하면, 이 사원이 참여했던 프로젝트 경력(PJT_C) 정보까지 함께 삭제될 수 있습니다.
해결: 기술 정보와 프로젝트 정보는 독립적인 테이블에 저장되어야 하며, 하나의 관계를 삭제해도 다른 관계는 유지되어야 합니다.

• 1차 정규화: 복수의 속성값을 갖는 속성을 분리
• 2차 정규화: 주식별자 전체에 종속적이지 않은 속성을 분리
• 3차 정규화: 속성에 종속적인 속성의 분리
• 보이스-코드 정규화: 주식별자 안에서 함수적 종속관계가 발생 다수의 주식별자 분리
• 4차 정규화: 여러 값을 중복적으로 삽입해야 하는 종속성을 제거
• 실제 데이터베이스 업무에서는 순서대로 진행되는 것은 아니다.