DB - 관계형 데이터베이스 개념 정리

Obebe·2026년 4월 7일

DB

목록 보기
2/2

Prisma에 대해 지난 포스팅에서 살펴보며 느낀 점은 DB 개념을 알아야 이것이 효과가 있다는 것이었다.

그래서! 다시 정리해서 기록해두고자 한다.


DB

관계형 데이터베이스

데이터를 테이블(표) 형태로 저장하는 구조

like Excel

  • 테이블 -> 시트
  • 행(Row) -> 데이터 한 줄
  • 열(Column) -> 데이터 항목

이것들이 서로 연관을 지어있기에 이를 관계형 데이터베이스라 한다.


Primary Key (PK)

각 데이터를 구분하는 고유한 값

📍 중복 불가능
📍 NULL 불가능
❗ 테이블당 하나 존재

으로 이것은 데이터를 식별하는 기준이 된다.


Foreign Key (FK)

Foreign key는 다른 테이블의 PK를 참조하는 값이다.

예를 들어 하나의 게시글을 두고, 이 게시글이 어떤 사용자의 게시글인지는 users.id를 보면 알 수 있다.

테이블 간 연결을 해주며 데이터의 일관성을 유지하는 역할을 한다.

참조 무결성

이런 Foreign Key에서 중요한 개념으로 참조 무결성이 있다.

FK는 반드시 존재하는 PK만 참조할 수 있다

이것은 존재하는 값들만 사용이 가능하다는 의미이고, 잘못된 데이터 연결을 막아준다


관계 (Relationship)

관계는 테이블과 테이블 사이의 연결 구조를 의미한다.

🔗 1 : N (일대다)

가장 많이 사용하는 관계

→ 한 명의 사용자가 여러 개의 게시글을 가질 수 있다

🔗 N : 1 (다대일)

→ 여러 게시글은 하나의 사용자에 속한다

🔗 N : N (다대다)

→ 여러 개가 서로 여러 개와 연결되는 구조

사용자 ↔ 태그
학생 ↔ 수업

이 경우 중간 테이블이 필요하다.


제약 조건 (Constraints)

기본 개념에 대해 알아보았고 이제 제약 조건에 대해 알아보고자 한다

제약조건이라함은

잘못된 데이터가 들어오는 것을 막기 위한 규칙
즉, 데이터의 정확성과 일관성을 유지하기 위한 장치

대표적인 제약 조건들을 정리해서 보겠다.

제약 조건

제약 조건의미특징사용 예시
PRIMARY KEY데이터를 구분하는 고유값중복 ❌, NULL ❌id
FOREIGN KEY다른 테이블과 연결참조 무결성 유지user_id
NOT NULL반드시 값 입력NULL 허용 ❌name
UNIQUE중복 값 금지같은 값 2번 ❌email
DEFAULT기본값 자동 설정값 없으면 자동 입력created_at

예시를 살펴보자.

실습 과제로 나왔던 온라인 강의 플랫폼 테이블 구조 설계다.

요구사항
**요구사항:**

- 수강생은 이름, 이메일, 가입일 정보를 가진다
- 강사는 이름, 이메일, 소개글, 전문 분야 정보를 가진다
- 강의는 제목, 설명, 가격, 카테고리, 생성일 정보를 가지며, 한 명의 강사가 여러 강의를 만들 수 있다
- 수강생이 강의를 결제하면 수강 등록이 되고, 등록일과 결제 금액이 기록된다
- 수강생은 수강 중인 강의에 별점(1~5)과 텍스트 리뷰를 남길 수 있다
- 한 수강생이 같은 강의에 리뷰를 중복으로 남길 수 없다

**설계 조건:**

- PK, FK 명시
- UNIQUE 제약조건이 필요한 곳을 찾아서 적용
- DEFAULT 값이 적절한 곳에 설정

수강생

수강생 ID (PK)이름이메일 (UNIQUE, NOT NULL)가입일 (DEFAULT NOW())
idname (NOT NULL)email (UNIQUE, NOT NULL)created_at

강사

강사 ID (PK)이름이메일 (UNIQUE, NOT NULL)소개글전문 분야
idname (NOT NULL)email (UNIQUE, NOT NULL)biospecialty

강의

강의 ID (PK)제목설명가격 (NOT NULL)카테고리생성일 (DEFAULT NOW())강사 ID (FK, NOT NULL)
idtitle (NOT NULL)descriptionprice (NOT NULL)categorycreated_atinstructor_id

수강 / 결제

결제 ID (PK)수강생 ID (FK, NOT NULL)등록일 (DEFAULT NOW())결제 금액 (NOT NULL)강의 ID (FK, NOT NULL)
idstudent_idenrolled_atpayment_amountlecture_id

리뷰

결제 ID (PK)수강생 ID (FK, NOT NULL)등록일 (DEFAULT NOW())결제 금액 (NOT NULL)강의 ID (FK, NOT NULL)
idstudent_idenrolled_atpayment_amountlecture_id

정답이 맞는지는 모르지만, 이런 식으로 개념과 제약 조건을 사용해보았다.

profile
다른 건 노력의 시간

0개의 댓글