Skip to content

데이터베이스와 테이블 기초 ​

테이블을 왜 나누는지, 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