[sql] 정규화된 테이블과 무결성 제약 조건

데이터베이스의 성능과 효율성을 향상시키기 위해 데이터베이스 테이블을 정규화하는 것은 중요합니다. 정규화는 데이터 중복을 최소화하고 관련성을 유지하면서 테이블을 적절하게 구성하여 데이터를 효율적으로 관리하는 과정입니다.

데이터베이스 정규화

데이터베이스 정규화는 제1정규형, 제2정규형, 제3정규형 등의 단계를 거쳐 테이블의 중복을 최소화하고 데이터의 일관성을 유지합니다. 각 정규형은 특정 조건을 만족시키기 위한 규칙을 가지고 있으며, 이를 통해 테이블의 구조를 규격화하여 데이터 이상 현상을 방지합니다.

다음은 간단한 예제 코드를 통해 제1정규형, 제2정규형, 제3정규형의 개념을 설명하는 것입니다.

-- 예제 테이블: 주문 정보 (비정규화 상태)
CREATE TABLE 주문 (
    주문번호 INT PRIMARY KEY,
    고객명 TEXT,
    제품명 TEXT,
    제품가격 INT,
    고객주소 TEXT
);

위의 테이블은 비정규화 상태로, 각 주문 정보에 고객명, 제품명, 제품가격, 고객주소가 함께 저장되어 있습니다. 이를 아래와 같이 정규화할 수 있습니다.

-- 주문 정보를 정규화한 테이블
CREATE TABLE 주문 (
    주문번호 INT PRIMARY KEY,
    고객ID INT,
    제품ID INT,
    주문일시 DATETIME
);

CREATE TABLE 고객 (
    고객ID INT PRIMARY KEY,
    고객명 TEXT,
    고객주소 TEXT
);

CREATE TABLE 제품 (
    제품ID INT PRIMARY KEY,
    제품명 TEXT,
    제품가격 INT
);

위의 코드는 주문 정보를 정규화한 예시로, 각 테이블은 중복을 최소화하고 관련성을 유지하여 데이터의 일관성을 확보하고 있습니다.

데이터 무결성 제약 조건

정규화된 테이블에 데이터를 삽입, 갱신, 삭제할 때 데이터 무결성을 유지하기 위해 제약 조건을 설정해야 합니다. 데이터 무결성은 데이터의 정확성과 일관성을 보장하기 위한 규칙이며, 테이블 간의 관계를 정의하고 데이터 조작 시 데이터의 무결성을 지키기 위해 사용됩니다.

아래는 데이터 무결성을 유지하기 위한 제약 조건을 예시로 보여주는 것입니다.

-- 고객ID를 외래키로 참조하는 주문 테이블의 제약 조건 설정
ALTER TABLE 주문
ADD CONSTRAINT fk_주문_고객
FOREIGN KEY (고객ID)
REFERENCES 고객(고객ID);

위의 코드는 주문 테이블에서 고객ID를 외래키로 참조하는 제약 조건을 설정한 예시입니다. 이를 통해 데이터 무결성을 유지하고, 무단으로 잘못된 데이터를 추가하거나 수정하는 것을 방지할 수 있습니다.

정규화된 테이블과 데이터 무결성을 유지하기 위한 제약 조건은 데이터베이스의 효율적인 운영과 데이터의 신뢰성을 보장하는 데에 중요한 요소입니다.


참고 문헌: