데이터는 테이블 안에
어떤 모습으로 들어 있을까
실습 환경 준비가 모두 끝났습니다. 이제 데이터를 꺼낼 차례 — 인 것 같지만, 그 전에 꼭 짚고 갈 게 하나 있어요. 바로 데이터가 테이블 안에 어떤 모습으로 들어 있는가. 이걸 모르면 AI가 SQL을 만들어줘도 결과가 맞는지 확인하기 어렵습니다. 오늘은 딱 네 단어만 기억하면 됩니다.
이번 섹션의 여정
지금 여기
컬럼의 약속 · 데이터 타입
기본키 · 외래키
테이블 만들기 · 종합 실습
오늘 기억할 건 네 단어뿐입니다
여기에 하나만 더 얹으면 오늘 분량은 끝입니다 — 스키마와 데이터의 차이. 어려운 이야기가 아니니 편하게 따라오세요.
익숙한 표에서 출발합니다
학교에서 반 친구들 명단을 만든다고 생각해 볼게요.
종이에 이름과 나이를 아무 곳에나 뒤섞어 적으면, 나중에 누가 몇 살인지 찾기 어렵겠죠. 그래서 맨 위에는 번호, 이름, 나이처럼 기록할 항목을 정해놓고, 친구 한 명의 정보를 가로 한 줄에 나란히 적습니다. 새로운 친구가 오면 그 아래에 한 줄을 더 적고요.
데이터베이스의 테이블도 기본 원리는 똑같습니다. 겉모양은 우리가 자주 보던 표와 비슷하지만 — 데이터를 훨씬 일정한 규칙으로 정리해 둔 표라고 생각하면 됩니다.
테이블 — 같은 주인공을 모아놓은 표 전체
우리 실습 데이터베이스의 members 테이블을 보겠습니다. members는 영어로 회원들이라는 뜻이에요.
| member_id | member_name | gender | age | joined_at |
|---|---|---|---|---|
| 1 | 김철수 | M | 35 | 2025-01-15 |
| 2 | 이영희 | F | 28 | 2025-02-03 |
| 3 | 박민수 | M | 42 | 2025-02-10 |
회원 번호, 이름, 성별, 나이, 가입일이 적혀 있고 그 아래에는 김철수, 이영희 같은 실제 회원 정보가 들어 있습니다. 이렇게 같은 종류의 대상을 한곳에 모아놓은 표 전체를 테이블이라고 불러요.
members 테이블의 주인공은 — 회원입니다.
행(row) — 주인공 하나에 대한 기록 한 세트
이번에는 김철수 회원이 적힌 가로 한 줄만 보겠습니다.
회원 번호 1, 이름 김철수, 성별 M, 나이 35, 가입일 2025-01-15. 이 정보들이 가로로 한 세트를 이루고 있죠. 이 가로 한 줄을 행, 영어로는 row라고 부릅니다.
여기서 아주 중요한 포인트가 하나 있습니다.
이 행은 김철수라는 사람의 세상 모든 정보를 담은 게 아니에요. 주소나 전화번호는 없잖아요. 이 테이블이 기록하기로 한 김철수 회원의 정보 한 세트만 담고 있습니다.
그래서 이렇게 기억하면 쉽습니다 — 행은 주인공 하나에 대한 기록 한 세트다.
열(column) — 모든 주인공에게 던지는 같은 질문
이번에는 age, 나이 부분을 위에서 아래로 보겠습니다.
김철수는 35, 이영희는 28, 박민수는 42처럼 모든 회원의 나이가 세로로 모여 있습니다. 이 세로 한 줄을 열, 영어로는 column이라고 부릅니다.
열은 모든 주인공에게 던지는 같은 질문이라고 생각하면 쉬워요.
| 열 이름 | 이 열이 던지는 질문 |
|---|---|
| member_name | 이름이 무엇인가요? |
| age | 나이는 몇 살인가요? |
| joined_at | 언제 가입했나요? |
그래서 열은 기록할 항목, 또는 같은 질문입니다.
값(value) — 행과 열이 만나는 한 칸
이제 김철수의 행과 나이 열이 만나는 한 칸을 볼게요. 그 안에는 35가 들어 있습니다.
이렇게 행과 열이 만나는 한 칸에 실제로 들어 있는 내용을 값, 영어로는 value라고 합니다. 김철수의 이름 칸에 들어 있는 김철수도 값이고, 나이 칸의 35도 값이에요.
이 테이블에서 한 행의 주인공은 무엇이지?
여기까지 이해했다면, 앞으로 테이블을 볼 때 가장 먼저 해야 할 질문이 있습니다. 오늘 강의에서 딱 하나만 가져간다면 이 문장이에요.
우리 실습 DB의 테이블들에 이 질문을 던져볼게요.
| 테이블 | 한 행이 나타내는 것 |
|---|---|
| members | 회원 한 명 |
| products | 상품 한 개 |
| orders | 주문 한 건 |
특히 orders를 조심하세요. 주문 테이블의 한 행 안에는 회원 번호가 들어 있습니다. 그렇다고 그 행의 주인공이 회원이 되는 건 아니에요.
orders 한 행의 주인공은 주문 한 건입니다. 회원 번호는 그 주문에 대해
기록한 여러 정보 중 하나일 뿐이에요. 행 안에 무엇이 들어 있느냐가 아니라 —
이 한 줄이 무엇 하나를 나타내는가로 판단하세요.
그래서 처음 보는 테이블을 열었다면 컬럼 이름부터 외우려고 하지 말고, 먼저 한 행이 무엇 하나를 나타내는지부터 찾으세요. 이 질문이 테이블을 읽는 출발점입니다.
스키마와 데이터 — 빈 설계도와 채워진 내용
이번에는 표 안에 있던 김철수, 이영희, 35, 28 같은 값을 잠깐 전부 지워보겠습니다.
| member_id | member_name | gender | age | joined_at |
|---|---|---|---|---|
값이 하나도 없어도 위에는 회원 번호, 이름, 성별, 나이, 가입일이라는 항목이 그대로 남아 있죠. 아직 회원은 한 명도 없지만, 앞으로 어떤 정보를 어떤 모습으로 기록할지는 미리 정해져 있는 겁니다.
이런 테이블의 구조와 규칙을 정해놓은 설계도를 스키마, 영어로는 schema라고 합니다.
학교에서 아직 아무도 작성하지 않은 빈 신청서를 떠올리면 쉬워요. 신청서에 이름, 나이, 연락처를 적으라는 칸이 미리 만들어져 있죠. 그 빈 양식이 구조, 즉 스키마입니다. 그리고 실제로 김철수, 35 같은 답을 채워 넣으면 그것이 데이터가 됩니다.
| 이런 일이 생기면 | 바뀐 것은 |
|---|---|
| 새 회원 한 명이 가입해 가로 한 줄이 늘었다 | 데이터 |
| 별명도 기록하려고 nickname 열을 새로 만들었다 | 스키마 |
정확히는 스키마 안에 열의 이름뿐 아니라 여러 가지 규칙도 함께 들어갑니다. 그 규칙들은 3-2 강의부터 하나씩 배우니, 지금은 이것만 기억하세요 — 스키마는 빈 설계도, 데이터는 그 설계도에 채워진 실제 내용.
한눈에 정리
| 용어 | 한 줄 정의 | members 에서는 |
|---|---|---|
| 테이블 table | 같은 종류의 주인공을 모아놓은 표 전체 | 회원들을 모아놓은 표 |
| 행 row | 주인공 하나에 대한 기록 한 세트 | 김철수 한 줄 |
| 열 column | 모든 주인공에게 기록하는 같은 질문 | age 세로 한 줄 |
| 값 value | 행과 열이 만나는 칸의 실제 답 | 김철수의 나이 35 |
| 스키마 schema | 데이터를 담기 전에 정해놓은 구조·규칙 | 값이 하나도 없어도 남는 항목들 |
앞으로 어떤 테이블을 보든 가장 먼저 이것부터 물어보세요 — 이 테이블에서 한 행의 주인공은 무엇이지? 이 질문만 놓치지 않아도 테이블이 훨씬 쉽게 읽힙니다.
그런데 열이 같은 질문이라면, 아무 값이나 넣어도 될까요? 이름을 적는 열에 나이를 넣고, 어떤 회원은 이름을 비워둬도 괜찮을까요? 그 이야기가 다음 강의입니다. 그 전에 오늘 배운 네 단어를 연습 문제로 손에 익히고 가세요.