LEVEL 21 QUEST
JOIN과 관계형 데이터 모델링
JOIN과 관계형 데이터 모델링 — DevFoil 바이브코딩 Stage 5, Lv.21
왜 테이블을 나눠야 할까?
데이터 중복의 문제점
모든 데이터를 하나의 테이블에 넣으면 어떻게 될까요? 데이터가 중복되고, 수정할 때 여러 곳을 고쳐야 하고, 실수로 불일치가 생길 수 있습니다.
나쁜 예시 - 하나의 테이블에 모든 것:
나쁜 예시 - 하나의 테이블에 모든 것:
-- 잘못된 설계: 모든 정보를 하나의 테이블에
-- 주문이 3건이면 "김개발"이라는 회원 정보가 3번 중복됨!
-- +----+--------+------------------+----------+--------+-----+
-- | id | 회원명 | 이메일 | 상품명 | 가격 | 수량 |
-- +----+--------+------------------+----------+--------+-----+
-- | 1 | 김개발 | kim@example.com | 노트북 | 150만 | 1 |
-- | 2 | 김개발 | kim@example.com | 마우스 | 3만5 | 2 |
-- | 3 | 김개발 | kim@example.com | 키보드 | 8만9 | 1 |
-- +----+--------+------------------+----------+--------+-----+
-- 문제: 이메일이 바뀌면 3곳 모두 수정해야 함 → 실수 위험!
-- 올바른 설계: 테이블을 분리하고 관계(JOIN)로 연결
-- 회원 테이블 (회원 정보는 한 곳에만 저장)
CREATE TABLE members (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
-- 상품 테이블 (상품 정보도 한 곳에만 저장)
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(200) NOT NULL,
price INT NOT NULL
);
-- 주문 테이블 (관계만 저장)
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
member_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT DEFAULT 1,
ordered_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (member_id) REFERENCES members(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
실습 데이터 준비
-- 회원 데이터
INSERT INTO members (name, email) VALUES
('김개발', 'kim@example.com'),
('이디자인', 'lee@example.com'),
('박데이터', 'park@example.com'),
('최마케팅', 'choi@example.com');
-- 상품 데이터
INSERT INTO products (name, price) VALUES
('MacBook Pro 14', 2990000),
('Magic Mouse', 129000),
('Mechanical Keyboard', 189000),
('27" 4K Monitor', 450000),
('USB-C Hub', 59000);
-- 주문 데이터
INSERT INTO orders (member_id, product_id, quantity) VALUES
(1, 1, 1), (1, 2, 1), (1, 5, 2), -- 김개발: 맥북, 마우스, 허브x2
(2, 3, 1), (2, 4, 1), -- 이디자인: 키보드, 모니터
(3, 1, 1), (3, 3, 1), (3, 4, 2); -- 박데이터: 맥북, 키보드, 모니터x2
-- 최마케팅: 주문 없음 (LEFT JOIN 테스트용)
🔒
여기까지는 미리보기입니다
JOIN과 관계형 데이터 모델링
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.
Google로 3초 만에 시작 →🧵 Threads로 시작무료 공개 강의 둘러보기 (Lv.1~3)무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.