정규화(Normalization)는 데이터베이스 설계에서 중요한 개념 중 하나로, 중복을 제거하고 데이터를 분리하여 데이터 중복을 최소화하고 데이터의 일관성을 유지하는데 목적이 있습니다.
데이터베이스 제약조건과 정규화는 밀접한 관계를 가지고 있습니다. 정규화는 데이터의 중복을 제거하고 데이터의 무결성(integrity)을 보장하기 위한 방법이며, 제약조건은 데이터의 무결성을 보장하기 위한 규칙입니다.
* 데이터베이스 제약조건
데이터베이스에서 제약 조건(Constraint)은 데이터의 무결성을 보장하기 위해 설정하는 규칙으로, 특정한 조건을 만족하지 않는 데이터의 삽입, 수정, 삭제를 방지합니다. 데이터베이스에서 주로 사용되는 제약 조건에는 다음과 같은 것들이 있습니다.
Primary Key Constraint (PK 제약 조건): 테이블에서 각 레코드를 고유하게 식별할 수 있는 열(Primary Key)을 지정하고, 해당 열에 대한 중복 값이나 NULL 값을 허용하지 않는 제약 조건입니다.
Foreign Key Constraint (FK 제약 조건): 다른 테이블의 Primary Key 열을 참조하는 열(Foreign Key)을 지정하고, 해당 열에 대해 참조하는 값이 존재하지 않거나 NULL 값을 허용하지 않는 제약 조건입니다.
Unique Constraint (유니크 제약 조건): 테이블의 열에 대해 중복된 값을 허용하지 않는 제약 조건입니다.
Not Null Constraint (NOT NULL 제약 조건): 테이블의 열이 NULL 값을 허용하지 않는 제약 조건입니다.
Check Constraint (체크 제약 조건): 테이블의 열에 대해 특정한 조건을 검사하여, 조건을 만족하지 않는 값의 삽입, 수정, 삭제를 방지하는 제약 조건입니다.
예를 들어, 주문 테이블에서는 주문번호(Order ID)를 PK로 설정하고, 해당 주문번호가 존재하는 고객의 ID를 참조하는 고객ID(Customer ID) 열에 대해 FK 제약 조건을 설정할 수 있습니다. 또한, 주문번호와 함께 주문일(Order Date)을 저장하는데, 이 열에 대해 NOT NULL 제약 조건을 설정할 수 있습니다. 이러한 제약 조건을 통해 데이터의 무결성을 보장하고, 데이터베이스의 일관성을 유지할 수 있습니다.
* 정규화
제1, 제2, 제3 정규화는 데이터베이스 설계에서 중복을 최소화하고 데이터 무결성을 보장하기 위한 정규화 과정입니다.
제1 정규화(1NF):
제 1 정규화는 반복되는 데이터를 제거하여 중복을 최소화합니다. 이를 위해 기본 키(primary key)를 정의하고, 이를 기준으로 데이터를 분할합니다. 이 때, 제약조건으로는 기본 키(primary key)를 반드시 지정해야 하며, 중복되는 데이터가 없어야 합니다.
각 열이 원자값(Atomic Value)을 가져야 하는 것을 의미합니다. 즉, 테이블의 모든 열은 하나의 값만 가지며, 여러 개의 값이 결합되지 않도록 분해되어야 합니다.
예를 들어, 주문 테이블에서는 주문번호, 고객번호, 주문일, 상품번호, 수량 등의 열이 있습니다. 이 중에서 상품번호와 수량 열을 결합하여 하나의 열로 저장하는 것은 제1 정규화를 위배하는 것입니다.
제2 정규화(2NF):
제 2 정규화는 기본 키(primary key) 이외의 모든 열이 기본 키에 종속되도록 테이블을 분해합니다. 이를 위해 외래 키(foreign key)를 사용하여 다른 테이블과의 관계를 설정하며, 이 때 외래 키가 참조하는 기본 키(primary key)에 대한 제약조건이 필요합니다.
테이블의 모든 열이 완전 함수 종속을 만족해야 합니다. 즉, 테이블의 기본키를 구성하는 열을 제외한 모든 열이 기본키에 대해 함수 종속적이어야 합니다.
예를 들어, 고객 테이블에서는 고객번호, 이름, 전화번호, 우편번호, 주소 등의 열이 있습니다. 이 중에서 이름, 전화번호, 우편번호, 주소 열은 고객번호에 대해 함수 종속적입니다. 하지만, 전화번호와 우편번호 열은 서로 독립적이지 않으므로, 이 열들을 별도의 테이블로 분리하여 제2 정규화를 만족시킬 수 있습니다.
제3 정규화(3NF):
제 3 정규화는 테이블에서 발생할 수 있는 이상현상(anomalies)을 제거합니다. 이를 위해 반복적으로 발생하는 그룹을 독립된 테이블로 분리하며, 이 때 각 테이블의 기본 키(primary key)와 외래 키(foreign key)를 정의하고, 이에 대한 제약조건을 설정합니다.
테이블의 모든 열이 이행적 함수 종속을 만족하지 않아야 합니다. 즉, 어떤 열의 값이 다른 열에 의존하는 경우, 이를 별도의 테이블로 분리하여 각각의 열이 독립적으로 존재할 수 있도록 해야 합니다.
예를 들어, 주문 테이블에서는 주문번호, 고객번호, 상품번호, 수량, 가격 등의 열이 있습니다. 이 중에서 가격 열은 상품번호에 의존합니다. 따라서, 가격 열을 상품 테이블과 별도의 테이블로 분리하여 제3 정규화를 만족시킬 수 있습니다.
제 4 정규화와 제 5 정규화는 릴레이션의 중복을 제거하는 데 초점을 둔 정규화의 단계입니다.
제4 정규화(4NF):
제 4 정규화는 다중 값 종속을 제거하는 데 집중합니다. 다중 값 종속이란, 하나의 릴레이션의 한 속성 값이 여러 개의 값으로 이루어져 있을 때 다른 속성 값들에 종속적인 경우를 말합니다. 이러한 다중 값 종속은 중복된 데이터를 발생시키고, 데이터 일관성과 무결성에 문제를 일으킬 수 있습니다. 제 4 정규화는 이러한 다중 값 종속을 제거하여 중복된 데이터를 제거하는 것을 목표로 합니다.
제5 정규화(5NF):
제 5 정규화는 조인(join) 종속을 제거하는 데 초점을 둡니다. 조인 종속이란, 두 개 이상의 릴레이션이 하나 이상의 속성을 공유하고, 이를 조인하여 정보를 얻을 때 발생하는 종속 관계를 말합니다. 이러한 조인 종속은 데이터 간의 의미 관계를 분명하게 알 수 없게 하며, 조인이 많아질수록 성능 문제를 야기할 수 있습니다. 제 5 정규화는 이러한 조인 종속을 제거하여 각 릴레이션의 독립성과 의미 관계를 명확하게 유지하는 것을 목표로 합니다.
따라서, 데이터베이스 제약조건은 데이터의 무결성을 보장하기 위한 필수적인 요소이며, 정규화는 이를 달성하기 위한 방법 중 하나입니다.
'개발공부 > CS Study' 카테고리의 다른 글
JDBC문법 데이터베이스 접속(SQL문 전송) - Statements (0) | 2023.03.29 |
---|---|
JDBC 문법 (0) | 2023.03.29 |
4. 데이터베이스(3) - 트랜잭션과 무결성 (0) | 2022.11.01 |
4. 데이터 베이스 (2) - ERD와 정규화 과정 (0) | 2022.11.01 |
네트워크(2) (0) | 2022.09.27 |