세 번째 정규 형식 (3NF)은 첫 번째 정규형 (1NF) 및 두 번째 정규형 (2NF)에서 제공하는 데이터베이스 정규화 원칙을 기반으로 데이터 무결성을 지원하는 데이터베이스 원칙입니다.
세 번째 표준 양식 요구 사항
데이터베이스가 세 번째 정규 형식이어야한다는 두 가지 기본 요구 사항이 있습니다.
- 데이터베이스는 이미 1NF 및 2NF 의 요구 사항을 충족해야합니다.
- 모든 데이터베이스 열은 기본 키 에 의존해야하며, 이는 모든 열 값이 기본 키에서만 파생 될 수 있음을 의미합니다.
기본 키 의존성 정보
모든 컬럼이 프라이 머리 키에 의존해야한다는 사실에 대해 더 자세히 살펴 보도록하겠습니다.
열의 값이 기본 키와 테이블의 다른 열에서 파생 될 수 있으면 3NF를 위반합니다. 다음 열이있는 Employees 테이블을 고려하십시오.
- EmployeeID
- 이름
- 성
LastName과 FirstName은 EmployeeID 값에만 의존합니까? LastName은 FirstName에 의존 할 수 있습니까? LastName에 고유 한 것이 FirstName의 값을 제안하지 않기 때문입니다. FirstName은성에 달려 있습니까? 다시 말하지만, 같은 것이 사실이기 때문에 LastName이 무엇이든 FirstName의 값에 대한 힌트를 제공 할 수 없습니다. 따라서이 표는 3NF 규격입니다.
그러나이 Vehicles 테이블을 고려하십시오.
- VehID
- 제조사
- 모델
제조업체와 모델은 VehicleID에서 파생 될 수 있습니다. 그러나 차량 모델이 특정 제조업체에서만 만들어지기 때문에 모델은 제조업체에서 파생 될 수도 있습니다. 이 테이블 디자인은 3NF 규격이 아니므로 데이터 이상이 발생할 수 있습니다. 예를 들어, 모델을 업데이트하지 않고 부정확성을 도입하여 제조업체를 업데이트 할 수 있습니다.
이를 준수하려면 추가 종속 열을 다른 테이블로 이동하고 외래 키를 사용하여 참조해야합니다. 그러면 두 개의 테이블이 생성됩니다.
차량 테이블
아래 표에서 ModelID는 Models 테이블에 대한 외래 키입니다.
- VehID
- 제조사
- ModelID
모델 테이블
이 새로운 표는 모델을 제조업체에 매핑합니다. 모델에 특정한 차량 정보를 업데이트하려면 차량 테이블이 아닌이 테이블에서 수행하십시오.
- ModelID
- 제조사
- 모델
3NF 모델의 파생 필드
테이블에는 파생 필드가 포함될 수 있습니다. 파생 필드는 테이블의 다른 열을 기반으로 계산됩니다. 예를 들어 위젯 주문 테이블을 살펴 보겠습니다.
- 주문 번호
- 고객 번호
- 단가
- 수량
- 합계
전체는 3NF 준수를 위반합니다. 기본 키에 전적으로 의존하지 않고 단가에 수량을 곱하여 도출 될 수 있기 때문입니다. 우리는 세 번째 표준 형식을 따르기 위해 테이블에서 그것을 제거해야합니다.
사실 파생 된 것이므로 데이터베이스에 저장하지 않는 것이 좋습니다.
데이터베이스 쿼리를 수행 할 때 간단히 "즉시"계산할 수 있습니다. 예를 들어 이전에이 쿼리를 사용하여 주문 번호와 총계를 검색했을 수 있습니다.
SELECT OrderNumber, WidgetOrders의 총계이제 다음 쿼리를 사용할 수 있습니다.
SELECT OrderNumber, UnitPrice * Quantity AS 총계 WidgetOrders로부터정규화 규칙을 위반하지 않고 동일한 결과를 얻을 수 있습니다.