[DB] 02. 관계형 데이터베이스 구조와 테이블

[DB] 02. 관계형 데이터베이스 구조와 테이블

1. 관계형 데이터베이스(RDB)란?

관계형 데이터베이스는 데이터를 테이블(표) 형태로 저장한다. 엑셀처럼 행과 열로 구성된 구조다.

하지만 핵심은 “표 모양”이 아니다. 관계형이라는 말은 “테이블이 여러 개이고, 서로 연결(관계)된다”는 뜻에 가깝다.

2. 테이블의 구성: 행(Row)과 열(Column)

  • 행(Row): 하나의 데이터(한 명의 회원, 한 건의 주문)
  • 열(Column): 데이터의 속성(이름, 이메일, 생성일 등)

행은 데이터가 쌓이는 방향이다. 열은 테이블의 구조를 결정한다.

그래서 테이블을 설계할 때 가장 먼저 해야 하는 일은 “컬럼을 제대로 정의하는 것”이다.

3. 컬럼 설계에서 같이 결정해야 하는 것

3-1) 데이터 타입(Data Type)

컬럼에는 데이터 타입을 지정한다. 숫자형, 문자열, 날짜/시간 같은 분류다.

타입은 저장 공간 문제가 아니라 “허용 가능한 값의 범위를 제한하는 규칙”에 가깝다. 예를 들어 나이(age) 컬럼이 문자열이면, 의미 없는 값이 들어와도 막기 어렵다.

3-2) NULL 허용 여부

NULL은 0이나 빈 문자열이 아니다. “값이 아예 없음”을 의미한다.

  • 0: 값이 존재함(숫자 0)
  • "" : 값이 존재함(빈 문자열)
  • NULL: 값 자체가 없음

NULL을 허용하면 입력은 쉬워지지만, 데이터가 쌓일수록 조회 조건이 복잡해질 수 있다. 그래서 “없어도 되는 값인지”를 먼저 판단하고 NULL 허용 여부를 정하는 편이 안전하다.

4. 예시로 보는 테이블 구조

회원(users)과 주문(orders)을 예로 들면 보통 역할을 분리한다.

users 테이블(회원)

컬럼명 설명
id 회원 고유 ID
name 이름
email 이메일
created_at 가입 시각

orders 테이블(주문)

컬럼명 설명
id 주문 고유 ID
user_id 주문한 회원 ID(연결 기준)
total_price 총 결제 금액
created_at 주문 시각

orders의 user_id는 “이 주문이 누구의 주문인지”를 나타내기 위한 값이다. 중요한 점은 연결이 컬럼 이름 때문이 아니라, orders.user_id에 들어가는 값이 users.id에 존재해야 한다는 규칙을 걸면서 성립한다는 것이다.

5. 테이블을 나누는 이유

한 테이블에 회원 정보와 주문 정보를 모두 넣으면 중복이 생긴다. 주문이 늘어날수록 같은 이메일/이름이 계속 반복되고, 수정 시 여러 행을 고쳐야 한다.

역할별로 테이블을 분리하면, 회원 정보는 users에 한 번만 저장되고, 주문은 필요한 값만 갖고 참조 형태로 연결된다.

6. 정리

  • 관계형 DB는 여러 테이블이 관계를 맺는 구조다
  • 행은 데이터, 열은 구조(속성)다
  • 타입과 NULL 정책이 데이터 품질에 직접 영향을 준다
  • 역할별로 테이블을 분리하면 중복과 수정 문제를 줄일 수 있다