데이터베이스와 테이블 기초
테이블을 왜 나누는지, DB가 엑셀과 무엇이 다른지, 그리고 나뉜 테이블이 부모/자식과 참조로 어떻게 이어지는지를 모았습니다.
테이블을 나눈 이유
같은 성격의 데이터끼리 묶어서, 중복을 줄이고 관계로 연결하기 위해 나눴습니다.
DB와 엑셀의 차이
- 중복 관리 — 엑셀은 한 시트에 사용자 이름을 릴스마다 반복 입력. DB는 users에 한 번만 두고 id로 참조 → 중복 제거, 수정 한 곳.
- 무결성 강제 — DB는 FK로 "없는 사용자의 릴스"를 아예 못 넣게 막음(존재하지 않는 user_id=999 삽입 시 에러). 엑셀은 오타로 아무 값이나 들어감.
- 관계와 조회 — DB는 JOIN으로 여러 테이블을 즉시 결합, GROUP BY로 집계. 대량 데이터도 인덱스로 빠르게
- 동시성/규칙 — 여러 사용자 접근, UNIQUE·NOT NULL 같은 제약을 엔진이 보장
- 테이블을 나누는 이유: 성격이 다른 데이터(사람/영상/좋아요/댓글)를 분리해 중복 없이 저장하고, 관계로 다시 연결하기 위해서입니다(정규화)
부모 테이블과 자식 테이블
FK로 연결된 두 테이블 중, 참조를 당하는 쪽(값을 갖고 있는 원본)이 부모, 참조를 하는 쪽 (그 값을 빌려 쓰는 쪽)이 자식입니다. 예를 들어 reels.user_id는 users.user_id를 참조하므로 users가 부모, reels가 자식입니다.
- 데이터를 넣을 때는 부모 먼저, 자식 나중 (
users->reels->likes/comments) - 데이터를 지울 때는 자식 먼저, 부모 나중 (
01_schema.sql의DROP TABLE이comments->likes->reels->users순서인 이유가 이것입니다)
참조(Reference)란
자식 테이블은 부모 행 전체를 복사해서 저장하지 않고, 부모의 PK 값 하나만 저장해서 "이 값을 가진 행을 가리킨다"는 식으로 연결합니다. 예를 들어 reels.user_id = 4는 traveler_ji라는 이름을 직접 저장하는 게 아니라, users 테이블에서 user_id = 4인 행을 "참조"만 합니다. 그래서 users.full_name을 나중에 바꿔도 reels를 하나하나 고칠 필요가 없습니다.
정리
| 개념 | 핵심 |
|---|---|
| 테이블을 나누는 이유 | 성격이 다른 데이터를 분리해 중복 없이 저장하고 관계로 다시 연결 (정규화) |
| DB vs 엑셀 | 중복 관리, 무결성 강제(FK), JOIN/GROUP BY/인덱스, 동시성과 제약(UNIQUE·NOT NULL) |
| 부모 / 자식 | 참조를 당하는 쪽이 부모, 참조하는 쪽이 자식. 넣을 때 부모 먼저, 지울 때 자식 먼저 |
| 참조 | 부모 행을 복사하지 않고 PK 값 하나만 저장해 가리킴 → 부모 값이 바뀌어도 자식은 수정 불필요 |
출처: Codyssey-B1/B6-1
