"이 사람 지금까지 몇 번 왔어요?" 이 질문 하나에 표가 무너지는 순간. 뽀야가 실제 신청 명단으로 보여줄게.
뽀야: 관계형 DB를 설명으로 배우면 안 남아. 그러니까 먼저 불편한 표를 하나 보여줄게. 그 표를 보다가 "어? 이거 이상한데" 하는 순간이 오면, 그때 이름을 붙여줄 거야. 그림부터 봐. 글은 그림 설명일 뿐이야.
프로그램을 열고 신청을 받는다. 표 두 장이면 충분해 보인다.
신청 표에 이름·전화번호·이메일을 같이 받아 적는다. 대부분의 운영자가 지금 이 모양이고, 한동안은 아무 문제가 없다.

지금까진 문제가 없다. 문제는 표가 아니라, 곧 던질 질문 하나에서 시작된다.
"김서연 님, 지금까지 몇 번 오셨어요?"
운영하다 보면 반드시 나오는 질문이다. 재참여자에게 인사를 하려고, 할인을 주려고, 혹은 그냥 반가워서.
그런데 이 표로는 세어야 답할 수 있다. 그리고 세다 보면 이상한 게 나온다.
뽀야: 지금 위 그림에서 직접 세어봐. 김서연 님 몇 줄이야? 세다가 손이 멈추는 데가 있을 거야. 거기가 오늘의 핵심이야.
표를 세로로 훑으면 세 가지가 걸린다.
| 누구 | 표에 적힌 것 | 무슨 일이 나나 |
|---|---|---|
| 김서연 | 이름·전화·이메일이 3줄에 그대로 복사 | 고칠 일이 생기면 3군데를 고쳐야 한다 |
| 박도현 | 010-7715-3390 / 010-7715-3930 | 전화번호로 세면 두 사람이 된다 |
| 이하늘 | 옛 이메일이 옛 줄에 그대로 | 어느 게 최신인지 표만 봐선 모른다 |
중복은 참을 수 있다. 진짜 문제는 같은 사람이 둘로 갈라지는 것이다. 이건 눈으로 안 보인다.
이름으로 세면 동명이인이 섞이고, 전화로 세면 오타가 새고, 이메일로 세면 바뀐 주소가 샌다. 기준이 될 한 줄이 없다.
표를 하나 더 만들고, 그 사이에 화살표를 긋는다.
화살표를 그렸다는 건 관계를 가졌다는 뜻이다. 이렇게 관계를 갖는 걸 관계형 데이터베이스라고 부른다. 노션을 써봤다면 이미 만난 적이 있다. 노션이냐 에어테이블이냐의 문제가 아니라 개념이다.
한 줄 = 열리는
프로그램 1개
한 줄 = 누가 어느
프로그램에 신청한 1건
한 줄 = 사람 1명
몇 번을 신청하든 한 줄
관계가 걸리는 순간, 신청 한 줄은 그 프로그램의 모든 정보를 주렁주렁 달고 다닌다. 폴더처럼 열어볼 수 있게 된다.

링크를 한 번만 걸면 반대쪽 표에도 짝 필드가 저절로 생긴다. 양쪽에서 각각 만들지 않는다.
신청 안에 눌러앉아 있던 사람을 독립시킨다.
중요한 건 옮기는 방식이다. 그냥 옮기면 중복이 그대로 따라온다. "같은 사람은 새로 만들지 말고 한 줄로 합쳐"가 붙어야 한다.

숫자가 줄어드는 것이 첫 성과다. 전화번호가 둘이던 박도현도 한 사람으로 합쳐졌다.
이제 처음의 질문으로 돌아간다.

"몇 번 오셨어요?"에 세지 않고 답한다. 표가 보여준다. 이게 표를 나눈 이유 전부다.
여기서 끝이 아니다. 사람이 한 줄로 서 있으면 그 뒤에 다 붙는다 — 재참여 할인, 지난 신청 이력, 문자 한 번에 보내기. 사람이 흩어져 있으면 그 어느 것도 못 붙인다.
눌러서 답을 펼쳐봐. 틀려도 괜찮아 — 틀리는 자리가 배우는 자리야.
사람 표는 그대로 한 줄, 신청 표만 세 줄 늘어난다. 사람이 늘어난다면 표를 잘못 나눈 것이다.
오타 한 글자에 다른 사람으로 갈라진다. 박도현이 그 경우였다. 어떤 항목 하나도 완벽한 기준이 못 되기 때문에, 애초에 사람을 한 줄로 세워두는 것이 답이다.
link 필드를 건 것이다. 한 번 걸면 반대쪽 표에도 짝이 저절로 생긴다.
뽀야 마무리: 오늘 배운 건 사실 한 문장이야. "이 사람 몇 번 왔어요?"에 표가 답할 수 있게 만든다. 그게 관계형 DB를 쓰는 이유 전부고, 나머지는 다 그 뒤에 붙는 거야. 다음 편에서는 이 표들을 클릭 말고 말로 만들어볼게 🙀