Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 시스템 환경 변수 편집
- IntelliJ IDEA
- 메서드
- multi-threading
- 컴파일
- 메서드 오버로딩
- this예약어
- Thread
- function
- 자바 멀티스레딩
- 연관관계
- 반복문
- break문
- 집합관계
- JAVA객체지향
- 포함관계
- Java데이터 타입
- 인텔리제이 기초 설정
- 상수
- While
- 형 변환
- for문
- Java
- continue문
- JAVA기초
- java변수
- 생성자
- 인텔리제이 한글 깨짐 해결법
- 접근제어지시자
- OPP개념
Archives
- Today
- Total
최원종의 개발 블로그
관계 차수 - 13 본문
관계 차수 : 두 테이블이 서로 어떤 방식으로 연결되어 있는지를 나타냄.
| 관계 | 설명 | 실생활 예시 |
| 1:1 (일대일) | A 하나 = B 하나 | 사람 ↔ 여권 |
| 1:N (일대다) | A 하나 = B 여러 개 | 고객 ↔ 주문 |
| N:M (다대다) | A 여러 개 = B 여러 개 | 학생 ↔ 수업 |
1:1 관계 ( 한 명의 회원은 하나의 배송지만 등록할 수 있다고 가정)
member 테이블
| id (PK) | name |
| 1 | 홍길동 |
| 2 | 김영희 |
member_address 테이블
| id (PK) | member_id (FK, UNIQUE) | address |
| 10 | 1 | 서울시 강남구 역삼동 |
| 11 | 2 | 부산시 해운대구 |
FK 컬럼에 UNIQUE를 붙이면 1:1 관계가 됨
USE shop;
select * from member;
desc member;
CREATE TABLE member_address (
id INT PRIMARY KEY AUTO_INCREMENT,
address VARCHAR(200) NOT NULL,
member_id bigint UNIQUE, -- UNIQUE = 1:1 설정
FOREIGN KEY (member_id) REFERENCES member(id)
);
INSERT INTO member_address (address, member_id) VALUES
('서울시 강남구 역삼동', 1),
('부산시 해운대구', 2);
select * from member_address;
1:N 관계
한 명의 회원이 여러 개의 주문을 할 수 있습니다. shop DB의 member ↔ orders 관계가 바로 1:N
member 테이블
| id (PK) | name |
| 1 | 홍길동 |
| 2 | 김영희 |
orders 테이블
| id (PK) | member_id (FK) | total_price | status | 비고 |
| 1 | 1 | 1,200,000 | 배송완료 | 홍길동 주문 1 |
| 2 | 1 | 35,000 | 배송중 | 홍길동 주문 2 |
| 3 | 2 | 1,500,000 | 배송완료 | 김영희 주문 1 |
백엔드에서 1:N 이 가장 많이 나오는 패턴:
회원(1) : 주문(N)
게시글(1) : 댓글(N)
카테고리(1) : 상품(N)
주문(1) : 주문상세(N)
N:M 관계
shop DB 에서 한 주문에 여러 상품이 포함될 수 있고, 하나의 상품이 여러 주문에 포함될 수 있다

N:M을 직접 표현할 수 없는 이유
하나의 컬럼에 여러 값을 저장할 수 없습니다.
orders 테이블에 product_ids 컬럼을 만들어서
"1,2,3" 처럼 저장하면?
→ 특정 상품이 포함된 주문을 찾기 불가능
→ 상품 수량을 저장할 방법 없음
→ 관계형 DB 의 규칙 위반
해결 방법(중간 테이블 사용)

orders (주문)
| id | member_id | total_price |
|----|-----------|-------------|
| 1 | 1 | 1235000 |
products (상품)
| id | name | price |
|----|--------------|---------|
| 1 | 갤럭시 S24 | 1200000 |
| 7 | 자바 완전정복 | 35000 |
order_item (중간 테이블)
| id | order_id | product_id | quantity | price |
|----|----------|------------|----------|---------|
| 1 | 1 | 1 | 1 | 1200000 |
| 2 | 1 | 7 | 1 | 35000 |
← 주문 1번에 상품 2개가 포함됨
핵심 요약
1:1 관계
FK 에 UNIQUE 추가
예: member ↔ member_address
1:N 관계
FK 는 N 쪽 테이블에 위치
예: member(1) ↔ orders(N)
백엔드에서 가장 많이 사용
N:M 관계
중간 테이블(교차 테이블) 필요
예: orders ↔ order_item ↔ product
중간 테이블에 두 FK + 추가 정보(수량, 가격 등) 저장'MySQL' 카테고리의 다른 글
| MySQL JOIN - 15 (0) | 2026.04.04 |
|---|---|
| ERD 다이어그램 - 14 (0) | 2026.04.04 |
| MySQL 기초 복습 - 12 (0) | 2026.04.03 |
| 인덱스(Index) - 11 (0) | 2026.04.03 |
| PRIMARY KEY, UNIQUE, FOREIGN KEY - 10 (0) | 2026.04.03 |