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
- Java데이터 타입
- 컴파일
- for문
- 반복문
- 접근제어지시자
- While
- 자바 멀티스레딩
- 인텔리제이 한글 깨짐 해결법
- function
- 상수
- break문
- 시스템 환경 변수 편집
- IntelliJ IDEA
- 집합관계
- JAVA객체지향
- continue문
- 포함관계
- Thread
- 형 변환
- this예약어
- 메서드
- 연관관계
- java변수
- 생성자
- OPP개념
- multi-threading
- JAVA기초
- 인텔리제이 기초 설정
- Java
- 메서드 오버로딩
Archives
- Today
- Total
최원종의 개발 블로그
데이터베이스 설계 시나리오 본문
쇼핑몰 시나리오
1. 테이블 하나에 다 넣기
| 회원명 | 회원주소 | 상품명 | 가격 | 수량 |
|--------|--------------|---------|--------|------|
| 김철수 | 서울 강남구 | 노트북 | 150만원 | 1 |
| 김철수 | 서울 강남구 | 마우스 | 3만원 | 2 |
| 김철수 | 서울 강남구 | 키보드 | 8만원 | 1 |
| 이영희 | 부산 해운대 | 노트북 | 150만원 | 1 |
문제점
1. 김철수의 주소가 3번 중복됩니다 → 데이터 낭비
2. 김철수가 이사를 가면 3줄을 모두 수정해야 합니다 → 누락 위험
3. 같은 상품 정보(노트북, 150만원)가 여러 번 반복됩니다 → 중복
4. 상품 가격이 바뀌면 모든 과거 주문 행도 바꿔야 합니다 → 불일치
2. 테이블을 분리해서 중복 제거
문제의 핵심은 서로 다른 종류의 데이터가 한 테이블에 섞여 있다는 것

회원 정보 → 회원 테이블
상품 정보 → 상품 테이블
주문 정보 → 주문 테이블
분리 후
member 테이블:
| id(PK) | name | address |
|--------|--------|------------|
| 1 | 김철수 | 서울 강남구 |
| 2 | 이영희 | 부산 해운대 |
product 테이블:
| id(PK) | name | price |
|--------|-------|----------|
| 1 | 노트북 | 1500000 |
| 2 | 마우스 | 30000 |
| 3 | 키보드 | 80000 |
orders 테이블:
| id(PK) | member_id(FK) | product_id(FK) | quantity |
|--------|--------------|----------------|----------|
| 1 | 1 | 1 | 1 |
| 2 | 1 | 2 | 2 |
| 3 | 1 | 3 | 1 |
| 4 | 2 | 1 | 1 |
3. PK와 FK 관계

PK (Primary Key): 테이블에서 각 행을 고유하게 식별
→ member.id = 1 인 회원은 단 한 명
FK (Foreign Key): 다른 테이블의 PK 를 참조
→ orders.member_id = 1 은 member.id = 1 (김철수) 을 가리킴
→ orders.product_id = 1 은 product.id = 1 (노트북) 을 가리킴
이 구조를 1:N (일대다) 관계 라고 함
현실 세계에서 가장 많이 쓰이는 관계:
회원(1) : 주문(N) → 회원 1명이 여러 주문 가능
게시글(1) : 댓글(N) → 게시글 1개에 여러 댓글
학생(1) : 성적(N) → 학생 1명이 여러 과목 점수 보유
데이터베이스 구축 절차
구축 절차:
1. 데이터베이스 생성 (CREATE DATABASE)
2. 사용할 DB 선택 (USE)
3. 테이블 설계 및 생성 (CREATE TABLE)
4. 데이터 입력 (INSERT)
5. 데이터 조회 (SELECT)
실습 코드
-- 데이터 베이스 구축하기
CREATE DATABASE school;
-- 어떤 데이터베이스를 사용하겠다.
use school;
-- 테이블 생성
-- 1. 학생 테이블
CREATE TABLE student(
student_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
grade INT NOT NULL,
major VARCHAR(50) NOT NULL,
phone VARCHAR(20)
);
select * from student;
-- 2. 과목 테이블
CREATE TABLE subject(
subject_id INT PRIMARY KEY,
subject_name VARCHAR(50) NOT NULL,
credit INT NOT NULL,
professor VARCHAR(30) NOT NULL
);
-- 수강 테이블 (student 테이블 subject 테이블 연결) -> FK
CREATE TABLE enrollment(
enrollment_id INT PRIMARY KEY,
student_id INT NOT NULL, -- 일적으로 FK를 선언시 not null로 설정 함
subject_id int not null,
score DEcIMAL(5, 2),
enrolLED_AT DATe NOt null,
foreIGN kEY(student_id) REFERENcES Student(student_id),
foreigN key(subject_id) REFERENcES Subject(subject_id)
);
-- 테이블 목록 확인
show tables;
데이터 넣기
-- 테이블 삭제 방법
-- drop table student;
-- drop table subject;
-- drop table enrollment;
-- 학생 데이터
INSERT INTO student (student_id, name, grade, major, phone) VALUES
(1001, '김철수', 2, '컴퓨터공학', '010-1234-5678'),
(1002, '이영희', 3, '경영학', '010-2345-6789'),
(1003, '박민준', 1, '전자공학', '010-3456-7890'),
(1004, '최지아', 4, '컴퓨터공학', '010-4567-8901'),
(1005, '한수연', 2, '경영학', NULL);
-- 과목 데이터
INSERT INTO subject (subject_id, subject_name, credit, professor) VALUES
(101, '데이터베이스', 3, '김교수'),
(102, '알고리즘', 3, '이교수'),
(103, '웹프로그래밍', 2, '박교수'),
(104, '운영체제', 3, '최교수');
-- 수강 데이터
INSERT INTO enrollment (enrollment_id, student_id, subject_id, score, enrolled_at) VALUES
(1, 1001, 101, 88.5, '2026-03-02'),
(2, 1001, 102, 92.0, '2026-03-02'),
(3, 1002, 101, 75.0, '2024-03-02'),
(4, 1002, 103, 85.5, '2024-03-02'),
(5, 1003, 102, 90.0, '2024-03-02'),
(6, 1004, 101, 95.0, '2024-03-02'),
(7, 1004, 104, 78.0, '2024-03-02'),
(8, 1005, 103, NULL, '2024-03-02');
-- 데이터 확인
SELECT * FROM student;
SELECT * FROM subject;
SELECT * FROM enrollment;
핵심 요약
테이블 설계 원칙
서로 다른 종류의 데이터 → 테이블 분리
각 테이블에 PK 설정 → 행을 고유하게 식별
테이블 간 관계 → FK 로 연결
1:N 관계
가장 많이 쓰이는 관계
FK 는 N 쪽 테이블에 위치
DB 구축 순서
CREATE DATABASE → USE → CREATE TABLE → INSERT → SELECT'MySQL' 카테고리의 다른 글
| INSERT 구문과 제약 조건 -7 (0) | 2026.04.02 |
|---|---|
| MySQL 데이터 타입 - 6 (0) | 2026.04.02 |
| SQL - DDL, DML, DCL -5 (0) | 2026.04.02 |
| 데이터베이스란? (0) | 2026.04.02 |
| 데이터와 정보 (0) | 2026.04.01 |



