데이터 모델링이란 현실 세계의 어떤 사물이나 현상을 추상화해 데이터간 구조와 관계를 정의한 '데이터 모델'을 만드는 과정
즉 데이터를 어떤 구조로 저장하고, 데이터 간 관계는 어떻게 설정할지 등을 정의하는 일
1. 비즈니스 요구사항을 반영한다
2. 의사소통 개선에 기여한다
3. 데이터 무결성(데이터의 정확성, 일관성, 신뢰성을 유지하는 것)을 보장한다
4. 성능을 최적화한다
5. 유연한 확장이 가능하다
6. 비용을 절감한다
데이터 모델링은 개념적 데이터 모델링, 논리적 데이터 모델링, 물리적 데이터 모델링의 3단계를 거쳐 최종 데이터베이스를 구현
개념적 데이터 모델링
현실 세계를 구성하는 주요 개체(엔티티)와 그들 간 관계를 정의하는 단계
논리적 데이터 모델링
개념적 데이터 모델링의 결과로 만들어진 데이터 모델의 세부 내용을 정의하는 단계
물리적 데이터 모델링
논리적 데이터 모델링의 결과로 만들어진 데이터 모델을 특정 DBMS에 맞게 최적화하는 단계
엔티티(entity)란 데이터베이스에서 관리하려는 핵심 대상으로, 비즈니스에서 실제로 존재하거나 개념적으로 중요한 것을 모형화한 것. 쉽게 말해 테이블로 만들어질 대상
속성(attribute)은 엔티티의 특성이나 정보를 나타내는 항목으로, 여러 속성이 모여 하나의 엔티티를 구성한다.
관계란 두 엔티티 간 연결된 방식을 나타내는 것
ER 다이어그램은 데이터 모델을 정의하는 시각적 도구로, 엔티티, 속성, 관계를 기호로 그린 것
요구사항: 쇼핑몰에서 사용할 데이터베이스를 만들려고 합니다. 사용자는 한 번에 여러 상품을 주문할 수 있고, 여러 번에 걸쳐 주문할 수도 있습니다. 주문이 들어오면 주문 시간과 상품을 기록으로 남기고, 주문이 결제되면 결제 정보도 기록으로 남깁니다.
-- 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)
);
정규화란 데이터 모델링할 때 데이터가 중복으로 저장되는 것을 최소화하고 데이터 무결성을 보장하기 위해 데이터를 구조화하는 작업
정규화 과정은 3단계로 나뉜다