정규화는 데이터 중복성을 줄이고 데이터 무결성 향상을 목표로하는 데이터베이스 설계 기술입니다. 다른 수준의 정규화를 정의하는 몇 가지 정상 형태가 있습니다. 자세히 살펴 보겠습니다.
1. 첫 번째 정상 형태 (1NF) :
데이터베이스를 정규화하는 첫 번째 단계는 데이터베이스가 첫 번째 정상 형태인지 확인하는 것입니다. 테이블은 다음 조건을 만족하면 1NF입니다.
2. 두 번째 정상 형태 (2NF) :
테이블은 1NF에 있고 모든 비 키 열이 테이블의 기본 키에 완전히 의존하는 경우 테이블이 2NF입니다. 즉, 테이블의 기본 키가 여러 열로 구성되면 비 키 열이 키의 일부가 아니라 전체 키에만 의존하지 않아야합니다.
3. 세 번째 정상 형태 (3NF) :
테이블은 2NF에 있고 전이 의존성이없는 경우 3NF입니다. 이는 비 키 열이 다른 비 키 열에 의존하는 경우 별도의 테이블로 이동해야 함을 의미합니다. 다시 말해, 모든 비 키 열은 키, 전체 키 및 키에 대한 사실을 제공해야합니다.
4. Boyce-Codd 정상 형태 (BCNF) :
BCNF는 3NF의보다 엄격한 버전입니다. 테이블은 3NF에있는 경우 BCNF에 있으며 사소한 기능 의존성 x-> y, x는 슈퍼 키입니다. BCNF는 특정 유형의 기능적 종속성으로 인해 3NF 테이블에서 여전히 발생할 수있는 이상의 가능성을 제거하도록 설계되었습니다.
1NF와 2NF의 주요 차이점은 테이블 내 종속성의 특성에 있습니다.
예를 들어, 복합 기본 키가있는 1NF의 테이블을 고려하십시오. 비 키 열이 기본 키의 일부에만 의존하는 경우 2NF를 위반합니다. 예를 들어, 테이블 추적 주문에 Composite 기본 키 (OrderId, ProductID)가 있고 ProductID에만 의존하는 ProductPrice의 열이있는 경우 ProductPrice를 별도의 테이블로 옮기면 원래 테이블을 2NF로 가져옵니다.
세 번째 정상 형태 (3NF)는 전이 의존성을 제거하여 데이터 중복성을 줄이는 데 중요한 역할을합니다. 전이 의존성은 비 키 열이 다른 비 키 열에 의존 할 때 발생하며, 이는 차례로 기본 키에 의존합니다.
예를 들어, EmployeeID (1 차 키), DepartmentID 및 DepartmentName의 열을 포함하는 2NF의 테이블을 고려하십시오. DepartmentName이 DepartmentID에 의존하는 경우, 직원에 의존하는 경우 DepartmentName은 DepartmentID를 통해 EmployeeID에 대한 전이 의존성을 갖습니다. 동일한 부서 이름이 테이블에서 여러 번 반복 될 수 있으므로이 설정은 데이터 중복으로 이어질 수 있습니다.
이를 해결하기 위해 3NF는 부서 이름을 별도의 부서 테이블 (DepartmentID와 함께)으로 이동해야하며 전이 의존성을 제거해야합니다. 이 정규화 단계는 DepartmentName이 한 번만 저장되어 중복성을 줄이고 데이터 무결성을 향상시킵니다. 업데이트가 필요한 경우 한 곳에서만 이루어져서 불일치의 위험을 최소화해야합니다.
Boyce-Codd 정상 형태 (BCNF)는 결정 요인 (종속성의 왼쪽)이 슈퍼 키가 아닌 기능적 종속성이있을 때 세 번째 정상 형태 (3NF)보다 선호됩니다. BCNF는 3NF 테이블에서 지속될 수있는 이상을 제거하기위한보다 엄격한 기준을 제공합니다.
대학 과정 등록 시스템과 관련된 예를 고려하십시오.
표 : Courseergentration
기능적 의존성 :
이 시나리오에서는 전이 의존성이 없기 때문에 테이블은 3NF입니다. 그러나 instructorid-> courseid는 슈퍼 키가 아닌 강사가 다른 비 키 열인 코스를 결정한다는 것을 의미하기 때문에 BCNF를 위반합니다.
BCNF를 만족 시키려면 테이블을 두 가지로 분할해야합니다.
표 1 : Courseergatration
표 2 : 강사
이를 통해 기능적 종속성의 모든 결정 요인이 슈퍼 키임을 보장하므로 BCNF 기준을 충족시킵니다. 이 분리는 테이블이 3NF로 유지 된 경우 발생할 수있는 삽입, 삭제 및 업데이트 이상과 같은 잠재적 이상을 제거합니다.
위 내용은 다른 정상 형태 (1NF, 2NF, 3NF, BCNF)를 설명하십시오.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!