3 분 소요

✅ 아래 내용은 업무 시스템의 DB 설계와 관련된 데이터 모델링 수업 내용을 정리한 내용입니다 🤡

데이터베이스 모델링이란?

데이터베이스 설계(DB 설계)라고도 부르며, 데이터를 어떻게 분류해서 저장할지를 설계하는 행위를 데이터 모델링이라고 표현한다.
DB 설계의 핵심은 “중복 없애기” 데이터 모델링을 할 때는 정규화를 통해 데이터 중복을 최소화할 수 있게 설계해야 한다.

🤔 정규화(Normalization) 란?

정규화가 먼디요? 표준화라고도 하며 DB를 설계하면서 중복을 제거하는 과정을 말한다.
중복을 줄이기 위해 테이블을 분리하거나 구조화한 것을 “정규화된 데이터 구조” 또는 “정규화된 데이터 모델”이라고 한다. 정규화를 통해 데이터 중복을 최소화하면, 데이터를 더 효율적이고 일관성 있게 관리할 수 있다. (하나의 값을 수정하더라도, 관련된 모든 데이터에 자동으로 반영)

업무 시스템과 관리 시스템

구분 업무 시스템 (Operational) 관리 시스템 (Management)
설명 실제 사용자가 수행하는 업무를 실시간으로 처리하는 시스템 업무 시스템의 업무들을 모니터링, 분석, 통제하는 시스템
목적 처리, CRUD 중심, 역할별로 관리 다름 분석, 리포트용, 빠른 조회를 위한 구조 (Read 중심)
구조 정규화 (중복 제거) 비정규화 (속도/분석 중심)
사용자 고객, 직원 관리자
예시 게시판, 주문, 결제, 상품 검색 등 관리자 대시보드 등

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

Relational DataBase Management System의 약자

관계형 데이터베이스는 열(Column)과 행(Row)으로 이루어진 (테이블) 형태로 저장한다.
테이블 간의 관계를 설정해서 관리하며, 각 행을 식별하기 위해 식별자가 필요하다.

* 열(column) : 같은 종류의 값을 가진 세로줄, 하나의 속성(attribute) 혹은 필드(field)
* 행(row) : 실제 데이터 한 줄, 레코드(record), 모델링에서는 각 테이블의 행 데이터 혹은 테이블을 entity라고 하는데 그루핑 된 하나의 그룹을 entity라고 사용한다고 이해하면 될 것 같다.

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

- PK(primary key, 기본키)

테이블에서 각 행(Row), 특정 데이터를 식별하기 위한 값이다.
PK는 반드시 있어야 하며, 중복되거나 비어있으면 안 된다.
반드시 기존 속성에서 찾아내야 하는 건 아니며, 고유 식별자(ex. 주민등록번호)를 사용하거나 의미 없는 ID AutoIncrement, uuid(랜덤값)로 설정한다.

- FN(foreign key, 외래키)

다른 테이블의 기본키(PK)를 참조해서 관계를 연결하기 위한 키
FK 키는 관계 설정을 위한 연결 정보일 뿐, 의미 있는 데이터의 중복으로 간주되지 않기 때문에 그 자체가 문제 되는 중복이 아니며, 정규화로 제거하지 않는다

DB 설계의 3단계 (개념 → 논리 → 물리 설계)

1. Concept design (개념 설계)

사용자의 행동, 비즈니스 로직을 기준으로 DB에 저장할 데이터를 선별하는 과정

2. Logical design (논리 설계)

개념 설계 단계에서 나온 엔티티들을 관계형 테이블로 표현하고 정규화를 통해 중복을 제거하는 과정
ERD(Entity-Relationship Diagram) 그리기

3. Physical design (물리 설계)

논리 설계를 기반으로 실제 DB에 반영할 구조로 바꾸는 단계

📌 DB 논리 설계 과정

1. 저장해야하는 데이터 파악하기

DB를 설계하기 전에 어떤 데이터를 저장해야 하는지 파악해야 한다. UI 혹은 요구사항을 통해 기능별로 저장할 데이터를 파악한다. (해당 데이터 조회가 필요한 일이 있겠다 싶은 모든 것)
ex. 게시글 조회 기능 → 작성자, 게시글 제목, 게시글 내용, 게시글 작성 시간을 조회할 수 있어야 한다.

2. 그루핑해서 분류하기

저장해야 하는 데이터를 어떤 것에 관련된 정보인지 분류하고 그루핑 할 수 있는 상위 개념을 찾는다.
작성자, 게시글 제목, 게시글 내용, 게시글 작성 시간 → 게시글

3. 각 내용 테이블로 나타내기

초안으로 구성된 테이블에서 데이터 중복이 발생하는 구성인지 임의로 데이터를 넣어본다. 데이터 중복이 있다면 테이블 분리를 통해 데이터 중복을 제거한다.

4. 정규화를 통해 데이터 중복 최소화하기

✅ 한 칸에는 한 가지 정보만 들어가도록 만든다.
한 칸에 2개 이상의 정보가 들어가 있을 때는 테이블을 분리해 FK를 활용해 한 칸에 한 가지 정보만 들어가도록 한다.

✅ 어떤 테이블에 FK를 넣어도 한 가지 정보만 담고 있지 못하다면 중간 테이블을 하나 더 생성한다.

✅ 데이터 베이스 연결 방식을 파악한다.
1:1, 1:N, N:M 관계는 테이블 간의 “연결 방식”으로 어떻게 연결되고, 몇 개가 연결될 수 있는지 정의하는 것

  • 1:1 관계 (One to one)
    하나의 레코드는 다른 테이블의 하나의 레코드와만 연결된다, 합쳐도 되는지 고려 필요
  • 1:N 관계 (One to many)
    하나의 레코드는 다른 테이블의 여러 개 레코드와 연결이 가능하다. N쪽의 테이블에 FK가 들어가야 한다.
  • N:M 관계 (many to many)
    여러 개와 여러 개가 연결될 수 있다.
    중간 테이블을 추가해 1:N 관계로 바꿔 표시해야 하며, 중간 테이블에 두 테이블의 FK가 들어가야 한다.

✅ 가짜 중복과 진짜 중복, 숨은 중복 확인하기
“서비스에서 A 데이터의 값을 수정하면 B 데이터의 값도 같이 수정되어야 하는가”를 통해 수정이 필요하다면 서로 중복되어 있을 가능성이 크기 때문에, 정규화를 통해 분리한다. 통계값(합계, 평균, 최댓값 등)의 숨은 중복을 확인한다.

5. ERD(entity record diagram)로 표현하기

논리 설계 결과를 바탕으로 시각화해서 ERD로 표현한다.

🫡 entity 관계 파악 방법

데이터 베이스 연결 방식 파악 방법

1. 엔티티 간에 어울리는 동사 찾기

사용자가 게시글을 등록한다. 게시글은 사용자에 의해 등록된다.

2. 찾은 동사를 활용해 적절한 단어(하나의 or 여러개의) 찾기

한 명의 사용자가 여러개의 게시글을 등록한다. 하나의 게시글은 한 명의 사용자에 의해 등록된다.

3. 관계 판단하기

위의 예시의 경우 사용자 : 게시글 = 1 : N


다음주에서는 위 내용들을 바탕으로 프로젝트 DB 설계를 할 예정..🫠

댓글남기기