(AI활용앱개발분임)데이터베이스 쌩 기초[2025.08.19.(화) 21:00-22:00]

이론

실습

초등학교 데이터베이스 (아주 간단한 버전!)

나무처럼 생각해보기

데이터베이스는 큰 나무와 같아요!
줄기 (Primary Key가 있는 테이블): 가장 중요한 정보를 담고 있어요
가지 (Foreign Key가 있는 테이블): 줄기에서 뻗어나온 추가 정보예요

학생 테이블 (줄기 테이블)

CREATE TABLE 학생 ( 학번 INT PRIMARY KEY, -- 이게 바로 Primary Key! 이름 VARCHAR(20), 학년 INT,INT );
SQL
복사
학생 데이터:
학번
이름
학년
101
김민수
3
2
102
이지영
3
2
103
박서준
4
1
104
최하은
5
3
105
정우진
6
1

급식 테이블 (가지 테이블 1)

CREATE TABLE 급식 ( 번호 INT PRIMARY KEY, 학번 INT, -- 이게 Foreign Key! 학생 테이블과 연결돼요 날짜 DATE, 먹었나요 VARCHAR(5), FOREIGN KEY (학번) REFERENCES 학생(학번) );
SQL
복사
급식 데이터:
번호
학번
날짜
먹었나요
1
101
2024-03-04
2
102
2024-03-04
3
103
2024-03-04
아니오
4
101
2024-03-05
5
104
2024-03-05

도서대출 테이블 (가지 테이블 2)

CREATE TABLE 도서대출 ( 대출번호 INT PRIMARY KEY, 학번 INT, -- 이것도 Foreign Key! 학생 테이블과 연결돼요 책이름 VARCHAR(50), 빌린날짜 DATE, FOREIGN KEY (학번) REFERENCES 학생(학번) );
SQL
복사
도서대출 데이터:
대출번호
학번
책이름
빌린날짜
1
101
해리포터
2024-03-01
2
103
어린왕자
2024-03-02
3
102
개구리왕자
2024-03-03
4
101
신데렐라
2024-03-04
5
105
백설공주
2024-03-05

나무로 설명하는 데이터베이스 구조

줄기 = Primary Key가 있는 중심 테이블

학생 테이블이 나무의 줄기예요!
학번(Primary Key)은 각 학생의 특별한 번호예요
101번 김민수는 이 세상에 단 한 명뿐!
줄기가 없으면 가지도 없어요

가지 = Foreign Key가 있는 테이블들

[학생 테이블] ← 줄기 | -------+------- | | [급식 테이블] [도서대출 테이블] ← 가지들
Plain Text
복사
급식 테이블도서대출 테이블은 나무의 가지예요!
가지는 항상 줄기에 연결되어 있어요
Foreign Key(학번)가 바로 그 연결고리!
"101번 학생이 무슨 책을 빌렸지?" 이런 질문에 답할 수 있어요

쉽게 이해하기

Primary Key는 뭐예요?

"나만의 특별한 번호"
우리 반에 김민수가 2명 있어도, 학번은 다르죠?
101번은 세상에 단 하나뿐!

Foreign Key는 뭐예요?

"친구를 가리키는 화살표"
급식 테이블에서 "101번이 급식 먹었어요"라고 할 때
그 101번이 누군지는 학생 테이블을 보면 알 수 있어요!

왜 이렇게 나누나요?

만약 모든 정보를 한 테이블에 넣으면...
김민수가 책을 5권 빌리면, 이름을 5번 써야 해요
이름이 바뀌면 5군데를 다 고쳐야 해요
하지만 테이블을 나누면...
학번만 쓰면 돼요!
이름은 한 곳에서만 관리해요!

다시 더 쉽게

우리가 만든 초등학교 데이터베이스 자세히 이해하기

나무의 줄기와 가지를 만드는 마법 주문!

줄기 테이블 (학생) 만들기

CREATE TABLE 학생 ( 학번 INT PRIMARY KEY, 이름 VARCHAR(20), 학년 INT,INT );
SQL
복사

이 코드를 친구에게 설명한다면?

"학생 명단 공책을 만드는 거야!"
1.
CREATE TABLE 학생
"학생이라는 이름의 빈 공책을 새로 만들어!"
마치 문방구에서 새 공책을 사는 것처럼!
2.
학번 INT PRIMARY KEY
학번 = "첫 번째 칸 이름은 '학번'이야"
INT = "여기엔 숫자만 쓸 거야" (Integer = 정수)
PRIMARY KEY = "이건 아주 특별한 칸이야!"
왜 특별해요?
우리 반에 김민수가 2명 있어도 학번은 다르잖아요?
101번은 이 세상에 단 한 명뿐!
이게 바로 나무의 줄기가 되는 이유예요!
3.
이름 VARCHAR(20)
이름 = "두 번째 칸은 '이름'이야"
VARCHAR(20) = "글자를 쓸 건데, 최대 20글자까지만!"
Variable Character = 변하는 글자 (김민수는 3글자, 남궁민수는 4글자)
4.
학년 INT, 반 INT
"학년이랑 반도 숫자로 쓸 거야"
3학년 2반 → 학년: 3, 반: 2

첫 번째 가지 테이블 (급식) 만들기

CREATE TABLE 급식 ( 번호 INT PRIMARY KEY, 학번 INT, 날짜 DATE, 먹었나요 VARCHAR(5), FOREIGN KEY (학번) REFERENCES 학생(학번) );
SQL
복사

이 코드를 친구에게 설명한다면?

"급식 먹은 기록 공책을 만들고, 학생 공책과 연결하는 거야!"
1.
번호 INT PRIMARY KEY
"급식 기록마다 번호를 매길 거야"
1번 기록, 2번 기록, 3번 기록...
2.
학번 INT
"누가 먹었는지 학번을 적을 거야"
근데 이름을 안 쓰고 학번만 쓰는 이유는?
이름은 학생 공책에 이미 있으니까!
3.
날짜 DATE
"언제 먹었는지 날짜를 적어"
DATE = 2024-03-04 같은 날짜 형식
4.
먹었나요 VARCHAR(5)
"먹었는지 안 먹었는지 적어"
'예' 또는 '아니오'
5.
FOREIGN KEY (학번) REFERENCES 학생(학번)
이게 바로 가지와 줄기를 연결하는 마법이에요!
FOREIGN KEY (학번) = "우리 급식 표의 '학번'은..."
REFERENCES 학생(학번) = "학생 표의 '학번'을 가리켜!"
쉽게 말하면:
"101번이 급식 먹었어" → "101번이 누구지?" → "학생 표 보니까 김민수네!"
급식 표는 학생 표 없이는 의미가 없어요 (가지는 줄기가 있어야 존재!)

두 번째 가지 테이블 (도서대출) 만들기

CREATE TABLE 도서대출 ( 대출번호 INT PRIMARY KEY, 학번 INT, 책이름 VARCHAR(50), 빌린날짜 DATE, FOREIGN KEY (학번) REFERENCES 학생(학번) );
SQL
복사

이 코드를 친구에게 설명한다면?

"도서관 대출 기록 공책을 만들고, 이것도 학생 공책과 연결하는 거야!"
1.
대출번호 INT PRIMARY KEY
"대출할 때마다 번호표를 주는 거야"
도서관에서 책 빌릴 때 받는 영수증 번호 같은 거!
2.
학번 INT
"누가 빌렸는지 학번만 적어"
또 이름 안 쓰고 학번만! (학생 표에 이름 있으니까)
3.
책이름 VARCHAR(50)
"무슨 책인지 이름을 적어"
책 이름은 좀 길 수도 있으니까 50글자까지!
4.
빌린날짜 DATE
"언제 빌렸는지 날짜 기록"
5.
FOREIGN KEY (학번) REFERENCES 학생(학번)
또 나온 연결 마법!
"이 대출 기록의 학번은 학생 표의 학번을 보고 있어!"

왜 이렇게 나누어서 연결하나요?

나쁜 예시 - 모든 걸 한 표에 넣으면?

| 이름 | 학년 | 반 | 급식날짜 | 먹었나요 | 책이름 | 빌린날짜 | |------|------|-----|---------|----------|--------|----------| | 김민수 | 3 | 2 | 3/4 | 예 | 해리포터 | 3/1 | | 김민수 | 3 | 2 | 3/5 | 예 | 신데렐라 | 3/4 |
Plain Text
복사
문제점:
김민수 정보를 계속 반복해서 써야 해요
김민수가 4학년이 되면? 모든 줄을 다 고쳐야 해요!

좋은 예시 - 줄기와 가지로 나누면?

줄기 (학생 표):
| 학번 | 이름 | 학년 | 반 | |------|------|------|-----| | 101 | 김민수 | 3 | 2 |
Plain Text
복사
가지 (급식 표):
| 번호 | 학번 | 날짜 | 먹었나요 | |------|------|------|----------| | 1 | 101 | 3/4 | 예 | | 2 | 101 | 3/5 | 예 |
Plain Text
복사
가지 (도서대출 표):
| 대출번호 | 학번 | 책이름 | 빌린날짜 | |----------|------|--------|----------| | 1 | 101 | 해리포터 | 3/1 | | 2 | 101 | 신데렐라 | 3/4 |
Plain Text
복사
장점:
이름은 한 번만 쓰면 돼요!
4학년 되면? 학생 표에서 한 곳만 고치면 끝!
학번(101)이 줄기와 가지를 연결해줘요!

정리: 줄기와 가지의 비밀

줄기 테이블 (PRIMARY KEY)

학생 테이블이 줄기예요
학번이 각 학생의 특별한 이름표 (PRIMARY KEY)
모든 가지들이 이 줄기에서 시작해요

가지 테이블 (FOREIGN KEY)

급식, 도서대출 테이블이 가지예요
각자 고유 번호(PRIMARY KEY)도 있지만...
*학번(FOREIGN KEY)**으로 줄기와 연결돼요!

그림으로 보면:

[학생] ← 줄기 (학번이 PRIMARY KEY) | | 학번으로 연결 (FOREIGN KEY) | -------+------- | | [급식] [도서대출] ← 가지들
Plain Text
복사
마법의 주문 FOREIGN KEY:
"내 표의 이 학번은, 학생 표의 학번을 보고 있어!"
이 주문 덕분에 "101번이 누구지?" 물으면 바로 답할 수 있어요!
이제 여러분도 줄기와 가지를 만들어서 연결할 수 있어요!