본문 바로가기

ABAP 프로그래밍 개념/OPEN SQL

2.5 Normalization

정규화(Normalization)는 데이터베이스 디자인을 간소화(단순화)하는 과정입니다. 정규화는 필요한 테이블의 수, 각 테이블이 나타내는 내용, 각 테이블의 필드 수 및 테이블 간 관계에 대한 핵심 질문에 대한 답변을 제공합니다. 또한 정규화는 데이터베이스 디자인에서 중복 및 이상 현상(redundancy and anomalies)을 방지하는 데 도움을 줍니다.

이상 현상(anomalies)은 데이터베이스 테이블에서 레코드를 삽입(Inserting), 업데이트(Updating) 또는 삭제(Deleting)하는 동안 (만약 데이터베이스가 잘못 설계되었을 경우) 발생할 수 있습니다. 예를 들어, 아래 표에 나와 있는 데이터베이스 테이블이 있다면 고객 주소를 변경하기 위해 레코드를 업데이트할 때 고객 레코드가 있는 모든 행을 업데이트해야 합니다. 만약 일부 행을 빼먹게 된다면 데이터 불일치가 발생합니다. 이를 업데이트 이상(update anomaly)이라고 합니다.

Item_ID Customer_ID Customer_name Customer_address
1 921 Kim Seoul 123
2 921 Kim Seoul 123
3 728 Son Busan 234

만약 고객 마스터 테이블에 없는 고객을 대상으로 레코드를 삽입하려고 하면, 삽입 이상(Insertion anomaly)이 발생합니다. 위 표에서 Item_ID가 3인 Row를 삭제하면, 그 항목에만 Son이라는 고객의 세부 정보가 연결되어 있으므로 Son 고객의 레코드도 함께 삭제됩니다. 이것은 삭제 이상(delete anomaly)이라고 합니다.

정규화는 이러한 이상 현상들을 극복할 수 있게 하고 일관되고 예측 가능한 데이터베이스 모델링을 돕는 프로세스입니다. 정규화는 최적화된 구조(Optimal Structure)를 설계하는 데 도움이 되는 정규형 개념(Normal Forms)을 사용합니다. 사용 가능한 정규형에는 1NF(제 1 정규형), 2NF(제 2 정규형) 및 3NF(제 3 정규형)이 있습니다.

1) First Normal Form(1NF : 제 1 정규형)
제1 정규형(1NF)은 테이블의 필드가 원자 값(atomic values)을 포함해야 한다는 것을 규정합니다. 즉, 각 필드는 단 하나의 값을 포함해야 합니다. 예를 들어, 아래 표의 데이터에서는 Emp_id 2290에 대해 전화번호 필드가 여러 값을 포함하기 때문에 1NF에 부합하지 않습니다.

Emp_id Emp_name Phone_num
2289 John 99889988
2290 Mark ■ 88998899
■ 99887766

위 표를 1차 정규화하기 위해서는, 아래 표처럼 Emp_id가 2290인 데이터에 대해서 새 레코드를 추가해야합니다.

Emp_id Emp_name Phone_num
2289 John 99889988
2290 Mark 88998899
2290 Mark 99887766

 

2) Second Normal Form(2NF : 제 2 정규형)
제 2 정규형(2NF)를 따르기 위해서는 1NF(제 1 정규형)를 준수해야하며, 테이블의 키 필드이외의 필드들은 모두 Primary key(기본 키) 필드에 완전히 종속되어야 하며 기본 키 필드의 하위 집합에는 종속되어서는 안됩니다.

예를 들어, 아래 표에서 Employee_ID와 Department_ID가 primary key(기본 키)필드임을 가정해 봅시다. 2NF에 따르면 비 기본 필드인 Employee_name과 Department_name은 완전한 기본 키 필드인 Employee_ID와 Department_ID에만 종속되어야하며 기본 키 필드의 하위 집합에는 종속되어서는 안된다는 것입니다.

Employee_ID Department_ID Employee_name Department_name
1122 01 John Sales
1123 02 Mark Finance

위 예를 보면 경우에 맞지 않는 것을 알 수 있습니다. 여기서는 Employee_name 필드가 Employee_ID 필드에 의해 식별될 수 있고, Department_name 필드는 Department_ID 필드에 의해 완전히 식별될 수 있습니다. 따라서이 테이블의 기본 키 필드가 아닌 필드들이 테이블의 기본 키 필드의 일부에만 종속되어 있으므로 2NF에서 허용되지 않습니다.

위 표를 2차 정규화를 하기 위해서, 아래 보이는 두 개의 테이블로 나누는 것이 좋습니다. 이렇게 되면 키필드가 아닌 필드들이 모두 키필드에 종속되는 것을 확인할 수 있습니다.

Employee_ID Department_ID Employee_name
1122 01 John
1123 02 Mark
Department_ID Department_name
01 Sales
02 Finance

 

3) Third Normal Form(3NF : 제 3 정규형)
만약 테이블이 2NF에 부합하며 모든 키필드가 아닌 필드가 상호 독립적이면 해당 테이블은 제3 정규형(3NF)에 부합합니다. 예를 들어, 아래 표는 Total 필드가 키 필드가 아닌 Quantity와 Price의 정보에 의존하기 때문에 3NF에 부합하지 않습니다. 이 테이블을 3NF에 부합하도록 만들기 위해서는 Total 필드를 테이블에서 제거하고 쿼리나 보고서에서 계산을 처리하는 것이 가장 좋습니다. 이렇게 하면 테이블의 하나의 필드를 업데이트하는 경우에도 이상 현상이 발생하지 않도록 보장할 수 있습니다.

Item_id Quantity Price Total
1 10 10 100
2 20 15 300

각각의 높은 정규화 형식은 그 이하의 모든 정규화 형식을 포함하는 슈퍼셋입니다. 예를 들어, 3NF에 디자인한다면, 이는 기본적으로 1NF와 2NF에도 따르는 것입니다. 정규화는 최적의 데이터베이스 디자인을 달성하는 데 도움이 됩니다. 좋은 데이터베이스 디자인은 시간, 노력 및 비즈니스 요구 사항에 대한 좋은 이해력이 필요합니다. 좋은 디자인은 응용 프로그램을 효율적으로 만드는 것뿐만 아니라, 나중에 머리 아픈 문제를 예방하는 데도 도움이 됩니다.

반응형

'ABAP 프로그래밍 개념 > OPEN SQL' 카테고리의 다른 글

4. Selecting Data from Multiple Tables  (0) 2023.05.04
3. Selecting Data from Database Tables  (0) 2023.05.04
2.4 Relationship  (2) 2023.05.03
2.3 Foreign Keys and Domains  (0) 2023.05.03
2.2 Tables and Keys  (0) 2023.05.02