데이터베이스 정규화 (간단한 영어로 설명)
데이터베이스 정규화 소개
데이터베이스 정규화는 데이터베이스를 테이블과 열로 구성하는 데 사용되는 프로세스입니다. 이것의 주요 아이디어는 테이블이 특정 주제에 관한 것이며 지원 주제 만 포함되어야한다는 것입니다. 정보가 포함 된 스프레드 시트를 예로 들어 보겠습니다. 데이터에는 여러 목적을 수행하는 영업 담당자와 고객이 포함되어 있습니다.
- 조직의 영업 담당자 식별
- 회사에서 문의하는 모든 고객 나열 제품 판매
- 특정 고객에게 전화를 거는 영업 사원을 식별합니다.
테이블을 하나의 목적으로 제한함으로써 데이터베이스에 포함 된 중복 데이터의 수를 줄일 수 있습니다. 이렇게하면 데이터베이스 수정으로 인한 일부 문제가 제거됩니다.
이러한 목표를 달성하기 위해 몇 가지 정해진 규칙을 사용할 것입니다. 이러한 규칙을 적용하면 새 테이블이 형성됩니다. 무질서에서 최적화로의 진행은 몇 가지 일반 양식을 통과합니다.
대부분의 데이터베이스에서 사용하는 세 가지 일반 양식이 있습니다. 테이블이 각각의 연속적인 데이터베이스 정규화 양식을 충족하면 데이터베이스 수정 이상이 발생하지 않고 유일한 목적이나 주제에 더 집중됩니다. 계속 진행하기 전에 데이터베이스 테이블의 정의를 이해해야합니다.
데이터베이스 정규화 이유
데이터베이스를 정규화해야하는 세 가지 주요 이유가 있습니다. 첫 번째는 중복 데이터를 최소화하는 것이고, 두 번째는 데이터 수정 문제를 최소화하거나 방지하는 것이며, 세 번째는 쿼리를 단순화하는 것입니다.
다양한 정규화 상태를 살펴보면서 각 양식이 이러한 문제를 해결하는 방법을 논의하지만 먼저 정규화되지 않은 일부 데이터를 살펴보고 잠재적 인 함정에 대해 논의하겠습니다.
문제를 이해하면 정규화에 대해 더 잘 이해할 수있을 것 같습니다. 다음 표를 고려하십시오.
가장 먼저 주목할 점은이 테이블이 다음과 같은 다양한 용도로 사용된다는 것입니다.
- 조직의 영업 담당자 식별
- 판매 목록 사무실 및 전화 번호
- 영업 사원과 영업소 연결
- 각 영업 사원의 고객 표시
DBA로서 이것은 위험 신호를 불러옵니다. 일반적으로 저는 하나의 목적을 가진 테이블을보고 싶습니다. 테이블이 다양한 용도로 사용되면 많은 문제가 발생합니다. 즉, 데이터 중복, 데이터 업데이트 문제 및 데이터 쿼리 노력 증가.
데이터 중복 및 수정 이상
각 영업 담당자에 대해 SalesOffice 및 OfficeNumber를 모두 나열했습니다. 중복 된 영업 사원 데이터가 있습니다. 중복 된 정보는 두 가지 문제를 야기합니다.
- 저장 용량을 늘리고 성능을 저하시킵니다.
- 데이터 변경을 유지하기가 더 어려워집니다.
예를 들면 다음과 같습니다.
시카고 사무실을 일리노이 주 Evanston으로 이전하는 경우를 고려하십시오. 이를 표에 올바르게 반영하려면 현재 시카고에있는 모든 영업 사원의 항목을 업데이트해야합니다. 우리의 표는 작은 예이지만 더 큰지, 잠재적으로 수백 건의 업데이트가 포함될 수 있음을 알 수 있습니다.
이러한 상황은 수정 이상입니다. 데이터베이스 정규화가이를 수정합니다. 다음과 같은 세 가지 수정 이상이 발생할 수 있습니다.
Insert Anomaly
전체 행에 대한 정보를 알 때까지 기록 할 수없는 사실이 있습니다. 이 예에서는 영업 사원을 알 때까지 새 영업소를 기록 할 수 없습니다. 왜? 레코드를 생성하려면 기본 키를 제공해야합니다. 우리의 경우 이것은 EmployeeID입니다.
이상 업데이트
이 경우 여러 행에 동일한 정보가 있습니다. 예를 들어 사무실 번호가 변경되면 여러 번 업데이트해야합니다. 모든 행을 업데이트하지 않으면 불일치가 나타납니다.
삭제 이상
행을 삭제하면 둘 이상의 사실 집합이 삭제됩니다. 예를 들어 John Hunt가 은퇴하는 경우 해당 행을 삭제하면 뉴욕 사무실에 대한 정보를 잃게됩니다.
검색 및 정렬 문제
마지막으로 고려할 이유는 데이터를보다 쉽게 검색하고 정렬하는 것입니다. SalesStaff 테이블에서 Ford와 같은 특정 고객을 검색하려면 다음과 같은 쿼리를 작성해야합니다.
SELECT SalesOfficeFROM SalesStaffWHERE Customer1 = ‘Ford’ OR Customer2 = ‘Ford’ OR Customer3 = ‘Ford’
고객이 어떤 식 으로든 한 열에서 쿼리는 더 간단합니다. 또한 쿼리를 실행하고 고객별로 정렬 할 것인지 고려하십시오.
현재 테이블은이를 어렵게 만듭니다. 세 개의 개별 UNION 쿼리를 사용해야합니다!데이터를 다른 테이블로 분리하여 이러한 이상을 제거하거나 줄일 수 있습니다. 이렇게하면 데이터가 단일 용도로 사용되는 테이블에 저장됩니다.
테이블을 재 설계하는 프로세스는 데이터베이스 정규화입니다.
데이터베이스 정규화의 정의
데이터베이스 정규화에는 1 차, 2 차, 3 차 정규화의 세 가지 일반적인 형식이 있습니다. 또한 각각 1NF, 2NF 및 3NF로 축약됩니다.
BCNF와 같은 몇 가지 추가 양식이 있지만 저는 이러한 양식을 고급이라고 생각하며 처음에는 배우기에 너무 필요하지 않습니다.
양식은 점진적입니다. 즉, 3 차 정규형에 대한 자격을 갖추려면 테이블이 먼저 2 차 정규형에 대한 규칙을 충족해야하고 2 차 정규형이 1 차 정규형에 대한 규칙을 준수해야합니다. 다양한 형식과 규칙을 자세히 논의하기 전에 다양한 형식을 요약 해 보겠습니다.
- 첫 번째 정규 형식 – 정보는 원자 값을 포함하는 각 열과 함께 관계형 테이블에 저장됩니다. 반복되는 열 그룹이 없습니다.
- 두 번째 일반 형식 – 테이블은 첫 번째 일반 형식이고 모든 열은 테이블의 기본 키에 따라 다릅니다.
- 세 번째 일반 형식 – 테이블 두 번째 정규 형식이며 모든 열이 기본 키에 전 이적으로 의존하지 않습니다.
규칙이 너무 의미가 없더라도 걱정하지 마세요. 이해하는 데 도움이되는 기사를 링크했습니다.
지금은 데이터베이스 정규화를위한 세 가지 규칙이 서로간에 존재한다는 것을 이해하는 것이 중요합니다. 어떤 사람들은 데이터베이스 정규화를 복잡하게 보이게 만듭니다.
하지만 그럴 필요는 없으며 이해하면 직관적이됩니다.