상세 컨텐츠

본문 제목

DB 개념

Database

by 개복신 개발자 2025. 3. 17. 09:56

본문

반응형

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

옷을 옷장에 정리한다고 하면, 상의는 위칸에 하의는 아래칸에 넣는 등 자신만의 규칙이 있을 것이다. 각자만의 규칙이 있을 것이고 그 규칙이 있어야 나중에 옷을 찾을 때도 새로운 옷을 옷장에 넣을 때도 관리하기 용이하다. 데이터도 마찬가지이다. 일정한 규칙을 지키면서 데이터를 저장하고 관리해야 유지 보수에 용이하다.

데이터베이스 모델링은 그 규칙대로 데이터들을 어떻게 분류해서 저장할지 설계하는 행위이다.

 

관계형 데이터 베이스(RDBMS)?

관계형 데이터 베이스는 테이블이다. Table!

Table = 관계형 데이터베이스(RDBMS)에서 데이터를 저장하는 기본 단위로,

행(Row)와 열(Column) 구성된 2차원 구조의 데이터 저장소이다.

열(column)과 행(row)으로 이루어졌다.

colum은 속성(데이터 필드), row는 데이터 한개의 묶음

예를 들어 column에 아이디, 이름, 연락처등의 속성이 있고 row에는 (flower, 화사, 010-1111-1111) , (finetree, 솔라, 010-2222-2222), (moon, 문별, 010-3333-3333), (whee, 휘인, 010-4444-4444)등이 있다.

 

Primary key(pk, 기본키)?

우리가 살아가는 세상에는 수많은 사람들이 살아간다. 육안으로는 구별하기 힘든 쌍둥이도 존재하고, 이름이 동일한 사람들도 존재한다. 하지만 우리는 사람을 일일이 구별할 수 있어야 한다. 그래서 주민등록번호를 사람마다 부여함으로써 사람을 구별한다.

데이터베이스의 테이블에도 수많은 데이터가 저장되어 있다. 사람들을 구별하기 위해 주민등록번호가 필요하듯이, 수많은 데이터들을 구별하기 위해서 **PK(Primary Key)**라는 걸 사용한다. 즉, **PK(Primary Key, 기본키)**는 특정 데이터를 식별하기 위한 값이다. PK는 중복되어서는 안 되며, 비어있어서도 안 된다. (개체 무결성 entity integrity)

 

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

만약 이메일이나 주민등록번호 등을 pk로 설정하는건 추천하지 않는다. 다음의 이유로 추천하지 않는다.

1. 이메일이나 주민등록번호는 변할 수 있는 속성이다. 그리고 드물지만 이메일을 아예 가지고 있지 않는 사람도 존재할 수 있다.

2. Rdbms에 성능에 안좋은 영향을 끼칠 수 있다.

     A. 길이가 길어서 인덱스 성능이 저하된다.

      • 주민번호(13자리)나 이메일(가변 길이)은 PK로 사용하기엔 너무 김.

      • RDBMS는 PK에 자동으로 클러스터형 인덱스(Clustered Index) 를 생성하는데,

      • 길이가 길면 인덱스 크기도 커지고

      • B-Tree 탐색 시 성능이 저하됨.

 

     B. 데이터 입력 저장 속도가 느려진다.

       RDBMS에서 기본 키는 자동으로 정렬됨(Clustered Index 특성).

      • 주민등록번호나 이메일 같은 데이터는 랜덤하게 들어오기 때문에,

      • 중간에 새로운 값이 들어오면 기존 데이터 사이에 삽입 → 페이지 분할 발생 → 성능 저하.

      • 반면, AUTO_INCREMENT 같은 순차적인 값은 페이지 분할이 거의 없음 → 성능 좋음.

 

Foreign key(fk, 외래키)?

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

FK(외래키)를 설정했을 때 부가적인 기능이 하나 있다. 적절하지 않은 FK를 넣었을 때 DB에서는 에러를 발생시킨다. 즉, 적절하지 않은 FK를 넣는 걸 방지해준다. 이걸 보고 어려운 말로 ‘참조 무결성’이라고 한다. 말 그대로 결점(모순되는 점)이 없도록 유지하는 특성을 의미한다.

참조 무결성 -> 외래키 값은 부모 테이블의 기본키 값과 같거나, 널 값을 가진다. 

쉽게 말해서 FK로 참조를 해야 하는데 여기 결점이 없어야 한다는 것!

 

[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) - (참조 무결성)

 

반응형

'Database' 카테고리의 다른 글

DB 설계의 규칙 첫번째, 한 칸 한 정보  (0) 2025.03.17
DB 설계의 핵심  (0) 2025.03.17
데이터베이스 네이밍 규칙  (0) 2025.03.17

관련글 더보기

댓글 영역