데이터베이스 정규화

정규화는 관계형 데이터베이스 테이블을 더 높은 정규 형식으로 설계하는 데 사용되는 데이터베이스 설계 기술입니다. 프로세스는 점진적이며 이전 수준이 충족되지 않으면 더 높은 수준의 데이터베이스 정규화를 달성 할 수 없습니다.

즉, 데이터를 정규화되지 않은 형식 (최소 정규화)으로 보유하고 가장 높은 수준을 달성하는 것을 목표로합니다. 정규화 수준에서 첫 번째 단계는 첫 번째 정규 형식을 준수하는지 확인하는 것이고 두 번째 단계는 데이터가 여섯 번째 정규 형식을 준수 할 때까지 위에서 언급 한 순서대로 두 번째 정규 형식을 충족하는지 확인하는 것입니다.

그러나 4NF를 넘어서는 정규형은 해결하기 위해 존재하는 문제가 실제로 거의 나타나지 않기 때문에 주로 학문적 관심사라는 점에 주목할 가치가 있습니다.

다음 예의 데이터는 다음과 같습니다. 대부분의 정상적인 형태와 모순되도록 의도적으로 설계되었습니다. 실생활에서는 테이블에 주어진 정규 형식과 모순되는 내용이 포함되어 있지 않기 때문에 일부 정규화 단계를 건너 뛸 수 있습니다. 또한 일반적으로 하나의 정상 형식의 위반을 수정하면 프로세스에서 더 높은 정상 형식의 위반도 수정됩니다. 또한 각 단계에서 정규화를 위해 하나의 테이블이 선택되었습니다. 즉,이 예제 프로세스가 끝날 때 가장 높은 정규 형식을 충족하지 않는 테이블이 여전히있을 수 있습니다.

초기 데이터 편집

다음 구조의 데이터베이스 테이블을 작성하십시오.

제목 저자 저자 국적 형식 가격 제목 페이지 두께 게시자 게시자 국가 간행물 유형 장르 ID 장르 이름
MySQL 데이터베이스 설계 및 최적화 시작 Chad Russell American 하드 커버 49.99 MySQL,

데이터베이스,

디자인

520 두꺼움 Apress 미국 전자 책 1 튜토리얼

이 예에서는 각 책에 한 명의 저자 만 있다고 가정합니다.

1NFEdit 만족

1NF를 만족 시키려면 테이블의 각 열에있는 값이 원자 적이어야합니다. 초기 테이블에서 Subject에는 주제 값 세트가 포함되어 있으며 이는 준수하지 않음을 의미합니다.

1NF를 달성하는 한 가지 방법은 반복 그룹 Subject :

를 사용하여 중복성을 여러 열로 분리하는 것입니다.

제목 형식 저자 저자 국적 가격 제목 1 제목 2 제목 3 페이지 두께 게시자 게시자 국가 장르 ID 장르 이름
MySQL 데이터베이스 설계 및 최적화 시작 하드 커버 Chad Russell American 49.99 MySQL 데이터베이스 디자인 520 두꺼움 Apress 미국 1 튜토리얼

이제 테이블은 공식적으로 1NF (원자)를 준수하지만이 솔루션의 문제는 분명합니다. 책에는 3 개 이상의 주제가 있으므로 구조를 변경하지 않고는 데이터베이스에 추가 할 수 없습니다.

문제를보다 우아하게 해결하려면 표에 표시된 개체를 식별하고 구분해야합니다. 각각의 테이블에. 이 경우 책, 주제 및 발행인 테이블이됩니다.

Book
제목 형식 저자 저자 국적 가격 페이지 두께 장르 ID 장르 이름 게시자 ID
MySQL 시작 데이터베이스 설계 및 최적화 하드 커버 Chad Russell American 49.99 520 두꺼움 1 튜토리얼 1
제목
주제 ID 주체 이름
1 MySQL
2 데이터베이스
3 디자인
게시자
Publisher_ID 이름 국가
1 Apress 미국

초기 데이터를 여러 테이블로 분리하기 만하면 데이터 간의 연결이 끊어집니다. 즉, 새로 도입 된 테이블 간의 관계를 결정해야합니다. 책 표의 발행인 ID 열은 책과 발행인 간의 다 대일 관계를 실현하는 외래 키입니다.

책은 여러 주제에 맞을 수 있으며 주제는 이는 많은 책에 해당합니다. 즉, 링크 테이블을 만들어 다 대다 관계를 정의해야합니다.

제목-제목
제목 주제 ID
MySQL 데이터베이스 설계 및 최적화 시작 1
MySQL 데이터베이스 설계 및 최적화 시작 2
MySQL 데이터베이스 설계 및 최적화 시작 3

정규화되지 않은 형식의 테이블 대신 1NF를 준수하는 4 개의 테이블이 있습니다.

2NFEdit 만족

Book 테이블에는 하나의 후보 키 (따라서 기본 키) 인 복합 키 {Title, Format}이 있습니다. 다음 표 조각을 고려하십시오.

th>

Book
Title 형식 저자 저자 국적 가격 페이지 두께 장르 ID 장르 이름 게시자 ID
MySQL 데이터베이스 설계 및 최적화 시작 하드 커버 Chad Russell American 49.99 520 두꺼움 1 튜토리얼 1
MySQL 데이터베이스 설계 및 최적화 시작 전자 책 차드 러셀 아메리칸 22.34 520 두꺼움 1 튜토리얼 1
데이터베이스 관리를위한 관계형 모델 : 버전 2 전자 책 EFCodd 영국 13.88 538 두꺼움 2 인기 과학 2
데이터베이스 Ma의 관계형 모델 nagement : 버전 2 페이퍼 백 EFCodd 영국 39.99 538 두꺼움 2 인기 과학 2

후보 키의 일부가 아닌 모든 속성은 제목에 따라 다르지만 가격 만 형식에 따라 다릅니다. 2NF를 준수하고 중복성을 제거하려면 모든 비 후보 키 속성이 일부가 아닌 전체 후보 키에 종속되어야합니다.

이 테이블을 정규화하려면 {Title}을 (단순) 후보 키로 만드십시오. (기본 키) 모든 비 후보 키 속성이 전체 후보 키에 종속되도록하고, 형식에 대한 종속성을 유지할 수 있도록 Price를 별도의 테이블로 제거합니다.

제목 저자 저자 국적 페이지 두께 장르 ID 장르 이름 게시자 ID
MySQL 데이터베이스 설계 및 최적화 시작 Chad Russell 미국식 520 두꺼움 1 튜토리얼 1
데이터베이스 관리를위한 관계형 모델 : 버전 2 EFCodd 영국 538 두꺼움 2 인기 과학 2
형식-가격
제목 형식 가격
MySQL 데이터베이스 설계 및 최적화 시작 하드 커버 49.99
MySQL 데이터베이스 설계 및 최적화 시작 전자 책 22.34
데이터베이스 관리를위한 관계형 모델 : 버전 2 전자 책 13.88
데이터베이스 관리를위한 관계형 모델 : 버전 2 페이퍼 백 39.99

이제 Book 테이블은 2NF를 준수합니다.

3NFEdit 만족

Book 테이블은 여전히 전 이적 기능 종속성을 가지고 있습니다 ({Author Nationality}는 {Title에 의존하는 {Author}에 종속됩니다. }). 장르에 대해 유사한 위반이 존재합니다 ({Genre Name}은 {Title}에 종속 된 {Genre ID}에 종 속됨). 따라서 Book 테이블은 3NF가 아닙니다. 3NF로 만들기 위해 다음 테이블 구조를 사용하여 {Author Nationality} 및 {Genre Name}을 각각의 테이블에 배치하여 전 이적 기능 종속성을 제거하겠습니다.

제목 저자 페이지 두께 장르 ID 게시자 ID
MySQL 데이터베이스 설계 시작 및 최적화 Chad Russell 520 두꺼움 1 1
데이터베이스 관리를위한 관계형 모델 : 버전 2 EFCodd 538 두꺼움 2 2
형식-가격
제목 형식 가격
MySQL 데이터베이스 설계 시작 및 최적화 하드 커버 49.99
MySQL 데이터베이스 설계 및 최적화 시작 전자 책 22.34
데이터베이스 관리를위한 관계형 모델 : 버전 2 전자 책 13.88
데이터베이스 관리를위한 관계형 모델 : 버전 2 페이퍼 백 39.99
저자
저자 저자 국적
Chad Russell 미국
EFCodd 영국
장르
세대 re ID 장르 이름
1 튜토리얼
2 인기 과학

EKNFEdit 만족

주요 문서 : 기본 키 일반 형식

기본 키 일반 형식 (EKNF)은 엄격하게 3NF와 BCNF 사이에 속하며 문헌에서 많이 논의되지 않습니다. 이는 “3NF와 BCNF 모두의 두드러진 특성을 포착하면서”둘 다의 문제를 피하는 것입니다 (즉, 3NF는 “너무 관대”하고 BCNF는 “계산 복잡성에 취약”). 문헌에서 거의 언급되지 않기 때문에 이 예제에는 포함되어 있지 않습니다.

4NFEdit 만족

데이터베이스가 서로 다른 위치에 상점을 소유하고있는 여러 프랜차이즈가있는 서점 프랜차이즈가 소유하고 있다고 가정합니다.따라서 소매 업체는 다른 위치에서 책의 가용성에 대한 데이터가 포함 된 표를 추가하기로 결정했습니다.

td>

티 r>

Franchisee-도서 위치
프랜차이즈 ID 직위 위치
1 MySQL 데이터베이스 설계 및 최적화 시작 캘리포니아
1 MySQL 데이터베이스 설계 및 최적화 시작 플로리다
1 MySQL 데이터베이스 설계 및 최적화 시작 텍사스
1 데이터베이스 관리를위한 관계형 모델 : 버전 2 캘리포니아
1 데이터베이스 관리를위한 관계형 모델 : 버전 2 플로리다
1 데이터베이스 관리를위한 관계형 모델 : 버전 2 텍사스
2 MySQL 데이터베이스 설계 및 최적화 시작 캘리포니아
2 MySQL 데이터베이스 설계 및 최적화 시작 플로리다
2 MySQL 데이터베이스 설계 및 최적화 시작 텍사스
2 데이터베이스 관리를위한 관계형 모델 : 버전 2 캘리포니아
2 데이터베이스 관리를위한 관계형 모델 : 버전 2 플로리다
2 데이터베이스 관리를위한 관계형 모델 : 버전 2 텍사스
3 MySQL 데이터베이스 설계 및 최적화 시작 텍사스

이 테이블 구조는 복합 기본 키로 구성되기 때문에 “키가 아닌 속성을 포함하지 않고”이미 BCNF에 있습니다 (따라서 이전의 모든 일반 형식도 충족 함). 그러나 각 영역에서 사용 가능한 모든 책이 제공된다고 가정하면 제목이 특정 위치에 명확하게 바인딩되어 있지 않으므로 테이블이 4NF를 충족하지 않는다는 것을 알 수 있습니다.

즉, 네 번째 정규 형식을 충족하려면이 테이블도 분해해야합니다.

Franchisee-도서
Franchisee ID 제목
1 MySQL 데이터베이스 설계 및 최적화 시작
1 데이터베이스 관리를위한 관계형 모델 : 버전 2
2 MySQL 데이터베이스 설계 및 최적화 시작
2 데이터베이스 관리를위한 관계형 모델 : 버전 2
3 MySQL 데이터베이스 설계 및 최적화 시작
Franchisee-위치
Franchisee ID 위치
1 캘리포니아
1 플로리다
1 텍사스
2 캘리포니아
2 플로리다
2 텍사스
3 텍사스

이제 모든 레코드가 수퍼 키로 명확하게 식별되므로 4NF가 충족됩니다.

ETNFEdit 만족

프랜차이즈가 다른 공급 업체의 책을 주문할 수도 있다고 가정합니다. 관계에 다음 제약도 적용됩니다.

  • 특정 공급 업체가 특정 타이틀을 제공하고
  • 타이틀이 프랜차이즈에 제공되는 경우
  • 공급 업체가 프랜차이즈를 공급하고
  • 공급 업체가 프랜차이즈에 소유권을 제공합니다.
공급 업체-도서-가맹점
공급 업체 ID Title Franchisee ID
1 MySQL 데이터베이스 설계 및 최적화 시작 1
2 데이터베이스 관리를위한 관계형 모델 : 버전 2 2
3 SQL 학습 3

이 테이블은 4NF에 있지만 공급 업체 ID는 {{Supplier ID, Book}, {Book, Franchisee ID}, {Franchisee ID, Supplier 신분증}}.해당 조인 종속성의 구성 요소는 수 퍼키가 아니므로 (단일 수 퍼키는 전체 제목 임) 테이블이 ETNF를 충족하지 않으며 추가로 분해 될 수 있습니다.

공급 업체-도서
공급 업체 ID 제목
1 MySQL 데이터베이스 설계 및 최적화 시작
2 데이터베이스 관리를위한 관계형 모델 : 버전 2
3 SQL 학습
도서-프랜차이즈
제목 프랜차이즈 ID
MySQL 데이터베이스 설계 및 최적화 시작 1
데이터베이스 관리를위한 관계형 모델 : 버전 2 2
SQL 학습 3
Franchisee-공급 업체
공급 업체 ID 프랜차이즈 ID
1 1
2 2
3 3

분해는 ETNF 준수를 생성합니다.

5NFEdit 충족

5NF를 충족하지 않는 테이블을 찾으려면 일반적으로 데이터를 철저히 조사하는 데 필요합니다. 데이터를 약간 수정 한 4NF 예제의 테이블을 가정하고 5NF를 충족하는지 확인합니다.

Franchisee-Book Location
프랜차이즈 ID 직위 위치
1 MySQL 데이터베이스 설계 및 최적화 시작 캘리포니아
1 SQL 학습 캘리포니아
1 데이터베이스 관리를위한 관계형 모델 : 버전 2 텍사스
2 데이터베이스 관리를위한 관계형 모델 : 버전 2 캘리포니아

이 테이블을 분해하면 중복을 줄이고 다음 두 테이블을 얻습니다.

td>

Franchisee-도서
프랜차이즈 ID 직위
1 MySQL 데이터베이스 설계 및 최적화 시작
1 SQL 학습
1 데이터베이스 관리를위한 관계형 모델 : 버전 2
2 데이터베이스 관리를위한 관계형 모델 : 버전 2
Franchisee-위치
Franchisee ID 위치
1 캘리포니아
1 텍사스
2 캘리포니아

이러한 테이블을 조인하려고하면 어떻게됩니까? 쿼리는 다음 데이터를 반환합니다.

Franchisee-Book-Location JOINed
Franchisee ID Title 위치
1 MySQL 데이터베이스 설계 시작 및 최적화 캘리포니아
1 Learning SQL 캘리포니아
1 데이터베이스 관리를위한 관계형 모델 : 버전 2 캘리포니아
1 데이터베이스 관리를위한 관계형 모델 : 버전 2 텍사스
1 SQL 학습 텍사스
1 MySQL 데이터베이스 설계 및 최적화 시작 텍사스
2 데이터베이스 관리를위한 관계형 모델 : 버전 2 캘리포니아

분명히 JOIN은 예상보다 3 개의 행을 더 반환합니다. ano를 추가해 보겠습니다. 관계를 명확히하기 위해 테이블.세 개의 개별 테이블이 있습니다.

Franchisee-도서
Franchisee ID 제목
1 MySQL 데이터베이스 설계 및 최적화 시작
1 SQL 학습
1 데이터베이스 관리를위한 관계형 모델 : 버전 2
2 데이터베이스 관리를위한 관계형 모델 : 버전 2
Franchisee-위치
Franchisee ID 위치
1 캘리포니아
1 텍사스
2 캘리포니아
위치-부 k
위치 제목
캘리포니아 MySQL 데이터베이스 설계 및 최적화 시작
캘리포니아 SQL 학습
캘리포니아 데이터베이스 관리를위한 관계형 모델 : 버전 2
텍사스 데이터베이스 관리를위한 관계형 모델 : 버전 2

지금 JOIN은 무엇을 반환합니까? 실제로이 세 테이블을 조인하는 것은 불가능합니다. 즉, 데이터 손실없이 Franchisee-Book Location을 분해 할 수 없으므로 테이블은 이미 5NF를 충족합니다.

CJ Date는 5NF의 데이터베이스 만 진정으로 “정규화”되었다고 주장했습니다.

DKNFEdit 만족

이전 예제의 Book 테이블을 살펴보고 도메인 키 일반 형식을 만족하는지 확인해 보겠습니다.

th>

논리적으로 두께는 페이지 수에 의해 결정됩니다. 즉, 키가 아닌 페이지에 따라 다릅니다. 최대 350 페이지의 책은 “슬림”으로 간주되고 350 페이지가 넘는 책은 “두꺼운”것으로 간주되는 규칙의 예를 설정해 보겠습니다.

이 규칙은 기술적으로 제약이 있지만 도메인이 아닙니다. 따라서 데이터 무결성을 유지하기 위해 도메인 제약과 키 제약에 의존 할 수 없습니다.

다시 말해-예를 들어 “Thick”만있는 책에 “Thick”을 넣는 것을 막을 수있는 것은 없습니다. 50 페이지-이로 인해 테이블이 DKNF를 위반하게됩니다.

이 문제를 해결하기 위해 두께를 정의하는 열거 형 테이블을 만들고 원래 테이블에서 해당 열을 제거 할 수 있습니다.

제목 페이지 두께 장르 ID 게시자 ID
MySQL 데이터베이스 설계 및 최적화 시작 520 두꺼움 1 1
데이터베이스 관리를위한 관계형 모델 : 버전 2 538 두꺼움 2 2
SQL 학습 338 슬림 1 3
SQL 쿡북 636 두꺼움 1 3
두께 열거 형
두께 최소 페이지 최대 페이지
슬림 1 350
두꺼움 351 999,999,999,999
책-페이지-장르-출판사
제목 페이지 장르 ID 게시자 ID
MySQL 데이터베이스 설계 및 최적화 시작 520 1 1
The Relational Model for 데이터베이스 관리 : 버전 2 538 2 2
SQL 학습 338 1 3
SQL 쿡북 636 1 3

그러면 도메인 무결성 위반이 제거되고 테이블이 DKNF에 있습니다.

6NFEdit 만족

6 번째 정규 형식에 대한 간단하고 직관적 인 정의는 “행에 기본 키와 최대 하나의 다른 속성이 포함 된 경우 테이블이 6NF에 있습니다”라는 것입니다.

예를 들어 1NF를 생성하는 동안 설계된 Publisher 테이블을 의미합니다.

Publisher
Publisher_ID 이름 국가
1 Apress 미국

더 나아가 야합니다. 두 개의 테이블로 분해 :

게시자
Publisher_ID 이름
1 Apress
게시자 국가
Publisher_ID 국가
1 미국

6NF의 명백한 단점은 단일 엔티티에 대한 정보를 표현하는 데 필요한 테이블이 급증한다는 것입니다. 5NF의 테이블에 하나의 기본 키 열과 N 개의 속성이있는 경우 6NF에서 동일한 정보를 표시하려면 N 개의 테이블이 필요합니다. 단일 개념 레코드에 대한 다중 필드 업데이트에는 여러 테이블에 대한 업데이트가 필요합니다. 삽입 및 삭제도 마찬가지로 여러 테이블에 대한 작업이 필요합니다. 따라서 온라인 트랜잭션 처리 요구 사항을 처리하기위한 데이터베이스에서는 6NF를 사용하지 않아야합니다.

그러나 대화 형 업데이트를 허용하지 않고 대용량 데이터에 대한 빠른 쿼리에 특화된 데이터웨어 하우스에서는 , 특정 DBMS는 Columnar 데이터 저장소로 알려진 내부 6NF 표현을 사용합니다. 열의 고유 값 수가 테이블의 행 수보다 훨씬 적은 상황에서 열 지향 스토리지는 데이터 압축을 통해 공간을 크게 절약 할 수 있습니다. 열 저장은 또한 범위 쿼리의 빠른 실행을 허용합니다 (예 : 특정 열이 X와 Y 사이에 있거나 X보다 작은 모든 레코드 표시).

그러나 이러한 모든 경우에 데이터베이스 설계자는 그렇지 않습니다. 별도의 테이블을 생성하여 6NF 정규화를 수동으로 수행해야합니다. Sybase IQ와 같이웨어 하우징에 특화된 일부 DBMS는 기본적으로 컬럼 스토리지를 사용하지만 디자이너는 여전히 단일 다중 컬럼 테이블 만 볼 수 있습니다. Microsoft SQL Server 2012 이상과 같은 다른 DBMS를 사용하면 특정 테이블에 대한 “columnstore 인덱스”를 지정할 수 있습니다.

Write a Comment

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다