SQL 데이터베이스 입문_ 10. 데이터 모델링과 정규화

olongun·2025년 5월 5일

10.1 데이터 모델링이란

10.1.1 데이터 모델링의 개념

데이터 모델링이란 현실 세계의 어떤 사물이나 현상을 추상화해 데이터간 구조와 관계를 정의한 '데이터 모델'을 만드는 과정
즉 데이터를 어떤 구조로 저장하고, 데이터 간 관계는 어떻게 설정할지 등을 정의하는 일

10.1.2 데이터 모델링의 이점

1. 비즈니스 요구사항을 반영한다
2. 의사소통 개선에 기여한다
3. 데이터 무결성(데이터의 정확성, 일관성, 신뢰성을 유지하는 것)을 보장한다
4. 성능을 최적화한다
5. 유연한 확장이 가능하다
6. 비용을 절감한다

10.1.3 데이터 모델링 3단계

데이터 모델링은 개념적 데이터 모델링, 논리적 데이터 모델링, 물리적 데이터 모델링의 3단계를 거쳐 최종 데이터베이스를 구현

  • 개념적 데이터 모델링
    현실 세계를 구성하는 주요 개체(엔티티)와 그들 간 관계를 정의하는 단계

  • 논리적 데이터 모델링
    개념적 데이터 모델링의 결과로 만들어진 데이터 모델의 세부 내용을 정의하는 단계

  • 물리적 데이터 모델링
    논리적 데이터 모델링의 결과로 만들어진 데이터 모델을 특정 DBMS에 맞게 최적화하는 단계

10.2 데이터 모델의 구성 요소

10.2.1 엔티티

엔티티(entity)란 데이터베이스에서 관리하려는 핵심 대상으로, 비즈니스에서 실제로 존재하거나 개념적으로 중요한 것을 모형화한 것. 쉽게 말해 테이블로 만들어질 대상

10.2.2 속성

속성(attribute)은 엔티티의 특성이나 정보를 나타내는 항목으로, 여러 속성이 모여 하나의 엔티티를 구성한다.

10.2.3 관계

관계란 두 엔티티 간 연결된 방식을 나타내는 것

10.2.4 ER 다이어그램

ER 다이어그램은 데이터 모델을 정의하는 시각적 도구로, 엔티티, 속성, 관계를 기호로 그린 것

10.3 데이터 모델링 실습: 쇼핑몰 DB

요구사항: 쇼핑몰에서 사용할 데이터베이스를 만들려고 합니다. 사용자는 한 번에 여러 상품을 주문할 수 있고, 여러 번에 걸쳐 주문할 수도 있습니다. 주문이 들어오면 주문 시간과 상품을 기록으로 남기고, 주문이 결제되면 결제 정보도 기록으로 남깁니다.

10.3.1 개념적 데이터 모델링하기

  1. 요구사항을 토대로 엔티티를 선정(사용자, 주문, 상품, 결제)
  2. 엔티티 간 관계를 화살표와 텍스트로 표시

10.3.2 논리적 데이터 모델링하기

  1. 관계의 카디널리티를 구체화
  2. 엔티티에 필요한 속성을 구체화

10.3.3 물리적 데이터 모델링하기

  1. 엔티티는 테이블로, 속성은 칼럼으로 변경
  2. 칼럼의 자료형 정의

10.3.4 데이터베이스로 구현하기

-- data_modeling DB 생성 및 진입
CREATE DATABASE data_modeling;
USE data_modeling;

-- users 테이블 생성
CREATE TABLE users (
	id INTEGER AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(100) NOT NULL UNIQUE,
    name VARCHAR(50) NOT NULL
);

-- orders 테이블 생성
CREATE TABLE orders (
	id INTEGER AUTO_INCREMENT PRIMARY KEY,
    status VARCHAR(50),
    created_at DATETIME,
    user_id INTEGER NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

-- payments 테이블 생성
CREATE TABLE payments (
	id INTEGER AUTO_INCREMENT PRIMARY KEY,
    amount INTEGER NOT NULL,
    payment_type VARCHAR(50) NOT NULL,
    order_id INTEGER NOT NULL,
    FOREIGN KEY (order_id) REFERENCES orders(id)
);

-- products 테이블 생성
CREATE TABLE products (
	id INTEGER AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL UNIQUE,
    price INTEGER NOT NULL CHECK (price > 0),
    product_type VARCHAR(50) DEFAULT 'NONE',
    INDEX idx_product_name (name)
);

-- order_details 테이블 생성
CREATE TABLE order_details (
	id INTEGER AUTO_INCREMENT PRIMARY KEY,
    order_id INTEGER NOT NULL,
    product_id INTEGER NOT NULL,
    count INTEGER NOT NULL CHECK (count > 0),
    FOREIGN KEY (order_id) REFERENCES orders(id),
    FOREIGN KEY (product_id) REFERENCES products(id),
    UNIQUE (order_id, product_id)
);

10.4 정규화

10.4.1 정규화의 개념

정규화란 데이터 모델링할 때 데이터가 중복으로 저장되는 것을 최소화하고 데이터 무결성을 보장하기 위해 데이터를 구조화하는 작업

정규화 과정은 3단계로 나뉜다

  • 제1정규형(First Normal Form, 1NF)
    - 각 속성은 원자값(더 이상 분해할 수 없는 값)을 가져야 한다
    - 같은 속성이라면 모두 동일한 자료형을 가져야 한다
    - 각 인스턴스는 고유해야 한다

  • 제2정규형(Second Normal Form, 2NF)
    - 제1정규형을 만족해야 한다
    - 기본키가 아닌 일반 속성은 기본키의 전체 속성에 의해 결정돼야 한다

  • 제3정규형(Third Normal Form, 3NF)
    - 제2정규형을 만족해야 한다
    - 기본키가 아닌 일반 속성은 다른 일반 속성에 의해 결정되지 않아야 한다

0개의 댓글