10강 / 20강

관계형 데이터베이스 — 표와 표를 잇는 열쇠

중복을 없애는 가장 우아한 방법

관계형 데이터베이스 — 표와 표를 잇는 열쇠
같은 값을 가진 열이 두 표를 잇는 열쇠가 됩니다.

학생들의 과목별 성적을 저장하려고 합니다. 표 하나에 다 넣으면 안 될까요? 해 봅시다.

😖 표 하나에 전부 욱여넣기
학번이름전화번호과목점수
1001김민준010-1111-2222수학95
1001김민준010-1111-2222과학88
1001김민준010-1111-2222영어91
1002이서연010-3333-4444수학78

보이시나요? "김민준"과 그의 전화번호가 세 번씩 반복됩니다. 문제는 단순한 낭비가 아니에요.

😱 수정 이상

민준이가 전화번호를 바꾸면 세 줄을 모두 고쳐야 합니다. 하나라도 놓치면 데이터가 서로 모순됩니다.

😱 삭제 이상

민준이의 성적을 모두 지우면 그의 전화번호까지 세상에서 사라집니다.

😱 삽입 이상

아직 시험을 안 본 신입생은 표에 넣을 방법이 없습니다. 과목과 점수 칸이 비니까요.

학생 표 — 사람 정보는 여기 한 번만
학번 🔑이름전화번호
1001김민준010-1111-2222
1002이서연010-3333-4444
성적 표 — 점수만
학번과목점수
1001수학95
1001과학88
1001영어91
1002수학78
기본키 · PRIMARY KEY 그 표에서 한 줄을 유일하게 가리키는 칸. 학생 표의 학번. 중복 불가, 빈칸 불가.
외래키 · FOREIGN KEY 다른 표의 기본키를 가리키는 칸. 성적 표의 학번. "이 점수는 저 학생의 것"이라는 화살표입니다.

흩어진 표를 다시 합치기 — JOIN

표를 나눴으니 "민준이가 수학에서 몇 점?"을 알려면 두 표를 다시 이어 봐야 합니다. 그 명령이 JOIN이에요. 관계형 데이터베이스의 심장입니다.

표를 나누고(정규화), 다시 잇고(JOIN).
Python 브라우저에서 실행

🎮 JOIN 실험실 — 조건 하나로 결과가 완전히 달라집니다

두 표를 INNER · LEFT · 조건 없음 세 가지 방법으로 이어 보세요. 성적이 없는 학생은 어떻게 되나요? ON 조건을 빠뜨리면 몇 줄이 나오나요?

JOIN 실험실 — 표 두 개를 열쇠로 잇습니다
불러오는 중…
🤔 확인 문제
성적 표의 학번 칸처럼, 다른 표의 기본키를 가리키는 칸을 무엇이라 부를까요?