DBMS 정규화: 1NF, 2NF, 3NF 데이터베이스 예
데이터베이스 정규화란 무엇입니까?
표준화 데이터 중복성을 줄이고 삽입, 업데이트 및 삭제 이상과 같은 바람직하지 않은 특성을 제거하는 데이터베이스 설계 기술입니다. 정규화 규칙은 큰 테이블을 작은 테이블로 나누고 관계를 사용하여 연결합니다. SQL에서 정규화의 목적은 중복(반복) 데이터를 제거하고 데이터가 논리적으로 저장되도록 하는 것입니다.
발명가 관계형 모델 Edgar Codd는 제1정규형의 도입으로 데이터 정규화 이론을 제안했으며, 제2정규형과 제3정규형을 통해 계속해서 이론을 확장했습니다. Later 그는 Boyce-Codd 정규형 이론을 개발하기 위해 Raymond F. Boyce에 합류했습니다.
DBMS의 정규형 유형
다음은 SQL의 정규 형식 목록입니다.
- 1NF(제XNUMX정규형): 각 열에 원자(분할 불가) 값이 포함되고 각 레코드가 고유하도록 데이터베이스 테이블이 구성되도록 합니다. 이렇게 하면 반복되는 그룹이 제거되어 데이터가 테이블과 열로 구조화됩니다.
- 2NF(두 번째 정규형): 여러 행에 적용되는 테이블에서 중복 데이터를 제거해야 합니다. 별도의 테이블에 배치합니다. 기본 키에서 키가 아닌 모든 속성이 완벽하게 작동해야 합니다.
- 3NF(제XNUMX정규형): 키가 아닌 모든 속성이 기본 키에서 완벽하게 작동할 뿐만 아니라 서로 독립적인지 확인하여 2NF를 확장합니다. 이는 전이적 종속성을 제거합니다.
- BCNF(보이스-코드 정규형): 3NF에서 처리되지 않는 이상 현상을 해결하는 3NF의 개선입니다. 모든 결정자가 후보 키가 되어야 정규화 규칙을 더욱 엄격하게 준수할 수 있습니다.
- 4NF(제XNUMX정규형): 다중 값 종속성을 해결합니다. 이는 레코드의 엔터티에 대해 여러 개의 독립적인 다중 값 사실이 없도록 보장합니다.
- 5NF(제XNUMX정규형): "PJNF(Projection-Join Normal Form)"라고도 알려져 있으며, 더 작고 다르게 배열된 데이터 조각에서 정보를 재구성하는 것과 관련됩니다.
- 6NF(여섯 번째 정규형): 이론적이고 널리 구현되지 않았습니다. 모든 비시간적 중복성을 제거하기 위해 테이블을 추가로 분해하여 시간적 데이터(시간에 따른 변경 사항 처리)를 처리합니다.
데이터 정규화 이론 MySQL 서버는 계속해서 개발 중입니다. 예를 들어 6일에도 논의가 있다.th 노멀폼. 그러나 대부분의 실제 응용 프로그램에서 정규화는 3가지 측면에서 최상의 결과를 얻습니다.rd 일반형. SQL 이론에서 정규화의 진화는 아래에 설명되어 있습니다.
.png)
예제를 사용한 데이터베이스 정규화
데이터베이스 정규화 예 사례연구를 통해 쉽게 이해할 수 있습니다. 비디오 라이브러리가 대여된 영화의 데이터베이스를 유지관리한다고 가정해 보겠습니다. 데이터베이스의 정규화 없이 모든 정보는 아래와 같이 하나의 테이블에 저장됩니다. 솔루션이 포함된 정규화 예제를 통해 정규화 데이터베이스를 이해해 보겠습니다.
여기 보시죠 영화 대여 열에 여러 값이 있습니다. 이제 첫 번째 정규형으로 넘어가겠습니다.
첫 번째 정규형 (1NF)
- 각 테이블 셀에는 단일 값이 포함되어야 합니다.
- 각 레코드는 고유해야 합니다.
위의 표는 1NF-
1NF 예시

계속하기 전에 몇 가지 사항을 이해해 보겠습니다.
SQL의 KEY 란 무엇입니까?
A SQL의 키 테이블의 레코드를 고유하게 식별하는 데 사용되는 값입니다. SQL KEY는 테이블의 행이나 튜플을 고유하게 식별하는 데 사용되는 단일 열 또는 여러 열의 조합입니다. SQL 키는 중복된 정보를 식별하는 데 사용되며 데이터베이스의 여러 테이블 간의 관계를 설정하는 데도 도움이 됩니다.
참고: 레코드를 고유하게 식별하는 데 사용되지 않는 테이블의 열을 키가 아닌 열이라고 합니다.
기본 키란 무엇입니까?

기본은 데이터베이스 레코드를 고유하게 식별하는 데 사용되는 단일 열 값입니다.
다음과 같은 속성이 있습니다
- A 기본 키 NULL일 수 없습니다.
- 기본 키 값은 고유해야 합니다.
- 기본 키 값은 거의 변경되지 않아야 합니다.
- 새 레코드가 삽입되면 기본 키에 값이 제공되어야 합니다.
복합 키란 무엇입니까?
복합 키는 레코드를 고유하게 식별하는 데 사용되는 여러 열로 구성된 기본 키입니다.
우리 데이터베이스에는 Robert Phil이라는 이름을 가진 두 사람이 있지만 그들은 서로 다른 곳에 살고 있습니다.

따라서 기록을 고유하게 식별하려면 성명과 주소가 모두 필요합니다. 그것은 복합 키입니다.
두 번째 정규형 2NF로 이동해 보겠습니다.
두 번째 정규형 (2NF)
- 규칙 1 - 1NF에 있어야 합니다.
- 규칙 2 - 후보 키 관계의 하위 집합에 기능적으로 종속되지 않는 단일 열 기본 키
2에서 간단한 데이터베이스를 만들기 위해 앞으로 나아갈 수 없다는 것은 분명합니다.nd 위의 테이블을 분할하지 않는 한 정규화 형식입니다.
우리는 1NF 테이블을 두 개의 테이블, 즉 테이블 1과 테이블 2로 나누었습니다. 테이블 1에는 멤버 정보가 들어 있습니다. 테이블 2에는 대여된 영화에 대한 정보가 들어 있습니다.
테이블 1의 기본 키인 Membership_id라는 새 열을 도입했습니다. 멤버십 ID를 사용하여 테이블 1에서 레코드를 고유하게 식별할 수 있습니다.
데이터베이스 – 외래 키
표 2에서 Membership_ID는 외래 키입니다.

외래 키는 다른 테이블의 기본 키를 참조합니다! 테이블을 연결하는 데 도움이 됩니다.
- 외래 키는 기본 키와 다른 이름을 가질 수 있습니다.
- 한 테이블의 행이 다른 테이블의 해당 행을 갖도록 보장합니다.
- 기본 키와 달리 고유할 필요는 없습니다. 그렇지 않은 경우가 대부분입니다
- 기본 키가 null이 아닌 경우에도 외래 키는 null이 될 수 있습니다.
왜 외래 키가 필요한가요?
초보자가 테이블 B에 다음과 같은 레코드를 삽입한다고 가정합니다.
상위 테이블의 고유 키에 존재하는 외래 키에만 값을 삽입할 수 있습니다. 이는 참조 무결성에 도움이 됩니다.
위의 문제는 Table2의 멤버십 ID를 Table1의 멤버십 ID의 외래 키로 선언하면 극복할 수 있습니다.
이제 누군가가 상위 테이블에 존재하지 않는 멤버십 ID 필드에 값을 삽입하려고 하면 오류가 표시됩니다!
이행적 기능 종속성은 무엇입니까?
전이적 기능적 의존성 키가 아닌 열을 변경할 때 키가 아닌 다른 열이 변경될 수 있습니다.
표 1을 고려하십시오. 키 열이 아닌 전체 이름을 변경하면 인사말이 변경될 수 있습니다.
3NF로 넘어가자
세 번째 정규형 (3NF)
- 규칙 1 - 2NF에 있어야 합니다.
- 규칙 2 - 전이적 기능 종속성이 없습니다.
2NF 테이블을 3NF로 이동하려면 테이블을 다시 나누어야 합니다.
3NF 예시
다음은 SQL 데이터베이스의 3NF 예입니다.
다시 테이블을 나누고 인사말을 저장하는 새 테이블을 만들었습니다.
전이적 기능 종속성이 없으므로 테이블은 3NF에 있습니다.
표 3에서 인사말 ID는 기본 키이고, 표 1에서 인사말 ID는 표 3의 기본 키에 대한 외부 키입니다.
이제 우리의 작은 예는 DBMS에서 더 이상 분해하여 더 높은 정규형 유형의 정규화를 달성할 수 없는 수준에 있습니다. 사실, 그것은 이미 더 높은 정규화 형태에 있습니다. 복잡한 데이터베이스에서는 일반적으로 데이터 정규화의 다음 단계로 이동하기 위한 별도의 노력이 필요합니다. 그러나 다음에서 DBMS의 다음 단계 정규화에 대해 간략하게 논의할 것입니다.
Boyce-Codd 정규형(BCNF)
데이터베이스가 3인 경우에도rd 정규 형식, 둘 이상의 형식이 있으면 예외가 발생합니다. 후보자 열쇠.
때로는 BCNF라고도 합니다. 3.5 정규형.
네 번째 정규형 (4NF)
데이터베이스 테이블 인스턴스에 관련 엔터티를 설명하는 두 개 이상의 독립적이고 다중값 데이터가 포함되어 있지 않으면 4에 해당합니다.th 노멀폼.
다섯 번째 정규형 (5NF)
테이블은 5개에 있어요th 정규 형식은 4NF이고 데이터 손실 없이 더 작은 수의 테이블로 분해될 수 없는 경우에만 해당됩니다.
여섯 번째 정규형(6NF) 제안
6th Normal Form은 표준화되지 않았지만 데이터베이스 전문가들 사이에서 한동안 논의되고 있습니다. 6에 대한 명확하고 표준화된 정의가 있기를 바랍니다.th 가까운 미래에 정상적인 형태…
정규형의 장점
- 데이터 일관성 향상: 정규화를 사용하면 각 데이터 조각이 한 곳에만 저장되므로 데이터가 일관되지 않을 가능성이 줄어듭니다. 데이터가 업데이트되면 한 곳에서만 업데이트하면 일관성이 보장됩니다.
- 데이터 중복성 감소: 정규화는 데이터를 여러 관련 테이블로 나누어 중복 데이터를 제거하는 데 도움이 됩니다. 이를 통해 저장 공간을 절약하고 데이터베이스를 더욱 효율적으로 만들 수 있습니다.
- 쿼리 성능 향상: 정규화된 데이터베이스는 쿼리하기가 더 쉬운 경우가 많습니다. 데이터가 논리적으로 구성되므로 쿼리를 최적화하여 더 빠르게 실행할 수 있습니다.
- 데이터를 더욱 의미 있게 만드세요: 정규화에는 합리적이고 직관적인 방식으로 데이터를 그룹화하는 작업이 포함됩니다. 이렇게 하면 특히 데이터베이스를 설계하지 않은 사람들이 데이터베이스를 더 쉽게 이해하고 사용할 수 있습니다.
- 변칙 가능성 감소: 이상 현상은 데이터를 추가, 업데이트, 삭제할 때 발생할 수 있는 문제입니다. 정규화는 데이터가 논리적으로 구성되도록 보장하여 이러한 이상이 발생할 가능성을 줄일 수 있습니다.
정규화의 단점
- 복잡성 증가: 정규화는 복잡한 관계로 이어질 수 있습니다. 외래 키가 있는 많은 수의 테이블은 관리하기 어려워 혼란을 초래할 수 있습니다.
- 유연성 감소: 엄격한 정규화 규칙으로 인해 이러한 규칙을 따르지 않는 데이터를 저장하는 경우 유연성이 떨어질 수 있습니다.
- 증가된 스토리지 요구사항: 정규화하면 중복성이 줄어들지만, 추가 테이블과 인덱스를 수용하기 위해 더 많은 저장 공간을 할당해야 할 수도 있습니다.
- 성능 오버헤드: 여러 테이블을 조인하면 성능 측면에서 비용이 많이 들 수 있습니다. 데이터가 더 정규화될수록 더 많은 조인이 필요하므로 데이터 검색 시간이 느려질 수 있습니다.
- 데이터 컨텍스트 손실: 정규화는 데이터를 별도의 테이블로 분할하므로 비즈니스 컨텍스트가 손실될 수 있습니다. 데이터의 컨텍스트를 이해하려면 관련 테이블을 조사하는 것이 필요합니다.
- 전문 지식의 필요성: 정규화된 데이터베이스를 구현하려면 데이터, 데이터 간의 관계 및 정규화 규칙에 대한 깊은 이해가 필요합니다. 이를 위해서는 전문적인 지식이 필요하며 시간이 많이 걸릴 수 있습니다.
이것이 SQL 정규화의 전부입니다!!!
결론
- 데이터베이스 설계 엔터프라이즈 시스템의 데이터 요구 사항을 충족하는 데이터베이스 관리 시스템을 성공적으로 구현하는 데 매우 중요합니다.
- DBMS의 정규화는 비용 효율적이고 더 나은 보안 모델을 갖춘 데이터베이스 시스템을 생성하는 데 도움이 되는 프로세스입니다.
- 기능적 종속성은 데이터 정규화 프로세스에서 매우 중요한 구성 요소입니다.
- 대부분의 데이터베이스 시스템은 DBMS의 XNUMX차 정규형까지 정규화된 데이터베이스입니다.
- 기본 키는 테이블의 레코드를 고유하게 식별하며 null일 수 없습니다.
- 외래 키는 테이블 연결을 돕고 기본 키를 참조합니다.