CODING/강의노트-JSCODE 박재성

[DB 설계] 섹션 2 - DB 설계 전 필수로 알아야 하는 개념

codingTrip 2025. 5. 9. 16:43

https://inf.run/pxDWY
[본 게시물은 파트너스 활동의 일환으로 소정의 수수료를 받을 수 있습니다.]



데이터베이스 모델링(Datbase Modeling)이란?

 

✅ 데이터베이스 모델링(Database Modeling)이란?

데이터를 어떻게 분류해서 저장할 지를 설계하는 행위

 

데이터는 잘 분류해서 저장해야 한다. -> 나중에 필요한 데이터를 쉽게 조회, 수정, 삭제할 수 있다.

동의어 : 데이터 모델링, 데이터베이스 설계(DB 설계)

 🧑🏻 “현업에서 자주 쓰이는 키워드는 알아둬야 검색을 할 때도 편하고 의사소통 할 때도 편하다.“

 

 

✅ 데이터베이스 모델링 방법을 왜 배워야 하나요?

ex) 옷장 정리 방식

사람들마다 방식이 다 다름(외출복, 집에서 입는 옷 / 상의, 하의 / 색깔별 분류 등)

만약 옷장에 옷들을 비효율적으로 정리하게 된다면, 필요한 옷을 찾을 때 헤맬 수 있음

 

데이터도 마찬가지로 저장하는 방법은 사람들마다 다 다를 수 있음

하지만 규칙 없이 데이저 저장 시, 나중에 필요한 데이터 찾기 어려울 수 있음

데이터베이스 모델링 방법비효율 -> 효율적으로 데이터 저장 방법

 

장점 : 특정 규칙을 가지고 일관되게 데이터 저장 가능 -> 데이터 쉽게 찾기 가능

 

백엔드 개발자데이터베이스 모델링의 방법 배우는 것이 필수!!!

🧑🏻 “이런거 다 떠나서 백엔드 개발자로 취업할 때 필요한 필수 역량 중 하나이기 때문에 배워야 한다.”

관계형 데이터베이스(RDBMS)의 기본 구성

테이블(Table), 컬럼(Column), 로우(Row)

관계형 데이터베이스(RDBMS) 종류 : MySQL, MariaDB, PostgreSQL

관계형 데이터베이스의 구성 :  여러 테이블

테이블 = 

테이블의 구성 :  열(컬럼, Column), 행(로우, Row)

엑셀 표에 데이터를 정리하듯이, 관계형 데이터베이스에서도 테이블에 데이터를 저장함

출처 : 혼자 공부하는 SQL (우재남, 한빛미디어)
출처 : 혼자 공부하는 SQL (우재남, 한빛미디어)


PK(기본키), FK(외래키)

✅ PK(Primary Key, 기본키)란?

실생활 예시 : 주민등록번호(쌍둥이, 동명이인 등 사람 구별 방법)

 

데이터베이스 :  PK(Primary Key) 사용
PK(Primary Key, 기본키) : 특정 데이터를 식별하기 위한 값

PK는 중복 불가, 공백 불가

 

✅ 현업에서 PK(Primary Key)는 어떻게 설정할까?

주민등록번호, 이메일은 바뀔 가능성이 존재하므로 PK로 설정하는 것은 잘못 됨

PK(Primary Key)가 바뀌게 되면 -> 특정 데이터를 식별하던 값이 바뀜

-> 데이터를 관리하거나 사용하는 입장에서 혼란 올 수 있고,  RDBMS의 성능에도 안 좋은 영향을 미침

 

따라서 현업에서는 PK(Primary Key)를 주로 Auto Increment(숫자가 1씩 증가하는 방식)나 UUID(랜덤값)로 설정을 많이 한다.

 

✅ FK(Foreign Key, 외래키)란?

가정 : 사용자, 게시글 데이터를 저장

어떤 사용자가 게시글을 저장했는지 알기 위해, 사용자 데이터의 PK(기본키)를 같이 저장

게시글 테이블에서 사용자의 PK를 저장하기 위한 값을 보고 FK(Foreign Key, 외래키)라고 얘기한다.

FK(Foreign Key, 외래키)를 한 줄로 요약하자면, 다른 테이블의 데이터와 관계를 연결하기 위한 키이다.

 

[FK 사용 전]

users (사용자)

id 이름
1 박재성
2 김유찬

 

posts (게시글)

id 제목
1 개발자 취업 방법 알려드려요!
2 면접 후기 공유합니다
3 TIL - 객체지향

 

[FK 사용 후]

users (사용자)

id (PK) 이름
1 박재성
2 김유찬

 

posts (게시글)

 

id(PK) 제목 user_id(FK)
1 개발자 취업 방법 알려드려요! 2
2 면접 후기 공유합니다 1
3 TIL - 객체지향 20 (Error)

 

FK(외래키)를 설정 시 부가적인 기능 : 부적절한 FK를 삽입 시, DB에서는 에러를 발생시킴 -> 부적절한 FK 삽입 방지

‘참조 무결성’ : 결점(모순되는 점)이 없도록 유지하는 특성

🧑🏻 데이터베이스에서 ‘무결성’이라는 단어가 참 많이 사용된다. 참조 무결성, 도메인 무결성, 엔티티 무결성 등 다양한 무결성이 있다. 하지만 각 무결성이 뭔지 외울 필요 없다. DB 설계할 때 하나도 안 중요한 개념들이다. 다만, 다른 책이나 강의를 볼 때 쉽게 이해할 수 있게 ‘무결성’이라는 단어가 어떤 뜻인지 나만의 말로 정리해두자.

 

데이터베이스 네이밍 규칙

🧑🏻 현업에서 많이 사용하는 데이터베이스 네이밍 규칙을 배워보자. 아래 규칙을 엄격하게 지켜야 하는 건 아니지만, 현업 개발자들이 자주 적용시키는 일반적인 규칙을 배워서 먼저 적용시켜볼 것이다.

 

✅ 테이블명, 컬럼명을 소문자로 작성한다.

테이블명, 컬럼명을 지을 때 소문자와 대문자를 섞어쓰지 않고, 소문자로만 작성한다.
이유 : MySQL에서는 운영체제에 따라 대소문자 구분 해석 여부가 달라진다.
운영 체제에 따라 잘못 작동되는 걸 방지하려면 대소문자를 섞어쓰지 않아야 한다.

 

✅ snake_case를 사용한다.

테이블명, 컬럼명을 구성할 때 띄워쓰기가 필요한 경우 snake_case를 활용해 구성한다.

firstName **// Bad!**
first_name **// Good!**

 

✅ 축약어를 사용하지 않는다.

가독성, 직관적인 표현 신경쓰기

fst_nm **// Bad!**
first_name **// Good!**

 

✅ SQL문을 작성할 때 예약어만 대문자로 표현해라.

SQL문의 가독성을 위해 예약어만 대문자로 작성

SELECT name, age 
FROM users
WHERE age = 20
AND name = '재성';

 

✅ 테이블명을 지을 때는 복수형을 사용한다. (선택)

여러개의 데이터를 가지고 있음을 나타내기 위함

이 규칙은 회바회

중요한 건 일관성

user
**users**

post 
**posts**